ZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvQW5kcm9pZFZlcnNpb24udHh0IGIvY2xhbmctMzg1OTQyNC9BbmRyb2lkVmVyc2lvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NmNzdhOQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvQW5kcm9pZFZlcnNpb24udHh0CkBAIC0wLDAgKzEgQEAKKzQuMC4yODU5MDYKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvTU9EVUxFX0xJQ0VOU0VfQlNEX0xJS0UgYi9jbGFuZy0zODU5NDI0L01PRFVMRV9MSUNFTlNFX0JTRF9MSUtFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L01PRFVMRV9MSUNFTlNFX0JTRF9MSUtFCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L01PRFVMRV9MSUNFTlNFX01JVCBiL2NsYW5nLTM4NTk0MjQvTU9EVUxFX0xJQ0VOU0VfTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L01PRFVMRV9MSUNFTlNFX01JVApkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9OT1RJQ0UgYi9jbGFuZy0zODU5NDI0L05PVElDRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzczZmJmCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9OT1RJQ0UKQEAgLTAsMCArMSw2OTYgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTExWTSBSZWxlYXNlIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCitPcGVuIFNvdXJjZSBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgMjAwNy0yMDE0IFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbi4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0RldmVsb3BlZCBieToKKworICAgIExMVk0gVGVhbQorCisgICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCisKKyAgICBodHRwOi8vbGx2bS5vcmcKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0CisgICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KKyAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKK1NPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBMTFZNIHNvZnR3YXJlIGNvbnRhaW5zIGNvZGUgd3JpdHRlbiBieSB0aGlyZCBwYXJ0aWVzLiAgU3VjaCBzb2Z0d2FyZSB3aWxsCitoYXZlIGl0cyBvd24gaW5kaXZpZHVhbCBMSUNFTlNFLlRYVCBmaWxlIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgYXBwZWFycy4KK1RoaXMgZmlsZSB3aWxsIGRlc2NyaWJlIHRoZSBjb3B5cmlnaHRzLCBsaWNlbnNlLCBhbmQgcmVzdHJpY3Rpb25zIHdoaWNoIGFwcGx5Cit0byB0aGF0IGNvZGUuCisKK1RoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGluIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlIExpY2Vuc2UKK2FwcGxpZXMgdG8gYWxsIGNvZGUgaW4gdGhlIExMVk0gRGlzdHJpYnV0aW9uLCBhbmQgbm90aGluZyBpbiBhbnkgb2YgdGhlCitvdGhlciBsaWNlbnNlcyBnaXZlcyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSBvciB0aGUKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCitTb2Z0d2FyZS4KKworVGhlIGZvbGxvd2luZyBwaWVjZXMgb2Ygc29mdHdhcmUgaGF2ZSBhZGRpdGlvbmFsIG9yIGFsdGVybmF0ZSBjb3B5cmlnaHRzLAorbGljZW5zZXMsIGFuZC9vciByZXN0cmljdGlvbnM6CisKK1Byb2dyYW0gICAgICAgICAgICAgRGlyZWN0b3J5CistLS0tLS0tICAgICAgICAgICAgIC0tLS0tLS0tLQorPG5vbmUgeWV0PgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTExWTSBSZWxlYXNlIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCitPcGVuIFNvdXJjZSBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgMjAwNy0yMDE0IFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbi4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0RldmVsb3BlZCBieToKKworICAgIExMVk0gVGVhbQorCisgICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCisKKyAgICBodHRwOi8vbGx2bS5vcmcKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0CisgICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KKyAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKK1NPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBMTFZNIHNvZnR3YXJlIGNvbnRhaW5zIGNvZGUgd3JpdHRlbiBieSB0aGlyZCBwYXJ0aWVzLiAgU3VjaCBzb2Z0d2FyZSB3aWxsCitoYXZlIGl0cyBvd24gaW5kaXZpZHVhbCBMSUNFTlNFLlRYVCBmaWxlIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgYXBwZWFycy4KK1RoaXMgZmlsZSB3aWxsIGRlc2NyaWJlIHRoZSBjb3B5cmlnaHRzLCBsaWNlbnNlLCBhbmQgcmVzdHJpY3Rpb25zIHdoaWNoIGFwcGx5Cit0byB0aGF0IGNvZGUuCisKK1RoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGluIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlIExpY2Vuc2UKK2FwcGxpZXMgdG8gYWxsIGNvZGUgaW4gdGhlIExMVk0gRGlzdHJpYnV0aW9uLCBhbmQgbm90aGluZyBpbiBhbnkgb2YgdGhlCitvdGhlciBsaWNlbnNlcyBnaXZlcyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSBvciB0aGUKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCitTb2Z0d2FyZS4KKworVGhlIGZvbGxvd2luZyBwaWVjZXMgb2Ygc29mdHdhcmUgaGF2ZSBhZGRpdGlvbmFsIG9yIGFsdGVybmF0ZSBjb3B5cmlnaHRzLAorbGljZW5zZXMsIGFuZC9vciByZXN0cmljdGlvbnM6CisKK1Byb2dyYW0gICAgICAgICAgICAgRGlyZWN0b3J5CistLS0tLS0tICAgICAgICAgICAgIC0tLS0tLS0tLQorPG5vbmUgeWV0PgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorY29tcGlsZXJfcnQgTGljZW5zZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBjb21waWxlcl9ydCBsaWJyYXJ5IGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aCB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcworIkJTRC1MaWtlIiBsaWNlbnNlIGFuZCB0aGUgTUlUIGxpY2Vuc2UuICBBcyBhIHVzZXIgb2YgdGhpcyBjb2RlIHlvdSBtYXkgY2hvb3NlCit0byB1c2UgaXQgdW5kZXIgZWl0aGVyIGxpY2Vuc2UuICBBcyBhIGNvbnRyaWJ1dG9yLCB5b3UgYWdyZWUgdG8gYWxsb3cgeW91ciBjb2RlCit0byBiZSB1c2VkIHVuZGVyIGJvdGguCisKK0Z1bGwgdGV4dCBvZiB0aGUgcmVsZXZhbnQgbGljZW5zZXMgaXMgaW5jbHVkZWQgYmVsb3cuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EKK09wZW4gU291cmNlIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAyMDA5LTIwMTQgYnkgdGhlIGNvbnRyaWJ1dG9ycyBsaXN0ZWQgaW4gQ1JFRElUUy5UWFQKKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRGV2ZWxvcGVkIGJ5OgorCisgICAgTExWTSBUZWFtCisKKyAgICBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24KKworICAgIGh0dHA6Ly9sbHZtLm9yZworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCB3aXRoCit0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycyBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0sIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQKKyAgICAgIFVyYmFuYS1DaGFtcGFpZ24sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0bworICAgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKKyAgICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRQorU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb3B5cmlnaHQgKGMpIDIwMDktMjAxNCBieSB0aGUgY29udHJpYnV0b3JzIGxpc3RlZCBpbiBDUkVESVRTLlRYVAorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3B5cmlnaHRzIGFuZCBMaWNlbnNlcyBmb3IgVGhpcmQgUGFydHkgU29mdHdhcmUgRGlzdHJpYnV0ZWQgd2l0aCBMTFZNOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGUgTExWTSBzb2Z0d2FyZSBjb250YWlucyBjb2RlIHdyaXR0ZW4gYnkgdGhpcmQgcGFydGllcy4gIFN1Y2ggc29mdHdhcmUgd2lsbAoraGF2ZSBpdHMgb3duIGluZGl2aWR1YWwgTElDRU5TRS5UWFQgZmlsZSBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGFwcGVhcnMuCitUaGlzIGZpbGUgd2lsbCBkZXNjcmliZSB0aGUgY29weXJpZ2h0cywgbGljZW5zZSwgYW5kIHJlc3RyaWN0aW9ucyB3aGljaCBhcHBseQordG8gdGhhdCBjb2RlLgorCitUaGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBpbiB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZSBMaWNlbnNlCithcHBsaWVzIHRvIGFsbCBjb2RlIGluIHRoZSBMTFZNIERpc3RyaWJ1dGlvbiwgYW5kIG5vdGhpbmcgaW4gYW55IG9mIHRoZQorb3RoZXIgbGljZW5zZXMgZ2l2ZXMgcGVybWlzc2lvbiB0byB1c2UgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0gb3IgdGhlCitVbml2ZXJzaXR5IG9mIElsbGlub2lzIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworU29mdHdhcmUuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitsaWJjKysgTGljZW5zZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBsaWJjKysgbGlicmFyeSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIGJvdGggdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMKKyJCU0QtTGlrZSIgbGljZW5zZSBhbmQgdGhlIE1JVCBsaWNlbnNlLiAgQXMgYSB1c2VyIG9mIHRoaXMgY29kZSB5b3UgbWF5IGNob29zZQordG8gdXNlIGl0IHVuZGVyIGVpdGhlciBsaWNlbnNlLiAgQXMgYSBjb250cmlidXRvciwgeW91IGFncmVlIHRvIGFsbG93IHlvdXIgY29kZQordG8gYmUgdXNlZCB1bmRlciBib3RoLgorCitGdWxsIHRleHQgb2YgdGhlIHJlbGV2YW50IGxpY2Vuc2VzIGlzIGluY2x1ZGVkIGJlbG93LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCitPcGVuIFNvdXJjZSBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgMjAwOS0yMDE0IGJ5IHRoZSBjb250cmlidXRvcnMgbGlzdGVkIGluIENSRURJVFMuVFhUCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0RldmVsb3BlZCBieToKKworICAgIExMVk0gVGVhbQorCisgICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCisKKyAgICBodHRwOi8vbGx2bS5vcmcKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0CisgICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KKyAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKK1NPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ29weXJpZ2h0IChjKSAyMDA5LTIwMTQgYnkgdGhlIGNvbnRyaWJ1dG9ycyBsaXN0ZWQgaW4gQ1JFRElUUy5UWFQKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorbGliYysrYWJpIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgbGliYysrYWJpIGxpYnJhcnkgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciBib3RoIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzCisiQlNELUxpa2UiIGxpY2Vuc2UgYW5kIHRoZSBNSVQgbGljZW5zZS4gIEFzIGEgdXNlciBvZiB0aGlzIGNvZGUgeW91IG1heSBjaG9vc2UKK3RvIHVzZSBpdCB1bmRlciBlaXRoZXIgbGljZW5zZS4gIEFzIGEgY29udHJpYnV0b3IsIHlvdSBhZ3JlZSB0byBhbGxvdyB5b3VyIGNvZGUKK3RvIGJlIHVzZWQgdW5kZXIgYm90aC4KKworRnVsbCB0ZXh0IG9mIHRoZSByZWxldmFudCBsaWNlbnNlcyBpcyBpbmNsdWRlZCBiZWxvdy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQQorT3BlbiBTb3VyY2UgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIwMDktMjAxNCBieSB0aGUgY29udHJpYnV0b3JzIGxpc3RlZCBpbiBDUkVESVRTLlRYVAorCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitEZXZlbG9wZWQgYnk6CisKKyAgICBMTFZNIFRlYW0KKworICAgIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbgorCisgICAgaHR0cDovL2xsdm0ub3JnCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKK3RoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIHdpdGgKK3RoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KK3NvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSwgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdAorICAgICAgVXJiYW5hLUNoYW1wYWlnbiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvCisgICAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT05UUklCVVRPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIFdJVEggVEhFCitTT0ZUV0FSRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvcHlyaWdodCAoYykgMjAwOS0yMDE0IGJ5IHRoZSBjb250cmlidXRvcnMgbGlzdGVkIGluIENSRURJVFMuVFhUCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2xpYmMrK2FiaSBMaWNlbnNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGxpYmMrK2FiaSBsaWJyYXJ5IGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aCB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcworIkJTRC1MaWtlIiBsaWNlbnNlIGFuZCB0aGUgTUlUIGxpY2Vuc2UuICBBcyBhIHVzZXIgb2YgdGhpcyBjb2RlIHlvdSBtYXkgY2hvb3NlCit0byB1c2UgaXQgdW5kZXIgZWl0aGVyIGxpY2Vuc2UuICBBcyBhIGNvbnRyaWJ1dG9yLCB5b3UgYWdyZWUgdG8gYWxsb3cgeW91ciBjb2RlCit0byBiZSB1c2VkIHVuZGVyIGJvdGguCisKK0Z1bGwgdGV4dCBvZiB0aGUgcmVsZXZhbnQgbGljZW5zZXMgaXMgaW5jbHVkZWQgYmVsb3cuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EKK09wZW4gU291cmNlIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAyMDA5LTIwMTUgYnkgdGhlIGNvbnRyaWJ1dG9ycyBsaXN0ZWQgaW4gQ1JFRElUUy5UWFQKKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRGV2ZWxvcGVkIGJ5OgorCisgICAgTExWTSBUZWFtCisKKyAgICBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24KKworICAgIGh0dHA6Ly9sbHZtLm9yZworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCB3aXRoCit0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycyBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0sIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQKKyAgICAgIFVyYmFuYS1DaGFtcGFpZ24sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0bworICAgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKKyAgICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRQorU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb3B5cmlnaHQgKGMpIDIwMDktMjAxNCBieSB0aGUgY29udHJpYnV0b3JzIGxpc3RlZCBpbiBDUkVESVRTLlRYVAorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitMTFZNIFJlbGVhc2UgTGljZW5zZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EKK09wZW4gU291cmNlIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAyMDAzLTIwMTQgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRGV2ZWxvcGVkIGJ5OgorCisgICAgTExWTSBUZWFtCisKKyAgICBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24KKworICAgIGh0dHA6Ly9sbHZtLm9yZworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCB3aXRoCit0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycyBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0sIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQKKyAgICAgIFVyYmFuYS1DaGFtcGFpZ24sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0bworICAgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKKyAgICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRQorU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29weXJpZ2h0cyBhbmQgTGljZW5zZXMgZm9yIFRoaXJkIFBhcnR5IFNvZnR3YXJlIERpc3RyaWJ1dGVkIHdpdGggTExWTToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIExMVk0gc29mdHdhcmUgY29udGFpbnMgY29kZSB3cml0dGVuIGJ5IHRoaXJkIHBhcnRpZXMuICBTdWNoIHNvZnR3YXJlIHdpbGwKK2hhdmUgaXRzIG93biBpbmRpdmlkdWFsIExJQ0VOU0UuVFhUIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBhcHBlYXJzLgorVGhpcyBmaWxlIHdpbGwgZGVzY3JpYmUgdGhlIGNvcHlyaWdodHMsIGxpY2Vuc2UsIGFuZCByZXN0cmljdGlvbnMgd2hpY2ggYXBwbHkKK3RvIHRoYXQgY29kZS4KKworVGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgaW4gdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UgTGljZW5zZQorYXBwbGllcyB0byBhbGwgY29kZSBpbiB0aGUgTExWTSBEaXN0cmlidXRpb24sIGFuZCBub3RoaW5nIGluIGFueSBvZiB0aGUKK290aGVyIGxpY2Vuc2VzIGdpdmVzIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtIG9yIHRoZQorVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKK1NvZnR3YXJlLgorCitUaGUgZm9sbG93aW5nIHBpZWNlcyBvZiBzb2Z0d2FyZSBoYXZlIGFkZGl0aW9uYWwgb3IgYWx0ZXJuYXRlIGNvcHlyaWdodHMsCitsaWNlbnNlcywgYW5kL29yIHJlc3RyaWN0aW9uczoKKworUHJvZ3JhbSAgICAgICAgICAgICBEaXJlY3RvcnkKKy0tLS0tLS0gICAgICAgICAgICAgLS0tLS0tLS0tCitBdXRvY29uZiAgICAgICAgICAgIGxsdm0vYXV0b2NvbmYKKyAgICAgICAgICAgICAgICAgICAgbGx2bS9wcm9qZWN0cy9Nb2R1bGVNYWtlci9hdXRvY29uZgorR29vZ2xlIFRlc3QgICAgICAgICBsbHZtL3V0aWxzL3VuaXR0ZXN0L2dvb2dsZXRlc3QKK09wZW5CU0QgcmVnZXggICAgICAgbGx2bS9saWIvU3VwcG9ydC97cmVnKiwgQ09QWVJJR0hULnJlZ2V4fQorcHl5YW1sIHRlc3RzICAgICAgICBsbHZtL3Rlc3QvWUFNTFBhcnNlci97Ki5kYXRhLCBMSUNFTlNFLlRYVH0KK0FSTSBjb250cmlidXRpb25zICAgbGx2bS9saWIvVGFyZ2V0L0FSTS9MSUNFTlNFLlRYVAorbWQ1IGNvbnRyaWJ1dGlvbnMgICBsbHZtL2xpYi9TdXBwb3J0L01ENS5jcHAgbGx2bS9pbmNsdWRlL2xsdm0vU3VwcG9ydC9NRDUuaAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHNvZnR3YXJlIGNvbnRhaW5lZCBpbiB0aGlzIGRpcmVjdG9yeSB0cmVlIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aCB0aGUKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMgIkJTRC1MaWtlIiBsaWNlbnNlIGFuZCB0aGUgTUlUIGxpY2Vuc2UuICBBcyBhIHVzZXIgb2YKK3RoaXMgY29kZSB5b3UgbWF5IGNob29zZSB0byB1c2UgaXQgdW5kZXIgZWl0aGVyIGxpY2Vuc2UuICBBcyBhIGNvbnRyaWJ1dG9yLAoreW91IGFncmVlIHRvIGFsbG93IHlvdXIgY29kZSB0byBiZSB1c2VkIHVuZGVyIGJvdGguICBUaGUgZnVsbCB0ZXh0IG9mIHRoZQorcmVsZXZhbnQgbGljZW5zZXMgaXMgaW5jbHVkZWQgYmVsb3cuCisKK0luIGFkZGl0aW9uLCBhIGxpY2Vuc2UgYWdyZWVtZW50IGZyb20gdGhlIGNvcHlyaWdodC9wYXRlbnQgaG9sZGVycyBvZiB0aGUKK3NvZnR3YXJlIGNvbnRhaW5lZCBpbiB0aGlzIGRpcmVjdG9yeSB0cmVlIGlzIGluY2x1ZGVkIGJlbG93LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCitPcGVuIFNvdXJjZSBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgMTk5Ny0yMDE1IEludGVsIENvcnBvcmF0aW9uCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0RldmVsb3BlZCBieToKKyAgICBPcGVuTVAgUnVudGltZSBUZWFtCisgICAgSW50ZWwgQ29ycG9yYXRpb24KKyAgICBodHRwOi8vd3d3Lm9wZW5tcHJ0bC5vcmcKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBPcGVuTVAgUnVudGltZSBUZWFtIG5vciB0aGUKKyAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgICBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRQorU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb3B5cmlnaHQgKGMpIDE5OTctMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ludGVsIENvcnBvcmF0aW9uCisKK1NvZnR3YXJlIEdyYW50IExpY2Vuc2UgQWdyZWVtZW50ICgiQWdyZWVtZW50IikKKworRXhjZXB0IGZvciB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbiB0byB5b3UsIEludGVsIENvcnBvcmF0aW9uICgiSW50ZWwiKSByZXNlcnZlcworYWxsIHJpZ2h0LCB0aXRsZSwgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgU29mdHdhcmUgKGRlZmluZWQgYmVsb3cpLgorCitEZWZpbml0aW9uCisKKyJTb2Z0d2FyZSIgbWVhbnMgdGhlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24gYXMgd2VsbCBhcyBhbnkgb3JpZ2luYWwgd29yayBvZgorYXV0aG9yc2hpcCwgaW5jbHVkaW5nIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucyB0byBhbiBleGlzdGluZyB3b3JrLCB0aGF0CitpcyBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBieSBJbnRlbCB0byBsbHZtLm9yZyAoaHR0cDovL2xsdm0ub3JnKSAoIkxMVk0iKSBmb3IKK2luY2x1c2lvbiBpbiwgb3IgZG9jdW1lbnRhdGlvbiBvZiwgYW55IG9mIHRoZSBwcm9kdWN0cyBvd25lZCBvciBtYW5hZ2VkIGJ5IExMVk0KKyh0aGUgIldvcmsiKS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiIG1lYW5zIGFueSBmb3JtIG9mCitlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50IHRvIExMVk0gb3IgaXRzCityZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljCittYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlCittYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIExMVk0gZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZwordGhlIFdvcmssIGJ1dCBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG90aGVyd2lzZS4KKworMS4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMKKyAgIEFncmVlbWVudCwgSW50ZWwgaGVyZWJ5IGdyYW50cyB0byB5b3UgYW5kIHRvIHJlY2lwaWVudHMgb2YgdGhlIFNvZnR3YXJlCisgICBkaXN0cmlidXRlZCBieSBMTFZNIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwKKyAgIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUKKyAgIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgIFNvZnR3YXJlIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MuCisKKzIuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzCisgICBBZ3JlZW1lbnQsIEludGVsIGhlcmVieSBncmFudHMgeW91IGFuZCB0byByZWNpcGllbnRzIG9mIHRoZSBTb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgYnkgTExWTSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsCisgICByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UKKyAgIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIKKyAgIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgYnkgSW50ZWwgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IEludGVsJ3MgU29mdHdhcmUgYWxvbmUgb3IgYnkKKyAgIGNvbWJpbmF0aW9uIG9mIHRoZSBTb2Z0d2FyZSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggU29mdHdhcmUgd2FzCisgICBzdWJtaXR0ZWQuIElmIGFueSBlbnRpdHkgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IEludGVsIG9yIGFueQorICAgb3RoZXIgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZworICAgdGhhdCBJbnRlbCdzIFNvZnR3YXJlLCBvciB0aGUgV29yayB0byB3aGljaCBJbnRlbCBoYXMgY29udHJpYnV0ZWQgY29uc3RpdHV0ZXMKKyAgIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQKKyAgIHRvIHRoYXQgZW50aXR5IHVuZGVyIHRoaXMgQWdyZWVtZW50IGZvciB0aGUgU29mdHdhcmUgb3IgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCB0aGUgc29mdHdhcmUgaXMKK3Byb3ZpZGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELAorZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yCitjb25kaXRpb25zIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FSTSBMaW1pdGVkCisKK1NvZnR3YXJlIEdyYW50IExpY2Vuc2UgQWdyZWVtZW50ICgiQWdyZWVtZW50IikKKworRXhjZXB0IGZvciB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbiB0byB5b3UsIEFSTSBMaW1pdGVkICgiQVJNIikgcmVzZXJ2ZXMgYWxsCityaWdodCwgdGl0bGUsIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIFNvZnR3YXJlIChkZWZpbmVkIGJlbG93KS4KKworRGVmaW5pdGlvbgorCisiU29mdHdhcmUiIG1lYW5zIHRoZSBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIGFzIHdlbGwgYXMgYW55IG9yaWdpbmFsIHdvcmsgb2YKK2F1dGhvcnNoaXAsIGluY2x1ZGluZyBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMgdG8gYW4gZXhpc3Rpbmcgd29yaywgdGhhdAoraXMgaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgYnkgQVJNIHRvIGxsdm0ub3JnIChodHRwOi8vbGx2bS5vcmcpICgiTExWTSIpIGZvcgoraW5jbHVzaW9uIGluLCBvciBkb2N1bWVudGF0aW9uIG9mLCBhbnkgb2YgdGhlIHByb2R1Y3RzIG93bmVkIG9yIG1hbmFnZWQgYnkgTExWTQorKHRoZSAiV29yayIpLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIgbWVhbnMgYW55IGZvcm0gb2YKK2VsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQgdG8gTExWTSBvciBpdHMKK3JlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMKK21haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUKK21hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgTExWTSBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nCit0aGUgV29yaywgYnV0IGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3RoZXJ3aXNlLgorCisxLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcworICAgQWdyZWVtZW50LCBBUk0gaGVyZWJ5IGdyYW50cyB0byB5b3UgYW5kIHRvIHJlY2lwaWVudHMgb2YgdGhlIFNvZnR3YXJlCisgICBkaXN0cmlidXRlZCBieSBMTFZNIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwKKyAgIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUKKyAgIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgIFNvZnR3YXJlIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MuCisKKzIuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzCisgICBBZ3JlZW1lbnQsIEFSTSBoZXJlYnkgZ3JhbnRzIHlvdSBhbmQgdG8gcmVjaXBpZW50cyBvZiB0aGUgU29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIGJ5IExMVk0gYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLAorICAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlCisgICB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyCisgICB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgIGJ5IEFSTSB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgQVJNJ3MgU29mdHdhcmUgYWxvbmUgb3IgYnkKKyAgIGNvbWJpbmF0aW9uIG9mIHRoZSBTb2Z0d2FyZSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggU29mdHdhcmUgd2FzCisgICBzdWJtaXR0ZWQuIElmIGFueSBlbnRpdHkgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IEFSTSBvciBhbnkKKyAgIG90aGVyIGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcKKyAgIHRoYXQgQVJNJ3MgU29mdHdhcmUsIG9yIHRoZSBXb3JrIHRvIHdoaWNoIEFSTSBoYXMgY29udHJpYnV0ZWQgY29uc3RpdHV0ZXMKKyAgIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQKKyAgIHRvIHRoYXQgZW50aXR5IHVuZGVyIHRoaXMgQWdyZWVtZW50IGZvciB0aGUgU29mdHdhcmUgb3IgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCB0aGUgc29mdHdhcmUgaXMKK3Byb3ZpZGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELAorZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yCitjb25kaXRpb25zIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2Jpbi9GaWxlQ2hlY2sgYi9jbGFuZy0zODU5NDI0L2Jpbi9GaWxlQ2hlY2sKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGQyOTk5OAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvYmluL0ZpbGVDaGVjawpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2Jpbi9hcm02NC12OGEvYW5hbHl6ZXIgYi9jbGFuZy0zODU5NDI0L2Jpbi9hcm02NC12OGEvYW5hbHl6ZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzMyMGU2YgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvYmluL2FybTY0LXY4YS9hbmFseXplcgpAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9iYXNoCitpZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgLXRhcmdldCBhYXJjaDY0LW5vbmUtbGludXgtYW5kcm9pZCAiJEAiCitlbHNlCisgICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nICIkQCIKK2ZpCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2Jpbi9hcm02NC12OGEvYW5hbHl6ZXIrKyBiL2NsYW5nLTM4NTk0MjQvYmluL2FybTY0LXY4YS9hbmFseXplcisrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg4YTJlMjAKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9hcm02NC12OGEvYW5hbHl6ZXIrKwpAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9iYXNoCitpZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAtdGFyZ2V0IGFhcmNoNjQtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9iaW4vYXJtZWFiaS12N2EtaGFyZC9hbmFseXplciBiL2NsYW5nLTM4NTk0MjQvYmluL2FybWVhYmktdjdhLWhhcmQvYW5hbHl6ZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWE3MDhhNwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvYmluL2FybWVhYmktdjdhLWhhcmQvYW5hbHl6ZXIKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nIC10YXJnZXQgYXJtdjctbm9uZS1saW51eC1hbmRyb2lkZWFiaSAiJEAiCitlbHNlCisgICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nICIkQCIKK2ZpCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2Jpbi9hcm1lYWJpLXY3YS1oYXJkL2FuYWx5emVyKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9hcm1lYWJpLXY3YS1oYXJkL2FuYWx5emVyKysKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzU0MTY3OQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvYmluL2FybWVhYmktdjdhLWhhcmQvYW5hbHl6ZXIrKwpAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9iYXNoCitpZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAtdGFyZ2V0IGFybXY3LW5vbmUtbGludXgtYW5kcm9pZGVhYmkgIiRAIgorZWxzZQorICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZysrICIkQCIKK2ZpCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2Jpbi9hcm1lYWJpLXY3YS9hbmFseXplciBiL2NsYW5nLTM4NTk0MjQvYmluL2FybWVhYmktdjdhL2FuYWx5emVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVhNzA4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9hcm1lYWJpLXY3YS9hbmFseXplcgpAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9iYXNoCitpZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgLXRhcmdldCBhcm12Ny1ub25lLWxpbnV4LWFuZHJvaWRlYWJpICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgIiRAIgorZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvYmluL2FybWVhYmktdjdhL2FuYWx5emVyKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9hcm1lYWJpLXY3YS9hbmFseXplcisrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM1NDE2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9hcm1lYWJpLXY3YS9hbmFseXplcisrCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL2Jhc2gKK2lmIFsgIiQxIiAhPSAiLWNjMSIgXTsgdGhlbgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZysrIC10YXJnZXQgYXJtdjctbm9uZS1saW51eC1hbmRyb2lkZWFiaSAiJEAiCitlbHNlCisgICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgIiRAIgorZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvYmluL2FybWVhYmkvYW5hbHl6ZXIgYi9jbGFuZy0zODU5NDI0L2Jpbi9hcm1lYWJpL2FuYWx5emVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1MGFhODMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9hcm1lYWJpL2FuYWx5emVyCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL2Jhc2gKK2lmIFsgIiQxIiAhPSAiLWNjMSIgXTsgdGhlbgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAtdGFyZ2V0IGFybXY1dGUtbm9uZS1saW51eC1hbmRyb2lkZWFiaSAiJEAiCitlbHNlCisgICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nICIkQCIKK2ZpCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2Jpbi9hcm1lYWJpL2FuYWx5emVyKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9hcm1lYWJpL2FuYWx5emVyKysKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTNmMzdiZAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvYmluL2FybWVhYmkvYW5hbHl6ZXIrKwpAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9iYXNoCitpZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAtdGFyZ2V0IGFybXY1dGUtbm9uZS1saW51eC1hbmRyb2lkZWFiaSAiJEAiCitlbHNlCisgICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgIiRAIgorZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvYmluL2FzYW5fZGV2aWNlX3NldHVwIGIvY2xhbmctMzg1OTQyNC9iaW4vYXNhbl9kZXZpY2Vfc2V0dXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjkwNmM4NgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvYmluL2FzYW5fZGV2aWNlX3NldHVwCkBAIC0wLDAgKzEsNDM5IEBACisjIS9iaW4vYmFzaAorIz09PS0gbGliL2FzYW4vc2NyaXB0cy9hc2FuX2RldmljZV9zZXR1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMKKyMKKyMgICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorIworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKKyMgTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorIworIyBQcmVwYXJlIEFuZHJvaWQgZGV2aWNlIHRvIHJ1biBBU2FuIGFwcGxpY2F0aW9ucy4KKyMKKyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jCisKK3NldCAtZQorCitIRVJFPSIkKGNkICIkKGRpcm5hbWUgIiQwIikiICYmIHB3ZCkiCisKK3JldmVydD1ubworZXh0cmFfb3B0aW9ucz0KK2RldmljZT0KK2xpYj0KK3VzZV9zdT0wCisKK2Z1bmN0aW9uIHVzYWdlIHsKKyAgICBlY2hvICJ1c2FnZTogJDAgWy0tcmV2ZXJ0XSBbLS1kZXZpY2UgZGV2aWNlLWlkXSBbLS1saWIgcGF0aF0gWy0tZXh0cmEtb3B0aW9ucyBvcHRpb25zXSIKKyAgICBlY2hvICIgIC0tcmV2ZXJ0OiBVbmluc3RhbGwgQVNhbiBmcm9tIHRoZSBkZXZpY2UuIgorICAgIGVjaG8gIiAgLS1saWI6IFBhdGggdG8gQVNhbiBydW50aW1lIGxpYnJhcnkuIgorICAgIGVjaG8gIiAgLS1leHRyYS1vcHRpb25zOiBFeHRyYSBBU0FOX09QVElPTlMuIgorICAgIGVjaG8gIiAgLS1kZXZpY2U6IEluc3RhbGwgdG8gdGhlIGdpdmVuIGRldmljZS4gVXNlICdhZGIgZGV2aWNlcycgdG8gZmluZCIKKyAgICBlY2hvICIgICAgICAgICAgICBkZXZpY2UtaWQuIgorICAgIGVjaG8gIiAgLS11c2Utc3U6IFVzZSAnc3UgLWMnIHByZWZpeCBmb3IgZXZlcnkgYWRiIGNvbW1hbmQgaW5zdGVhZCBvZiB1c2luZyIKKyAgICBlY2hvICIgICAgICAgICAgICAnYWRiIHJvb3QnIG9uY2UuIgorICAgIGVjaG8KKyAgICBleGl0IDEKK30KKworZnVuY3Rpb24gYWRiX3B1c2ggeworICBpZiBbICR1c2Vfc3UgLWVxIDAgXTsgdGhlbgorICAgICRBREIgcHVzaCAiJDEiICIkMiIKKyAgZWxzZQorICAgIGxvY2FsIEZJTEVOQU1FPSQoYmFzZW5hbWUgJDEpCisgICAgJEFEQiBwdXNoICIkMSIgIi9kYXRhL2xvY2FsL3RtcC8kRklMRU5BTUUiCisgICAgJEFEQiBzaGVsbCBzdSAtYyAicm0gXFxcIiQyLyRGSUxFTkFNRVxcXCIiID4mL2Rldi9udWxsCisgICAgJEFEQiBzaGVsbCBzdSAtYyAiY2F0IFxcXCIvZGF0YS9sb2NhbC90bXAvJEZJTEVOQU1FXFxcIiA+IFxcXCIkMi8kRklMRU5BTUVcXFwiIgorICAgICRBREIgc2hlbGwgc3UgLWMgInJtIFxcXCIvZGF0YS9sb2NhbC90bXAvJEZJTEVOQU1FXFxcIiIKKyAgZmkKK30KKworZnVuY3Rpb24gYWRiX3JlbW91bnQgeworICBpZiBbICR1c2Vfc3UgLWVxIDAgXTsgdGhlbgorICAgICRBREIgcmVtb3VudAorICBlbHNlCisgICAgbG9jYWwgU1RPUkFHRT1gJEFEQiBzaGVsbCBtb3VudCB8IGdyZXAgL3N5c3RlbSB8IGN1dCAtZCAnICcgLWYxYAorICAgIGlmIFsgIiRTVE9SQUdFIiAhPSAiIiBdOyB0aGVuCisgICAgICBlY2hvIFJlbW91bnRpbmcgJFNUT1JBR0UgYXQgL3N5c3RlbQorICAgICAgJEFEQiBzaGVsbCBzdSAtYyAibW91bnQgLW8gcmVtb3VudCxydyAkU1RPUkFHRSAvc3lzdGVtIgorICAgIGVsc2UKKyAgICAgIGVjaG8gRmFpbGVkIHRvIGdldCBzdG9yYWdlIGRldmljZSBuYW1lIGZvciAiL3N5c3RlbSIgbW91bnQgcG9pbnQKKyAgICBmaQorICBmaQorfQorCitmdW5jdGlvbiBhZGJfc2hlbGwgeworICBpZiBbICR1c2Vfc3UgLWVxIDAgXTsgdGhlbgorICAgICRBREIgc2hlbGwgJEAKKyAgZWxzZQorICAgICRBREIgc2hlbGwgc3UgLWMgIiQqIgorICBmaQorfQorCitmdW5jdGlvbiBhZGJfcm9vdCB7CisgIGlmIFsgJHVzZV9zdSAtZXEgMCBdOyB0aGVuCisgICAgJEFEQiByb290CisgIGZpCit9CisKK2Z1bmN0aW9uIGFkYl93YWl0X2Zvcl9kZXZpY2UgeworICAkQURCIHdhaXQtZm9yLWRldmljZQorfQorCitmdW5jdGlvbiBhZGJfcHVsbCB7CisgIGlmIFsgJHVzZV9zdSAtZXEgMCBdOyB0aGVuCisgICAgJEFEQiBwdWxsICIkMSIgIiQyIgorICBlbHNlCisgICAgbG9jYWwgRklMRU5BTUU9JChiYXNlbmFtZSAkMSkKKyAgICAkQURCIHNoZWxsIHJtICIvZGF0YS9sb2NhbC90bXAvJEZJTEVOQU1FIiA+Ji9kZXYvbnVsbAorICAgICRBREIgc2hlbGwgc3UgLWMgIlsgLWYgXFxcIiQxXFxcIiBdICYmIGNhdCBcXFwiJDFcXFwiID4gXFxcIi9kYXRhL2xvY2FsL3RtcC8kRklMRU5BTUVcXFwiICYmIGNob3duIHJvb3Quc2hlbGwgXFxcIi9kYXRhL2xvY2FsL3RtcC8kRklMRU5BTUVcXFwiICYmIGNobW9kIDc1NSBcXFwiL2RhdGEvbG9jYWwvdG1wLyRGSUxFTkFNRVxcXCIiICYmCisgICAgJEFEQiBwdWxsICIvZGF0YS9sb2NhbC90bXAvJEZJTEVOQU1FIiAiJDIiID4mL2Rldi9udWxsICYmICRBREIgc2hlbGwgInJtIFwiL2RhdGEvbG9jYWwvdG1wLyRGSUxFTkFNRVwiIgorICBmaQorfQorCitmdW5jdGlvbiBnZXRfZGV2aWNlX2FyY2ggeyAjIE9VVCBPVVQ2NAorICAgIGxvY2FsIF9vdXR2YXI9JDEKKyAgICBsb2NhbCBfb3V0dmFyNjQ9JDIKKyAgICBsb2NhbCBfQUJJPSQoYWRiX3NoZWxsIGdldHByb3Agcm8ucHJvZHVjdC5jcHUuYWJpKQorICAgIGxvY2FsIF9BUkNIPQorICAgIGxvY2FsIF9BUkNINjQ9CisgICAgaWYgW1sgJF9BQkkgPT0geDg2KiBdXTsgdGhlbgorICAgICAgICBfQVJDSD1pNjg2CisgICAgZWxpZiBbWyAkX0FCSSA9PSBhcm1lYWJpKiBdXTsgdGhlbgorICAgICAgICBfQVJDSD1hcm0KKyAgICBlbGlmIFtbICRfQUJJID09IGFybTY0LXY4YSogXV07IHRoZW4KKyAgICAgICAgX0FSQ0g9YXJtCisgICAgICAgIF9BUkNINjQ9YWFyY2g2NAorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVW5yZWNvZ25pemVkIGRldmljZSBBQkk6ICRfQUJJIgorICAgICAgICBleGl0IDEKKyAgICBmaQorICAgIGV2YWwgJF9vdXR2YXI9XCRfQVJDSAorICAgIGV2YWwgJF9vdXR2YXI2ND1cJF9BUkNINjQKK30KKword2hpbGUgW1sgJCMgPiAwIF1dOyBkbworICBjYXNlICQxIGluCisgICAgLS1yZXZlcnQpCisgICAgICByZXZlcnQ9eWVzCisgICAgICA7OworICAgIC0tZXh0cmEtb3B0aW9ucykKKyAgICAgIHNoaWZ0CisgICAgICBpZiBbWyAkIyA9PSAwIF1dOyB0aGVuCisgICAgICAgIGVjaG8gIi0tZXh0cmEtb3B0aW9ucyByZXF1aXJlcyBhbiBhcmd1bWVudC4iCisgICAgICAgIGV4aXQgMQorICAgICAgZmkKKyAgICAgIGV4dHJhX29wdGlvbnM9IiQxIgorICAgICAgOzsKKyAgICAtLWxpYikKKyAgICAgIHNoaWZ0CisgICAgICBpZiBbWyAkIyA9PSAwIF1dOyB0aGVuCisgICAgICAgIGVjaG8gIi0tbGliIHJlcXVpcmVzIGFuIGFyZ3VtZW50LiIKKyAgICAgICAgZXhpdCAxCisgICAgICBmaQorICAgICAgbGliPSIkMSIKKyAgICAgIDs7CisgICAgLS1kZXZpY2UpCisgICAgICBzaGlmdAorICAgICAgaWYgW1sgJCMgPT0gMCBdXTsgdGhlbgorICAgICAgICBlY2hvICItLWRldmljZSByZXF1aXJlcyBhbiBhcmd1bWVudC4iCisgICAgICAgIGV4aXQgMQorICAgICAgZmkKKyAgICAgIGRldmljZT0iJDEiCisgICAgICA7OworICAgIC0tdXNlLXN1KQorICAgICAgdXNlX3N1PTEKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHVzYWdlCisgICAgICA7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK0FEQj0ke0FEQjotYWRifQoraWYgW1sgeCRkZXZpY2UgIT0geCBdXTsgdGhlbgorICAgIEFEQj0iJEFEQiAtcyAkZGV2aWNlIgorZmkKKworaWYgWyAkdXNlX3N1IC1lcSAxIF07IHRoZW4KKyAgIyBUZXN0IGlmICdzdScgaXMgcHJlc2VudCBvbiB0aGUgZGV2aWNlCisgIFNVX1RFU1RfT1VUPWAkQURCIHNoZWxsIHN1IC1jICJlY2hvIGZvbyIgMj4mMSB8IHNlZCAncy9cciQvLydgCisgIGlmIFsgJD8gIT0gMCAtbyAiJFNVX1RFU1RfT1VUIiAhPSAiZm9vIiBdOyB0aGVuCisgICAgZWNobyAiRVJST1I6IENhbm5vdCB1c2UgJ3N1IC1jJzoiCisgICAgZWNobyAiJCBhZGIgc2hlbGwgc3UgLWMgXCJlY2hvIGZvb1wiIgorICAgIGVjaG8gJFNVX1RFU1RfT1VUCisgICAgZWNobyAiQ2hlY2sgdGhhdCAnc3UnIGJpbmFyeSBpcyBjb3JyZWN0bHkgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2Ugb3Igb21pdCIKKyAgICBlY2hvICIgICAgICAgICAgICAtLXVzZS1zdSBmbGFnIgorICAgIGV4aXQgMQorICBmaQorZmkKKworZWNobyAnPj4gUmVtb3VudGluZyAvc3lzdGVtIHJ3JworYWRiX3dhaXRfZm9yX2RldmljZQorYWRiX3Jvb3QKK2FkYl93YWl0X2Zvcl9kZXZpY2UKK2FkYl9yZW1vdW50CithZGJfd2FpdF9mb3JfZGV2aWNlCisKK2dldF9kZXZpY2VfYXJjaCBBUkNIIEFSQ0g2NAorZWNobyAiVGFyZ2V0IGFyY2hpdGVjdHVyZTogJEFSQ0giCitBU0FOX1JUPSJsaWJjbGFuZ19ydC5hc2FuLSRBUkNILWFuZHJvaWQuc28iCitpZiBbWyAtbiAkQVJDSDY0IF1dOyB0aGVuCisgIGVjaG8gIlRhcmdldCBhcmNoaXRlY3R1cmU6ICRBUkNINjQiCisgIEFTQU5fUlQ2ND0ibGliY2xhbmdfcnQuYXNhbi0kQVJDSDY0LWFuZHJvaWQuc28iCitmaQorCitpZiBbWyB4JHJldmVydCA9PSB4eWVzIF1dOyB0aGVuCisgICAgZWNobyAnPj4gVW5pbnN0YWxsaW5nIEFTYW4nCisKKyAgICBpZiAhIGFkYl9zaGVsbCBscyAtbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzcyB8IGdyZXAgLW8gJ1wtPi4qYXBwX3Byb2Nlc3MnID4mL2Rldi9udWxsOyB0aGVuCisgICAgICBlY2hvICc+PiBQcmUtTCBkZXZpY2UgZGV0ZWN0ZWQuJworICAgICAgYWRiX3NoZWxsIG12IC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzLnJlYWwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MKKyAgICAgIGFkYl9zaGVsbCBybSAvc3lzdGVtL2Jpbi9hc2Fud3JhcHBlcgorICAgIGVsaWYgISBhZGJfc2hlbGwgbHMgLWwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3M2NC5yZWFsIHwgZ3JlcCAtbyAnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScgPiYvZGV2L251bGw7IHRoZW4KKyAgICAgICMgNjQtYml0IGluc3RhbGxhdGlvbi4KKyAgICAgIGFkYl9zaGVsbCBtdiAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczMyLnJlYWwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMgorICAgICAgYWRiX3NoZWxsIG12IC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzNjQucmVhbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczY0CisgICAgICBhZGJfc2hlbGwgcm0gL3N5c3RlbS9iaW4vYXNhbndyYXBwZXIKKyAgICAgIGFkYl9zaGVsbCBybSAvc3lzdGVtL2Jpbi9hc2Fud3JhcHBlcjY0CisgICAgZWxzZQorICAgICAgIyAzMi1iaXQgaW5zdGFsbGF0aW9uLgorICAgICAgYWRiX3NoZWxsIHJtIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzLndyYXAKKyAgICAgIGFkYl9zaGVsbCBybSAvc3lzdGVtL2Jpbi9hc2Fud3JhcHBlcgorICAgICAgYWRiX3NoZWxsIHJtIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzCisgICAgICBhZGJfc2hlbGwgbG4gLXMgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMiAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzcworICAgIGZpCisKKyAgICBlY2hvICc+PiBSZXN0YXJ0aW5nIHNoZWxsJworICAgIGFkYl9zaGVsbCBzdG9wCisgICAgYWRiX3NoZWxsIHN0YXJ0CisKKyAgICAjIFJlbW92ZSB0aGUgbGlicmFyeSBvbiB0aGUgbGFzdCBzdGVwIHRvIGdpdmUgYSBjaGFuY2UgdG8gdGhlICdzdScgYmluYXJ5IHRvCisgICAgIyBiZSBleGVjdXRlZCB3aXRob3V0IHByb2JsZW0uCisgICAgYWRiX3NoZWxsIHJtIC9zeXN0ZW0vbGliLyRBU0FOX1JUCisKKyAgICBlY2hvICc+PiBEb25lJworICAgIGV4aXQgMAorZmkKKworaWYgW1sgLWQgIiRsaWIiIF1dOyB0aGVuCisgICAgQVNBTl9SVF9QQVRIPSIkbGliIgorZWxpZiBbWyAtZiAiJGxpYiIgJiYgIiRsaWIiID09ICoiJEFTQU5fUlQiIF1dOyB0aGVuCisgICAgQVNBTl9SVF9QQVRIPSQoZGlybmFtZSAiJGxpYiIpCitlbGlmIFtbIC1mICIkSEVSRS8kQVNBTl9SVCIgXV07IHRoZW4KKyAgICBBU0FOX1JUX1BBVEg9IiRIRVJFIgorZWxpZiBbWyAkKGJhc2VuYW1lICIkSEVSRSIpID09ICJiaW4iIF1dOyB0aGVuCisgICAgIyBXZSBjb3VsZCBiZSBpbiB0aGUgdG9vbGNoYWluJ3MgYmFzZSBkaXJlY3RvcnkuCisgICAgIyBDb25zaWRlciAuLi9saWIsIC4uL2xpYi9hc2FuLCAuLi9saWIvbGludXgsCisgICAgIyAuLi9saWIvY2xhbmcvJFZFUlNJT04vbGliL2xpbnV4LCBhbmQgLi4vbGliNjQvY2xhbmcvJFZFUlNJT04vbGliL2xpbnV4LgorICAgIFA9JChscyAiJEhFUkUiLy4uL2xpYi8iJEFTQU5fUlQiIFwKKyAgICAgICAgICAgIiRIRVJFIi8uLi9saWIvYXNhbi8iJEFTQU5fUlQiIFwKKyAgICAgICAgICAgIiRIRVJFIi8uLi9saWIvbGludXgvIiRBU0FOX1JUIiBcCisgICAgICAgICAgICIkSEVSRSIvLi4vbGliL2NsYW5nLyovbGliL2xpbnV4LyIkQVNBTl9SVCIgXAorICAgICAgICAgICAiJEhFUkUiLy4uL2xpYjY0L2NsYW5nLyovbGliL2xpbnV4LyIkQVNBTl9SVCIgMj4vZGV2L251bGwgfCBzb3J0IHwgdGFpbCAtMSkKKyAgICBpZiBbWyAtbiAiJFAiIF1dOyB0aGVuCisgICAgICAgIEFTQU5fUlRfUEFUSD0iJChkaXJuYW1lICIkUCIpIgorICAgIGZpCitmaQorCitpZiBbWyAteiAiJEFTQU5fUlRfUEFUSCIgfHwgISAtZiAiJEFTQU5fUlRfUEFUSC8kQVNBTl9SVCIgXV07IHRoZW4KKyAgICBlY2hvICI+PiBBU2FuIHJ1bnRpbWUgbGlicmFyeSBub3QgZm91bmQiCisgICAgZXhpdCAxCitmaQorCitpZiBbWyAtbiAiJEFTQU5fUlQ2NCIgXV07IHRoZW4KKyAgaWYgW1sgLXogIiRBU0FOX1JUX1BBVEgiIHx8ICEgLWYgIiRBU0FOX1JUX1BBVEgvJEFTQU5fUlQ2NCIgXV07IHRoZW4KKyAgICBlY2hvICI+PiBBU2FuIHJ1bnRpbWUgbGlicmFyeSBub3QgZm91bmQiCisgICAgZXhpdCAxCisgIGZpCitmaQorCitUTVBESVJCQVNFPSQobWt0ZW1wIC1kKQorVE1QRElST0xEPSIkVE1QRElSQkFTRS9vbGQiCitUTVBESVI9IiRUTVBESVJCQVNFL25ldyIKK21rZGlyICIkVE1QRElST0xEIgorCitSRUxFQVNFPSQoYWRiX3NoZWxsIGdldHByb3Agcm8uYnVpbGQudmVyc2lvbi5yZWxlYXNlKQorUFJFX0w9MAoraWYgZWNobyAiJFJFTEVBU0UiIHwgZ3JlcCAnXjRcLicgPiYvZGV2L251bGw7IHRoZW4KKyAgICBQUkVfTD0xCitmaQorCitpZiAhIGFkYl9zaGVsbCBscyAtbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzcyB8IGdyZXAgLW8gJ1wtPi4qYXBwX3Byb2Nlc3MnID4mL2Rldi9udWxsOyB0aGVuCisKKyAgICBpZiBhZGJfcHVsbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2Vzcy5yZWFsIC9kZXYvbnVsbCA+Ji9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICc+PiBPbGQtc3R5bGUgQVNhbiBpbnN0YWxsYXRpb24gZGV0ZWN0ZWQuIFJldmVydGluZy4nCisgICAgICAgIGFkYl9zaGVsbCBtdiAvc3lzdGVtL2Jpbi9hcHBfcHJvY2Vzcy5yZWFsIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzCisgICAgZmkKKworICAgIGVjaG8gJz4+IFByZS1MIGRldmljZSBkZXRlY3RlZC4gU2V0dGluZyB1cCBhcHBfcHJvY2VzcyBzeW1saW5rLicKKyAgICBhZGJfc2hlbGwgbXYgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMgorICAgIGFkYl9zaGVsbCBsbiAtcyAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczMyIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzCitmaQorCitlY2hvICc+PiBDb3B5aW5nIGZpbGVzIGZyb20gdGhlIGRldmljZScKK2lmIFtbIC1uICIkQVNBTl9SVDY0IiBdXTsgdGhlbgorICBhZGJfcHVsbCAvc3lzdGVtL2xpYi8iJEFTQU5fUlQiICIkVE1QRElST0xEIiB8fCB0cnVlCisgIGFkYl9wdWxsIC9zeXN0ZW0vbGliNjQvIiRBU0FOX1JUNjQiICIkVE1QRElST0xEIiB8fCB0cnVlCisgIGFkYl9wdWxsIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzMzIgIiRUTVBESVJPTEQiIHx8IHRydWUKKyAgYWRiX3B1bGwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMi5yZWFsICIkVE1QRElST0xEIiB8fCB0cnVlCisgIGFkYl9wdWxsIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzNjQgIiRUTVBESVJPTEQiIHx8IHRydWUKKyAgYWRiX3B1bGwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3M2NC5yZWFsICIkVE1QRElST0xEIiB8fCB0cnVlCisgIGFkYl9wdWxsIC9zeXN0ZW0vYmluL2FzYW53cmFwcGVyICIkVE1QRElST0xEIiB8fCB0cnVlCisgIGFkYl9wdWxsIC9zeXN0ZW0vYmluL2FzYW53cmFwcGVyNjQgIiRUTVBESVJPTEQiIHx8IHRydWUKK2Vsc2UKKyAgYWRiX3B1bGwgL3N5c3RlbS9saWIvIiRBU0FOX1JUIiAiJFRNUERJUk9MRCIgfHwgdHJ1ZQorICBhZGJfcHVsbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczMyICIkVE1QRElST0xEIiB8fCB0cnVlCisgIGFkYl9wdWxsIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzLndyYXAgIiRUTVBESVJPTEQiIHx8IHRydWUKKyAgYWRiX3B1bGwgL3N5c3RlbS9iaW4vYXNhbndyYXBwZXIgIiRUTVBESVJPTEQiIHx8IHRydWUKK2ZpCitjcCAtciAiJFRNUERJUk9MRCIgIiRUTVBESVIiCisKK2lmIFtbIC1mICIkVE1QRElSL2FwcF9wcm9jZXNzLndyYXAiIHx8IC1mICIkVE1QRElSL2FwcF9wcm9jZXNzNjQucmVhbCIgXV07IHRoZW4KKyAgICBlY2hvICI+PiBQcmV2aW91cyBpbnN0YWxsYXRpb24gZGV0ZWN0ZWQiCitlbHNlCisgICAgZWNobyAiPj4gTmV3IGluc3RhbGxhdGlvbiIKK2ZpCisKK2VjaG8gJz4+IEdlbmVyYXRpbmcgd3JhcHBlcnMnCisKK2NwICIkQVNBTl9SVF9QQVRILyRBU0FOX1JUIiAiJFRNUERJUi8iCitpZiBbWyAtbiAiJEFTQU5fUlQ2NCIgXV07IHRoZW4KKyAgY3AgIiRBU0FOX1JUX1BBVEgvJEFTQU5fUlQ2NCIgIiRUTVBESVIvIgorZmkKKworQVNBTl9PUFRJT05TPXN0YXJ0X2RlYWN0aXZhdGVkPTEsbWFsbG9jX2NvbnRleHRfc2l6ZT0wCisKK2Z1bmN0aW9uIGdlbmVyYXRlX3p5Z290ZV93cmFwcGVyIHsgIyBmcm9tLCB0bywgYXNhbl9ydAorICBsb2NhbCBfZnJvbT0kMQorICBsb2NhbCBfdG89JDIKKyAgbG9jYWwgX2FzYW5fcnQ9JDMKKyAgaWYgW1sgUFJFX0wgLWVxIDAgXV07IHRoZW4KKyAgICAjIExEX1BSRUxPQUQgcGFyc2luZyBpcyBicm9rZW4gaW4gTiBpZiBpdCBzdGFydHMgd2l0aCAiOiIuIEx1Y2tpbHksIGl0IGlzCisgICAgIyB1bnNldCBpbiB0aGUgc3lzdGVtIGVudmlyb25tZW50IHNpbmNlIEwuCisgICAgbG9jYWwgX2xkX3ByZWxvYWQ9JF9hc2FuX3J0CisgIGVsc2UKKyAgICBsb2NhbCBfbGRfcHJlbG9hZD1cJExEX1BSRUxPQUQ6JF9hc2FuX3J0CisgIGZpCisgIGNhdCA8PEVPRiA+IiRUTVBESVIvJF9mcm9tIgorIyEvc3lzdGVtL2Jpbi9zaC1mcm9tLXp5Z290ZQorQVNBTl9PUFRJT05TPSRBU0FOX09QVElPTlMgXFwKK0FTQU5fQUNUSVZBVElPTl9PUFRJT05TPWluY2x1ZGVfaWZfZXhpc3RzPS9kYXRhL2xvY2FsL3RtcC9hc2FuLm9wdGlvbnMuJWIgXFwKK0xEX1BSRUxPQUQ9JF9sZF9wcmVsb2FkIFxcCitleGVjICRfdG8gXCRACisKK0VPRgorfQorCisjIE9uIEFuZHJvaWQtTCBub3QgYWxsb3dpbmcgdXNlciBzZWd2IGhhbmRsZXIgYnJlYWtzIHNvbWUgYXBwbGljYXRpb25zLgoraWYgW1sgUFJFX0wgLWVxIDAgXV07IHRoZW4KKyAgICBBU0FOX09QVElPTlM9IiRBU0FOX09QVElPTlMsYWxsb3dfdXNlcl9zZWd2X2hhbmRsZXI9MSIKK2ZpCisKK2lmIFtbIHgkZXh0cmFfb3B0aW9ucyAhPSB4IF1dIDsgdGhlbgorICAgIEFTQU5fT1BUSU9OUz0iJEFTQU5fT1BUSU9OUywkZXh0cmFfb3B0aW9ucyIKK2ZpCisKKyMgWnlnb3RlIHdyYXBwZXIuCitpZiBbWyAtZiAiJFRNUERJUi9hcHBfcHJvY2VzczY0IiBdXTsgdGhlbgorICAjIEEgNjQtYml0IGRldmljZS4KKyAgaWYgW1sgISAtZiAiJFRNUERJUi9hcHBfcHJvY2VzczY0LnJlYWwiIF1dOyB0aGVuCisgICAgIyBOZXcgaW5zdGFsbGF0aW9uLgorICAgIG12ICIkVE1QRElSL2FwcF9wcm9jZXNzMzIiICIkVE1QRElSL2FwcF9wcm9jZXNzMzIucmVhbCIKKyAgICBtdiAiJFRNUERJUi9hcHBfcHJvY2VzczY0IiAiJFRNUERJUi9hcHBfcHJvY2VzczY0LnJlYWwiCisgIGZpCisgIGdlbmVyYXRlX3p5Z290ZV93cmFwcGVyICJhcHBfcHJvY2VzczMyIiAiL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMi5yZWFsIiAiJEFTQU5fUlQiCisgIGdlbmVyYXRlX3p5Z290ZV93cmFwcGVyICJhcHBfcHJvY2VzczY0IiAiL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3M2NC5yZWFsIiAiJEFTQU5fUlQ2NCIKK2Vsc2UKKyAgIyBBIDMyLWJpdCBkZXZpY2UuCisgIGdlbmVyYXRlX3p5Z290ZV93cmFwcGVyICJhcHBfcHJvY2Vzcy53cmFwIiAiL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMiIgIiRBU0FOX1JUIgorZmkKKworIyBHZW5lcmFsIGNvbW1hbmQtbGluZSB0b29sIHdyYXBwZXIgKHVzZSBmb3IgYW55dGhpbmcgdGhhdCdzIG5vdCBzdGFydGVkIGFzCisjIHp5Z290ZSkuCitjYXQgPDxFT0YgPiIkVE1QRElSL2FzYW53cmFwcGVyIgorIyEvc3lzdGVtL2Jpbi9zaAorTERfUFJFTE9BRD0kQVNBTl9SVCBcXAorZXhlYyBcJEAKKworRU9GCisKK2lmIFtbIC1uICIkQVNBTl9SVDY0IiBdXTsgdGhlbgorICBjYXQgPDxFT0YgPiIkVE1QRElSL2FzYW53cmFwcGVyNjQiCisjIS9zeXN0ZW0vYmluL3NoCitMRF9QUkVMT0FEPSRBU0FOX1JUNjQgXFwKK2V4ZWMgXCRACisKK0VPRgorZmkKKworZnVuY3Rpb24gaW5zdGFsbCB7ICMgZnJvbSwgdG8sIGNobW9kLCBjaGNvbgorICBsb2NhbCBfZnJvbT0kMQorICBsb2NhbCBfdG89JDIKKyAgbG9jYWwgX21vZGU9JDMKKyAgbG9jYWwgX2NvbnRleHQ9JDQKKyAgbG9jYWwgX2Jhc2VuYW1lPSIkKGJhc2VuYW1lICIkX2Zyb20iKSIKKyAgZWNobyAiSW5zdGFsbGluZyAkX3RvLyRfYmFzZW5hbWUgJF9tb2RlICRfY29udGV4dCIKKyAgYWRiX3B1c2ggIiRfZnJvbSIgIiRfdG8vJF9iYXNlbmFtZSIKKyAgYWRiX3NoZWxsIGNob3duIHJvb3Quc2hlbGwgIiRfdG8vJF9iYXNlbmFtZSIKKyAgaWYgW1sgLW4gIiRfbW9kZSIgXV07IHRoZW4KKyAgICBhZGJfc2hlbGwgY2htb2QgIiRfbW9kZSIgIiRfdG8vJF9iYXNlbmFtZSIKKyAgZmkKKyAgaWYgW1sgLW4gIiRfY29udGV4dCIgXV07IHRoZW4KKyAgICBhZGJfc2hlbGwgY2hjb24gIiRfY29udGV4dCIgIiRfdG8vJF9iYXNlbmFtZSIKKyAgZmkKK30KKworaWYgISAoIGNkICIkVE1QRElSQkFTRSIgJiYgZGlmZiAtcXIgb2xkLyBuZXcvICkgOyB0aGVuCisgICAgIyBNYWtlIFNFTGludXggaGFwcHkgYnkga2VlcGluZyBhcHBfcHJvY2VzcyB3cmFwcGVyIGFuZCB0aGUgc2hlbGwKKyAgICAjIGl0IHJ1bnMgb24gaW4genlnb3RlIGRvbWFpbi4KKyAgICBFTkZPUkNJTkc9MAorICAgIGlmIGFkYl9zaGVsbCBnZXRlbmZvcmNlIHwgZ3JlcCBFbmZvcmNpbmcgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIFNvbWV0aW1lcyBzaGVsbCBpcyBub3QgYWxsb3dlZCB0byBjaGFuZ2UgZmlsZSBjb250ZXh0cy4KKyAgICAgICAgIyBUZW1wb3JhcmlseSBzd2l0Y2ggdG8gcGVybWlzc2l2ZS4KKyAgICAgICAgRU5GT1JDSU5HPTEKKyAgICAgICAgYWRiX3NoZWxsIHNldGVuZm9yY2UgMAorICAgIGZpCisKKyAgICBpZiBbWyBQUkVfTCAtZXEgMSBdXTsgdGhlbgorICAgICAgICBDVFg9dTpvYmplY3RfcjpzeXN0ZW1fZmlsZTpzMAorICAgIGVsc2UKKyAgICAgICAgQ1RYPXU6b2JqZWN0X3I6enlnb3RlX2V4ZWM6czAKKyAgICBmaQorCisgICAgZWNobyAnPj4gUHVzaGluZyBmaWxlcyB0byB0aGUgZGV2aWNlJworCisgICAgaWYgW1sgLW4gIiRBU0FOX1JUNjQiIF1dOyB0aGVuCisgICAgICBpbnN0YWxsICIkVE1QRElSLyRBU0FOX1JUIiAvc3lzdGVtL2xpYiA2NDQKKyAgICAgIGluc3RhbGwgIiRUTVBESVIvJEFTQU5fUlQ2NCIgL3N5c3RlbS9saWI2NCA2NDQKKyAgICAgIGluc3RhbGwgIiRUTVBESVIvYXBwX3Byb2Nlc3MzMiIgL3N5c3RlbS9iaW4gNzU1ICRDVFgKKyAgICAgIGluc3RhbGwgIiRUTVBESVIvYXBwX3Byb2Nlc3MzMi5yZWFsIiAvc3lzdGVtL2JpbiA3NTUgJENUWAorICAgICAgaW5zdGFsbCAiJFRNUERJUi9hcHBfcHJvY2VzczY0IiAvc3lzdGVtL2JpbiA3NTUgJENUWAorICAgICAgaW5zdGFsbCAiJFRNUERJUi9hcHBfcHJvY2VzczY0LnJlYWwiIC9zeXN0ZW0vYmluIDc1NSAkQ1RYCisgICAgICBpbnN0YWxsICIkVE1QRElSL2FzYW53cmFwcGVyIiAvc3lzdGVtL2JpbiA3NTUKKyAgICAgIGluc3RhbGwgIiRUTVBESVIvYXNhbndyYXBwZXI2NCIgL3N5c3RlbS9iaW4gNzU1CisgICAgZWxzZQorICAgICAgaW5zdGFsbCAiJFRNUERJUi8kQVNBTl9SVCIgL3N5c3RlbS9saWIgNjQ0CisgICAgICBpbnN0YWxsICIkVE1QRElSL2FwcF9wcm9jZXNzMzIiIC9zeXN0ZW0vYmluIDc1NSAkQ1RYCisgICAgICBpbnN0YWxsICIkVE1QRElSL2FwcF9wcm9jZXNzLndyYXAiIC9zeXN0ZW0vYmluIDc1NSAkQ1RYCisgICAgICBpbnN0YWxsICIkVE1QRElSL2FzYW53cmFwcGVyIiAvc3lzdGVtL2JpbiA3NTUgJENUWAorCisgICAgICBhZGJfc2hlbGwgcm0gL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MKKyAgICAgIGFkYl9zaGVsbCBsbiAtcyAvc3lzdGVtL2Jpbi9hcHBfcHJvY2Vzcy53cmFwIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzCisgICAgZmkKKworICAgIGFkYl9zaGVsbCBjcCAvc3lzdGVtL2Jpbi9zaCAvc3lzdGVtL2Jpbi9zaC1mcm9tLXp5Z290ZQorICAgIGFkYl9zaGVsbCBjaGNvbiAkQ1RYIC9zeXN0ZW0vYmluL3NoLWZyb20tenlnb3RlCisKKyAgICBpZiBbICRFTkZPUkNJTkcgPT0gMSBdOyB0aGVuCisgICAgICAgIGFkYl9zaGVsbCBzZXRlbmZvcmNlIDEKKyAgICBmaQorCisgICAgZWNobyAnPj4gUmVzdGFydGluZyBzaGVsbCAoYXN5bmNocm9ub3VzKScKKyAgICBhZGJfc2hlbGwgc3RvcAorICAgIGFkYl9zaGVsbCBzdGFydAorCisgICAgZWNobyAnPj4gUGxlYXNlIHdhaXQgdW50aWwgdGhlIGRldmljZSByZXN0YXJ0cycKK2Vsc2UKKyAgICBlY2hvICc+PiBEZXZpY2UgaXMgdXAgdG8gZGF0ZScKK2ZpCisKK3JtIC1yICIkVE1QRElSQkFTRSIKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvYmluL2Jpc2VjdF9kcml2ZXIucHkgYi9jbGFuZy0zODU5NDI0L2Jpbi9iaXNlY3RfZHJpdmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZDBhZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9iaXNlY3RfZHJpdmVyLnB5CkBAIC0wLDAgKzEsMzM3IEBACisjIENvcHlyaWdodCAyMDE2IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIFRoaXMgc2NyaXB0IGlzIHVzZWQgdG8gaGVscCB0aGUgY29tcGlsZXIgd3JhcHBlciBpbiB0aGUgQW5kcm9pZCBidWlsZCBzeXN0ZW0KKyMgYmlzZWN0IGZvciBiYWQgb2JqZWN0IGZpbGVzLgorIiIiVXRpbGl0aWVzIGZvciBiaXNlY3Rpb24gb2YgQW5kcm9pZCBvYmplY3QgZmlsZXMuCisKK1RoaXMgbW9kdWxlIGNvbnRhaW5zIGEgc2V0IG9mIHV0aWxpdGllcyB0byBhbGxvdyBiaXNlY3Rpb24gYmV0d2VlbgordHdvIHNldHMgKGdvb2QgYW5kIGJhZCkgb2Ygb2JqZWN0IGZpbGVzLiBNb3N0bHkgdXNlZCB0byBmaW5kIGNvbXBpbGVyCitidWdzLgorCitSZWZlcmVuY2UgcGFnZToKK2h0dHBzOi8vc2l0ZXMuZ29vZ2xlLmNvbS9hL2dvb2dsZS5jb20vY2hyb21lb3MtdG9vbGNoYWluLXRlYW0taG9tZTIvaG9tZS90ZWFtLXRvb2xzLWFuZC1zY3JpcHRzL2Jpc2VjdGluZy1jaHJvbWVvcy1jb21waWxlci1wcm9ibGVtcy9iaXNlY3Rpb24tY29tcGlsZXItd3JhcHBlcgorCitEZXNpZ24gZG9jOgoraHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xeURnYVVJYTJPNXc2ZGMzc1NUZTFyeS0xZWhLYWpUR0pHUUNieW4wZmNFTQorIiIiCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KKworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBmY250bAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworCitWQUxJRF9NT0RFUyA9IFsnUE9QVUxBVEVfR09PRCcsICdQT1BVTEFURV9CQUQnLCAnVFJJQUdFJ10KK0dPT0RfQ0FDSEUgPSAnZ29vZCcKK0JBRF9DQUNIRSA9ICdiYWQnCitMSVNUX0ZJTEUgPSBvcy5wYXRoLmpvaW4oR09PRF9DQUNIRSwgJ19MSVNUJykKKworQ09OVElOVUVfT05fTUlTU0lORyA9IG9zLmVudmlyb24uZ2V0KCdCSVNFQ1RfQ09OVElOVUVfT05fTUlTU0lORycsIE5vbmUpID09ICcxJworV1JBUFBFUl9TQUZFX01PREUgPSBvcy5lbnZpcm9uLmdldCgnQklTRUNUX1dSQVBQRVJfU0FGRV9NT0RFJywgTm9uZSkgPT0gJzEnCisKKworY2xhc3MgRXJyb3IoRXhjZXB0aW9uKToKKyAgIiIiVGhlIGdlbmVyYWwgY29tcGlsZXIgd3JhcHBlciBlcnJvciBjbGFzcy4iIiIKKyAgcGFzcworCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgbG9ja19maWxlKHBhdGgsIG1vZGUpOgorICAiIiJMb2NrIGZpbGUgYW5kIGJsb2NrIGlmIG90aGVyIHByb2Nlc3MgaGFzIGxvY2sgb24gZmlsZS4KKworICBBY3F1aXJlIGV4Y2x1c2l2ZSBsb2NrIGZvciBmaWxlLiBPbmx5IGJsb2NrcyBvdGhlciBwcm9jZXNzZXMgaWYgdGhleSBhdHRlbXB0CisgIHRvIGFsc28gYWNxdWlyZSBsb2NrIHRocm91Z2ggdGhpcyBtZXRob2QuIElmIG9ubHkgcmVhZGluZyAobW9kZXMgJ3InIGFuZCAncmInKQorICB0aGVuIHRoZSBsb2NrIGlzIHNoYXJlZCAoaS5lLiBtYW55IHJlYWRzIGNhbiBoYXBwZW4gY29uY3VycmVudGx5LCBidXQgb25seSBvbmUKKyAgcHJvY2VzcyBtYXkgd3JpdGUgYXQgYSB0aW1lKS4KKworICBUaGlzIGZ1bmN0aW9uIGlzIGEgY29udGV4dG1hbmFnZXIsIG1lYW5pbmcgaXQncyBtZWFudCB0byBiZSB1c2VkIHdpdGggdGhlCisgICJ3aXRoIiBzdGF0ZW1lbnQgaW4gUHl0aG9uLiBUaGlzIGlzIHNvIGNsZWFudXAgYW5kIHNldHVwIGhhcHBlbnMgYXV0b21hdGljYWxseQorICBhbmQgY2xlYW5seS4gRXhlY3V0aW9uIG9mIHRoZSBvdXRlciAid2l0aCIgc3RhdGVtZW50IGhhcHBlbnMgYXQgdGhlICJ5aWVsZCIKKyAgc3RhdGVtZW50LiBFeGVjdXRpb24gcmVzdW1lcyBhZnRlciB0aGUgeWllbGQgd2hlbiB0aGUgb3V0ZXIgIndpdGgiIHN0YXRlbWVudAorICBlbmRzLgorCisgIEFyZ3M6CisgICAgcGF0aDogcGF0aCB0byBmaWxlIGJlaW5nIGxvY2tlZAorICAgIG1vZGU6IG1vZGUgdG8gb3BlbiBmaWxlIHdpdGggKCd3JywgJ3InLCBldGMuKQorICAiIiIKKyAgd2l0aCBvcGVuKHBhdGgsIG1vZGUpIGFzIGY6CisgICAgIyBTaGFyZSB0aGUgbG9jayBpZiBqdXN0IHJlYWRpbmcsIG1ha2UgbG9jayBleGNsdXNpdmUgaWYgd3JpdGluZworICAgIGlmIGYubW9kZSA9PSAncicgb3IgZi5tb2RlID09ICdyYic6CisgICAgICBsb2NrX3R5cGUgPSBmY250bC5MT0NLX1NICisgICAgZWxzZToKKyAgICAgIGxvY2tfdHlwZSA9IGZjbnRsLkxPQ0tfRVgKKworICAgIHRyeToKKyAgICAgIGZjbnRsLmxvY2tmKGYsIGxvY2tfdHlwZSkKKyAgICAgIHlpZWxkIGYKKyAgICAgIGYuZmx1c2goKQorICAgIGV4Y2VwdDoKKyAgICAgIHJhaXNlCisgICAgZmluYWxseToKKyAgICAgIGZjbnRsLmxvY2tmKGYsIGZjbnRsLkxPQ0tfVU4pCisKKworZGVmIGxvZ190b19maWxlKHBhdGgsIGV4ZWNhcmdzLCBsaW5rX2Zyb209Tm9uZSwgbGlua190bz1Ob25lKToKKyAgIiIiQ29tbW9uIGxvZ2dpbmcgZnVuY3Rpb24uCisKKyAgTG9nIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIGN1cnJlbnQgZXhlY2FyZ3MsIGFuZCBhIGZyb20tdG8gcmVsYXRpb25zaGlwCisgIGJldHdlZW4gZmlsZXMuCisgICIiIgorICB3aXRoIGxvY2tfZmlsZShwYXRoLCAnYScpIGFzIGxvZzoKKyAgICBsb2cud3JpdGUoJ2NkOiAlczsgJXNcbicgJSAob3MuZ2V0Y3dkKCksICcgJy5qb2luKGV4ZWNhcmdzKSkpCisgICAgaWYgbGlua19mcm9tIGFuZCBsaW5rX3RvOgorICAgICAgbG9nLndyaXRlKCclcyAtPiAlc1xuJyAlIChsaW5rX2Zyb20sIGxpbmtfdG8pKQorCisKK2RlZiBleGVjX2FuZF9yZXR1cm4oZXhlY2FyZ3MpOgorICAiIiJFeGVjdXRlIHByb2Nlc3MgYW5kIHJldHVybi4KKworICBFeGVjdXRlIGFjY29yZGluZyB0byBleGVjYXJncyBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5LiBEb24ndCBpbnNwZWN0CisgIHN0ZGVyciBvciBzdGRvdXQuCisgICIiIgorICByZXR1cm4gc3VicHJvY2Vzcy5jYWxsKGV4ZWNhcmdzKQorCisKK2RlZiB3aGljaF9jYWNoZShvYmpfZmlsZSk6CisgICIiIkRldGVybWluZSB3aGljaCBjYWNoZSBhbiBvYmplY3QgYmVsb25ncyB0by4KKworICBUaGUgYmluYXJ5IHNlYXJjaCB0b29sIGNyZWF0ZXMgdHdvIGZpbGVzIGZvciBlYWNoIHNlYXJjaCBpdGVyYXRpb24gbGlzdGluZworICB0aGUgZnVsbCBzZXQgb2YgYmFkIG9iamVjdHMgYW5kIGZ1bGwgc2V0IG9mIGdvb2Qgb2JqZWN0cy4gV2UgdXNlIHRoaXMgdG8KKyAgZGV0ZXJtaW5lIHdoZXJlIGFuIG9iamVjdCBmaWxlIHNob3VsZCBiZSBsaW5rZWQgZnJvbSAoZ29vZCBvciBiYWQpLgorICAiIiIKKyAgYmFkX3NldF9maWxlID0gb3MuZW52aXJvbi5nZXQoJ0JJU0VDVF9CQURfU0VUJykKKyAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKFsnZ3JlcCcsICcteCcsICctcScsIG9ial9maWxlLCBiYWRfc2V0X2ZpbGVdKQorICBpZiByZXQgPT0gMDoKKyAgICByZXR1cm4gQkFEX0NBQ0hFCisgIGVsc2U6CisgICAgcmV0dXJuIEdPT0RfQ0FDSEUKKworCitkZWYgbWFrZWRpcnMocGF0aCk6CisgICIiIlRyeSB0byBjcmVhdGUgZGlyZWN0b3JpZXMgaW4gcGF0aC4iIiIKKyAgdHJ5OgorICAgIG9zLm1ha2VkaXJzKHBhdGgpCisgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgIHJhaXNlCisKKworZGVmIGdldF9vYmpfcGF0aChleGVjYXJncyk6CisgICIiIkdldCB0aGUgb2JqZWN0IHBhdGggZm9yIHRoZSBvYmplY3QgZmlsZSBpbiB0aGUgbGlzdCBvZiBhcmd1bWVudHMuCisKKyAgUmV0dXJuczoKKyAgICBBYnNvbHV0ZSBvYmplY3QgcGF0aCBmcm9tIGV4ZWN1dGlvbiBhcmdzICgtbyBhcmd1bWVudCkuIElmIG5vIG9iamVjdCBiZWluZworICAgIG91dHB1dHRlZCBvciBvdXRwdXQgZG9lc24ndCBlbmQgaW4gIi5vIiB0aGVuIHJldHVybiBlbXB0eSBzdHJpbmcuCisgICIiIgorICB0cnk6CisgICAgaSA9IGV4ZWNhcmdzLmluZGV4KCctbycpCisgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgIHJldHVybiAnJworCisgIG9ial9wYXRoID0gZXhlY2FyZ3NbaSArIDFdCisgIGlmIG5vdCBvYmpfcGF0aC5lbmRzd2l0aCgoJy5vJywpKToKKyAgICAjIFRPRE86IHdoYXQgc3VmZml4ZXMgZG8gd2UgbmVlZCB0byBjb250ZW1wbGF0ZQorICAgICMgVE9ETzogYWRkIHRoaXMgYXMgYSB3YXJuaW5nCisgICAgIyBUT0RPOiBuZWVkIHRvIGhhbmRsZSAtciBjb21waWxhdGlvbnMKKyAgICByZXR1cm4gJycKKworICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKG9ial9wYXRoKQorCisKK2RlZiBnZXRfZGVwX3BhdGgoZXhlY2FyZ3MpOgorICAiIiJHZXQgdGhlIGRlcCBmaWxlIHBhdGggZm9yIHRoZSBkZXAgZmlsZSBpbiB0aGUgbGlzdCBvZiBhcmd1bWVudHMuCisKKyAgUmV0dXJuczoKKyAgICBBYnNvbHV0ZSBwYXRoIG9mIGRlcGVuZGVuY3kgZmlsZSBwYXRoIGZyb20gZXhlY3V0aW9uIGFyZ3MgKC1vIGFyZ3VtZW50KS4gSWYKKyAgICBubyBkZXBlbmRlbmN5IGJlaW5nIG91dHB1dHRlZCB0aGVuIHJldHVybiBlbXB0eSBzdHJpbmcuCisgICIiIgorICBpZiAnLU1EJyBub3QgaW4gZXhlY2FyZ3MgYW5kICctTU1EJyBub3QgaW4gZXhlY2FyZ3M6CisgICAgcmV0dXJuICcnCisKKyAgIyBJZiAtTUYgZ2l2ZW4gdGhpcyBpcyB0aGUgcGF0aCBvZiB0aGUgZGVwZW5kZW5jeSBmaWxlLiBPdGhlcndpc2UgdGhlCisgICMgZGVwZW5kZW5jeSBmaWxlIGlzIHRoZSB2YWx1ZSBvZiAtbyBidXQgd2l0aCBhIC5kIGV4dGVuc2lvbgorICBpZiAnLU1GJyBpbiBleGVjYXJnczoKKyAgICBpID0gZXhlY2FyZ3MuaW5kZXgoJy1NRicpCisgICAgZGVwX3BhdGggPSBleGVjYXJnc1tpICsgMV0KKyAgICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKGRlcF9wYXRoKQorCisgIGZ1bGxfb2JqX3BhdGggPSBnZXRfb2JqX3BhdGgoZXhlY2FyZ3MpCisgIGlmIG5vdCBmdWxsX29ial9wYXRoOgorICAgIHJldHVybiAnJworCisgIHJldHVybiBmdWxsX29ial9wYXRoWzotMl0gKyAnLmQnCisKKworZGVmIGdldF9kd29fcGF0aChleGVjYXJncyk6CisgICIiIkdldCB0aGUgZHdvIGZpbGUgcGF0aCBmb3IgdGhlIGR3byBmaWxlIGluIHRoZSBsaXN0IG9mIGFyZ3VtZW50cy4KKworICBSZXR1cm5zOgorICAgIEFic29sdXRlIGR3byBmaWxlIHBhdGggZnJvbSBleGVjdXRpb24gYXJncyAoLWdzcGxpdC1kd2FyZiBhcmd1bWVudCkgSWYgbm8KKyAgICBkd28gZmlsZSBiZWluZyBvdXRwdXR0ZWQgdGhlbiByZXR1cm4gZW1wdHkgc3RyaW5nLgorICAiIiIKKyAgaWYgJy1nc3BsaXQtZHdhcmYnIG5vdCBpbiBleGVjYXJnczoKKyAgICByZXR1cm4gJycKKworICBmdWxsX29ial9wYXRoID0gZ2V0X29ial9wYXRoKGV4ZWNhcmdzKQorICBpZiBub3QgZnVsbF9vYmpfcGF0aDoKKyAgICByZXR1cm4gJycKKworICByZXR1cm4gZnVsbF9vYmpfcGF0aFs6LTJdICsgJy5kd28nCisKKworZGVmIGluX29iamVjdF9saXN0KG9ial9uYW1lLCBsaXN0X2ZpbGVuYW1lKToKKyAgIiIiQ2hlY2sgaWYgb2JqZWN0IGZpbGUgbmFtZSBleGlzdCBpbiBmaWxlIHdpdGggb2JqZWN0IGxpc3QuIiIiCisgIGlmIG5vdCBvYmpfbmFtZToKKyAgICByZXR1cm4gRmFsc2UKKworICB3aXRoIGxvY2tfZmlsZShsaXN0X2ZpbGVuYW1lLCAncicpIGFzIGxpc3RfZmlsZToKKyAgICBmb3IgbGluZSBpbiBsaXN0X2ZpbGU6CisgICAgICBpZiBsaW5lLnN0cmlwKCkgPT0gb2JqX25hbWU6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICByZXR1cm4gRmFsc2UKKworCitkZWYgZ2V0X3NpZGVfZWZmZWN0cyhleGVjYXJncyk6CisgICIiIkRldGVybWluZSBzaWRlIGVmZmVjdHMgZ2VuZXJhdGVkIGJ5IGNvbXBpbGVyCisKKyAgUmV0dXJuczoKKyAgICBMaXN0IG9mIHBhdGhzIG9mIG9iamVjdHMgdGhhdCB0aGUgY29tcGlsZXIgZ2VuZXJhdGVzIGFzIHNpZGUgZWZmZWN0cy4KKyAgIiIiCisgIHNpZGVfZWZmZWN0cyA9IFtdCisKKyAgIyBDYWNoZSBkZXBlbmRlbmN5IGZpbGVzCisgIGZ1bGxfZGVwX3BhdGggPSBnZXRfZGVwX3BhdGgoZXhlY2FyZ3MpCisgIGlmIGZ1bGxfZGVwX3BhdGg6CisgICAgc2lkZV9lZmZlY3RzLmFwcGVuZChmdWxsX2RlcF9wYXRoKQorCisgICMgQ2FjaGUgZHdvIGZpbGVzCisgIGZ1bGxfZHdvX3BhdGggPSBnZXRfZHdvX3BhdGgoZXhlY2FyZ3MpCisgIGlmIGZ1bGxfZHdvX3BhdGg6CisgICAgc2lkZV9lZmZlY3RzLmFwcGVuZChmdWxsX2R3b19wYXRoKQorCisgIHJldHVybiBzaWRlX2VmZmVjdHMKKworCitkZWYgY2FjaGVfZmlsZShleGVjYXJncywgYmlzZWN0X2RpciwgY2FjaGUsIGFic19maWxlX3BhdGgpOgorICAiIiJDYWNoZSBjb21waWxlciBvdXRwdXQgZmlsZSAoLm8vLmQvLmR3bykuIiIiCisgICMgb3MucGF0aC5qb2luIGZhaWxzIHdpdGggYWJzb2x1dGUgcGF0aHMsIHVzZSArIGluc3RlYWQKKyAgYmlzZWN0X3BhdGggPSBvcy5wYXRoLmpvaW4oYmlzZWN0X2RpciwgY2FjaGUpICsgYWJzX2ZpbGVfcGF0aAorICBiaXNlY3RfcGF0aF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoYmlzZWN0X3BhdGgpCisgIG1ha2VkaXJzKGJpc2VjdF9wYXRoX2RpcikKKyAgcG9wX2xvZyA9IG9zLnBhdGguam9pbihiaXNlY3RfZGlyLCBjYWNoZSwgJ19QT1BVTEFURV9MT0cnKQorICBsb2dfdG9fZmlsZShwb3BfbG9nLCBleGVjYXJncywgYWJzX2ZpbGVfcGF0aCwgYmlzZWN0X3BhdGgpCisKKyAgdHJ5OgorICAgIGlmIG9zLnBhdGguZXhpc3RzKGFic19maWxlX3BhdGgpOgorICAgICAgc2h1dGlsLmNvcHkyKGFic19maWxlX3BhdGgsIGJpc2VjdF9wYXRoKQorICBleGNlcHQgRXhjZXB0aW9uOgorICAgIHByaW50KCdDb3VsZCBub3QgY2FjaGUgZmlsZSAlcycgJSBhYnNfZmlsZV9wYXRoLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgcmFpc2UKKworCitkZWYgcmVzdG9yZV9maWxlKGJpc2VjdF9kaXIsIGNhY2hlLCBhYnNfZmlsZV9wYXRoKToKKyAgIiIiUmVzdG9yZSBmaWxlIGZyb20gY2FjaGUgKC5vLy5kLy5kd28pLiIiIgorICAjIG9zLnBhdGguam9pbiBmYWlscyB3aXRoIGFic29sdXRlIHBhdGhzLCB1c2UgKyBpbnN0ZWFkCisgIGNhY2hlZF9wYXRoID0gb3MucGF0aC5qb2luKGJpc2VjdF9kaXIsIGNhY2hlKSArIGFic19maWxlX3BhdGgKKyAgaWYgb3MucGF0aC5leGlzdHMoY2FjaGVkX3BhdGgpOgorICAgIGlmIG9zLnBhdGguZXhpc3RzKGFic19maWxlX3BhdGgpOgorICAgICAgb3MucmVtb3ZlKGFic19maWxlX3BhdGgpCisgICAgdHJ5OgorICAgICAgb3MubGluayhjYWNoZWRfcGF0aCwgYWJzX2ZpbGVfcGF0aCkKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgIHNodXRpbC5jb3B5ZmlsZShjYWNoZWRfcGF0aCwgYWJzX2ZpbGVfcGF0aCkKKyAgZWxzZToKKyAgICByYWlzZSBFcnJvcigoJyVzIGlzIG1pc3NpbmcgZnJvbSAlcyBjYWNoZSEgVW5zdXJlIGhvdyB0byBwcm9jZWVkLiBNYWtlICcKKyAgICAgICAgICAgICAgICAgJ3dpbGwgbm93IGNyYXNoLicgJSAoY2FjaGUsIGNhY2hlZF9wYXRoKSkpCisKKworZGVmIGJpc2VjdF9wb3B1bGF0ZShleGVjYXJncywgYmlzZWN0X2RpciwgcG9wdWxhdGlvbl9uYW1lKToKKyAgIiIiQWRkIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byB0aGUgYmlzZWN0IGNhY2hlIGZvciB0aGUgZ2l2ZW4gZXhlY3V0aW9uLgorCisgIEV4dHJhY3QgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmb3IgYmlzZWN0aW9uIGZyb20gdGhlIGNvbXBpbGVyCisgIGV4ZWN1dGlvbiBhcmd1bWVudHMgYW5kIHB1dCBpdCBpbnRvIHRoZSBiaXNlY3Rpb24gY2FjaGUuIFRoaXMKKyAgaW5jbHVkZXMgY29weWluZyB0aGUgY3JlYXRlZCBvYmplY3QgZmlsZSwgYWRkaW5nIHRoZSBvYmplY3QKKyAgZmlsZSBwYXRoIHRvIHRoZSBjYWNoZSBsaXN0IGFuZCBrZWVwaW5nIGEgbG9nIG9mIHRoZSBleGVjdXRpb24uCisKKyAgQXJnczoKKyAgICBleGVjYXJnczogY29tcGlsZXIgZXhlY3V0aW9uIGFyZ3VtZW50cy4KKyAgICBiaXNlY3RfZGlyOiBiaXNlY3Rpb24gZGlyZWN0b3J5LgorICAgIHBvcHVsYXRpb25fbmFtZTogbmFtZSBvZiB0aGUgY2FjaGUgYmVpbmcgcG9wdWxhdGVkIChnb29kL2JhZCkuCisgICIiIgorICByZXR2YWwgPSBleGVjX2FuZF9yZXR1cm4oZXhlY2FyZ3MpCisgIGlmIHJldHZhbDoKKyAgICByZXR1cm4gcmV0dmFsCisKKyAgZnVsbF9vYmpfcGF0aCA9IGdldF9vYmpfcGF0aChleGVjYXJncykKKyAgIyBJZiBub3QgYSBub3JtYWwgY29tcGlsZXIgY2FsbCB0aGVuIGp1c3QgZXhpdAorICBpZiBub3QgZnVsbF9vYmpfcGF0aDoKKyAgICByZXR1cm4KKworICBjYWNoZV9maWxlKGV4ZWNhcmdzLCBiaXNlY3RfZGlyLCBwb3B1bGF0aW9uX25hbWUsIGZ1bGxfb2JqX3BhdGgpCisKKyAgcG9wdWxhdGlvbl9kaXIgPSBvcy5wYXRoLmpvaW4oYmlzZWN0X2RpciwgcG9wdWxhdGlvbl9uYW1lKQorICB3aXRoIGxvY2tfZmlsZShvcy5wYXRoLmpvaW4ocG9wdWxhdGlvbl9kaXIsICdfTElTVCcpLCAnYScpIGFzIG9iamVjdF9saXN0OgorICAgIG9iamVjdF9saXN0LndyaXRlKCclc1xuJyAlIGZ1bGxfb2JqX3BhdGgpCisKKyAgZm9yIHNpZGVfZWZmZWN0IGluIGdldF9zaWRlX2VmZmVjdHMoZXhlY2FyZ3MpOgorICAgIGNhY2hlX2ZpbGUoZXhlY2FyZ3MsIGJpc2VjdF9kaXIsIHBvcHVsYXRpb25fbmFtZSwgc2lkZV9lZmZlY3QpCisKKworZGVmIGJpc2VjdF90cmlhZ2UoZXhlY2FyZ3MsIGJpc2VjdF9kaXIpOgorICBmdWxsX29ial9wYXRoID0gZ2V0X29ial9wYXRoKGV4ZWNhcmdzKQorICBvYmpfbGlzdCA9IG9zLnBhdGguam9pbihiaXNlY3RfZGlyLCBMSVNUX0ZJTEUpCisKKyAgIyBJZiB0aGUgb3V0cHV0IGlzbid0IGFuIG9iamVjdCBmaWxlIGp1c3QgY2FsbCBjb21waWxlcgorICBpZiBub3QgZnVsbF9vYmpfcGF0aDoKKyAgICByZXR1cm4gZXhlY19hbmRfcmV0dXJuKGV4ZWNhcmdzKQorCisgICMgSWYgdGhpcyBpc24ndCBhIGJpc2VjdGVkIG9iamVjdCBqdXN0IGNhbGwgY29tcGlsZXIKKyAgIyBUaGlzIHNob3VsZG4ndCBoYXBwZW4hCisgIGlmIG5vdCBpbl9vYmplY3RfbGlzdChmdWxsX29ial9wYXRoLCBvYmpfbGlzdCk6CisgICAgaWYgQ09OVElOVUVfT05fTUlTU0lORzoKKyAgICAgIGxvZ19maWxlID0gb3MucGF0aC5qb2luKGJpc2VjdF9kaXIsICdfTUlTU0lOR19DQUNIRURfT0JKX0xPRycpCisgICAgICBsb2dfdG9fZmlsZShsb2dfZmlsZSwgZXhlY2FyZ3MsICc/IGNvbXBpbGVyJywgZnVsbF9vYmpfcGF0aCkKKyAgICAgIHJldHVybiBleGVjX2FuZF9yZXR1cm4oZXhlY2FyZ3MpCisgICAgZWxzZToKKyAgICAgIHJhaXNlIEVycm9yKCgnJXMgaXMgbWlzc2luZyBmcm9tIGNhY2hlISBUbyBpZ25vcmUgZXhwb3J0ICcKKyAgICAgICAgICAgICAgICAgICAnQklTRUNUX0NPTlRJTlVFX09OX01JU1NJTkc9MS4gU2VlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgJworICAgICAgICAgICAgICAgICAgICdkZXRhaWxzIG9uIHRoaXMgb3B0aW9uLicgJSBmdWxsX29ial9wYXRoKSkKKworICBjYWNoZSA9IHdoaWNoX2NhY2hlKGZ1bGxfb2JqX3BhdGgpCisKKyAgIyBJZiB1c2luZyBzYWZlIFdSQVBQRVJfU0FGRV9NT0RFIG9wdGlvbiBjYWxsIGNvbXBpbGVyIGFuZCBvdmVyd3JpdGUgdGhlCisgICMgcmVzdWx0IGZyb20gdGhlIGdvb2QvYmFkIGNhY2hlLiBUaGlzIG9wdGlvbiBpcyBzYWZlIGFuZCBjb3ZlcnMgYWxsIGNvbXBpbGVyCisgICMgc2lkZSBlZmZlY3RzLCBidXQgaXMgdmVyeSBzbG93IQorICBpZiBXUkFQUEVSX1NBRkVfTU9ERToKKyAgICByZXR2YWwgPSBleGVjX2FuZF9yZXR1cm4oZXhlY2FyZ3MpCisgICAgaWYgcmV0dmFsOgorICAgICAgcmV0dXJuIHJldHZhbAorICAgIG9zLnJlbW92ZShmdWxsX29ial9wYXRoKQorICAgIHJlc3RvcmVfZmlsZShiaXNlY3RfZGlyLCBjYWNoZSwgZnVsbF9vYmpfcGF0aCkKKyAgICByZXR1cm4KKworICAjIEdlbmVyYXRlIGNvbXBpbGVyIHNpZGUgZWZmZWN0cy4gVHJpY2sgTWFrZSBpbnRvIHRoaW5raW5nIGNvbXBpbGVyIHdhcworICAjIGFjdHVhbGx5IGV4ZWN1dGVkLgorICBmb3Igc2lkZV9lZmZlY3QgaW4gZ2V0X3NpZGVfZWZmZWN0cyhleGVjYXJncyk6CisgICAgcmVzdG9yZV9maWxlKGJpc2VjdF9kaXIsIGNhY2hlLCBzaWRlX2VmZmVjdCkKKworICAjIElmIGdlbmVyYXRlZCBvYmplY3QgZmlsZSBoYXBwZW5lZCB0byBiZSBwcnVuZWQvY2xlYW5lZCBieSBNYWtlIHRoZW4gbGluayBpdAorICAjIG92ZXIgZnJvbSBjYWNoZSBhZ2Fpbi4KKyAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZ1bGxfb2JqX3BhdGgpOgorICAgIHJlc3RvcmVfZmlsZShiaXNlY3RfZGlyLCBjYWNoZSwgZnVsbF9vYmpfcGF0aCkKKworCitkZWYgYmlzZWN0X2RyaXZlcihiaXNlY3Rfc3RhZ2UsIGJpc2VjdF9kaXIsIGV4ZWNhcmdzKToKKyAgIiIiQ2FsbCBhcHByb3ByaWF0ZSBiaXNlY3Rpb24gc3RhZ2UgYWNjb3JkaW5nIHRvIHZhbHVlIGluIGJpc2VjdF9zdGFnZS4iIiIKKyAgaWYgYmlzZWN0X3N0YWdlID09ICdQT1BVTEFURV9HT09EJzoKKyAgICBiaXNlY3RfcG9wdWxhdGUoZXhlY2FyZ3MsIGJpc2VjdF9kaXIsIEdPT0RfQ0FDSEUpCisgIGVsaWYgYmlzZWN0X3N0YWdlID09ICdQT1BVTEFURV9CQUQnOgorICAgIGJpc2VjdF9wb3B1bGF0ZShleGVjYXJncywgYmlzZWN0X2RpciwgQkFEX0NBQ0hFKQorICBlbGlmIGJpc2VjdF9zdGFnZSA9PSAnVFJJQUdFJzoKKyAgICBiaXNlY3RfdHJpYWdlKGV4ZWNhcmdzLCBiaXNlY3RfZGlyKQorICBlbHNlOgorICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3dyb25nIHZhbHVlIGZvciBCSVNFQ1RfU1RBR0U6ICVzJyAlIGJpc2VjdF9zdGFnZSkKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvYmluL2NsYW5nIGIvY2xhbmctMzg1OTQyNC9iaW4vY2xhbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmZmMTc4YgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvYmluL2NsYW5nCkBAIC0wLDAgKzEsMTEyIEBACisjIS91c3IvYmluL3B5dGhvbgorCitpbXBvcnQgb3MKK2ltcG9ydCBzaGxleAoraW1wb3J0IHN5cworCitCSVNFQ1RfU1RBR0UgPSBvcy5lbnZpcm9uLmdldCgnQklTRUNUX1NUQUdFJykKKworIyBXZSBkbyBub3QgbmVlZCBiaXNlY3QgZnVuY3Rpb25hbGl0eSB3aXRoIEdvbWEgYW5kIGNsYW5nLgorIyBHb21hIHNlcnZlciBkb2VzIG5vdCBoYXZlIGJpc2VjdF9kcml2ZXIsIHNvIHdlIG9ubHkgaW1wb3J0CisjIGJpc2VjdF9kcml2ZXIgd2hlbiBuZWVkZWQuIFNlZSBodHRwOi8vYi8zNDg2MjA0MQorIyBXZSBzaG91bGQgYmUgY2FyZWZ1bCB3aGVuIGRvaW5nIGltcG9ydHMgYmVjYXVzZSBvZiBHb21hLgoraWYgQklTRUNUX1NUQUdFOgorICBpbXBvcnQgYmlzZWN0X2RyaXZlcgorCitERUZBVUxUX0JJU0VDVF9ESVIgPSBvcy5wYXRoLmV4cGFuZHVzZXIoJ34vQU5EUk9JRF9CSVNFQ1QnKQorQklTRUNUX0RJUiA9IG9zLmVudmlyb24uZ2V0KCdCSVNFQ1RfRElSJykgb3IgREVGQVVMVF9CSVNFQ1RfRElSCisKKworZGVmIFByb2Nlc3NBcmdGaWxlKGFyZ19maWxlKToKKyAgYXJncyA9IFtdCisgICMgUmVhZCBpbiBlbnRpcmUgZmlsZSBhdCBvbmNlIGFuZCBwYXJzZSBhcyBpZiBpbiBzaGVsbAorICB3aXRoIG9wZW4oYXJnX2ZpbGUsICdyYicpIGFzIGY6CisgICAgYXJncy5leHRlbmQoc2hsZXguc3BsaXQoZi5yZWFkKCkpKQorICByZXR1cm4gYXJncworCisKK2NsYXNzIENvbXBpbGVyV3JhcHBlcigpOgorICBkZWYgX19pbml0X18oc2VsZiwgYXJndik6CisgICAgc2VsZi5hcmdzID0gYXJndgorICAgIHNlbGYuZXhlY2FyZ3MgPSBbXQorICAgIHNlbGYucmVhbF9jb21waWxlciA9IE5vbmUKKyAgICBzZWxmLmFyZ3YwID0gTm9uZQorICAgIHNlbGYuYXBwZW5kX2ZsYWdzID0gW10KKyAgICBzZWxmLnByZXBlbmRfZmxhZ3MgPSBbXQorICAgIHNlbGYuY3VzdG9tX2ZsYWdzID0geworICAgICAgJy0tZ29tYWNjLXBhdGgnOiBOb25lCisgICAgfQorCisgIGRlZiBzZXRfcmVhbF9jb21waWxlcihzZWxmKToKKyAgICAiIiJGaW5kIHRoZSByZWFsIGNvbXBpbGVyIHdpdGggdGhlIGFic29sdXRlIHBhdGguIiIiCisgICAgY29tcGlsZXJfcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQorICAgIGlmIG9zLnBhdGguaXNsaW5rKF9fZmlsZV9fKToKKyAgICAgIGNvbXBpbGVyID0gb3MucGF0aC5iYXNlbmFtZShvcy5yZWFkbGluayhfX2ZpbGVfXykpCisgICAgZWxzZToKKyAgICAgIGNvbXBpbGVyID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQorICAgIHNlbGYucmVhbF9jb21waWxlciA9IG9zLnBhdGguam9pbigKKyAgICAgICAgY29tcGlsZXJfcGF0aCwKKyAgICAgICAgY29tcGlsZXIgKyAnLnJlYWwnKQorICAgIHNlbGYuYXJndjAgPSBzZWxmLnJlYWxfY29tcGlsZXIKKworICBkZWYgcHJvY2Vzc19nb21hY2NfY29tbWFuZChzZWxmKToKKyAgICAiIiJSZXR1cm4gdGhlIGdvbWFjYyBjb21tYW5kIGlmICctLWdvbWFjYy1wYXRoJyBpcyBzZXQuIiIiCisgICAgZ29tYWNjID0gc2VsZi5jdXN0b21fZmxhZ3NbJy0tZ29tYWNjLXBhdGgnXQorICAgIGlmIGdvbWFjYyBhbmQgb3MucGF0aC5pc2ZpbGUoZ29tYWNjKToKKyAgICAgIHNlbGYuYXJndjAgPSBnb21hY2MKKyAgICAgIHNlbGYuZXhlY2FyZ3MgKz0gW2dvbWFjY10KKworICBkZWYgcGFyc2VfY3VzdG9tX2ZsYWdzKHNlbGYpOgorICAgIGkgPSAwCisgICAgYXJncyA9IFtdCisgICAgd2hpbGUgaSA8IGxlbihzZWxmLmFyZ3MpOgorICAgICAgaWYgc2VsZi5hcmdzW2ldIGluIHNlbGYuY3VzdG9tX2ZsYWdzOgorICAgICAgICBpZiBpID49IGxlbihzZWxmLmFyZ3MpIC0gMToKKyAgICAgICAgICBzeXMuZXhpdCgnVGhlIHZhbHVlIG9mIHt9IGlzIG5vdCBzZXQuJy5mb3JtYXQoc2VsZi5hcmdzW2ldKSkKKyAgICAgICAgc2VsZi5jdXN0b21fZmxhZ3Nbc2VsZi5hcmdzW2ldXSA9IHNlbGYuYXJnc1tpICsgMV0KKyAgICAgICAgaSA9IGkgKyAyCisgICAgICBlbHNlOgorICAgICAgICBhcmdzLmFwcGVuZChzZWxmLmFyZ3NbaV0pCisgICAgICAgIGkgPSBpICsgMQorICAgIHNlbGYuYXJncyA9IGFyZ3MKKworICBkZWYgYWRkX2ZsYWdzKHNlbGYpOgorICAgIHNlbGYuYXJncyA9IHNlbGYucHJlcGVuZF9mbGFncyArIHNlbGYuYXJncyArIHNlbGYuYXBwZW5kX2ZsYWdzCisKKyAgZGVmIHByZXBhcmVfY29tcGlsZXJfYXJncyhzZWxmKToKKyAgICBzZWxmLnNldF9yZWFsX2NvbXBpbGVyKCkKKyAgICBzZWxmLnBhcnNlX2N1c3RvbV9mbGFncygpCisgICAgc2VsZi5wcm9jZXNzX2dvbWFjY19jb21tYW5kKCkKKyAgICBzZWxmLmFkZF9mbGFncygpCisgICAgc2VsZi5leGVjYXJncyArPSBbc2VsZi5yZWFsX2NvbXBpbGVyXSArIHNlbGYuYXJncworCisgIGRlZiBpbnZva2VfY29tcGlsZXIoc2VsZik6CisgICAgc2VsZi5wcmVwYXJlX2NvbXBpbGVyX2FyZ3MoKQorICAgIG9zLmV4ZWN2KHNlbGYuYXJndjAsIHNlbGYuZXhlY2FyZ3MpCisKKyAgZGVmIGJpc2VjdChzZWxmKToKKyAgICBzZWxmLnByZXBhcmVfY29tcGlsZXJfYXJncygpCisgICAgIyBIYW5kbGUgQGZpbGUgYXJndW1lbnQgc3ludGF4IHdpdGggY29tcGlsZXIKKyAgICBpZHggPSAwCisgICAgIyBUaGUgbGVuZ3RoIG9mIHNlbGYuZXhlY2FyZ3MgY2FuIGJlIGNoYW5nZWQgZHVyaW5nIHRoZSBAZmlsZSBhcmd1bWVudAorICAgICMgZXhwYW5zaW9uLCBzbyB3ZSBuZWVkIHRvIHVzZSB3aGlsZSBsb29wIGluc3RlYWQgb2YgZm9yIGxvb3AuCisgICAgd2hpbGUgaWR4IDwgbGVuKHNlbGYuZXhlY2FyZ3MpOgorICAgICAgaWYgc2VsZi5leGVjYXJnc1tpZHhdWzBdID09ICdAJzoKKyAgICAgICAgYXJnc19pbl9maWxlID0gUHJvY2Vzc0FyZ0ZpbGUoc2VsZi5leGVjYXJnc1tpZHhdWzE6XSkKKyAgICAgICAgc2VsZi5leGVjYXJncyA9IHNlbGYuZXhlY2FyZ3NbMDppZHhdICsgYXJnc19pbl9maWxlICsgc2VsZi5leGVjYXJnc1tpZHggKyAxOl0KKyAgICAgICAgIyBTa2lwIHVwZGF0ZSBvZiBpZHgsIHNpbmNlIHdlIHdhbnQgdG8gcmVjdXJzaXZlbHkgZXhwYW5kIHJlc3BvbnNlIGZpbGVzLgorICAgICAgZWxzZToKKyAgICAgICAgaWR4ID0gaWR4ICsgMQorICAgIGJpc2VjdF9kcml2ZXIuYmlzZWN0X2RyaXZlcihCSVNFQ1RfU1RBR0UsIEJJU0VDVF9ESVIsIHNlbGYuZXhlY2FyZ3MpCisKKworZGVmIG1haW4oYXJndik6CisgIGN3ID0gQ29tcGlsZXJXcmFwcGVyKGFyZ3ZbMTpdKQorICBpZiBCSVNFQ1RfU1RBR0UgYW5kIEJJU0VDVF9TVEFHRSBpbiBiaXNlY3RfZHJpdmVyLlZBTElEX01PREVTIGFuZCAnLW8nIGluIGFyZ3Y6CisgICAgY3cuYmlzZWN0KCkKKyAgZWxzZToKKyAgICBjdy5pbnZva2VfY29tcGlsZXIoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgIG1haW4oc3lzLmFyZ3YpCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2Jpbi9jbGFuZysrIGIvY2xhbmctMzg1OTQyNC9iaW4vY2xhbmcrKwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZmYxNzhiCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9iaW4vY2xhbmcrKwpAQCAtMCwwICsxLDExMiBAQAorIyEvdXNyL2Jpbi9weXRob24KKworaW1wb3J0IG9zCitpbXBvcnQgc2hsZXgKK2ltcG9ydCBzeXMKKworQklTRUNUX1NUQUdFID0gb3MuZW52aXJvbi5nZXQoJ0JJU0VDVF9TVEFHRScpCisKKyMgV2UgZG8gbm90IG5lZWQgYmlzZWN0IGZ1bmN0aW9uYWxpdHkgd2l0aCBHb21hIGFuZCBjbGFuZy4KKyMgR29tYSBzZXJ2ZXIgZG9lcyBub3QgaGF2ZSBiaXNlY3RfZHJpdmVyLCBzbyB3ZSBvbmx5IGltcG9ydAorIyBiaXNlY3RfZHJpdmVyIHdoZW4gbmVlZGVkLiBTZWUgaHR0cDovL2IvMzQ4NjIwNDEKKyMgV2Ugc2hvdWxkIGJlIGNhcmVmdWwgd2hlbiBkb2luZyBpbXBvcnRzIGJlY2F1c2Ugb2YgR29tYS4KK2lmIEJJU0VDVF9TVEFHRToKKyAgaW1wb3J0IGJpc2VjdF9kcml2ZXIKKworREVGQVVMVF9CSVNFQ1RfRElSID0gb3MucGF0aC5leHBhbmR1c2VyKCd+L0FORFJPSURfQklTRUNUJykKK0JJU0VDVF9ESVIgPSBvcy5lbnZpcm9uLmdldCgnQklTRUNUX0RJUicpIG9yIERFRkFVTFRfQklTRUNUX0RJUgorCisKK2RlZiBQcm9jZXNzQXJnRmlsZShhcmdfZmlsZSk6CisgIGFyZ3MgPSBbXQorICAjIFJlYWQgaW4gZW50aXJlIGZpbGUgYXQgb25jZSBhbmQgcGFyc2UgYXMgaWYgaW4gc2hlbGwKKyAgd2l0aCBvcGVuKGFyZ19maWxlLCAncmInKSBhcyBmOgorICAgIGFyZ3MuZXh0ZW5kKHNobGV4LnNwbGl0KGYucmVhZCgpKSkKKyAgcmV0dXJuIGFyZ3MKKworCitjbGFzcyBDb21waWxlcldyYXBwZXIoKToKKyAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3YpOgorICAgIHNlbGYuYXJncyA9IGFyZ3YKKyAgICBzZWxmLmV4ZWNhcmdzID0gW10KKyAgICBzZWxmLnJlYWxfY29tcGlsZXIgPSBOb25lCisgICAgc2VsZi5hcmd2MCA9IE5vbmUKKyAgICBzZWxmLmFwcGVuZF9mbGFncyA9IFtdCisgICAgc2VsZi5wcmVwZW5kX2ZsYWdzID0gW10KKyAgICBzZWxmLmN1c3RvbV9mbGFncyA9IHsKKyAgICAgICctLWdvbWFjYy1wYXRoJzogTm9uZQorICAgIH0KKworICBkZWYgc2V0X3JlYWxfY29tcGlsZXIoc2VsZik6CisgICAgIiIiRmluZCB0aGUgcmVhbCBjb21waWxlciB3aXRoIHRoZSBhYnNvbHV0ZSBwYXRoLiIiIgorICAgIGNvbXBpbGVyX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKKyAgICBpZiBvcy5wYXRoLmlzbGluayhfX2ZpbGVfXyk6CisgICAgICBjb21waWxlciA9IG9zLnBhdGguYmFzZW5hbWUob3MucmVhZGxpbmsoX19maWxlX18pKQorICAgIGVsc2U6CisgICAgICBjb21waWxlciA9IG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKKyAgICBzZWxmLnJlYWxfY29tcGlsZXIgPSBvcy5wYXRoLmpvaW4oCisgICAgICAgIGNvbXBpbGVyX3BhdGgsCisgICAgICAgIGNvbXBpbGVyICsgJy5yZWFsJykKKyAgICBzZWxmLmFyZ3YwID0gc2VsZi5yZWFsX2NvbXBpbGVyCisKKyAgZGVmIHByb2Nlc3NfZ29tYWNjX2NvbW1hbmQoc2VsZik6CisgICAgIiIiUmV0dXJuIHRoZSBnb21hY2MgY29tbWFuZCBpZiAnLS1nb21hY2MtcGF0aCcgaXMgc2V0LiIiIgorICAgIGdvbWFjYyA9IHNlbGYuY3VzdG9tX2ZsYWdzWyctLWdvbWFjYy1wYXRoJ10KKyAgICBpZiBnb21hY2MgYW5kIG9zLnBhdGguaXNmaWxlKGdvbWFjYyk6CisgICAgICBzZWxmLmFyZ3YwID0gZ29tYWNjCisgICAgICBzZWxmLmV4ZWNhcmdzICs9IFtnb21hY2NdCisKKyAgZGVmIHBhcnNlX2N1c3RvbV9mbGFncyhzZWxmKToKKyAgICBpID0gMAorICAgIGFyZ3MgPSBbXQorICAgIHdoaWxlIGkgPCBsZW4oc2VsZi5hcmdzKToKKyAgICAgIGlmIHNlbGYuYXJnc1tpXSBpbiBzZWxmLmN1c3RvbV9mbGFnczoKKyAgICAgICAgaWYgaSA+PSBsZW4oc2VsZi5hcmdzKSAtIDE6CisgICAgICAgICAgc3lzLmV4aXQoJ1RoZSB2YWx1ZSBvZiB7fSBpcyBub3Qgc2V0LicuZm9ybWF0KHNlbGYuYXJnc1tpXSkpCisgICAgICAgIHNlbGYuY3VzdG9tX2ZsYWdzW3NlbGYuYXJnc1tpXV0gPSBzZWxmLmFyZ3NbaSArIDFdCisgICAgICAgIGkgPSBpICsgMgorICAgICAgZWxzZToKKyAgICAgICAgYXJncy5hcHBlbmQoc2VsZi5hcmdzW2ldKQorICAgICAgICBpID0gaSArIDEKKyAgICBzZWxmLmFyZ3MgPSBhcmdzCisKKyAgZGVmIGFkZF9mbGFncyhzZWxmKToKKyAgICBzZWxmLmFyZ3MgPSBzZWxmLnByZXBlbmRfZmxhZ3MgKyBzZWxmLmFyZ3MgKyBzZWxmLmFwcGVuZF9mbGFncworCisgIGRlZiBwcmVwYXJlX2NvbXBpbGVyX2FyZ3Moc2VsZik6CisgICAgc2VsZi5zZXRfcmVhbF9jb21waWxlcigpCisgICAgc2VsZi5wYXJzZV9jdXN0b21fZmxhZ3MoKQorICAgIHNlbGYucHJvY2Vzc19nb21hY2NfY29tbWFuZCgpCisgICAgc2VsZi5hZGRfZmxhZ3MoKQorICAgIHNlbGYuZXhlY2FyZ3MgKz0gW3NlbGYucmVhbF9jb21waWxlcl0gKyBzZWxmLmFyZ3MKKworICBkZWYgaW52b2tlX2NvbXBpbGVyKHNlbGYpOgorICAgIHNlbGYucHJlcGFyZV9jb21waWxlcl9hcmdzKCkKKyAgICBvcy5leGVjdihzZWxmLmFyZ3YwLCBzZWxmLmV4ZWNhcmdzKQorCisgIGRlZiBiaXNlY3Qoc2VsZik6CisgICAgc2VsZi5wcmVwYXJlX2NvbXBpbGVyX2FyZ3MoKQorICAgICMgSGFuZGxlIEBmaWxlIGFyZ3VtZW50IHN5bnRheCB3aXRoIGNvbXBpbGVyCisgICAgaWR4ID0gMAorICAgICMgVGhlIGxlbmd0aCBvZiBzZWxmLmV4ZWNhcmdzIGNhbiBiZSBjaGFuZ2VkIGR1cmluZyB0aGUgQGZpbGUgYXJndW1lbnQKKyAgICAjIGV4cGFuc2lvbiwgc28gd2UgbmVlZCB0byB1c2Ugd2hpbGUgbG9vcCBpbnN0ZWFkIG9mIGZvciBsb29wLgorICAgIHdoaWxlIGlkeCA8IGxlbihzZWxmLmV4ZWNhcmdzKToKKyAgICAgIGlmIHNlbGYuZXhlY2FyZ3NbaWR4XVswXSA9PSAnQCc6CisgICAgICAgIGFyZ3NfaW5fZmlsZSA9IFByb2Nlc3NBcmdGaWxlKHNlbGYuZXhlY2FyZ3NbaWR4XVsxOl0pCisgICAgICAgIHNlbGYuZXhlY2FyZ3MgPSBzZWxmLmV4ZWNhcmdzWzA6aWR4XSArIGFyZ3NfaW5fZmlsZSArIHNlbGYuZXhlY2FyZ3NbaWR4ICsgMTpdCisgICAgICAgICMgU2tpcCB1cGRhdGUgb2YgaWR4LCBzaW5jZSB3ZSB3YW50IHRvIHJlY3Vyc2l2ZWx5IGV4cGFuZCByZXNwb25zZSBmaWxlcy4KKyAgICAgIGVsc2U6CisgICAgICAgIGlkeCA9IGlkeCArIDEKKyAgICBiaXNlY3RfZHJpdmVyLmJpc2VjdF9kcml2ZXIoQklTRUNUX1NUQUdFLCBCSVNFQ1RfRElSLCBzZWxmLmV4ZWNhcmdzKQorCisKK2RlZiBtYWluKGFyZ3YpOgorICBjdyA9IENvbXBpbGVyV3JhcHBlcihhcmd2WzE6XSkKKyAgaWYgQklTRUNUX1NUQUdFIGFuZCBCSVNFQ1RfU1RBR0UgaW4gYmlzZWN0X2RyaXZlci5WQUxJRF9NT0RFUyBhbmQgJy1vJyBpbiBhcmd2OgorICAgIGN3LmJpc2VjdCgpCisgIGVsc2U6CisgICAgY3cuaW52b2tlX2NvbXBpbGVyKCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICBtYWluKHN5cy5hcmd2KQpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9iaW4vY2xhbmcrKy5yZWFsIGIvY2xhbmctMzg1OTQyNC9iaW4vY2xhbmcrKy5yZWFsCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjVmNjU4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9jbGFuZysrLnJlYWwKQEAgLTAsMCArMSBAQAorY2xhbmcucmVhbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvYmluL2NsYW5nLWZvcm1hdCBiL2NsYW5nLTM4NTk0MjQvYmluL2NsYW5nLWZvcm1hdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41Y2FlY2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9iaW4vY2xhbmctZm9ybWF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvYmluL2NsYW5nLXRpZHkgYi9jbGFuZy0zODU5NDI0L2Jpbi9jbGFuZy10aWR5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM1YzE2MzcKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9jbGFuZy10aWR5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvYmluL2NsYW5nLnJlYWwgYi9jbGFuZy0zODU5NDI0L2Jpbi9jbGFuZy5yZWFsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1OTczMzgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9jbGFuZy5yZWFsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvYmluL2xsdm0tYXIgYi9jbGFuZy0zODU5NDI0L2Jpbi9sbHZtLWFyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZmYzBhOGMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9sbHZtLWFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvYmluL2xsdm0tYXMgYi9jbGFuZy0zODU5NDI0L2Jpbi9sbHZtLWFzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIzNDQxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9sbHZtLWFzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvYmluL2xsdm0tZGlzIGIvY2xhbmctMzg1OTQyNC9iaW4vbGx2bS1kaXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTM4NDljNwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvYmluL2xsdm0tZGlzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvYmluL2xsdm0tbGluayBiL2NsYW5nLTM4NTk0MjQvYmluL2xsdm0tbGluawpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYTUzMDhlCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9iaW4vbGx2bS1saW5rCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvYmluL2xsdm0tc3ltYm9saXplciBiL2NsYW5nLTM4NTk0MjQvYmluL2xsdm0tc3ltYm9saXplcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zY2FjMzc0Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9iaW4vbGx2bS1zeW1ib2xpemVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvYmluL21pcHMvYW5hbHl6ZXIgYi9jbGFuZy0zODU5NDI0L2Jpbi9taXBzL2FuYWx5emVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxM2RiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9taXBzL2FuYWx5emVyCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL2Jhc2gKK2lmIFsgIiQxIiAhPSAiLWNjMSIgXTsgdGhlbgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAtdGFyZ2V0IG1pcHNlbC1ub25lLWxpbnV4LWFuZHJvaWQgIiRAIgorZWxzZQorICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9iaW4vbWlwcy9hbmFseXplcisrIGIvY2xhbmctMzg1OTQyNC9iaW4vbWlwcy9hbmFseXplcisrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYxYTU5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9taXBzL2FuYWx5emVyKysKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgLXRhcmdldCBtaXBzZWwtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9iaW4vbWlwczY0L2FuYWx5emVyIGIvY2xhbmctMzg1OTQyNC9iaW4vbWlwczY0L2FuYWx5emVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNlMjc2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9taXBzNjQvYW5hbHl6ZXIKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nIC10YXJnZXQgbWlwczY0ZWwtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgIiRAIgorZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvYmluL21pcHM2NC9hbmFseXplcisrIGIvY2xhbmctMzg1OTQyNC9iaW4vbWlwczY0L2FuYWx5emVyKysKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjA4ZGVlYgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvYmluL21pcHM2NC9hbmFseXplcisrCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL2Jhc2gKK2lmIFsgIiQxIiAhPSAiLWNjMSIgXTsgdGhlbgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZysrIC10YXJnZXQgbWlwczY0ZWwtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9iaW4vc2FuY292IGIvY2xhbmctMzg1OTQyNC9iaW4vc2FuY292Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhhNWZkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2Jpbi9zYW5jb3YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9iaW4vc2Fuc3RhdHMgYi9jbGFuZy0zODU5NDI0L2Jpbi9zYW5zdGF0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NmUxZmYzCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9iaW4vc2Fuc3RhdHMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9iaW4veDg2L2FuYWx5emVyIGIvY2xhbmctMzg1OTQyNC9iaW4veDg2L2FuYWx5emVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJmY2JmZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2Jpbi94ODYvYW5hbHl6ZXIKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nIC10YXJnZXQgaTY4Ni1ub25lLWxpbnV4LWFuZHJvaWQgIiRAIgorZWxzZQorICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9iaW4veDg2L2FuYWx5emVyKysgYi9jbGFuZy0zODU5NDI0L2Jpbi94ODYvYW5hbHl6ZXIrKwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mY2E2MmRmCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9iaW4veDg2L2FuYWx5emVyKysKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgLXRhcmdldCBpNjg2LW5vbmUtbGludXgtYW5kcm9pZCAiJEAiCitlbHNlCisgICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgIiRAIgorZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvYmluL3g4Nl82NC9hbmFseXplciBiL2NsYW5nLTM4NTk0MjQvYmluL3g4Nl82NC9hbmFseXplcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lN2RiNDQzCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9iaW4veDg2XzY0L2FuYWx5emVyCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL2Jhc2gKK2lmIFsgIiQxIiAhPSAiLWNjMSIgXTsgdGhlbgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAtdGFyZ2V0IHg4Nl82NC1ub25lLWxpbnV4LWFuZHJvaWQgIiRAIgorZWxzZQorICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9iaW4veDg2XzY0L2FuYWx5emVyKysgYi9jbGFuZy0zODU5NDI0L2Jpbi94ODZfNjQvYW5hbHl6ZXIrKwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZDhkMTViCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9iaW4veDg2XzY0L2FuYWx5emVyKysKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgLXRhcmdldCB4ODZfNjQtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9MTFZNZ29sZC5zbyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvTExWTWdvbGQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDkwNmMwNwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvTExWTWdvbGQuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAuMjg1OTA2IGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAuMjg1OTA2Cm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjM4OWY3NzQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC4yODU5MDYKQEAgLTAsMCArMSBAQAorNC4wClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9fX2NsYW5nX2N1ZGFfYnVpbHRpbl92YXJzLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL19fY2xhbmdfY3VkYV9idWlsdGluX3ZhcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjVlYjljCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9fX2NsYW5nX2N1ZGFfYnVpbHRpbl92YXJzLmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qPT09LS0tLSBjdWRhX2J1aWx0aW5fdmFycy5oIC0gQ1VEQSBidWlsdC1pbiB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fQ1VEQV9CVUlMVElOX1ZBUlNfSAorI2RlZmluZSBfX0NVREFfQlVJTFRJTl9WQVJTX0gKKworLy8gRm9yd2FyZCBkZWNsYXJlcyBmcm9tIHZlY3Rvcl90eXBlcy5oLgorc3RydWN0IHVpbnQzOworc3RydWN0IGRpbTM7CisKKy8vIFRoZSBmaWxlIGltcGxlbWVudHMgYnVpbHQtaW4gQ1VEQSB2YXJpYWJsZXMgdXNpbmcgX19kZWNsc3BlYyhwcm9wZXJ0eSkuCisvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3loZmswdGhkLmFzcHgKKy8vIEFsbCByZWFkIGFjY2Vzc2VzIG9mIGJ1aWx0LWluIHZhcmlhYmxlIGZpZWxkcyBnZXQgY29udmVydGVkIGludG8gY2FsbHMgdG8gYQorLy8gZ2V0dGVyIGZ1bmN0aW9uIHdoaWNoIGluIHR1cm4gY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGJ1aWx0aW4gdG8gZmV0Y2ggdGhlCisvLyB2YWx1ZS4KKy8vCisvLyBFeGFtcGxlOgorLy8gICAgaW50IHggPSB0aHJlYWRJZHgueDsKKy8vIElSIG91dHB1dDoKKy8vICAlMCA9IGNhbGwgaTMyIEBsbHZtLm52dm0ucmVhZC5wdHguc3JlZy50aWQueCgpICMzCisvLyBQVFggb3V0cHV0OgorLy8gIG1vdi51MzIgICAgICVyMiwgJXRpZC54OworCisjZGVmaW5lIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTihGSUVMRCwgSU5UUklOU0lDKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2RlY2xzcGVjKHByb3BlcnR5KGdldCA9IF9fZmV0Y2hfYnVpbHRpbl8jI0ZJRUxEKSkgdW5zaWduZWQgaW50IEZJRUxEOyAgICAgIFwKKyAgc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBfX2F0dHJpYnV0ZV9fKChkZXZpY2UpKSB1bnNpZ25lZCBpbnQgX19mZXRjaF9idWlsdGluXyMjRklFTEQodm9pZCkgeyAgICAgXAorICAgIHJldHVybiBJTlRSSU5TSUM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorI2RlZmluZSBfX0RFTEVURSA9ZGVsZXRlCisjZWxzZQorI2RlZmluZSBfX0RFTEVURQorI2VuZGlmCisKKy8vIE1ha2Ugc3VyZSBub2JvZHkgY2FuIGNyZWF0ZSBpbnN0YW5jZXMgb2YgdGhlIHNwZWNpYWwgdmFyaWJsZSB0eXBlcy4gIG52Y2MKKy8vIGFsc28gZGlzYWxsb3dzIHRha2luZyBhZGRyZXNzIG9mIHNwZWNpYWwgdmFyaWFibGVzLCBzbyB3ZSBkaXNhYmxlIGFkZHJlc3Mtb2YKKy8vIG9wZXJhdG9yIGFzIHdlbGwuCisjZGVmaW5lIF9fQ1VEQV9ESVNBTExPV19CVUlMVElOVkFSX0FDQ0VTUyhUeXBlTmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2F0dHJpYnV0ZV9fKChkZXZpY2UpKSBUeXBlTmFtZSgpIF9fREVMRVRFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19hdHRyaWJ1dGVfXygoZGV2aWNlKSkgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUgJikgX19ERUxFVEU7ICAgICAgICAgICAgICAgICBcCisgIF9fYXR0cmlidXRlX18oKGRldmljZSkpIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lICYpIGNvbnN0IF9fREVMRVRFOyAgICAgXAorICBfX2F0dHJpYnV0ZV9fKChkZXZpY2UpKSBUeXBlTmFtZSAqb3BlcmF0b3ImKCkgY29uc3QgX19ERUxFVEUKKworc3RydWN0IF9fY3VkYV9idWlsdGluX3RocmVhZElkeF90IHsKKyAgX19DVURBX0RFVklDRV9CVUlMVElOKHgsX19udnZtX3JlYWRfcHR4X3NyZWdfdGlkX3goKSk7CisgIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih5LF9fbnZ2bV9yZWFkX3B0eF9zcmVnX3RpZF95KCkpOworICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeixfX252dm1fcmVhZF9wdHhfc3JlZ190aWRfeigpKTsKKyAgLy8gdGhyZWFkSWR4IHNob3VsZCBiZSBjb252ZXJ0aWJsZSB0byB1aW50MyAoaW4gZmFjdCBpbiBudmNjLCBpdCAqaXMqIGEKKyAgLy8gdWludDMpLiAgVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFmdGVyIHdlIHB1bGwgaW4gdmVjdG9yX3R5cGVzLmguCisgIF9fYXR0cmlidXRlX18oKGRldmljZSkpIG9wZXJhdG9yIHVpbnQzKCkgY29uc3Q7Citwcml2YXRlOgorICBfX0NVREFfRElTQUxMT1dfQlVJTFRJTlZBUl9BQ0NFU1MoX19jdWRhX2J1aWx0aW5fdGhyZWFkSWR4X3QpOworfTsKKworc3RydWN0IF9fY3VkYV9idWlsdGluX2Jsb2NrSWR4X3QgeworICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeCxfX252dm1fcmVhZF9wdHhfc3JlZ19jdGFpZF94KCkpOworICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeSxfX252dm1fcmVhZF9wdHhfc3JlZ19jdGFpZF95KCkpOworICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeixfX252dm1fcmVhZF9wdHhfc3JlZ19jdGFpZF96KCkpOworICAvLyBibG9ja0lkeCBzaG91bGQgYmUgY29udmVydGlibGUgdG8gdWludDMgKGluIGZhY3QgaW4gbnZjYywgaXQgKmlzKiBhCisgIC8vIHVpbnQzKS4gIFRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhZnRlciB3ZSBwdWxsIGluIHZlY3Rvcl90eXBlcy5oLgorICBfX2F0dHJpYnV0ZV9fKChkZXZpY2UpKSBvcGVyYXRvciB1aW50MygpIGNvbnN0OworcHJpdmF0ZToKKyAgX19DVURBX0RJU0FMTE9XX0JVSUxUSU5WQVJfQUNDRVNTKF9fY3VkYV9idWlsdGluX2Jsb2NrSWR4X3QpOworfTsKKworc3RydWN0IF9fY3VkYV9idWlsdGluX2Jsb2NrRGltX3QgeworICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeCxfX252dm1fcmVhZF9wdHhfc3JlZ19udGlkX3goKSk7CisgIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih5LF9fbnZ2bV9yZWFkX3B0eF9zcmVnX250aWRfeSgpKTsKKyAgX19DVURBX0RFVklDRV9CVUlMVElOKHosX19udnZtX3JlYWRfcHR4X3NyZWdfbnRpZF96KCkpOworICAvLyBibG9ja0RpbSBzaG91bGQgYmUgY29udmVydGlibGUgdG8gZGltMyAoaW4gZmFjdCBpbiBudmNjLCBpdCAqaXMqIGEKKyAgLy8gZGltMykuICBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYWZ0ZXIgd2UgcHVsbCBpbiB2ZWN0b3JfdHlwZXMuaC4KKyAgX19hdHRyaWJ1dGVfXygoZGV2aWNlKSkgb3BlcmF0b3IgZGltMygpIGNvbnN0OworcHJpdmF0ZToKKyAgX19DVURBX0RJU0FMTE9XX0JVSUxUSU5WQVJfQUNDRVNTKF9fY3VkYV9idWlsdGluX2Jsb2NrRGltX3QpOworfTsKKworc3RydWN0IF9fY3VkYV9idWlsdGluX2dyaWREaW1fdCB7CisgIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih4LF9fbnZ2bV9yZWFkX3B0eF9zcmVnX25jdGFpZF94KCkpOworICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeSxfX252dm1fcmVhZF9wdHhfc3JlZ19uY3RhaWRfeSgpKTsKKyAgX19DVURBX0RFVklDRV9CVUlMVElOKHosX19udnZtX3JlYWRfcHR4X3NyZWdfbmN0YWlkX3ooKSk7CisgIC8vIGdyaWREaW0gc2hvdWxkIGJlIGNvbnZlcnRpYmxlIHRvIGRpbTMgKGluIGZhY3QgaW4gbnZjYywgaXQgKmlzKiBhCisgIC8vIGRpbTMpLiAgVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFmdGVyIHdlIHB1bGwgaW4gdmVjdG9yX3R5cGVzLmguCisgIF9fYXR0cmlidXRlX18oKGRldmljZSkpIG9wZXJhdG9yIGRpbTMoKSBjb25zdDsKK3ByaXZhdGU6CisgIF9fQ1VEQV9ESVNBTExPV19CVUlMVElOVkFSX0FDQ0VTUyhfX2N1ZGFfYnVpbHRpbl9ncmlkRGltX3QpOworfTsKKworI2RlZmluZSBfX0NVREFfQlVJTFRJTl9WQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZXh0ZXJuIGNvbnN0IF9fYXR0cmlidXRlX18oKGRldmljZSkpIF9fYXR0cmlidXRlX18oKHdlYWspKQorX19DVURBX0JVSUxUSU5fVkFSIF9fY3VkYV9idWlsdGluX3RocmVhZElkeF90IHRocmVhZElkeDsKK19fQ1VEQV9CVUlMVElOX1ZBUiBfX2N1ZGFfYnVpbHRpbl9ibG9ja0lkeF90IGJsb2NrSWR4OworX19DVURBX0JVSUxUSU5fVkFSIF9fY3VkYV9idWlsdGluX2Jsb2NrRGltX3QgYmxvY2tEaW07CitfX0NVREFfQlVJTFRJTl9WQVIgX19jdWRhX2J1aWx0aW5fZ3JpZERpbV90IGdyaWREaW07CisKKy8vIHdhcnBTaXplIHNob3VsZCB0cmFuc2xhdGUgdG8gcmVhZCBvZiAlV0FSUF9TWiBidXQgdGhlcmUncyBjdXJyZW50bHkgbm8KKy8vIGJ1aWx0aW4gdG8gZG8gc28uIEFjY29yZGluZyB0byBQVFggdjQuMiBkb2NzICd0byBkYXRlLCBhbGwgdGFyZ2V0CisvLyBhcmNoaXRlY3R1cmVzIGhhdmUgYSBXQVJQX1NaIHZhbHVlIG9mIDMyJy4KK19fYXR0cmlidXRlX18oKGRldmljZSkpIGNvbnN0IGludCB3YXJwU2l6ZSA9IDMyOworCisjdW5kZWYgX19DVURBX0RFVklDRV9CVUlMVElOCisjdW5kZWYgX19DVURBX0JVSUxUSU5fVkFSCisjdW5kZWYgX19DVURBX0RJU0FMTE9XX0JVSUxUSU5WQVJfQUNDRVNTCisKKyNlbmRpZiAvKiBfX0NVREFfQlVJTFRJTl9WQVJTX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvX19jbGFuZ19jdWRhX2NtYXRoLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL19fY2xhbmdfY3VkYV9jbWF0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OTM3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL19fY2xhbmdfY3VkYV9jbWF0aC5oCkBAIC0wLDAgKzEsNDc4IEBACisvKj09PS0tLS0gX19jbGFuZ19jdWRhX2NtYXRoLmggLSBEZXZpY2Utc2lkZSBDVURBIGNtYXRoIHN1cHBvcnQgLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworI2lmbmRlZiBfX0NMQU5HX0NVREFfQ01BVEhfSF9fCisjZGVmaW5lIF9fQ0xBTkdfQ1VEQV9DTUFUSF9IX18KKyNpZm5kZWYgX19DVURBX18KKyNlcnJvciAiVGhpcyBmaWxlIGlzIGZvciBDVURBIGNvbXBpbGF0aW9uIG9ubHkuIgorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW1pdHM+CisKKy8vIENVREEgbGV0cyB1cyB1c2UgdmFyaW91cyBzdGQgbWF0aCBmdW5jdGlvbnMgb24gdGhlIGRldmljZSBzaWRlLiAgVGhpcyBmaWxlCisvLyB3b3JrcyBpbiBjb25jZXJ0IHdpdGggX19jbGFuZ19jdWRhX21hdGhfZm9yd2FyZF9kZWNsYXJlcy5oIHRvIG1ha2UgdGhpcyB3b3JrLgorLy8KKy8vIFNwZWNpZmljYWxseSwgdGhlIGZvcndhcmQtZGVjbGFyZXMgaGVhZGVyIGRlY2xhcmVzIF9fZGV2aWNlX18gb3ZlcmxvYWRzIGZvcgorLy8gdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLCB0aGVuIHB1bGxzIHRoZW0gaW50byBuYW1lc3BhY2Ugc3RkCisvLyB3aXRoICd1c2luZycgc3RhdGVtZW50cy4gIFRoZW4gdGhpcyBmaWxlIGltcGxlbWVudHMgdGhvc2UgZnVuY3Rpb25zLCBhZnRlcgorLy8gdGhlaXIgaW1wbGVtZW50YXRpb25zIGhhdmUgYmVlbiBwdWxsZWQgaW4uCisvLworLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB3ZSBkZWNsYXJlIHRoZSBmdW5jdGlvbnMgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UgYW5kIHB1bGwKKy8vIHRoZW0gaW50byBuYW1lc3BhY2Ugc3RkIHdpdGggdXNpbmcgc3RhdGVtZW50cywgYXMgb3Bwb3NlZCB0byBzaW1wbHkgZGVjbGFyaW5nCisvLyB0aGVzZSBmdW5jdGlvbnMgaW4gbmFtZXNwYWNlIHN0ZCwgYmVjYXVzZSBvdXIgZGV2aWNlIGZ1bmN0aW9ucyBuZWVkIHRvCisvLyBvdmVybG9hZCB0aGUgc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlvbnMsIHdoaWNoIG1heSBiZSBkZWNsYXJlZCBpbiB0aGUgZ2xvYmFsCisvLyBuYW1lc3BhY2Ugb3IgaW4gc3RkLCBkZXBlbmRpbmcgb24gdGhlIGRlZ3JlZSBvZiBjb25mb3JtYW5jZSBvZiB0aGUgc3RkbGliCisvLyBpbXBsZW1lbnRhdGlvbi4gIERlY2xhcmluZyBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZSBhbmQgcHVsbGluZyBpbnRvIG5hbWVzcGFjZQorLy8gc3RkIGNvdmVycyBhbGwgb2YgdGhlIGtub3duIGtub3ducy4KKworI2RlZmluZSBfX0RFVklDRV9fIHN0YXRpYyBfX2RldmljZV9fIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisKK19fREVWSUNFX18gbG9uZyBsb25nIGFicyhsb25nIGxvbmcgX19uKSB7IHJldHVybiA6OmxsYWJzKF9fbik7IH0KK19fREVWSUNFX18gbG9uZyBhYnMobG9uZyBfX24pIHsgcmV0dXJuIDo6bGFicyhfX24pOyB9CitfX0RFVklDRV9fIGZsb2F0IGFicyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZmFic2YoX194KTsgfQorX19ERVZJQ0VfXyBkb3VibGUgYWJzKGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6ZmFicyhfX3gpOyB9CitfX0RFVklDRV9fIGZsb2F0IGFjb3MoZmxvYXQgX194KSB7IHJldHVybiA6OmFjb3NmKF9feCk7IH0KK19fREVWSUNFX18gZmxvYXQgYXNpbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXNpbmYoX194KTsgfQorX19ERVZJQ0VfXyBmbG9hdCBhdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjphdGFuZihfX3gpOyB9CitfX0RFVklDRV9fIGZsb2F0IGF0YW4yKGZsb2F0IF9feCwgZmxvYXQgX195KSB7IHJldHVybiA6OmF0YW4yZihfX3gsIF9feSk7IH0KK19fREVWSUNFX18gZmxvYXQgY2VpbChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Y2VpbGYoX194KTsgfQorX19ERVZJQ0VfXyBmbG9hdCBjb3MoZmxvYXQgX194KSB7IHJldHVybiA6OmNvc2YoX194KTsgfQorX19ERVZJQ0VfXyBmbG9hdCBjb3NoKGZsb2F0IF9feCkgeyByZXR1cm4gOjpjb3NoZihfX3gpOyB9CitfX0RFVklDRV9fIGZsb2F0IGV4cChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZXhwZihfX3gpOyB9CitfX0RFVklDRV9fIGZsb2F0IGZhYnMoZmxvYXQgX194KSB7IHJldHVybiA6OmZhYnNmKF9feCk7IH0KK19fREVWSUNFX18gZmxvYXQgZmxvb3IoZmxvYXQgX194KSB7IHJldHVybiA6OmZsb29yZihfX3gpOyB9CitfX0RFVklDRV9fIGZsb2F0IGZtb2QoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6Zm1vZGYoX194LCBfX3kpOyB9CitfX0RFVklDRV9fIGludCBmcGNsYXNzaWZ5KGZsb2F0IF9feCkgeworICByZXR1cm4gX19idWlsdGluX2ZwY2xhc3NpZnkoRlBfTkFOLCBGUF9JTkZJTklURSwgRlBfTk9STUFMLCBGUF9TVUJOT1JNQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUF9aRVJPLCBfX3gpOworfQorX19ERVZJQ0VfXyBpbnQgZnBjbGFzc2lmeShkb3VibGUgX194KSB7CisgIHJldHVybiBfX2J1aWx0aW5fZnBjbGFzc2lmeShGUF9OQU4sIEZQX0lORklOSVRFLCBGUF9OT1JNQUwsIEZQX1NVQk5PUk1BTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZQX1pFUk8sIF9feCk7Cit9CitfX0RFVklDRV9fIGZsb2F0IGZyZXhwKGZsb2F0IF9fYXJnLCBpbnQgKl9fZXhwKSB7CisgIHJldHVybiA6OmZyZXhwZihfX2FyZywgX19leHApOworfQorX19ERVZJQ0VfXyBib29sIGlzaW5mKGZsb2F0IF9feCkgeyByZXR1cm4gOjpfX2lzaW5mZihfX3gpOyB9CitfX0RFVklDRV9fIGJvb2wgaXNpbmYoZG91YmxlIF9feCkgeyByZXR1cm4gOjpfX2lzaW5mKF9feCk7IH0KK19fREVWSUNFX18gYm9vbCBpc2Zpbml0ZShmbG9hdCBfX3gpIHsgcmV0dXJuIDo6X19maW5pdGVmKF9feCk7IH0KK19fREVWSUNFX18gYm9vbCBpc2Zpbml0ZShkb3VibGUgX194KSB7IHJldHVybiA6Ol9fZmluaXRlKF9feCk7IH0KK19fREVWSUNFX18gYm9vbCBpc2dyZWF0ZXIoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pc2dyZWF0ZXIoX194LCBfX3kpOworfQorX19ERVZJQ0VfXyBib29sIGlzZ3JlYXRlcihkb3VibGUgX194LCBkb3VibGUgX195KSB7CisgIHJldHVybiBfX2J1aWx0aW5faXNncmVhdGVyKF9feCwgX195KTsKK30KK19fREVWSUNFX18gYm9vbCBpc2dyZWF0ZXJlcXVhbChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeworICByZXR1cm4gX19idWlsdGluX2lzZ3JlYXRlcmVxdWFsKF9feCwgX195KTsKK30KK19fREVWSUNFX18gYm9vbCBpc2dyZWF0ZXJlcXVhbChkb3VibGUgX194LCBkb3VibGUgX195KSB7CisgIHJldHVybiBfX2J1aWx0aW5faXNncmVhdGVyZXF1YWwoX194LCBfX3kpOworfQorX19ERVZJQ0VfXyBib29sIGlzbGVzcyhmbG9hdCBfX3gsIGZsb2F0IF9feSkgeworICByZXR1cm4gX19idWlsdGluX2lzbGVzcyhfX3gsIF9feSk7Cit9CitfX0RFVklDRV9fIGJvb2wgaXNsZXNzKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pc2xlc3MoX194LCBfX3kpOworfQorX19ERVZJQ0VfXyBib29sIGlzbGVzc2VxdWFsKGZsb2F0IF9feCwgZmxvYXQgX195KSB7CisgIHJldHVybiBfX2J1aWx0aW5faXNsZXNzZXF1YWwoX194LCBfX3kpOworfQorX19ERVZJQ0VfXyBib29sIGlzbGVzc2VxdWFsKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pc2xlc3NlcXVhbChfX3gsIF9feSk7Cit9CitfX0RFVklDRV9fIGJvb2wgaXNsZXNzZ3JlYXRlcihmbG9hdCBfX3gsIGZsb2F0IF9feSkgeworICByZXR1cm4gX19idWlsdGluX2lzbGVzc2dyZWF0ZXIoX194LCBfX3kpOworfQorX19ERVZJQ0VfXyBib29sIGlzbGVzc2dyZWF0ZXIoZG91YmxlIF9feCwgZG91YmxlIF9feSkgeworICByZXR1cm4gX19idWlsdGluX2lzbGVzc2dyZWF0ZXIoX194LCBfX3kpOworfQorX19ERVZJQ0VfXyBib29sIGlzbmFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjpfX2lzbmFuZihfX3gpOyB9CitfX0RFVklDRV9fIGJvb2wgaXNuYW4oZG91YmxlIF9feCkgeyByZXR1cm4gOjpfX2lzbmFuKF9feCk7IH0KK19fREVWSUNFX18gYm9vbCBpc25vcm1hbChmbG9hdCBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9pc25vcm1hbChfX3gpOyB9CitfX0RFVklDRV9fIGJvb2wgaXNub3JtYWwoZG91YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGluX2lzbm9ybWFsKF9feCk7IH0KK19fREVWSUNFX18gYm9vbCBpc3Vub3JkZXJlZChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeworICByZXR1cm4gX19idWlsdGluX2lzdW5vcmRlcmVkKF9feCwgX195KTsKK30KK19fREVWSUNFX18gYm9vbCBpc3Vub3JkZXJlZChkb3VibGUgX194LCBkb3VibGUgX195KSB7CisgIHJldHVybiBfX2J1aWx0aW5faXN1bm9yZGVyZWQoX194LCBfX3kpOworfQorX19ERVZJQ0VfXyBmbG9hdCBsZGV4cChmbG9hdCBfX2FyZywgaW50IF9fZXhwKSB7CisgIHJldHVybiA6OmxkZXhwZihfX2FyZywgX19leHApOworfQorX19ERVZJQ0VfXyBmbG9hdCBsb2coZmxvYXQgX194KSB7IHJldHVybiA6OmxvZ2YoX194KTsgfQorX19ERVZJQ0VfXyBmbG9hdCBsb2cxMChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nMTBmKF9feCk7IH0KK19fREVWSUNFX18gZmxvYXQgbW9kZihmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIHsgcmV0dXJuIDo6bW9kZmYoX194LCBfX2lwdHIpOyB9CitfX0RFVklDRV9fIGZsb2F0IG5leHR0b3dhcmQoZmxvYXQgX19mcm9tLCBkb3VibGUgX190bykgeworICByZXR1cm4gX19idWlsdGluX25leHR0b3dhcmRmKF9fZnJvbSwgX190byk7Cit9CitfX0RFVklDRV9fIGRvdWJsZSBuZXh0dG93YXJkKGRvdWJsZSBfX2Zyb20sIGRvdWJsZSBfX3RvKSB7CisgIHJldHVybiBfX2J1aWx0aW5fbmV4dHRvd2FyZChfX2Zyb20sIF9fdG8pOworfQorX19ERVZJQ0VfXyBmbG9hdCBuZXh0dG93YXJkZihmbG9hdCBfX2Zyb20sIGRvdWJsZSBfX3RvKSB7CisgIHJldHVybiBfX2J1aWx0aW5fbmV4dHRvd2FyZGYoX19mcm9tLCBfX3RvKTsKK30KK19fREVWSUNFX18gZmxvYXQgcG93KGZsb2F0IF9fYmFzZSwgZmxvYXQgX19leHApIHsKKyAgcmV0dXJuIDo6cG93ZihfX2Jhc2UsIF9fZXhwKTsKK30KK19fREVWSUNFX18gZmxvYXQgcG93KGZsb2F0IF9fYmFzZSwgaW50IF9faWV4cCkgeworICByZXR1cm4gOjpwb3dpZihfX2Jhc2UsIF9faWV4cCk7Cit9CitfX0RFVklDRV9fIGRvdWJsZSBwb3coZG91YmxlIF9fYmFzZSwgaW50IF9faWV4cCkgeworICByZXR1cm4gOjpwb3dpKF9fYmFzZSwgX19pZXhwKTsKK30KK19fREVWSUNFX18gYm9vbCBzaWduYml0KGZsb2F0IF9feCkgeyByZXR1cm4gOjpfX3NpZ25iaXRmKF9feCk7IH0KK19fREVWSUNFX18gYm9vbCBzaWduYml0KGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6X19zaWduYml0KF9feCk7IH0KK19fREVWSUNFX18gZmxvYXQgc2luKGZsb2F0IF9feCkgeyByZXR1cm4gOjpzaW5mKF9feCk7IH0KK19fREVWSUNFX18gZmxvYXQgc2luaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6c2luaGYoX194KTsgfQorX19ERVZJQ0VfXyBmbG9hdCBzcXJ0KGZsb2F0IF9feCkgeyByZXR1cm4gOjpzcXJ0ZihfX3gpOyB9CitfX0RFVklDRV9fIGZsb2F0IHRhbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFuZihfX3gpOyB9CitfX0RFVklDRV9fIGZsb2F0IHRhbmgoZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmhmKF9feCk7IH0KKworLy8gTm93IHdlJ3ZlIGRlZmluZWQgZXZlcnl0aGluZyB3ZSBwcm9taXNlZCB3ZSdkIGRlZmluZSBpbgorLy8gX19jbGFuZ19jdWRhX21hdGhfZm9yd2FyZF9kZWNsYXJlcy5oLiAgV2UgbmVlZCB0byBkbyB0d28gYWRkaXRpb25hbCB0aGluZ3MgdG8KKy8vIGZpeCB1cCBvdXIgbWF0aCBmdW5jdGlvbnMuCisvLworLy8gMSkgRGVmaW5lIF9fZGV2aWNlX18gb3ZlcmxvYWRzIGZvciBlLmcuIHNpbihpbnQpLiAgVGhlIENVREEgaGVhZGVycyBkZWZpbmUKKy8vICAgIG9ubHkgc2luKGZsb2F0KSBhbmQgc2luKGRvdWJsZSksIHdoaWNoIG1lYW5zIHRoYXQgZS5nLiBzaW4oMCkgaXMKKy8vICAgIGFtYmlndW91cy4KKy8vCisvLyAyKSBQdWxsIHRoZSBfX2RldmljZV9fIG92ZXJsb2FkcyBvZiAiZm9vYmFyZiIgbWF0aCBmdW5jdGlvbnMgaW50byBuYW1lc3BhY2UKKy8vICAgIHN0ZC4gIFRoZXNlIGFyZSBkZWZpbmVkIGluIHRoZSBDVURBIGhlYWRlcnMgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UsCisvLyAgICBpbmRlcGVuZGVudCBvZiBldmVyeXRoaW5nIGVsc2Ugd2UndmUgZG9uZSBoZXJlLgorCisvLyBXZSBjYW4ndCB1c2Ugc3RkOjplbmFibGVfaWYsIGJlY2F1c2Ugd2Ugd2FudCB0byBiZSBwcmUtQysrMTEgY29tcGF0aWJsZS4gIEJ1dAorLy8gd2UgZ28gYWhlYWQgYW5kIHVuY29uZGl0aW9uYWxseSBkZWZpbmUgZnVuY3Rpb25zIHRoYXQgYXJlIG9ubHkgYXZhaWxhYmxlIHdoZW4KKy8vIGNvbXBpbGluZyBmb3IgQysrMTEgdG8gbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIHRoZSBDVURBIGhlYWRlcnMuCit0ZW1wbGF0ZTxib29sIF9fQiwgY2xhc3MgX19UID0gdm9pZD4KK3N0cnVjdCBfX2NsYW5nX2N1ZGFfZW5hYmxlX2lmIHt9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX19UPiBzdHJ1Y3QgX19jbGFuZ19jdWRhX2VuYWJsZV9pZjx0cnVlLCBfX1Q+IHsKKyAgdHlwZWRlZiBfX1QgdHlwZTsKK307CisKKy8vIERlZmluZXMgYW4gb3ZlcmxvYWQgb2YgX19mbiB0aGF0IGFjY2VwdHMgb25lIGludGVncmFsIGFyZ3VtZW50LCBjYWxscworLy8gX19mbigoZG91YmxlKXgpLCBhbmQgcmV0dXJucyBfX3JldHR5LgorI2RlZmluZSBfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKF9fcmV0dHksIF9fZm4pICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9fVD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fREVWSUNFX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZW5hbWUgX19jbGFuZ19jdWRhX2VuYWJsZV9pZjxzdGQ6Om51bWVyaWNfbGltaXRzPF9fVD46OmlzX2ludGVnZXIsICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXR0eT46OnR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBfX2ZuKF9fVCBfX3gpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiA6Ol9fZm4oKGRvdWJsZSlfX3gpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisvLyBEZWZpbmVzIGFuIG92ZXJsb2FkIG9mIF9fZm4gdGhhdCBhY2NlcHRzIG9uZSB0d28gYXJpdGhtZXRpYyBhcmd1bWVudHMsIGNhbGxzCisvLyBfX2ZuKChkb3VibGUpeCwgKGRvdWJsZSl5KSwgYW5kIHJldHVybnMgYSBkb3VibGUuCisvLworLy8gTm90ZSB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIE9WRVJMT0FEXzEsIHdoaWNoIGdlbmVyYXRlcyBhbiBvdmVybG9hZCB0aGF0CisvLyBhY2NlcHRzIG9ubHkgKmludGVncmFsKiBhcmd1bWVudHMuCisjZGVmaW5lIF9fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzIoX19yZXR0eSwgX19mbikgICAgICAgICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX19UMSwgdHlwZW5hbWUgX19UMj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19ERVZJQ0VfXyB0eXBlbmFtZSBfX2NsYW5nX2N1ZGFfZW5hYmxlX2lmPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPF9fVDE+Ojppc19zcGVjaWFsaXplZCAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8X19UMj46OmlzX3NwZWNpYWxpemVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIF9fcmV0dHk+Ojp0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZm4oX19UMSBfX3gsIF9fVDIgX195KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiBfX2ZuKChkb3VibGUpX194LCAoZG91YmxlKV9feSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGRvdWJsZSwgYWNvcykKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzEoZG91YmxlLCBhY29zaCkKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzEoZG91YmxlLCBhc2luKQorX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMShkb3VibGUsIGFzaW5oKQorX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMShkb3VibGUsIGF0YW4pCitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8yKGRvdWJsZSwgYXRhbjIpOworX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMShkb3VibGUsIGF0YW5oKQorX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMShkb3VibGUsIGNicnQpCitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGRvdWJsZSwgY2VpbCkKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzIoZG91YmxlLCBjb3B5c2lnbik7CitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGRvdWJsZSwgY29zKQorX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMShkb3VibGUsIGNvc2gpCitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGRvdWJsZSwgZXJmKQorX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMShkb3VibGUsIGVyZmMpCitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGRvdWJsZSwgZXhwKQorX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMShkb3VibGUsIGV4cDIpCitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGRvdWJsZSwgZXhwbTEpCitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGRvdWJsZSwgZmFicykKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzIoZG91YmxlLCBmZGltKTsKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzEoZG91YmxlLCBmbG9vcikKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzIoZG91YmxlLCBmbWF4KTsKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzIoZG91YmxlLCBmbWluKTsKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzIoZG91YmxlLCBmbW9kKTsKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzEoaW50LCBmcGNsYXNzaWZ5KQorX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMihkb3VibGUsIGh5cG90KTsKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzEoaW50LCBpbG9nYikKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzEoYm9vbCwgaXNmaW5pdGUpCitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8yKGJvb2wsIGlzZ3JlYXRlcik7CitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8yKGJvb2wsIGlzZ3JlYXRlcmVxdWFsKTsKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzEoYm9vbCwgaXNpbmYpOworX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMihib29sLCBpc2xlc3MpOworX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMihib29sLCBpc2xlc3NlcXVhbCk7CitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8yKGJvb2wsIGlzbGVzc2dyZWF0ZXIpOworX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMShib29sLCBpc25hbik7CitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGJvb2wsIGlzbm9ybWFsKQorX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMihib29sLCBpc3Vub3JkZXJlZCk7CitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGRvdWJsZSwgbGdhbW1hKQorX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMShkb3VibGUsIGxvZykKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzEoZG91YmxlLCBsb2cxMCkKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzEoZG91YmxlLCBsb2cxcCkKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzEoZG91YmxlLCBsb2cyKQorX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMShkb3VibGUsIGxvZ2IpCitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGxvbmcgbG9uZywgbGxyaW50KQorX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMShsb25nIGxvbmcsIGxscm91bmQpCitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGxvbmcsIGxyaW50KQorX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMShsb25nLCBscm91bmQpCitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGRvdWJsZSwgbmVhcmJ5aW50KTsKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzIoZG91YmxlLCBuZXh0YWZ0ZXIpOworX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMihkb3VibGUsIHBvdyk7CitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8yKGRvdWJsZSwgcmVtYWluZGVyKTsKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzEoZG91YmxlLCByaW50KTsKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzEoZG91YmxlLCByb3VuZCk7CitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGJvb2wsIHNpZ25iaXQpCitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGRvdWJsZSwgc2luKQorX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMShkb3VibGUsIHNpbmgpCitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGRvdWJsZSwgc3FydCkKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzEoZG91YmxlLCB0YW4pCitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGRvdWJsZSwgdGFuaCkKK19fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzEoZG91YmxlLCB0Z2FtbWEpCitfX0NVREFfQ0xBTkdfRk5fSU5URUdFUl9PVkVSTE9BRF8xKGRvdWJsZSwgdHJ1bmMpOworCisjdW5kZWYgX19DVURBX0NMQU5HX0ZOX0lOVEVHRVJfT1ZFUkxPQURfMQorI3VuZGVmIF9fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEXzIKKworLy8gT3ZlcmxvYWRzIGZvciBmdW5jdGlvbnMgdGhhdCBkb24ndCBtYXRjaCB0aGUgcGF0dGVybnMgZXhwZWN0ZWQgYnkKKy8vIF9fQ1VEQV9DTEFOR19GTl9JTlRFR0VSX09WRVJMT0FEX3sxLDJ9LgordGVtcGxhdGUgPHR5cGVuYW1lIF9fVDEsIHR5cGVuYW1lIF9fVDIsIHR5cGVuYW1lIF9fVDM+CitfX0RFVklDRV9fIHR5cGVuYW1lIF9fY2xhbmdfY3VkYV9lbmFibGVfaWY8CisgICAgc3RkOjpudW1lcmljX2xpbWl0czxfX1QxPjo6aXNfc3BlY2lhbGl6ZWQgJiYKKyAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxfX1QyPjo6aXNfc3BlY2lhbGl6ZWQgJiYKKyAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxfX1QzPjo6aXNfc3BlY2lhbGl6ZWQsCisgICAgZG91YmxlPjo6dHlwZQorZm1hKF9fVDEgX194LCBfX1QyIF9feSwgX19UMyBfX3opIHsKKyAgcmV0dXJuIHN0ZDo6Zm1hKChkb3VibGUpX194LCAoZG91YmxlKV9feSwgKGRvdWJsZSlfX3opOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgX19UPgorX19ERVZJQ0VfXyB0eXBlbmFtZSBfX2NsYW5nX2N1ZGFfZW5hYmxlX2lmPHN0ZDo6bnVtZXJpY19saW1pdHM8X19UPjo6aXNfaW50ZWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+Ojp0eXBlCitmcmV4cChfX1QgX194LCBpbnQgKl9fZXhwKSB7CisgIHJldHVybiBzdGQ6OmZyZXhwKChkb3VibGUpX194LCBfX2V4cCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBfX1Q+CitfX0RFVklDRV9fIHR5cGVuYW1lIF9fY2xhbmdfY3VkYV9lbmFibGVfaWY8c3RkOjpudW1lcmljX2xpbWl0czxfX1Q+Ojppc19pbnRlZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZT46OnR5cGUKK2xkZXhwKF9fVCBfX3gsIGludCBfX2V4cCkgeworICByZXR1cm4gc3RkOjpsZGV4cCgoZG91YmxlKV9feCwgX19leHApOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgX19UPgorX19ERVZJQ0VfXyB0eXBlbmFtZSBfX2NsYW5nX2N1ZGFfZW5hYmxlX2lmPHN0ZDo6bnVtZXJpY19saW1pdHM8X19UPjo6aXNfaW50ZWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+Ojp0eXBlCituZXh0dG93YXJkKF9fVCBfX2Zyb20sIGRvdWJsZSBfX3RvKSB7CisgIHJldHVybiBzdGQ6Om5leHR0b3dhcmQoKGRvdWJsZSlfX2Zyb20sIF9fdG8pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgX19UMSwgdHlwZW5hbWUgX19UMj4KK19fREVWSUNFX18gdHlwZW5hbWUgX19jbGFuZ19jdWRhX2VuYWJsZV9pZjwKKyAgICBzdGQ6Om51bWVyaWNfbGltaXRzPF9fVDE+Ojppc19zcGVjaWFsaXplZCAmJgorICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPF9fVDI+Ojppc19zcGVjaWFsaXplZCwKKyAgICBkb3VibGU+Ojp0eXBlCityZW1xdW8oX19UMSBfX3gsIF9fVDIgX195LCBpbnQgKl9fcXVvKSB7CisgIHJldHVybiBzdGQ6OnJlbXF1bygoZG91YmxlKV9feCwgKGRvdWJsZSlfX3ksIF9fcXVvKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIF9fVD4KK19fREVWSUNFX18gdHlwZW5hbWUgX19jbGFuZ19jdWRhX2VuYWJsZV9pZjxzdGQ6Om51bWVyaWNfbGltaXRzPF9fVD46OmlzX2ludGVnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlPjo6dHlwZQorc2NhbGJsbihfX1QgX194LCBsb25nIF9fZXhwKSB7CisgIHJldHVybiBzdGQ6OnNjYWxibG4oKGRvdWJsZSlfX3gsIF9fZXhwKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIF9fVD4KK19fREVWSUNFX18gdHlwZW5hbWUgX19jbGFuZ19jdWRhX2VuYWJsZV9pZjxzdGQ6Om51bWVyaWNfbGltaXRzPF9fVD46OmlzX2ludGVnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlPjo6dHlwZQorc2NhbGJuKF9fVCBfX3gsIGludCBfX2V4cCkgeworICByZXR1cm4gc3RkOjpzY2FsYm4oKGRvdWJsZSlfX3gsIF9fZXhwKTsKK30KKworLy8gV2UgbmVlZCB0byBkZWZpbmUgdGhlc2Ugb3ZlcmxvYWRzIGluIGV4YWN0bHkgdGhlIG5hbWVzcGFjZSBvdXIgc3RhbmRhcmQKKy8vIGxpYnJhcnkgdXNlcyAoaW5jbHVkaW5nIHRoZSByaWdodCBpbmxpbmUgbmFtZXNwYWNlKSwgb3RoZXJ3aXNlIHRoZXkgd29uJ3QgYmUKKy8vIHBpY2tlZCB1cCBieSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgKGUuZy4gZnVuY3Rpb25zIGluCisvLyA8Y29tcGxleD4pLiAgVGh1cyB0aGUgdWdsaW5lc3MgYmVsb3cuCisjaWZkZWYgX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfU1RECitfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9TVEQKKyNlbHNlCituYW1lc3BhY2Ugc3RkIHsKKyNpZmRlZiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyNlbmRpZgorI2VuZGlmCisKKy8vIFB1bGwgdGhlIG5ldyBvdmVybG9hZHMgd2UgZGVmaW5lZCBhYm92ZSBpbnRvIG5hbWVzcGFjZSBzdGQuCit1c2luZyA6OmFjb3M7Cit1c2luZyA6OmFjb3NoOwordXNpbmcgOjphc2luOwordXNpbmcgOjphc2luaDsKK3VzaW5nIDo6YXRhbjsKK3VzaW5nIDo6YXRhbjI7Cit1c2luZyA6OmF0YW5oOwordXNpbmcgOjpjYnJ0OwordXNpbmcgOjpjZWlsOwordXNpbmcgOjpjb3B5c2lnbjsKK3VzaW5nIDo6Y29zOwordXNpbmcgOjpjb3NoOwordXNpbmcgOjplcmY7Cit1c2luZyA6OmVyZmM7Cit1c2luZyA6OmV4cDsKK3VzaW5nIDo6ZXhwMjsKK3VzaW5nIDo6ZXhwbTE7Cit1c2luZyA6OmZhYnM7Cit1c2luZyA6OmZkaW07Cit1c2luZyA6OmZsb29yOwordXNpbmcgOjpmbWE7Cit1c2luZyA6OmZtYXg7Cit1c2luZyA6OmZtaW47Cit1c2luZyA6OmZtb2Q7Cit1c2luZyA6OmZwY2xhc3NpZnk7Cit1c2luZyA6OmZyZXhwOwordXNpbmcgOjpoeXBvdDsKK3VzaW5nIDo6aWxvZ2I7Cit1c2luZyA6OmlzZmluaXRlOwordXNpbmcgOjppc2dyZWF0ZXI7Cit1c2luZyA6OmlzZ3JlYXRlcmVxdWFsOwordXNpbmcgOjppc2xlc3M7Cit1c2luZyA6OmlzbGVzc2VxdWFsOwordXNpbmcgOjppc2xlc3NncmVhdGVyOwordXNpbmcgOjppc25vcm1hbDsKK3VzaW5nIDo6aXN1bm9yZGVyZWQ7Cit1c2luZyA6OmxkZXhwOwordXNpbmcgOjpsZ2FtbWE7Cit1c2luZyA6OmxscmludDsKK3VzaW5nIDo6bGxyb3VuZDsKK3VzaW5nIDo6bG9nOwordXNpbmcgOjpsb2cxMDsKK3VzaW5nIDo6bG9nMXA7Cit1c2luZyA6OmxvZzI7Cit1c2luZyA6OmxvZ2I7Cit1c2luZyA6OmxyaW50OwordXNpbmcgOjpscm91bmQ7Cit1c2luZyA6Om5lYXJieWludDsKK3VzaW5nIDo6bmV4dGFmdGVyOwordXNpbmcgOjpuZXh0dG93YXJkOwordXNpbmcgOjpwb3c7Cit1c2luZyA6OnJlbWFpbmRlcjsKK3VzaW5nIDo6cmVtcXVvOwordXNpbmcgOjpyaW50OwordXNpbmcgOjpyb3VuZDsKK3VzaW5nIDo6c2NhbGJsbjsKK3VzaW5nIDo6c2NhbGJuOwordXNpbmcgOjpzaWduYml0OwordXNpbmcgOjpzaW47Cit1c2luZyA6OnNpbmg7Cit1c2luZyA6OnNxcnQ7Cit1c2luZyA6OnRhbjsKK3VzaW5nIDo6dGFuaDsKK3VzaW5nIDo6dGdhbW1hOwordXNpbmcgOjp0cnVuYzsKKworLy8gV2VsbCB0aGlzIGlzIGZ1bjogV2UgbmVlZCB0byBwdWxsIHRoZXNlIHN5bWJvbHMgaW4gZm9yIGxpYmMrKywgYnV0IHdlIGNhbid0CisvLyBwdWxsIHRoZW0gaW4gd2l0aCBsaWJzdGRjKyssIGJlY2F1c2UgaXRzIDo6aXNpbmYgYW5kIDo6aXNuYW4gYXJlIGRpZmZlcmVudAorLy8gdGhhbiBpdHMgc3RkOjppc2luZiBhbmQgc3RkOjppc25hbi4KKyNpZm5kZWYgX19HTElCQ1hYX18KK3VzaW5nIDo6aXNpbmY7Cit1c2luZyA6OmlzbmFuOworI2VuZGlmCisKKy8vIEZpbmFsbHksIHB1bGwgdGhlICJmb29iYXJmIiBmdW5jdGlvbnMgdGhhdCBDVURBIGRlZmluZXMgaW4gaXRzIGhlYWRlcnMgaW50bworLy8gbmFtZXNwYWNlIHN0ZC4KK3VzaW5nIDo6YWNvc2Y7Cit1c2luZyA6OmFjb3NoZjsKK3VzaW5nIDo6YXNpbmY7Cit1c2luZyA6OmFzaW5oZjsKK3VzaW5nIDo6YXRhbjJmOwordXNpbmcgOjphdGFuZjsKK3VzaW5nIDo6YXRhbmhmOwordXNpbmcgOjpjYnJ0ZjsKK3VzaW5nIDo6Y2VpbGY7Cit1c2luZyA6OmNvcHlzaWduZjsKK3VzaW5nIDo6Y29zZjsKK3VzaW5nIDo6Y29zaGY7Cit1c2luZyA6OmVyZmNmOwordXNpbmcgOjplcmZmOwordXNpbmcgOjpleHAyZjsKK3VzaW5nIDo6ZXhwZjsKK3VzaW5nIDo6ZXhwbTFmOwordXNpbmcgOjpmYWJzZjsKK3VzaW5nIDo6ZmRpbWY7Cit1c2luZyA6OmZsb29yZjsKK3VzaW5nIDo6Zm1hZjsKK3VzaW5nIDo6Zm1heGY7Cit1c2luZyA6OmZtaW5mOwordXNpbmcgOjpmbW9kZjsKK3VzaW5nIDo6ZnJleHBmOwordXNpbmcgOjpoeXBvdGY7Cit1c2luZyA6Omlsb2diZjsKK3VzaW5nIDo6bGRleHBmOwordXNpbmcgOjpsZ2FtbWFmOwordXNpbmcgOjpsbHJpbnRmOwordXNpbmcgOjpsbHJvdW5kZjsKK3VzaW5nIDo6bG9nMTBmOwordXNpbmcgOjpsb2cxcGY7Cit1c2luZyA6OmxvZzJmOwordXNpbmcgOjpsb2diZjsKK3VzaW5nIDo6bG9nZjsKK3VzaW5nIDo6bHJpbnRmOwordXNpbmcgOjpscm91bmRmOwordXNpbmcgOjptb2RmZjsKK3VzaW5nIDo6bmVhcmJ5aW50ZjsKK3VzaW5nIDo6bmV4dGFmdGVyZjsKK3VzaW5nIDo6bmV4dHRvd2FyZGY7Cit1c2luZyA6Om5leHR0b3dhcmRmOwordXNpbmcgOjpwb3dmOwordXNpbmcgOjpyZW1haW5kZXJmOwordXNpbmcgOjpyZW1xdW9mOwordXNpbmcgOjpyaW50ZjsKK3VzaW5nIDo6cm91bmRmOwordXNpbmcgOjpzY2FsYmxuZjsKK3VzaW5nIDo6c2NhbGJuZjsKK3VzaW5nIDo6c2luZjsKK3VzaW5nIDo6c2luaGY7Cit1c2luZyA6OnNxcnRmOwordXNpbmcgOjp0YW5mOwordXNpbmcgOjp0YW5oZjsKK3VzaW5nIDo6dGdhbW1hZjsKK3VzaW5nIDo6dHJ1bmNmOworCisjaWZkZWYgX0xJQkNQUF9FTkRfTkFNRVNQQUNFX1NURAorX0xJQkNQUF9FTkRfTkFNRVNQQUNFX1NURAorI2Vsc2UKKyNpZmRlZiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCisjZW5kaWYKK30gLy8gbmFtZXNwYWNlIHN0ZAorI2VuZGlmCisKKyN1bmRlZiBfX0RFVklDRV9fCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9fX2NsYW5nX2N1ZGFfY29tcGxleF9idWlsdGlucy5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9fX2NsYW5nX2N1ZGFfY29tcGxleF9idWlsdGlucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZWY3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL19fY2xhbmdfY3VkYV9jb21wbGV4X2J1aWx0aW5zLmgKQEAgLTAsMCArMSwyMDMgQEAKKy8qPT09LS0gX19jbGFuZ19jdWRhX2NvbXBsZXhfYnVpbHRpbnMgLSBDVURBIGltcGxzIG9mIHJ1bnRpbWUgY29tcGxleCBmbnMgLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fQ0xBTkdfQ1VEQV9DT01QTEVYX0JVSUxUSU5TCisjZGVmaW5lIF9fQ0xBTkdfQ1VEQV9DT01QTEVYX0JVSUxUSU5TCisKKy8vIFRoaXMgaGVhZGVyIGRlZmluZXMgX19tdWxkYzMsIF9fbXVsc2MzLCBfX2RpdmRjMywgYW5kIF9fZGl2c2MzLiAgVGhlc2UgYXJlCisvLyBsaWJnY2MgZnVuY3Rpb25zIHRoYXQgY2xhbmcgYXNzdW1lcyBhcmUgYXZhaWxhYmxlIHdoZW4gY29tcGlsaW5nIGM5OSBjb21wbGV4CisvLyBvcGVyYXRpb25zLiAgKFRoZXNlIGltcGxlbWVudGF0aW9ucyBjb21lIGZyb20gbGliYysrLCBhbmQgaGF2ZSBiZWVuIG1vZGlmaWVkCisvLyB0byB3b3JrIHdpdGggQ1VEQS4pCisKK2V4dGVybiAiQyIgaW5saW5lIF9fZGV2aWNlX18gZG91YmxlIF9Db21wbGV4IF9fbXVsZGMzKGRvdWJsZSBfX2EsIGRvdWJsZSBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgX19jLCBkb3VibGUgX19kKSB7CisgIGRvdWJsZSBfX2FjID0gX19hICogX19jOworICBkb3VibGUgX19iZCA9IF9fYiAqIF9fZDsKKyAgZG91YmxlIF9fYWQgPSBfX2EgKiBfX2Q7CisgIGRvdWJsZSBfX2JjID0gX19iICogX19jOworICBkb3VibGUgX0NvbXBsZXggejsKKyAgX19yZWFsX18oeikgPSBfX2FjIC0gX19iZDsKKyAgX19pbWFnX18oeikgPSBfX2FkICsgX19iYzsKKyAgaWYgKHN0ZDo6aXNuYW4oX19yZWFsX18oeikpICYmIHN0ZDo6aXNuYW4oX19pbWFnX18oeikpKSB7CisgICAgaW50IF9fcmVjYWxjID0gMDsKKyAgICBpZiAoc3RkOjppc2luZihfX2EpIHx8IHN0ZDo6aXNpbmYoX19iKSkgeworICAgICAgX19hID0gc3RkOjpjb3B5c2lnbihzdGQ6OmlzaW5mKF9fYSkgPyAxIDogMCwgX19hKTsKKyAgICAgIF9fYiA9IHN0ZDo6Y29weXNpZ24oc3RkOjppc2luZihfX2IpID8gMSA6IDAsIF9fYik7CisgICAgICBpZiAoc3RkOjppc25hbihfX2MpKQorICAgICAgICBfX2MgPSBzdGQ6OmNvcHlzaWduKDAsIF9fYyk7CisgICAgICBpZiAoc3RkOjppc25hbihfX2QpKQorICAgICAgICBfX2QgPSBzdGQ6OmNvcHlzaWduKDAsIF9fZCk7CisgICAgICBfX3JlY2FsYyA9IDE7CisgICAgfQorICAgIGlmIChzdGQ6OmlzaW5mKF9fYykgfHwgc3RkOjppc2luZihfX2QpKSB7CisgICAgICBfX2MgPSBzdGQ6OmNvcHlzaWduKHN0ZDo6aXNpbmYoX19jKSA/IDEgOiAwLCBfX2MpOworICAgICAgX19kID0gc3RkOjpjb3B5c2lnbihzdGQ6OmlzaW5mKF9fZCkgPyAxIDogMCwgX19kKTsKKyAgICAgIGlmIChzdGQ6OmlzbmFuKF9fYSkpCisgICAgICAgIF9fYSA9IHN0ZDo6Y29weXNpZ24oMCwgX19hKTsKKyAgICAgIGlmIChzdGQ6OmlzbmFuKF9fYikpCisgICAgICAgIF9fYiA9IHN0ZDo6Y29weXNpZ24oMCwgX19iKTsKKyAgICAgIF9fcmVjYWxjID0gMTsKKyAgICB9CisgICAgaWYgKCFfX3JlY2FsYyAmJiAoc3RkOjppc2luZihfX2FjKSB8fCBzdGQ6OmlzaW5mKF9fYmQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc2luZihfX2FkKSB8fCBzdGQ6OmlzaW5mKF9fYmMpKSkgeworICAgICAgaWYgKHN0ZDo6aXNuYW4oX19hKSkKKyAgICAgICAgX19hID0gc3RkOjpjb3B5c2lnbigwLCBfX2EpOworICAgICAgaWYgKHN0ZDo6aXNuYW4oX19iKSkKKyAgICAgICAgX19iID0gc3RkOjpjb3B5c2lnbigwLCBfX2IpOworICAgICAgaWYgKHN0ZDo6aXNuYW4oX19jKSkKKyAgICAgICAgX19jID0gc3RkOjpjb3B5c2lnbigwLCBfX2MpOworICAgICAgaWYgKHN0ZDo6aXNuYW4oX19kKSkKKyAgICAgICAgX19kID0gc3RkOjpjb3B5c2lnbigwLCBfX2QpOworICAgICAgX19yZWNhbGMgPSAxOworICAgIH0KKyAgICBpZiAoX19yZWNhbGMpIHsKKyAgICAgIC8vIENhbid0IHVzZSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkgLS0gdGhhdCBkb2Vzbid0IGhhdmUKKyAgICAgIC8vIGEgZGV2aWNlIG92ZXJsb2FkIChhbmQgaXNuJ3QgY29uc3RleHByIGJlZm9yZSBDKysxMSwgbmF0dXJhbGx5KS4KKyAgICAgIF9fcmVhbF9fKHopID0gX19idWlsdGluX2h1Z2VfdmFsZigpICogKF9fYSAqIF9fYyAtIF9fYiAqIF9fZCk7CisgICAgICBfX2ltYWdfXyh6KSA9IF9fYnVpbHRpbl9odWdlX3ZhbGYoKSAqIChfX2EgKiBfX2QgKyBfX2IgKiBfX2MpOworICAgIH0KKyAgfQorICByZXR1cm4gejsKK30KKworZXh0ZXJuICJDIiBpbmxpbmUgX19kZXZpY2VfXyBmbG9hdCBfQ29tcGxleCBfX211bHNjMyhmbG9hdCBfX2EsIGZsb2F0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgX19jLCBmbG9hdCBfX2QpIHsKKyAgZmxvYXQgX19hYyA9IF9fYSAqIF9fYzsKKyAgZmxvYXQgX19iZCA9IF9fYiAqIF9fZDsKKyAgZmxvYXQgX19hZCA9IF9fYSAqIF9fZDsKKyAgZmxvYXQgX19iYyA9IF9fYiAqIF9fYzsKKyAgZmxvYXQgX0NvbXBsZXggejsKKyAgX19yZWFsX18oeikgPSBfX2FjIC0gX19iZDsKKyAgX19pbWFnX18oeikgPSBfX2FkICsgX19iYzsKKyAgaWYgKHN0ZDo6aXNuYW4oX19yZWFsX18oeikpICYmIHN0ZDo6aXNuYW4oX19pbWFnX18oeikpKSB7CisgICAgaW50IF9fcmVjYWxjID0gMDsKKyAgICBpZiAoc3RkOjppc2luZihfX2EpIHx8IHN0ZDo6aXNpbmYoX19iKSkgeworICAgICAgX19hID0gc3RkOjpjb3B5c2lnbihzdGQ6OmlzaW5mKF9fYSkgPyAxIDogMCwgX19hKTsKKyAgICAgIF9fYiA9IHN0ZDo6Y29weXNpZ24oc3RkOjppc2luZihfX2IpID8gMSA6IDAsIF9fYik7CisgICAgICBpZiAoc3RkOjppc25hbihfX2MpKQorICAgICAgICBfX2MgPSBzdGQ6OmNvcHlzaWduKDAsIF9fYyk7CisgICAgICBpZiAoc3RkOjppc25hbihfX2QpKQorICAgICAgICBfX2QgPSBzdGQ6OmNvcHlzaWduKDAsIF9fZCk7CisgICAgICBfX3JlY2FsYyA9IDE7CisgICAgfQorICAgIGlmIChzdGQ6OmlzaW5mKF9fYykgfHwgc3RkOjppc2luZihfX2QpKSB7CisgICAgICBfX2MgPSBzdGQ6OmNvcHlzaWduKHN0ZDo6aXNpbmYoX19jKSA/IDEgOiAwLCBfX2MpOworICAgICAgX19kID0gc3RkOjpjb3B5c2lnbihzdGQ6OmlzaW5mKF9fZCkgPyAxIDogMCwgX19kKTsKKyAgICAgIGlmIChzdGQ6OmlzbmFuKF9fYSkpCisgICAgICAgIF9fYSA9IHN0ZDo6Y29weXNpZ24oMCwgX19hKTsKKyAgICAgIGlmIChzdGQ6OmlzbmFuKF9fYikpCisgICAgICAgIF9fYiA9IHN0ZDo6Y29weXNpZ24oMCwgX19iKTsKKyAgICAgIF9fcmVjYWxjID0gMTsKKyAgICB9CisgICAgaWYgKCFfX3JlY2FsYyAmJiAoc3RkOjppc2luZihfX2FjKSB8fCBzdGQ6OmlzaW5mKF9fYmQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc2luZihfX2FkKSB8fCBzdGQ6OmlzaW5mKF9fYmMpKSkgeworICAgICAgaWYgKHN0ZDo6aXNuYW4oX19hKSkKKyAgICAgICAgX19hID0gc3RkOjpjb3B5c2lnbigwLCBfX2EpOworICAgICAgaWYgKHN0ZDo6aXNuYW4oX19iKSkKKyAgICAgICAgX19iID0gc3RkOjpjb3B5c2lnbigwLCBfX2IpOworICAgICAgaWYgKHN0ZDo6aXNuYW4oX19jKSkKKyAgICAgICAgX19jID0gc3RkOjpjb3B5c2lnbigwLCBfX2MpOworICAgICAgaWYgKHN0ZDo6aXNuYW4oX19kKSkKKyAgICAgICAgX19kID0gc3RkOjpjb3B5c2lnbigwLCBfX2QpOworICAgICAgX19yZWNhbGMgPSAxOworICAgIH0KKyAgICBpZiAoX19yZWNhbGMpIHsKKyAgICAgIF9fcmVhbF9fKHopID0gX19idWlsdGluX2h1Z2VfdmFsZigpICogKF9fYSAqIF9fYyAtIF9fYiAqIF9fZCk7CisgICAgICBfX2ltYWdfXyh6KSA9IF9fYnVpbHRpbl9odWdlX3ZhbGYoKSAqIChfX2EgKiBfX2QgKyBfX2IgKiBfX2MpOworICAgIH0KKyAgfQorICByZXR1cm4gejsKK30KKworZXh0ZXJuICJDIiBpbmxpbmUgX19kZXZpY2VfXyBkb3VibGUgX0NvbXBsZXggX19kaXZkYzMoZG91YmxlIF9fYSwgZG91YmxlIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBfX2MsIGRvdWJsZSBfX2QpIHsKKyAgaW50IF9faWxvZ2J3ID0gMDsKKyAgLy8gQ2FuJ3QgdXNlIHN0ZDo6bWF4LCBiZWNhdXNlIHRoYXQncyBkZWZpbmVkIGluIDxhbGdvcml0aG0+LCBhbmQgd2UgZG9uJ3QKKyAgLy8gd2FudCB0byBwdWxsIHRoYXQgaW4gZm9yIGV2ZXJ5IGNvbXBpbGUuICBUaGUgQ1VEQSBoZWFkZXJzIGRlZmluZQorICAvLyA6Om1heChmbG9hdCwgZmxvYXQpIGFuZCA6Om1heChkb3VibGUsIGRvdWJsZSksIHdoaWNoIGlzIHN1ZmZpY2llbnQgZm9yIHVzLgorICBkb3VibGUgX19sb2didyA9IHN0ZDo6bG9nYihtYXgoc3RkOjphYnMoX19jKSwgc3RkOjphYnMoX19kKSkpOworICBpZiAoc3RkOjppc2Zpbml0ZShfX2xvZ2J3KSkgeworICAgIF9faWxvZ2J3ID0gKGludClfX2xvZ2J3OworICAgIF9fYyA9IHN0ZDo6c2NhbGJuKF9fYywgLV9faWxvZ2J3KTsKKyAgICBfX2QgPSBzdGQ6OnNjYWxibihfX2QsIC1fX2lsb2didyk7CisgIH0KKyAgZG91YmxlIF9fZGVub20gPSBfX2MgKiBfX2MgKyBfX2QgKiBfX2Q7CisgIGRvdWJsZSBfQ29tcGxleCB6OworICBfX3JlYWxfXyh6KSA9IHN0ZDo6c2NhbGJuKChfX2EgKiBfX2MgKyBfX2IgKiBfX2QpIC8gX19kZW5vbSwgLV9faWxvZ2J3KTsKKyAgX19pbWFnX18oeikgPSBzdGQ6OnNjYWxibigoX19iICogX19jIC0gX19hICogX19kKSAvIF9fZGVub20sIC1fX2lsb2didyk7CisgIGlmIChzdGQ6OmlzbmFuKF9fcmVhbF9fKHopKSAmJiBzdGQ6OmlzbmFuKF9faW1hZ19fKHopKSkgeworICAgIGlmICgoX19kZW5vbSA9PSAwLjApICYmICghc3RkOjppc25hbihfX2EpIHx8ICFzdGQ6OmlzbmFuKF9fYikpKSB7CisgICAgICBfX3JlYWxfXyh6KSA9IHN0ZDo6Y29weXNpZ24oX19idWlsdGluX2h1Z2VfdmFsZigpLCBfX2MpICogX19hOworICAgICAgX19pbWFnX18oeikgPSBzdGQ6OmNvcHlzaWduKF9fYnVpbHRpbl9odWdlX3ZhbGYoKSwgX19jKSAqIF9fYjsKKyAgICB9IGVsc2UgaWYgKChzdGQ6OmlzaW5mKF9fYSkgfHwgc3RkOjppc2luZihfX2IpKSAmJiBzdGQ6OmlzZmluaXRlKF9fYykgJiYKKyAgICAgICAgICAgICAgIHN0ZDo6aXNmaW5pdGUoX19kKSkgeworICAgICAgX19hID0gc3RkOjpjb3B5c2lnbihzdGQ6OmlzaW5mKF9fYSkgPyAxLjAgOiAwLjAsIF9fYSk7CisgICAgICBfX2IgPSBzdGQ6OmNvcHlzaWduKHN0ZDo6aXNpbmYoX19iKSA/IDEuMCA6IDAuMCwgX19iKTsKKyAgICAgIF9fcmVhbF9fKHopID0gX19idWlsdGluX2h1Z2VfdmFsZigpICogKF9fYSAqIF9fYyArIF9fYiAqIF9fZCk7CisgICAgICBfX2ltYWdfXyh6KSA9IF9fYnVpbHRpbl9odWdlX3ZhbGYoKSAqIChfX2IgKiBfX2MgLSBfX2EgKiBfX2QpOworICAgIH0gZWxzZSBpZiAoc3RkOjppc2luZihfX2xvZ2J3KSAmJiBfX2xvZ2J3ID4gMC4wICYmIHN0ZDo6aXNmaW5pdGUoX19hKSAmJgorICAgICAgICAgICAgICAgc3RkOjppc2Zpbml0ZShfX2IpKSB7CisgICAgICBfX2MgPSBzdGQ6OmNvcHlzaWduKHN0ZDo6aXNpbmYoX19jKSA/IDEuMCA6IDAuMCwgX19jKTsKKyAgICAgIF9fZCA9IHN0ZDo6Y29weXNpZ24oc3RkOjppc2luZihfX2QpID8gMS4wIDogMC4wLCBfX2QpOworICAgICAgX19yZWFsX18oeikgPSAwLjAgKiAoX19hICogX19jICsgX19iICogX19kKTsKKyAgICAgIF9faW1hZ19fKHopID0gMC4wICogKF9fYiAqIF9fYyAtIF9fYSAqIF9fZCk7CisgICAgfQorICB9CisgIHJldHVybiB6OworfQorCitleHRlcm4gIkMiIGlubGluZSBfX2RldmljZV9fIGZsb2F0IF9Db21wbGV4IF9fZGl2c2MzKGZsb2F0IF9fYSwgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBfX2MsIGZsb2F0IF9fZCkgeworICBpbnQgX19pbG9nYncgPSAwOworICBmbG9hdCBfX2xvZ2J3ID0gc3RkOjpsb2diKG1heChzdGQ6OmFicyhfX2MpLCBzdGQ6OmFicyhfX2QpKSk7CisgIGlmIChzdGQ6OmlzZmluaXRlKF9fbG9nYncpKSB7CisgICAgX19pbG9nYncgPSAoaW50KV9fbG9nYnc7CisgICAgX19jID0gc3RkOjpzY2FsYm4oX19jLCAtX19pbG9nYncpOworICAgIF9fZCA9IHN0ZDo6c2NhbGJuKF9fZCwgLV9faWxvZ2J3KTsKKyAgfQorICBmbG9hdCBfX2Rlbm9tID0gX19jICogX19jICsgX19kICogX19kOworICBmbG9hdCBfQ29tcGxleCB6OworICBfX3JlYWxfXyh6KSA9IHN0ZDo6c2NhbGJuKChfX2EgKiBfX2MgKyBfX2IgKiBfX2QpIC8gX19kZW5vbSwgLV9faWxvZ2J3KTsKKyAgX19pbWFnX18oeikgPSBzdGQ6OnNjYWxibigoX19iICogX19jIC0gX19hICogX19kKSAvIF9fZGVub20sIC1fX2lsb2didyk7CisgIGlmIChzdGQ6OmlzbmFuKF9fcmVhbF9fKHopKSAmJiBzdGQ6OmlzbmFuKF9faW1hZ19fKHopKSkgeworICAgIGlmICgoX19kZW5vbSA9PSAwKSAmJiAoIXN0ZDo6aXNuYW4oX19hKSB8fCAhc3RkOjppc25hbihfX2IpKSkgeworICAgICAgX19yZWFsX18oeikgPSBzdGQ6OmNvcHlzaWduKF9fYnVpbHRpbl9odWdlX3ZhbGYoKSwgX19jKSAqIF9fYTsKKyAgICAgIF9faW1hZ19fKHopID0gc3RkOjpjb3B5c2lnbihfX2J1aWx0aW5faHVnZV92YWxmKCksIF9fYykgKiBfX2I7CisgICAgfSBlbHNlIGlmICgoc3RkOjppc2luZihfX2EpIHx8IHN0ZDo6aXNpbmYoX19iKSkgJiYgc3RkOjppc2Zpbml0ZShfX2MpICYmCisgICAgICAgICAgICAgICBzdGQ6OmlzZmluaXRlKF9fZCkpIHsKKyAgICAgIF9fYSA9IHN0ZDo6Y29weXNpZ24oc3RkOjppc2luZihfX2EpID8gMSA6IDAsIF9fYSk7CisgICAgICBfX2IgPSBzdGQ6OmNvcHlzaWduKHN0ZDo6aXNpbmYoX19iKSA/IDEgOiAwLCBfX2IpOworICAgICAgX19yZWFsX18oeikgPSBfX2J1aWx0aW5faHVnZV92YWxmKCkgKiAoX19hICogX19jICsgX19iICogX19kKTsKKyAgICAgIF9faW1hZ19fKHopID0gX19idWlsdGluX2h1Z2VfdmFsZigpICogKF9fYiAqIF9fYyAtIF9fYSAqIF9fZCk7CisgICAgfSBlbHNlIGlmIChzdGQ6OmlzaW5mKF9fbG9nYncpICYmIF9fbG9nYncgPiAwICYmIHN0ZDo6aXNmaW5pdGUoX19hKSAmJgorICAgICAgICAgICAgICAgc3RkOjppc2Zpbml0ZShfX2IpKSB7CisgICAgICBfX2MgPSBzdGQ6OmNvcHlzaWduKHN0ZDo6aXNpbmYoX19jKSA/IDEgOiAwLCBfX2MpOworICAgICAgX19kID0gc3RkOjpjb3B5c2lnbihzdGQ6OmlzaW5mKF9fZCkgPyAxIDogMCwgX19kKTsKKyAgICAgIF9fcmVhbF9fKHopID0gMCAqIChfX2EgKiBfX2MgKyBfX2IgKiBfX2QpOworICAgICAgX19pbWFnX18oeikgPSAwICogKF9fYiAqIF9fYyAtIF9fYSAqIF9fZCk7CisgICAgfQorICB9CisgIHJldHVybiB6OworfQorCisjZW5kaWYgLy8gX19DTEFOR19DVURBX0NPTVBMRVhfQlVJTFRJTlMKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvX19jbGFuZ19jdWRhX2ludHJpbnNpY3MuaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvX19jbGFuZ19jdWRhX2ludHJpbnNpY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGY0MWZhCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9fX2NsYW5nX2N1ZGFfaW50cmluc2ljcy5oCkBAIC0wLDAgKzEsMzIyIEBACisvKj09PS0tLSBfX2NsYW5nX2N1ZGFfaW50cmluc2ljcy5oIC0gRGV2aWNlLXNpZGUgQ1VEQSBpbnRyaW5zaWMgd3JhcHBlcnMgLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworI2lmbmRlZiBfX0NMQU5HX0NVREFfSU5UUklOU0lDU19IX18KKyNkZWZpbmUgX19DTEFOR19DVURBX0lOVFJJTlNJQ1NfSF9fCisjaWZuZGVmIF9fQ1VEQV9fCisjZXJyb3IgIlRoaXMgZmlsZSBpcyBmb3IgQ1VEQSBjb21waWxhdGlvbiBvbmx5LiIKKyNlbmRpZgorCisvLyBzbV8zMCBpbnRyaW5zaWNzOiBfX3NoZmxfe3VwLGRvd24seG9yfS4KKworI2RlZmluZSBfX1NNXzMwX0lOVFJJTlNJQ1NfSF9fCisjZGVmaW5lIF9fU01fMzBfSU5UUklOU0lDU19IUFBfXworCisjaWYgIWRlZmluZWQoX19DVURBX0FSQ0hfXykgfHwgX19DVURBX0FSQ0hfXyA+PSAzMDAKKworI3ByYWdtYSBwdXNoX21hY3JvKCJfX01BS0VfU0hVRkZMRVMiKQorI2RlZmluZSBfX01BS0VfU0hVRkZMRVMoX19Gbk5hbWUsIF9fSW50SW50cmluc2ljLCBfX0Zsb2F0SW50cmluc2ljLCBfX01hc2spICAgIFwKKyAgaW5saW5lIF9fZGV2aWNlX18gaW50IF9fRm5OYW1lKGludCBfX2luLCBpbnQgX19vZmZzZXQsICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX193aWR0aCA9IHdhcnBTaXplKSB7ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiBfX0ludEludHJpbnNpYyhfX2luLCBfX29mZnNldCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh3YXJwU2l6ZSAtIF9fd2lkdGgpIDw8IDgpIHwgKF9fTWFzaykpOyAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpbmxpbmUgX19kZXZpY2VfXyBmbG9hdCBfX0ZuTmFtZShmbG9hdCBfX2luLCBpbnQgX19vZmZzZXQsICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fd2lkdGggPSB3YXJwU2l6ZSkgeyAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIF9fRmxvYXRJbnRyaW5zaWMoX19pbiwgX19vZmZzZXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgod2FycFNpemUgLSBfX3dpZHRoKSA8PCA4KSB8IChfX01hc2spKTsgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlubGluZSBfX2RldmljZV9fIHVuc2lnbmVkIGludCBfX0ZuTmFtZSh1bnNpZ25lZCBpbnQgX19pbiwgaW50IF9fb2Zmc2V0LCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fd2lkdGggPSB3YXJwU2l6ZSkgeyAgICAgICAgICAgIFwKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIDo6X19Gbk5hbWUoc3RhdGljX2Nhc3Q8aW50PihfX2luKSwgX19vZmZzZXQsIF9fd2lkdGgpKTsgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaW5saW5lIF9fZGV2aWNlX18gbG9uZyBsb25nIF9fRm5OYW1lKGxvbmcgbG9uZyBfX2luLCBpbnQgX19vZmZzZXQsICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX193aWR0aCA9IHdhcnBTaXplKSB7ICAgICAgICAgICAgICAgXAorICAgIHN0cnVjdCBfX0JpdHMgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGludCBfX2EsIF9fYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9TdGF0aWNfYXNzZXJ0KHNpemVvZihfX2luKSA9PSBzaXplb2YoX19CaXRzKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfU3RhdGljX2Fzc2VydChzaXplb2YoX19CaXRzKSA9PSAyICogc2l6ZW9mKGludCkpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19CaXRzIF9fdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1lbWNweSgmX19pbiwgJl9fdG1wLCBzaXplb2YoX19pbikpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX3RtcC5fX2EgPSA6Ol9fRm5OYW1lKF9fdG1wLl9fYSwgX19vZmZzZXQsIF9fd2lkdGgpOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX190bXAuX19iID0gOjpfX0ZuTmFtZShfX3RtcC5fX2IsIF9fb2Zmc2V0LCBfX3dpZHRoKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxvbmcgbG9uZyBfX291dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtZW1jcHkoJl9fb3V0LCAmX190bXAsIHNpemVvZihfX3RtcCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIF9fb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaW5saW5lIF9fZGV2aWNlX18gdW5zaWduZWQgbG9uZyBsb25nIF9fRm5OYW1lKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX19pbiwgaW50IF9fb2Zmc2V0LCBpbnQgX193aWR0aCA9IHdhcnBTaXplKSB7ICAgICAgICAgXAorICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgOjpfX0ZuTmFtZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KF9faW4pLCBfX29mZnNldCwgX193aWR0aCkpOyBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpbmxpbmUgX19kZXZpY2VfXyBkb3VibGUgX19Gbk5hbWUoZG91YmxlIF9faW4sIGludCBfX29mZnNldCwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3dpZHRoID0gd2FycFNpemUpIHsgICAgICAgICAgICAgICAgICBcCisgICAgbG9uZyBsb25nIF9fdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9TdGF0aWNfYXNzZXJ0KHNpemVvZihfX3RtcCkgPT0gc2l6ZW9mKF9faW4pKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtZW1jcHkoJl9fdG1wLCAmX19pbiwgc2l6ZW9mKF9faW4pKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX190bXAgPSA6Ol9fRm5OYW1lKF9fdG1wLCBfX29mZnNldCwgX193aWR0aCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvdWJsZSBfX291dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtZW1jcHkoJl9fb3V0LCAmX190bXAsIHNpemVvZihfX291dCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIF9fb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKK19fTUFLRV9TSFVGRkxFUyhfX3NoZmwsIF9fbnZ2bV9zaGZsX2lkeF9pMzIsIF9fbnZ2bV9zaGZsX2lkeF9mMzIsIDB4MWYpOworLy8gV2UgdXNlIDAgcmF0aGVyIHRoYW4gMzEgYXMgb3VyIG1hc2ssIGJlY2F1c2Ugc2hmbC51cCBhcHBsaWVzIHRvIGxhbmVzID49CisvLyBtYXhMYW5lLgorX19NQUtFX1NIVUZGTEVTKF9fc2hmbF91cCwgX19udnZtX3NoZmxfdXBfaTMyLCBfX252dm1fc2hmbF91cF9mMzIsIDApOworX19NQUtFX1NIVUZGTEVTKF9fc2hmbF9kb3duLCBfX252dm1fc2hmbF9kb3duX2kzMiwgX19udnZtX3NoZmxfZG93bl9mMzIsIDB4MWYpOworX19NQUtFX1NIVUZGTEVTKF9fc2hmbF94b3IsIF9fbnZ2bV9zaGZsX2JmbHlfaTMyLCBfX252dm1fc2hmbF9iZmx5X2YzMiwgMHgxZik7CisKKyNwcmFnbWEgcG9wX21hY3JvKCJfX01BS0VfU0hVRkZMRVMiKQorCisjZW5kaWYgLy8gIWRlZmluZWQoX19DVURBX0FSQ0hfXykgfHwgX19DVURBX0FSQ0hfXyA+PSAzMDAKKworLy8gc21fMzIgaW50cmluc2ljczogX19sZGcgYW5kIF9fZnVubmVsc2hpZnRfe2wsbGMscixyY30uCisKKy8vIFByZXZlbnQgdGhlIHZhbmlsbGEgc21fMzIgaW50cmluc2ljcyBoZWFkZXIgZnJvbSBiZWluZyBpbmNsdWRlZC4KKyNkZWZpbmUgX19TTV8zMl9JTlRSSU5TSUNTX0hfXworI2RlZmluZSBfX1NNXzMyX0lOVFJJTlNJQ1NfSFBQX18KKworI2lmICFkZWZpbmVkKF9fQ1VEQV9BUkNIX18pIHx8IF9fQ1VEQV9BUkNIX18gPj0gMzIwCisKK2lubGluZSBfX2RldmljZV9fIGNoYXIgX19sZGcoY29uc3QgY2hhciAqcHRyKSB7IHJldHVybiBfX252dm1fbGRnX2MocHRyKTsgfQoraW5saW5lIF9fZGV2aWNlX18gc2hvcnQgX19sZGcoY29uc3Qgc2hvcnQgKnB0cikgeyByZXR1cm4gX19udnZtX2xkZ19zKHB0cik7IH0KK2lubGluZSBfX2RldmljZV9fIGludCBfX2xkZyhjb25zdCBpbnQgKnB0cikgeyByZXR1cm4gX19udnZtX2xkZ19pKHB0cik7IH0KK2lubGluZSBfX2RldmljZV9fIGxvbmcgX19sZGcoY29uc3QgbG9uZyAqcHRyKSB7IHJldHVybiBfX252dm1fbGRnX2wocHRyKTsgfQoraW5saW5lIF9fZGV2aWNlX18gbG9uZyBsb25nIF9fbGRnKGNvbnN0IGxvbmcgbG9uZyAqcHRyKSB7CisgIHJldHVybiBfX252dm1fbGRnX2xsKHB0cik7Cit9CitpbmxpbmUgX19kZXZpY2VfXyB1bnNpZ25lZCBjaGFyIF9fbGRnKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0cikgeworICByZXR1cm4gX19udnZtX2xkZ191YyhwdHIpOworfQoraW5saW5lIF9fZGV2aWNlX18gdW5zaWduZWQgc2hvcnQgX19sZGcoY29uc3QgdW5zaWduZWQgc2hvcnQgKnB0cikgeworICByZXR1cm4gX19udnZtX2xkZ191cyhwdHIpOworfQoraW5saW5lIF9fZGV2aWNlX18gdW5zaWduZWQgaW50IF9fbGRnKGNvbnN0IHVuc2lnbmVkIGludCAqcHRyKSB7CisgIHJldHVybiBfX252dm1fbGRnX3VpKHB0cik7Cit9CitpbmxpbmUgX19kZXZpY2VfXyB1bnNpZ25lZCBsb25nIF9fbGRnKGNvbnN0IHVuc2lnbmVkIGxvbmcgKnB0cikgeworICByZXR1cm4gX19udnZtX2xkZ191bChwdHIpOworfQoraW5saW5lIF9fZGV2aWNlX18gdW5zaWduZWQgbG9uZyBsb25nIF9fbGRnKGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyAqcHRyKSB7CisgIHJldHVybiBfX252dm1fbGRnX3VsbChwdHIpOworfQoraW5saW5lIF9fZGV2aWNlX18gZmxvYXQgX19sZGcoY29uc3QgZmxvYXQgKnB0cikgeyByZXR1cm4gX19udnZtX2xkZ19mKHB0cik7IH0KK2lubGluZSBfX2RldmljZV9fIGRvdWJsZSBfX2xkZyhjb25zdCBkb3VibGUgKnB0cikgeyByZXR1cm4gX19udnZtX2xkZ19kKHB0cik7IH0KKworaW5saW5lIF9fZGV2aWNlX18gY2hhcjIgX19sZGcoY29uc3QgY2hhcjIgKnB0cikgeworICB0eXBlZGVmIGNoYXIgYzIgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDIpKSk7CisgIC8vIFdlIGNhbiBhc3N1bWUgdGhhdCBwdHIgaXMgYWxpZ25lZCBhdCBsZWFzdCB0byBjaGFyMidzIGFsaWdubWVudCwgYnV0IHRoZQorICAvLyBsb2FkIHdpbGwgYXNzdW1lIHRoYXQgcHRyIGlzIGFsaWduZWQgdG8gY2hhcjIncyBhbGlnbm1lbnQuICBUaGlzIGlzIG9ubHkKKyAgLy8gc2FmZSBpZiBhbGlnbm9mKGMyKSA8PSBhbGlnbm9mKGNoYXIyKS4KKyAgYzIgcnYgPSBfX252dm1fbGRnX2MyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgYzIgKj4ocHRyKSk7CisgIGNoYXIyIHJldDsKKyAgcmV0LnggPSBydlswXTsKKyAgcmV0LnkgPSBydlsxXTsKKyAgcmV0dXJuIHJldDsKK30KK2lubGluZSBfX2RldmljZV9fIGNoYXI0IF9fbGRnKGNvbnN0IGNoYXI0ICpwdHIpIHsKKyAgdHlwZWRlZiBjaGFyIGM0IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg0KSkpOworICBjNCBydiA9IF9fbnZ2bV9sZGdfYzQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjNCAqPihwdHIpKTsKKyAgY2hhcjQgcmV0OworICByZXQueCA9IHJ2WzBdOworICByZXQueSA9IHJ2WzFdOworICByZXQueiA9IHJ2WzJdOworICByZXQudyA9IHJ2WzNdOworICByZXR1cm4gcmV0OworfQoraW5saW5lIF9fZGV2aWNlX18gc2hvcnQyIF9fbGRnKGNvbnN0IHNob3J0MiAqcHRyKSB7CisgIHR5cGVkZWYgc2hvcnQgczIgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDIpKSk7CisgIHMyIHJ2ID0gX19udnZtX2xkZ19zMihyZWludGVycHJldF9jYXN0PGNvbnN0IHMyICo+KHB0cikpOworICBzaG9ydDIgcmV0OworICByZXQueCA9IHJ2WzBdOworICByZXQueSA9IHJ2WzFdOworICByZXR1cm4gcmV0OworfQoraW5saW5lIF9fZGV2aWNlX18gc2hvcnQ0IF9fbGRnKGNvbnN0IHNob3J0NCAqcHRyKSB7CisgIHR5cGVkZWYgc2hvcnQgczQgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDQpKSk7CisgIHM0IHJ2ID0gX19udnZtX2xkZ19zNChyZWludGVycHJldF9jYXN0PGNvbnN0IHM0ICo+KHB0cikpOworICBzaG9ydDQgcmV0OworICByZXQueCA9IHJ2WzBdOworICByZXQueSA9IHJ2WzFdOworICByZXQueiA9IHJ2WzJdOworICByZXQudyA9IHJ2WzNdOworICByZXR1cm4gcmV0OworfQoraW5saW5lIF9fZGV2aWNlX18gaW50MiBfX2xkZyhjb25zdCBpbnQyICpwdHIpIHsKKyAgdHlwZWRlZiBpbnQgaTIgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDIpKSk7CisgIGkyIHJ2ID0gX19udnZtX2xkZ19pMihyZWludGVycHJldF9jYXN0PGNvbnN0IGkyICo+KHB0cikpOworICBpbnQyIHJldDsKKyAgcmV0LnggPSBydlswXTsKKyAgcmV0LnkgPSBydlsxXTsKKyAgcmV0dXJuIHJldDsKK30KK2lubGluZSBfX2RldmljZV9fIGludDQgX19sZGcoY29uc3QgaW50NCAqcHRyKSB7CisgIHR5cGVkZWYgaW50IGk0IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg0KSkpOworICBpNCBydiA9IF9fbnZ2bV9sZGdfaTQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpNCAqPihwdHIpKTsKKyAgaW50NCByZXQ7CisgIHJldC54ID0gcnZbMF07CisgIHJldC55ID0gcnZbMV07CisgIHJldC56ID0gcnZbMl07CisgIHJldC53ID0gcnZbM107CisgIHJldHVybiByZXQ7Cit9CitpbmxpbmUgX19kZXZpY2VfXyBsb25nbG9uZzIgX19sZGcoY29uc3QgbG9uZ2xvbmcyICpwdHIpIHsKKyAgdHlwZWRlZiBsb25nIGxvbmcgbGwyIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgyKSkpOworICBsbDIgcnYgPSBfX252dm1fbGRnX2xsMihyZWludGVycHJldF9jYXN0PGNvbnN0IGxsMiAqPihwdHIpKTsKKyAgbG9uZ2xvbmcyIHJldDsKKyAgcmV0LnggPSBydlswXTsKKyAgcmV0LnkgPSBydlsxXTsKKyAgcmV0dXJuIHJldDsKK30KKworaW5saW5lIF9fZGV2aWNlX18gdWNoYXIyIF9fbGRnKGNvbnN0IHVjaGFyMiAqcHRyKSB7CisgIHR5cGVkZWYgdW5zaWduZWQgY2hhciB1YzIgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDIpKSk7CisgIHVjMiBydiA9IF9fbnZ2bV9sZGdfdWMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWMyICo+KHB0cikpOworICB1Y2hhcjIgcmV0OworICByZXQueCA9IHJ2WzBdOworICByZXQueSA9IHJ2WzFdOworICByZXR1cm4gcmV0OworfQoraW5saW5lIF9fZGV2aWNlX18gdWNoYXI0IF9fbGRnKGNvbnN0IHVjaGFyNCAqcHRyKSB7CisgIHR5cGVkZWYgdW5zaWduZWQgY2hhciB1YzQgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDQpKSk7CisgIHVjNCBydiA9IF9fbnZ2bV9sZGdfdWM0KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWM0ICo+KHB0cikpOworICB1Y2hhcjQgcmV0OworICByZXQueCA9IHJ2WzBdOworICByZXQueSA9IHJ2WzFdOworICByZXQueiA9IHJ2WzJdOworICByZXQudyA9IHJ2WzNdOworICByZXR1cm4gcmV0OworfQoraW5saW5lIF9fZGV2aWNlX18gdXNob3J0MiBfX2xkZyhjb25zdCB1c2hvcnQyICpwdHIpIHsKKyAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1czIgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDIpKSk7CisgIHVzMiBydiA9IF9fbnZ2bV9sZGdfdXMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdXMyICo+KHB0cikpOworICB1c2hvcnQyIHJldDsKKyAgcmV0LnggPSBydlswXTsKKyAgcmV0LnkgPSBydlsxXTsKKyAgcmV0dXJuIHJldDsKK30KK2lubGluZSBfX2RldmljZV9fIHVzaG9ydDQgX19sZGcoY29uc3QgdXNob3J0NCAqcHRyKSB7CisgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXM0IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg0KSkpOworICB1czQgcnYgPSBfX252dm1fbGRnX3VzNChyZWludGVycHJldF9jYXN0PGNvbnN0IHVzNCAqPihwdHIpKTsKKyAgdXNob3J0NCByZXQ7CisgIHJldC54ID0gcnZbMF07CisgIHJldC55ID0gcnZbMV07CisgIHJldC56ID0gcnZbMl07CisgIHJldC53ID0gcnZbM107CisgIHJldHVybiByZXQ7Cit9CitpbmxpbmUgX19kZXZpY2VfXyB1aW50MiBfX2xkZyhjb25zdCB1aW50MiAqcHRyKSB7CisgIHR5cGVkZWYgdW5zaWduZWQgaW50IHVpMiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMikpKTsKKyAgdWkyIHJ2ID0gX19udnZtX2xkZ191aTIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aTIgKj4ocHRyKSk7CisgIHVpbnQyIHJldDsKKyAgcmV0LnggPSBydlswXTsKKyAgcmV0LnkgPSBydlsxXTsKKyAgcmV0dXJuIHJldDsKK30KK2lubGluZSBfX2RldmljZV9fIHVpbnQ0IF9fbGRnKGNvbnN0IHVpbnQ0ICpwdHIpIHsKKyAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWk0IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg0KSkpOworICB1aTQgcnYgPSBfX252dm1fbGRnX3VpNChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpNCAqPihwdHIpKTsKKyAgdWludDQgcmV0OworICByZXQueCA9IHJ2WzBdOworICByZXQueSA9IHJ2WzFdOworICByZXQueiA9IHJ2WzJdOworICByZXQudyA9IHJ2WzNdOworICByZXR1cm4gcmV0OworfQoraW5saW5lIF9fZGV2aWNlX18gdWxvbmdsb25nMiBfX2xkZyhjb25zdCB1bG9uZ2xvbmcyICpwdHIpIHsKKyAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxsMiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMikpKTsKKyAgdWxsMiBydiA9IF9fbnZ2bV9sZGdfdWxsMihyZWludGVycHJldF9jYXN0PGNvbnN0IHVsbDIgKj4ocHRyKSk7CisgIHVsb25nbG9uZzIgcmV0OworICByZXQueCA9IHJ2WzBdOworICByZXQueSA9IHJ2WzFdOworICByZXR1cm4gcmV0OworfQorCitpbmxpbmUgX19kZXZpY2VfXyBmbG9hdDIgX19sZGcoY29uc3QgZmxvYXQyICpwdHIpIHsKKyAgdHlwZWRlZiBmbG9hdCBmMiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMikpKTsKKyAgZjIgcnYgPSBfX252dm1fbGRnX2YyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZjIgKj4ocHRyKSk7CisgIGZsb2F0MiByZXQ7CisgIHJldC54ID0gcnZbMF07CisgIHJldC55ID0gcnZbMV07CisgIHJldHVybiByZXQ7Cit9CitpbmxpbmUgX19kZXZpY2VfXyBmbG9hdDQgX19sZGcoY29uc3QgZmxvYXQ0ICpwdHIpIHsKKyAgdHlwZWRlZiBmbG9hdCBmNCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoNCkpKTsKKyAgZjQgcnYgPSBfX252dm1fbGRnX2Y0KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZjQgKj4ocHRyKSk7CisgIGZsb2F0NCByZXQ7CisgIHJldC54ID0gcnZbMF07CisgIHJldC55ID0gcnZbMV07CisgIHJldC56ID0gcnZbMl07CisgIHJldC53ID0gcnZbM107CisgIHJldHVybiByZXQ7Cit9CitpbmxpbmUgX19kZXZpY2VfXyBkb3VibGUyIF9fbGRnKGNvbnN0IGRvdWJsZTIgKnB0cikgeworICB0eXBlZGVmIGRvdWJsZSBkMiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMikpKTsKKyAgZDIgcnYgPSBfX252dm1fbGRnX2QyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZDIgKj4ocHRyKSk7CisgIGRvdWJsZTIgcmV0OworICByZXQueCA9IHJ2WzBdOworICByZXQueSA9IHJ2WzFdOworICByZXR1cm4gcmV0OworfQorCisvLyBUT0RPOiBJbXBsZW1lbnQgdGhlc2UgYXMgaW50cmluc2ljcywgc28gdGhlIGJhY2tlbmQgY2FuIHdvcmsgaXRzIG1hZ2ljIG9uCisvLyB0aGVzZS4gIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGltcGxlbWVudCB0aGVzZSBhcyBwbGFpbiBDIGFuZCB0cnkgdG8gZ2V0CisvLyBsbHZtIHRvIHJlY29nbml6ZSB0aGUgcmVsZXZhbnQgcGF0dGVybnMuCitpbmxpbmUgX19kZXZpY2VfXyB1bnNpZ25lZCBfX2Z1bm5lbHNoaWZ0X2wodW5zaWduZWQgbG93MzIsIHVuc2lnbmVkIGhpZ2gzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdFdpZHRoKSB7CisgIHVuc2lnbmVkIHJlc3VsdDsKKyAgYXNtKCJzaGYubC53cmFwLmIzMiAlMCwgJTEsICUyLCAlMzsiCisgICAgICA6ICI9ciIocmVzdWx0KQorICAgICAgOiAiciIobG93MzIpLCAiciIoaGlnaDMyKSwgInIiKHNoaWZ0V2lkdGgpKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KK2lubGluZSBfX2RldmljZV9fIHVuc2lnbmVkIF9fZnVubmVsc2hpZnRfbGModW5zaWduZWQgbG93MzIsIHVuc2lnbmVkIGhpZ2gzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hpZnRXaWR0aCkgeworICB1bnNpZ25lZCByZXN1bHQ7CisgIGFzbSgic2hmLmwuY2xhbXAuYjMyICUwLCAlMSwgJTIsICUzOyIKKyAgICAgIDogIj1yIihyZXN1bHQpCisgICAgICA6ICJyIihsb3czMiksICJyIihoaWdoMzIpLCAiciIoc2hpZnRXaWR0aCkpOworICByZXR1cm4gcmVzdWx0OworfQoraW5saW5lIF9fZGV2aWNlX18gdW5zaWduZWQgX19mdW5uZWxzaGlmdF9yKHVuc2lnbmVkIGxvdzMyLCB1bnNpZ25lZCBoaWdoMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hpZnRXaWR0aCkgeworICB1bnNpZ25lZCByZXN1bHQ7CisgIGFzbSgic2hmLnIud3JhcC5iMzIgJTAsICUxLCAlMiwgJTM7IgorICAgICAgOiAiPXIiKHJlc3VsdCkKKyAgICAgIDogInIiKGxvdzMyKSwgInIiKGhpZ2gzMiksICJyIihzaGlmdFdpZHRoKSk7CisgIHJldHVybiByZXN1bHQ7Cit9CitpbmxpbmUgX19kZXZpY2VfXyB1bnNpZ25lZCBfX2Z1bm5lbHNoaWZ0X3JjKHVuc2lnbmVkIGxvdzMyLCB1bnNpZ25lZCBoaWdoMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0V2lkdGgpIHsKKyAgdW5zaWduZWQgcmV0OworICBhc20oInNoZi5yLmNsYW1wLmIzMiAlMCwgJTEsICUyLCAlMzsiCisgICAgICA6ICI9ciIocmV0KQorICAgICAgOiAiciIobG93MzIpLCAiciIoaGlnaDMyKSwgInIiKHNoaWZ0V2lkdGgpKTsKKyAgcmV0dXJuIHJldDsKK30KKworI2VuZGlmIC8vICFkZWZpbmVkKF9fQ1VEQV9BUkNIX18pIHx8IF9fQ1VEQV9BUkNIX18gPj0gMzIwCisKKyNlbmRpZiAvLyBkZWZpbmVkKF9fQ0xBTkdfQ1VEQV9JTlRSSU5TSUNTX0hfXykKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvX19jbGFuZ19jdWRhX21hdGhfZm9yd2FyZF9kZWNsYXJlcy5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9fX2NsYW5nX2N1ZGFfbWF0aF9mb3J3YXJkX2RlY2xhcmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDljODA1MQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvX19jbGFuZ19jdWRhX21hdGhfZm9yd2FyZF9kZWNsYXJlcy5oCkBAIC0wLDAgKzEsMjg2IEBACisvKj09PS0gX19jbGFuZ19tYXRoX2ZvcndhcmRfZGVjbGFyZXMuaCAtIFByb3RvdHlwZXMgb2YgX19kZXZpY2VfXyBtYXRoIGZucyAtLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKyNpZm5kZWYgX19DTEFOR19fQ1VEQV9NQVRIX0ZPUldBUkRfREVDTEFSRVNfSF9fCisjZGVmaW5lIF9fQ0xBTkdfX0NVREFfTUFUSF9GT1JXQVJEX0RFQ0xBUkVTX0hfXworI2lmbmRlZiBfX0NVREFfXworI2Vycm9yICJUaGlzIGZpbGUgaXMgZm9yIENVREEgY29tcGlsYXRpb24gb25seS4iCisjZW5kaWYKKworLy8gVGhpcyBmaWxlIGZvcndhcmQtZGVjbGFyZXMgb2Ygc29tZSBtYXRoIGZ1bmN0aW9ucyB3ZSAob3IgdGhlIENVREEgaGVhZGVycykKKy8vIHdpbGwgZGVmaW5lIGxhdGVyLiAgV2UgbmVlZCB0byBkbyB0aGlzLCBhbmQgZG8gaXQgYmVmb3JlIGNtYXRoIGlzIGluY2x1ZGVkLAorLy8gYmVjYXVzZSB0aGUgc3RhbmRhcmQgbGlicmFyeSBtYXkgaGF2ZSBjb25zdGV4cHIgbWF0aCBmdW5jdGlvbnMuICBJbiB0aGUKKy8vIGFic2VuY2Ugb2YgYSBwcmlvciBfX2RldmljZV9fIGRlY2wsIHRob3NlIGNvbnN0ZXhwciBmdW5jdGlvbnMgbWF5IGJlY29tZQorLy8gaW1wbGljaXRseSBob3N0K2RldmljZS4gIGhvc3QrZGV2aWNlIGZ1bmN0aW9ucyBjYW4ndCBiZSBvdmVybG9hZGVkLCBzbyB0aGF0CisvLyB3b3VsZCBwcmVjbHVkZSB0aGUgdXNlIG9mIG91ciBvd24gX19kZXZpY2VfXyBvdmVybG9hZHMgZm9yIHRoZXNlIGZ1bmN0aW9ucy4KKworI3ByYWdtYSBwdXNoX21hY3JvKCJfX0RFVklDRV9fIikKKyNkZWZpbmUgX19ERVZJQ0VfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHN0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX2F0dHJpYnV0ZV9fKChkZXZpY2UpKQorCitfX0RFVklDRV9fIGRvdWJsZSBhYnMoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgYWJzKGZsb2F0KTsKK19fREVWSUNFX18gaW50IGFicyhpbnQpOworX19ERVZJQ0VfXyBsb25nIGFicyhsb25nKTsKK19fREVWSUNFX18gbG9uZyBsb25nIGFicyhsb25nIGxvbmcpOworX19ERVZJQ0VfXyBkb3VibGUgYWNvcyhkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBhY29zKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGFjb3NoKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGFjb3NoKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGFzaW4oZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgYXNpbihmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBhc2luaChkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBhc2luaChmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBhdGFuMihkb3VibGUsIGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGF0YW4yKGZsb2F0LCBmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBhdGFuKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGF0YW4oZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgYXRhbmgoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgYXRhbmgoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgY2JydChkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBjYnJ0KGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGNlaWwoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgY2VpbChmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBjb3B5c2lnbihkb3VibGUsIGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGNvcHlzaWduKGZsb2F0LCBmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBjb3MoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgY29zKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGNvc2goZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgY29zaChmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBlcmZjKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGVyZmMoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgZXJmKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGVyZihmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBleHAyKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGV4cDIoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgZXhwKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGV4cChmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBleHBtMShkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBleHBtMShmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBmYWJzKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGZhYnMoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgZmRpbShkb3VibGUsIGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGZkaW0oZmxvYXQsIGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGZsb29yKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGZsb29yKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGZtYShkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgZm1hKGZsb2F0LCBmbG9hdCwgZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgZm1heChkb3VibGUsIGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGZtYXgoZmxvYXQsIGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGZtaW4oZG91YmxlLCBkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBmbWluKGZsb2F0LCBmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBmbW9kKGRvdWJsZSwgZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgZm1vZChmbG9hdCwgZmxvYXQpOworX19ERVZJQ0VfXyBpbnQgZnBjbGFzc2lmeShkb3VibGUpOworX19ERVZJQ0VfXyBpbnQgZnBjbGFzc2lmeShmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBmcmV4cChkb3VibGUsIGludCAqKTsKK19fREVWSUNFX18gZmxvYXQgZnJleHAoZmxvYXQsIGludCAqKTsKK19fREVWSUNFX18gZG91YmxlIGh5cG90KGRvdWJsZSwgZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgaHlwb3QoZmxvYXQsIGZsb2F0KTsKK19fREVWSUNFX18gaW50IGlsb2diKGRvdWJsZSk7CitfX0RFVklDRV9fIGludCBpbG9nYihmbG9hdCk7CitfX0RFVklDRV9fIGJvb2wgaXNmaW5pdGUoZG91YmxlKTsKK19fREVWSUNFX18gYm9vbCBpc2Zpbml0ZShmbG9hdCk7CitfX0RFVklDRV9fIGJvb2wgaXNncmVhdGVyKGRvdWJsZSwgZG91YmxlKTsKK19fREVWSUNFX18gYm9vbCBpc2dyZWF0ZXJlcXVhbChkb3VibGUsIGRvdWJsZSk7CitfX0RFVklDRV9fIGJvb2wgaXNncmVhdGVyZXF1YWwoZmxvYXQsIGZsb2F0KTsKK19fREVWSUNFX18gYm9vbCBpc2dyZWF0ZXIoZmxvYXQsIGZsb2F0KTsKK19fREVWSUNFX18gYm9vbCBpc2luZihkb3VibGUpOworX19ERVZJQ0VfXyBib29sIGlzaW5mKGZsb2F0KTsKK19fREVWSUNFX18gYm9vbCBpc2xlc3MoZG91YmxlLCBkb3VibGUpOworX19ERVZJQ0VfXyBib29sIGlzbGVzc2VxdWFsKGRvdWJsZSwgZG91YmxlKTsKK19fREVWSUNFX18gYm9vbCBpc2xlc3NlcXVhbChmbG9hdCwgZmxvYXQpOworX19ERVZJQ0VfXyBib29sIGlzbGVzcyhmbG9hdCwgZmxvYXQpOworX19ERVZJQ0VfXyBib29sIGlzbGVzc2dyZWF0ZXIoZG91YmxlLCBkb3VibGUpOworX19ERVZJQ0VfXyBib29sIGlzbGVzc2dyZWF0ZXIoZmxvYXQsIGZsb2F0KTsKK19fREVWSUNFX18gYm9vbCBpc25hbihkb3VibGUpOworX19ERVZJQ0VfXyBib29sIGlzbmFuKGZsb2F0KTsKK19fREVWSUNFX18gYm9vbCBpc25vcm1hbChkb3VibGUpOworX19ERVZJQ0VfXyBib29sIGlzbm9ybWFsKGZsb2F0KTsKK19fREVWSUNFX18gYm9vbCBpc3Vub3JkZXJlZChkb3VibGUsIGRvdWJsZSk7CitfX0RFVklDRV9fIGJvb2wgaXN1bm9yZGVyZWQoZmxvYXQsIGZsb2F0KTsKK19fREVWSUNFX18gbG9uZyBsYWJzKGxvbmcpOworX19ERVZJQ0VfXyBkb3VibGUgbGRleHAoZG91YmxlLCBpbnQpOworX19ERVZJQ0VfXyBmbG9hdCBsZGV4cChmbG9hdCwgaW50KTsKK19fREVWSUNFX18gZG91YmxlIGxnYW1tYShkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCBsZ2FtbWEoZmxvYXQpOworX19ERVZJQ0VfXyBsb25nIGxvbmcgbGxhYnMobG9uZyBsb25nKTsKK19fREVWSUNFX18gbG9uZyBsb25nIGxscmludChkb3VibGUpOworX19ERVZJQ0VfXyBsb25nIGxvbmcgbGxyaW50KGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGxvZzEwKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGxvZzEwKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGxvZzFwKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGxvZzFwKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIGxvZzIoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgbG9nMihmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBsb2diKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGxvZ2IoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgbG9nKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IGxvZyhmbG9hdCk7CitfX0RFVklDRV9fIGxvbmcgbHJpbnQoZG91YmxlKTsKK19fREVWSUNFX18gbG9uZyBscmludChmbG9hdCk7CitfX0RFVklDRV9fIGxvbmcgbHJvdW5kKGRvdWJsZSk7CitfX0RFVklDRV9fIGxvbmcgbHJvdW5kKGZsb2F0KTsKK19fREVWSUNFX18gbG9uZyBsb25nIGxscm91bmQoZmxvYXQpOyAvLyBObyBsbHJvdW5kKGRvdWJsZSkuCitfX0RFVklDRV9fIGRvdWJsZSBtb2RmKGRvdWJsZSwgZG91YmxlICopOworX19ERVZJQ0VfXyBmbG9hdCBtb2RmKGZsb2F0LCBmbG9hdCAqKTsKK19fREVWSUNFX18gZG91YmxlIG5hbihjb25zdCBjaGFyICopOworX19ERVZJQ0VfXyBmbG9hdCBuYW5mKGNvbnN0IGNoYXIgKik7CitfX0RFVklDRV9fIGRvdWJsZSBuZWFyYnlpbnQoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgbmVhcmJ5aW50KGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIG5leHRhZnRlcihkb3VibGUsIGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IG5leHRhZnRlcihmbG9hdCwgZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgbmV4dHRvd2FyZChkb3VibGUsIGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IG5leHR0b3dhcmQoZmxvYXQsIGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IG5leHR0b3dhcmRmKGZsb2F0LCBkb3VibGUpOworX19ERVZJQ0VfXyBkb3VibGUgcG93KGRvdWJsZSwgZG91YmxlKTsKK19fREVWSUNFX18gZG91YmxlIHBvdyhkb3VibGUsIGludCk7CitfX0RFVklDRV9fIGZsb2F0IHBvdyhmbG9hdCwgZmxvYXQpOworX19ERVZJQ0VfXyBmbG9hdCBwb3coZmxvYXQsIGludCk7CitfX0RFVklDRV9fIGRvdWJsZSByZW1haW5kZXIoZG91YmxlLCBkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCByZW1haW5kZXIoZmxvYXQsIGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIHJlbXF1byhkb3VibGUsIGRvdWJsZSwgaW50ICopOworX19ERVZJQ0VfXyBmbG9hdCByZW1xdW8oZmxvYXQsIGZsb2F0LCBpbnQgKik7CitfX0RFVklDRV9fIGRvdWJsZSByaW50KGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IHJpbnQoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgcm91bmQoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgcm91bmQoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgc2NhbGJsbihkb3VibGUsIGxvbmcpOworX19ERVZJQ0VfXyBmbG9hdCBzY2FsYmxuKGZsb2F0LCBsb25nKTsKK19fREVWSUNFX18gZG91YmxlIHNjYWxibihkb3VibGUsIGludCk7CitfX0RFVklDRV9fIGZsb2F0IHNjYWxibihmbG9hdCwgaW50KTsKK19fREVWSUNFX18gYm9vbCBzaWduYml0KGRvdWJsZSk7CitfX0RFVklDRV9fIGJvb2wgc2lnbmJpdChmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBzaW4oZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgc2luKGZsb2F0KTsKK19fREVWSUNFX18gZG91YmxlIHNpbmgoZG91YmxlKTsKK19fREVWSUNFX18gZmxvYXQgc2luaChmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSBzcXJ0KGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IHNxcnQoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgdGFuKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IHRhbihmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSB0YW5oKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IHRhbmgoZmxvYXQpOworX19ERVZJQ0VfXyBkb3VibGUgdGdhbW1hKGRvdWJsZSk7CitfX0RFVklDRV9fIGZsb2F0IHRnYW1tYShmbG9hdCk7CitfX0RFVklDRV9fIGRvdWJsZSB0cnVuYyhkb3VibGUpOworX19ERVZJQ0VfXyBmbG9hdCB0cnVuYyhmbG9hdCk7CisKKy8vIFdlIG5lZWQgdG8gZGVmaW5lIHRoZXNlIG92ZXJsb2FkcyBpbiBleGFjdGx5IHRoZSBuYW1lc3BhY2Ugb3VyIHN0YW5kYXJkCisvLyBsaWJyYXJ5IHVzZXMgKGluY2x1ZGluZyB0aGUgcmlnaHQgaW5saW5lIG5hbWVzcGFjZSksIG90aGVyd2lzZSB0aGV5IHdvbid0IGJlCisvLyBwaWNrZWQgdXAgYnkgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IChlLmcuIGZ1bmN0aW9ucyBpbgorLy8gPGNvbXBsZXg+KS4gIFRodXMgdGhlIHVnbGluZXNzIGJlbG93LgorI2lmZGVmIF9MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX1NURAorX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfU1RECisjZWxzZQorbmFtZXNwYWNlIHN0ZCB7CisjaWZkZWYgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisjZW5kaWYKKyNlbmRpZgorCit1c2luZyA6OmFiczsKK3VzaW5nIDo6YWNvczsKK3VzaW5nIDo6YWNvc2g7Cit1c2luZyA6OmFzaW47Cit1c2luZyA6OmFzaW5oOwordXNpbmcgOjphdGFuOwordXNpbmcgOjphdGFuMjsKK3VzaW5nIDo6YXRhbmg7Cit1c2luZyA6OmNicnQ7Cit1c2luZyA6OmNlaWw7Cit1c2luZyA6OmNvcHlzaWduOwordXNpbmcgOjpjb3M7Cit1c2luZyA6OmNvc2g7Cit1c2luZyA6OmVyZjsKK3VzaW5nIDo6ZXJmYzsKK3VzaW5nIDo6ZXhwOwordXNpbmcgOjpleHAyOwordXNpbmcgOjpleHBtMTsKK3VzaW5nIDo6ZmFiczsKK3VzaW5nIDo6ZmRpbTsKK3VzaW5nIDo6Zmxvb3I7Cit1c2luZyA6OmZtYTsKK3VzaW5nIDo6Zm1heDsKK3VzaW5nIDo6Zm1pbjsKK3VzaW5nIDo6Zm1vZDsKK3VzaW5nIDo6ZnBjbGFzc2lmeTsKK3VzaW5nIDo6ZnJleHA7Cit1c2luZyA6Omh5cG90OwordXNpbmcgOjppbG9nYjsKK3VzaW5nIDo6aXNmaW5pdGU7Cit1c2luZyA6OmlzZ3JlYXRlcjsKK3VzaW5nIDo6aXNncmVhdGVyZXF1YWw7Cit1c2luZyA6OmlzaW5mOwordXNpbmcgOjppc2xlc3M7Cit1c2luZyA6OmlzbGVzc2VxdWFsOwordXNpbmcgOjppc2xlc3NncmVhdGVyOwordXNpbmcgOjppc25hbjsKK3VzaW5nIDo6aXNub3JtYWw7Cit1c2luZyA6OmlzdW5vcmRlcmVkOwordXNpbmcgOjpsYWJzOwordXNpbmcgOjpsZGV4cDsKK3VzaW5nIDo6bGdhbW1hOwordXNpbmcgOjpsbGFiczsKK3VzaW5nIDo6bGxyaW50OwordXNpbmcgOjpsb2c7Cit1c2luZyA6OmxvZzEwOwordXNpbmcgOjpsb2cxcDsKK3VzaW5nIDo6bG9nMjsKK3VzaW5nIDo6bG9nYjsKK3VzaW5nIDo6bHJpbnQ7Cit1c2luZyA6Omxyb3VuZDsKK3VzaW5nIDo6bGxyb3VuZDsKK3VzaW5nIDo6bW9kZjsKK3VzaW5nIDo6bmFuOwordXNpbmcgOjpuYW5mOwordXNpbmcgOjpuZWFyYnlpbnQ7Cit1c2luZyA6Om5leHRhZnRlcjsKK3VzaW5nIDo6bmV4dHRvd2FyZDsKK3VzaW5nIDo6cG93OwordXNpbmcgOjpyZW1haW5kZXI7Cit1c2luZyA6OnJlbXF1bzsKK3VzaW5nIDo6cmludDsKK3VzaW5nIDo6cm91bmQ7Cit1c2luZyA6OnNjYWxibG47Cit1c2luZyA6OnNjYWxibjsKK3VzaW5nIDo6c2lnbmJpdDsKK3VzaW5nIDo6c2luOwordXNpbmcgOjpzaW5oOwordXNpbmcgOjpzcXJ0OwordXNpbmcgOjp0YW47Cit1c2luZyA6OnRhbmg7Cit1c2luZyA6OnRnYW1tYTsKK3VzaW5nIDo6dHJ1bmM7CisKKyNpZmRlZiBfTElCQ1BQX0VORF9OQU1FU1BBQ0VfU1RECitfTElCQ1BQX0VORF9OQU1FU1BBQ0VfU1RECisjZWxzZQorI2lmZGVmIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyNlbmRpZgorfSAvLyBuYW1lc3BhY2Ugc3RkCisjZW5kaWYKKworI3ByYWdtYSBwb3BfbWFjcm8oIl9fREVWSUNFX18iKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvX19jbGFuZ19jdWRhX3J1bnRpbWVfd3JhcHBlci5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9fX2NsYW5nX2N1ZGFfcnVudGltZV93cmFwcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxMWE0YwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvX19jbGFuZ19jdWRhX3J1bnRpbWVfd3JhcHBlci5oCkBAIC0wLDAgKzEsMzMzIEBACisvKj09PS0tLS0gX19jbGFuZ19jdWRhX3J1bnRpbWVfd3JhcHBlci5oIC0gQ1VEQSBydW50aW1lIHN1cHBvcnQgLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworLyoKKyAqIFdBUk5JTkc6IFRoaXMgaGVhZGVyIGlzIGludGVuZGVkIHRvIGJlIGRpcmVjdGx5IC1pbmNsdWRlJ2QgYnkKKyAqIHRoZSBjb21waWxlciBhbmQgaXMgbm90IHN1cHBvc2VkIHRvIGJlIGluY2x1ZGVkIGJ5IHVzZXJzLgorICoKKyAqIENVREEgaGVhZGVycyBhcmUgaW1wbGVtZW50ZWQgaW4gYSB3YXkgdGhhdCBjdXJyZW50bHkgbWFrZXMgaXQKKyAqIGltcG9zc2libGUgZm9yIHVzZXIgY29kZSB0byAjaW5jbHVkZSBkaXJlY3RseSB3aGVuIGNvbXBpbGluZyB3aXRoCisgKiBDbGFuZy4gVGhleSBwcmVzZW50IGRpZmZlcmVudCB2aWV3IG9mIENVREEtc3VwcGxpZWQgZnVuY3Rpb25zCisgKiBkZXBlbmRpbmcgb24gd2hlcmUgaW4gTlZDQydzIGNvbXBpbGF0aW9uIHBpcGVsaW5lIHRoZSBoZWFkZXJzIGFyZQorICogaW5jbHVkZWQuIE5laXRoZXIgb2YgdGhlc2UgbW9kZXMgcHJvdmlkZXMgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2l0aAorICogY29ycmVjdCBhdHRyaWJ1dGVzLCBzbyB3ZSB1c2UgcHJlcHJvY2Vzc29yIHRvIGZvcmNlIHRoZSBoZWFkZXJzCisgKiBpbnRvIGEgZm9ybSB0aGF0IENsYW5nIGNhbiB1c2UuCisgKgorICogU2ltaWxhcmx5IHRvIE5WQ0Mgd2hpY2ggLWluY2x1ZGUncyBjdWRhX3J1bnRpbWUuaCwgQ2xhbmcgLWluY2x1ZGUncworICogdGhpcyBmaWxlIGR1cmluZyBldmVyeSBDVURBIGNvbXBpbGF0aW9uLgorICovCisKKyNpZm5kZWYgX19DTEFOR19DVURBX1JVTlRJTUVfV1JBUFBFUl9IX18KKyNkZWZpbmUgX19DTEFOR19DVURBX1JVTlRJTUVfV1JBUFBFUl9IX18KKworI2lmIGRlZmluZWQoX19DVURBX18pICYmIGRlZmluZWQoX19jbGFuZ19fKQorCisvLyBJbmNsdWRlIHNvbWUgZm9yd2FyZCBkZWNsYXJlcyB0aGF0IG11c3QgY29tZSBiZWZvcmUgY21hdGguCisjaW5jbHVkZSA8X19jbGFuZ19jdWRhX21hdGhfZm9yd2FyZF9kZWNsYXJlcy5oPgorCisvLyBJbmNsdWRlIHNvbWUgc3RhbmRhcmQgaGVhZGVycyB0byBhdm9pZCBDVURBIGhlYWRlcnMgaW5jbHVkaW5nIHRoZW0KKy8vIHdoaWxlIHNvbWUgcmVxdWlyZWQgbWFjcm9zIChsaWtlIF9fVEhST1cpIGFyZSBpbiBhIHdlaXJkIHN0YXRlLgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8vIFByZXNlcnZlIGNvbW1vbiBtYWNyb3MgdGhhdCB3aWxsIGJlIGNoYW5nZWQgYmVsb3cgYnkgdXMgb3IgYnkgQ1VEQQorLy8gaGVhZGVycy4KKyNwcmFnbWEgcHVzaF9tYWNybygiX19USFJPVyIpCisjcHJhZ21hIHB1c2hfbWFjcm8oIl9fQ1VEQV9BUkNIX18iKQorCisvLyBXQVJOSU5HOiBQcmVwcm9jZXNzb3IgaGFja3MgYmVsb3cgYXJlIGJhc2VkIG9uIHNwZWNpZmljIGRldGFpbHMgb2YKKy8vIENVREEtNy54IGhlYWRlcnMgYW5kIGFyZSBub3QgZXhwZWN0ZWQgdG8gd29yayB3aXRoIGFueSBvdGhlcgorLy8gdmVyc2lvbiBvZiBDVURBIGhlYWRlcnMuCisjaW5jbHVkZSAiY3VkYS5oIgorI2lmICFkZWZpbmVkKENVREFfVkVSU0lPTikKKyNlcnJvciAiY3VkYS5oIGRpZCBub3QgZGVmaW5lIENVREFfVkVSU0lPTiIKKyNlbGlmIENVREFfVkVSU0lPTiA8IDcwMDAgfHwgQ1VEQV9WRVJTSU9OID4gODAwMAorI2Vycm9yICJVbnN1cHBvcnRlZCBDVURBIHZlcnNpb24hIgorI2VuZGlmCisKKy8vIE1ha2UgbGFyZ2VzdCBzdWJzZXQgb2YgZGV2aWNlIGZ1bmN0aW9ucyBhdmFpbGFibGUgZHVyaW5nIGhvc3QKKy8vIGNvbXBpbGF0aW9uIC0tIFNNXzM1IGZvciB0aGUgdGltZSBiZWluZy4KKyNpZm5kZWYgX19DVURBX0FSQ0hfXworI2RlZmluZSBfX0NVREFfQVJDSF9fIDM1MAorI2VuZGlmCisKKyNpbmNsdWRlICJfX2NsYW5nX2N1ZGFfYnVpbHRpbl92YXJzLmgiCisKKy8vIE5vIG5lZWQgZm9yIGRldmljZV9sYXVuY2hfcGFyYW1ldGVycy5oIGFzIF9fY2xhbmdfY3VkYV9idWlsdGluX3ZhcnMuaCBhYm92ZQorLy8gaGFzIHRha2VuIGNhcmUgb2YgYnVpbHRpbiB2YXJpYWJsZXMgZGVjbGFyZWQgaW4gdGhlIGZpbGUuCisjZGVmaW5lIF9fREVWSUNFX0xBVU5DSF9QQVJBTUVURVJTX0hfXworCisvLyB7bWF0aCxkZXZpY2V9X2Z1bmN0aW9ucy5oIG9ubHkgaGF2ZSBkZWNsYXJhdGlvbnMgb2YgdGhlCisvLyBmdW5jdGlvbnMuIFdlIGRvbid0IG5lZWQgdGhlbSBhcyB3ZSdyZSBnb2luZyB0byBwdWxsIGluIHRoZWlyCisvLyBkZWZpbml0aW9ucyBmcm9tIC5ocHAgZmlsZXMuCisjZGVmaW5lIF9fREVWSUNFX0ZVTkNUSU9OU19IX18KKyNkZWZpbmUgX19NQVRIX0ZVTkNUSU9OU19IX18KKyNkZWZpbmUgX19DT01NT05fRlVOQ1RJT05TX0hfXworCisjdW5kZWYgX19DVURBQ0NfXworI2RlZmluZSBfX0NVREFCRV9fCisvLyBEaXNhYmxlcyBkZWZpbml0aW9ucyBvZiBkZXZpY2Utc2lkZSBydW50aW1lIHN1cHBvcnQgc3R1YnMgaW4KKy8vIGN1ZGFfZGV2aWNlX3J1bnRpbWVfYXBpLmgKKyNpbmNsdWRlICJkcml2ZXJfdHlwZXMuaCIKKyNpbmNsdWRlICJob3N0X2NvbmZpZy5oIgorI2luY2x1ZGUgImhvc3RfZGVmaW5lcy5oIgorCisjdW5kZWYgX19DVURBQkVfXworI2RlZmluZSBfX0NVREFDQ19fCisjaW5jbHVkZSAiY3VkYV9ydW50aW1lLmgiCisKKyN1bmRlZiBfX0NVREFDQ19fCisjZGVmaW5lIF9fQ1VEQUJFX18KKworLy8gQ1VEQSBoZWFkZXJzIHVzZSBfX252dm1fbWVtY3B5IGFuZCBfX252dm1fbWVtc2V0IHdoaWNoIENsYW5nIGRvZXMKKy8vIG5vdCBoYXZlIGF0IHRoZSBtb21lbnQuIEVtdWxhdGUgdGhlbSB3aXRoIGEgYnVpbHRpbiBtZW1jcHkvbWVtc2V0LgorI2RlZmluZSBfX252dm1fbWVtY3B5KHMsIGQsIG4sIGEpIF9fYnVpbHRpbl9tZW1jcHkocywgZCwgbikKKyNkZWZpbmUgX19udnZtX21lbXNldChkLCBjLCBuLCBhKSBfX2J1aWx0aW5fbWVtc2V0KGQsIGMsIG4pCisKKyNpbmNsdWRlICJjcnQvZGV2aWNlX3J1bnRpbWUuaCIKKyNpbmNsdWRlICJjcnQvaG9zdF9ydW50aW1lLmgiCisvLyBkZXZpY2VfcnVudGltZS5oIGRlZmluZXMgX19jeGFfKiBtYWNyb3MgdGhhdCB3aWxsIGNvbmZsaWN0IHdpdGgKKy8vIGN4eGFiaS5oLgorLy8gRklYTUU6IHJlZGVmaW5lIHRoZXNlIGFzIF9fZGV2aWNlX18gZnVuY3Rpb25zLgorI3VuZGVmIF9fY3hhX3ZlY19jdG9yCisjdW5kZWYgX19jeGFfdmVjX2NjdG9yCisjdW5kZWYgX19jeGFfdmVjX2R0b3IKKyN1bmRlZiBfX2N4YV92ZWNfbmV3CisjdW5kZWYgX19jeGFfdmVjX25ldzIKKyN1bmRlZiBfX2N4YV92ZWNfbmV3MworI3VuZGVmIF9fY3hhX3ZlY19kZWxldGUyCisjdW5kZWYgX19jeGFfdmVjX2RlbGV0ZQorI3VuZGVmIF9fY3hhX3ZlY19kZWxldGUzCisjdW5kZWYgX19jeGFfcHVyZV92aXJ0dWFsCisKKy8vIFdlIG5lZWQgZGVjbHMgZm9yIGZ1bmN0aW9ucyBpbiBDVURBJ3MgbGliZGV2aWNlIHdpdGggX19kZXZpY2VfXworLy8gYXR0cmlidXRlIG9ubHkuIEFsYXMgdGhleSBjb21lIGVpdGhlciBhcyBfX2hvc3RfXyBfX2RldmljZV9fIG9yCisvLyB3aXRoIG5vIGF0dHJpYnV0ZXMgYXQgYWxsLiBUbyB3b3JrIGFyb3VuZCB0aGF0LCBkZWZpbmUgX19DVURBX1JUQ19fCisvLyB3aGljaCBwcm9kdWNlcyBIRCB2YXJpYW50IGFuZCB1bmRlZiBfX2hvc3RfXyB3aGljaCBnaXZlcyB1cyBkZXNpZGVkCisvLyBkZWNscyB3aXRoIF9fZGV2aWNlX18gYXR0cmlidXRlLgorI3ByYWdtYSBwdXNoX21hY3JvKCJfX2hvc3RfXyIpCisjZGVmaW5lIF9faG9zdF9fCisjZGVmaW5lIF9fQ1VEQUNDX1JUQ19fCisjaW5jbHVkZSAiZGV2aWNlX2Z1bmN0aW9uc19kZWNscy5oIgorI3VuZGVmIF9fQ1VEQUNDX1JUQ19fCisKKy8vIFRlbXBvcmFyaWx5IHBvaXNvbiBfX2hvc3RfXyBtYWNybyB0byBlbnN1cmUgaXQncyBub3QgdXNlZCBieSBhbnkgb2YKKy8vIHRoZSBoZWFkZXJzIHdlJ3JlIGFib3V0IHRvIGluY2x1ZGUuCisjZGVmaW5lIF9faG9zdF9fIFVORVhQRUNURURfSE9TVF9BVFRSSUJVVEUKKworLy8gQ1VEQSA4LjAuNDEgcmVsaWVzIG9uIF9fVVNFX0ZBU1RfTUFUSF9fIGFuZCBfX0NVREFfUFJFQ19ESVYncyB2YWx1ZXMuCisvLyBQcmV2aW91cyB2ZXJzaW9ucyB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgdGhleSBhcmUgZGVmaW5lZCBvciBub3QuCisvLyBDVV9ERVZJQ0VfSU5WQUxJRCBtYWNybyBpcyBvbmx5IGRlZmluZWQgaW4gOC4wLjQxLCBzbyB3ZSB1c2UgaXQKKy8vIGhlcmUgdG8gZGV0ZWN0IHRoZSBzd2l0Y2guCisKKyNpZiBkZWZpbmVkKENVX0RFVklDRV9JTlZBTElEKQorI2lmICFkZWZpbmVkKF9fVVNFX0ZBU1RfTUFUSF9fKQorI2RlZmluZSBfX1VTRV9GQVNUX01BVEhfXyAwCisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fQ1VEQV9QUkVDX0RJVikKKyNkZWZpbmUgX19DVURBX1BSRUNfRElWIDAKKyNlbmRpZgorI2VuZGlmCisKKy8vIGRldmljZV9mdW5jdGlvbnMuaHBwIGFuZCBtYXRoX2Z1bmN0aW9ucyouaHBwIHVzZSAnc3RhdGljCisvLyBfX2ZvcmNlaW5saW5lX18nICh3aXRoIG5vIF9fZGV2aWNlX18pIGZvciBkZWZpbml0aW9ucyBvZiBkZXZpY2UKKy8vIGZ1bmN0aW9ucy4gVGVtcG9yYXJpbHkgcmVkZWZpbmUgX19mb3JjZWlubGluZV9fIHRvIGluY2x1ZGUKKy8vIF9fZGV2aWNlX18uCisjcHJhZ21hIHB1c2hfbWFjcm8oIl9fZm9yY2VpbmxpbmVfXyIpCisjZGVmaW5lIF9fZm9yY2VpbmxpbmVfXyBfX2RldmljZV9fIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisjaW5jbHVkZSAiZGV2aWNlX2Z1bmN0aW9ucy5ocHAiCisKKy8vIG1hdGhfZnVuY3Rpb24uaHBwIHVzZXMgdGhlIF9fVVNFX0ZBU1RfTUFUSF9fIG1hY3JvIHRvIGRldGVybWluZSB3aGV0aGVyIHdlCisvLyBnZXQgdGhlIHNsb3ctYnV0LWFjY3VyYXRlIG9yIGZhc3QtYnV0LWluYWNjdXJhdGUgdmVyc2lvbnMgb2YgZnVuY3Rpb25zIGxpa2UKKy8vIHNpbiBhbmQgZXhwLiAgVGhpcyBpcyBjb250cm9sbGVkIGluIGNsYW5nIGJ5IC1mY3VkYS1hcHByb3gtdHJhbnNjZW5kZW50YWxzLgorLy8KKy8vIGRldmljZV9mdW5jdGlvbnMuaHBwIHVzZXMgX19VU0VfRkFTVF9NQVRIX18gZm9yIGEgZGlmZmVyZW50IHB1cnBvc2UgKGZhc3QgdnMuCisvLyBzbG93IGRpdmlkZXMpLCBzbyB3ZSBuZWVkIHRvIHNjb3BlIG91ciBkZWZpbmUgY2FyZWZ1bGx5IGhlcmUuCisjcHJhZ21hIHB1c2hfbWFjcm8oIl9fVVNFX0ZBU1RfTUFUSF9fIikKKyNpZiBkZWZpbmVkKF9fQ0xBTkdfQ1VEQV9BUFBST1hfVFJBTlNDRU5ERU5UQUxTX18pCisjZGVmaW5lIF9fVVNFX0ZBU1RfTUFUSF9fIDEKKyNlbmRpZgorI2luY2x1ZGUgIm1hdGhfZnVuY3Rpb25zLmhwcCIKKyNwcmFnbWEgcG9wX21hY3JvKCJfX1VTRV9GQVNUX01BVEhfXyIpCisKKyNpbmNsdWRlICJtYXRoX2Z1bmN0aW9uc19kYmxfcHR4My5ocHAiCisjcHJhZ21hIHBvcF9tYWNybygiX19mb3JjZWlubGluZV9fIikKKworLy8gUHVsbCBpbiBob3N0LW9ubHkgZnVuY3Rpb25zIHRoYXQgYXJlIG9ubHkgYXZhaWxhYmxlIHdoZW4gbmVpdGhlcgorLy8gX19DVURBQ0NfXyBub3IgX19DVURBQkVfXyBhcmUgZGVmaW5lZC4KKyN1bmRlZiBfX01BVEhfRlVOQ1RJT05TX0hQUF9fCisjdW5kZWYgX19DVURBQkVfXworI2luY2x1ZGUgIm1hdGhfZnVuY3Rpb25zLmhwcCIKKy8vIEFsYXMsIGFkZGl0aW9uYWwgb3ZlcmxvYWRzIGZvciB0aGVzZSBmdW5jdGlvbnMgYXJlIGhhcmQgdG8gZ2V0IHRvLgorLy8gQ29uc2lkZXJpbmcgdGhhdCB3ZSBvbmx5IG5lZWQgdGhlc2Ugb3ZlcmxvYWRzIGZvciBhIGZldyBmdW5jdGlvbnMsCisvLyB3ZSBjYW4gcHJvdmlkZSB0aGVtIGhlcmUuCitzdGF0aWMgaW5saW5lIGZsb2F0IHJzcXJ0KGZsb2F0IF9fYSkgeyByZXR1cm4gcnNxcnRmKF9fYSk7IH0KK3N0YXRpYyBpbmxpbmUgZmxvYXQgcmNicnQoZmxvYXQgX19hKSB7IHJldHVybiByY2JydGYoX19hKTsgfQorc3RhdGljIGlubGluZSBmbG9hdCBzaW5waShmbG9hdCBfX2EpIHsgcmV0dXJuIHNpbnBpZihfX2EpOyB9CitzdGF0aWMgaW5saW5lIGZsb2F0IGNvc3BpKGZsb2F0IF9fYSkgeyByZXR1cm4gY29zcGlmKF9fYSk7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzaW5jb3NwaShmbG9hdCBfX2EsIGZsb2F0ICpfX2IsIGZsb2F0ICpfX2MpIHsKKyAgcmV0dXJuIHNpbmNvc3BpZihfX2EsIF9fYiwgX19jKTsKK30KK3N0YXRpYyBpbmxpbmUgZmxvYXQgZXJmY2ludihmbG9hdCBfX2EpIHsgcmV0dXJuIGVyZmNpbnZmKF9fYSk7IH0KK3N0YXRpYyBpbmxpbmUgZmxvYXQgbm9ybWNkZmludihmbG9hdCBfX2EpIHsgcmV0dXJuIG5vcm1jZGZpbnZmKF9fYSk7IH0KK3N0YXRpYyBpbmxpbmUgZmxvYXQgbm9ybWNkZihmbG9hdCBfX2EpIHsgcmV0dXJuIG5vcm1jZGZmKF9fYSk7IH0KK3N0YXRpYyBpbmxpbmUgZmxvYXQgZXJmY3goZmxvYXQgX19hKSB7IHJldHVybiBlcmZjeGYoX19hKTsgfQorCisvLyBGb3Igc29tZSByZWFzb24gc2luZ2xlLWFyZ3VtZW50IHZhcmlhbnQgaXMgbm90IGFsd2F5cyBkZWNsYXJlZCBieQorLy8gQ1VEQSBoZWFkZXJzLiBBbGFzLCBkZXZpY2VfZnVuY3Rpb25zLmhwcCBpbmNsdWRlZCBiZWxvdyBuZWVkcyBpdC4KK3N0YXRpYyBpbmxpbmUgX19kZXZpY2VfXyB2b2lkIF9fYnJrcHQoaW50IF9fYykgeyBfX2Jya3B0KCk7IH0KKworLy8gTm93IGluY2x1ZGUgKi5ocHAgd2l0aCBkZWZpbml0aW9ucyBvZiB2YXJpb3VzIEdQVSBmdW5jdGlvbnMuICBBbGFzLAorLy8gYSBsb3Qgb2YgdGhpbnMgZ2V0IGRlY2xhcmVkL2RlZmluZWQgd2l0aCBfX2hvc3RfXyBhdHRyaWJ1dGUgd2hpY2gKKy8vIHdlIGRvbid0IHdhbnQgYW5kIHdlIGhhdmUgdG8gZGVmaW5lIGl0IG91dC4gV2UgYWxzbyBoYXZlIHRvIGluY2x1ZGUKKy8vIHtkZXZpY2UsbWF0aH1fZnVuY3Rpb25zLmhwcCBhZ2FpbiBpbiBvcmRlciB0byBleHRyYWN0IHRoZSBvdGhlcgorLy8gYnJhbmNoIG9mICNpZi9lbHNlIGluc2lkZS4KKworI2RlZmluZSBfX2hvc3RfXworI3VuZGVmIF9fQ1VEQUJFX18KKyNkZWZpbmUgX19DVURBQ0NfXworI3VuZGVmIF9fREVWSUNFX0ZVTkNUSU9OU19IUFBfXworI2luY2x1ZGUgImRldmljZV9hdG9taWNfZnVuY3Rpb25zLmhwcCIKKyNpbmNsdWRlICJkZXZpY2VfZnVuY3Rpb25zLmhwcCIKKyNpbmNsdWRlICJzbV8yMF9hdG9taWNfZnVuY3Rpb25zLmhwcCIKKyNpbmNsdWRlICJzbV8yMF9pbnRyaW5zaWNzLmhwcCIKKyNpbmNsdWRlICJzbV8zMl9hdG9taWNfZnVuY3Rpb25zLmhwcCIKKworLy8gRG9uJ3QgaW5jbHVkZSBzbV8zMF9pbnRyaW5zaWNzLmggYW5kIHNtXzMyX2ludHJpbnNpY3MuaC4gIFRoZXNlIGRlZmluZSB0aGUKKy8vIF9fc2hmbCBhbmQgX19sZGcgaW50cmluc2ljcyB1c2luZyBpbmxpbmUgKHZvbGF0aWxlKSBhc20sIGJ1dCB3ZSB3YW50IHRvCisvLyBkZWZpbmUgdGhlbSB1c2luZyBidWlsdGlucyBzbyB0aGF0IHRoZSBvcHRpbWl6ZXIgY2FuIHJlYXNvbiBhYm91dCBhbmQgYWNyb3NzCisvLyB0aGVzZSBpbnN0cnVjdGlvbnMuICBJbiBwYXJ0aWN1bGFyLCB1c2luZyBpbnRyaW5zaWNzIGZvciBsZGcgZ2V0cyB1cyB0aGUKKy8vIFthZGRyK2ltbV0gYWRkcmVzc2luZyBtb2RlLCB3aGljaCwgYWx0aG91Z2ggaXQgZG9lc24ndCBhY3R1YWxseSBleGlzdCBpbiB0aGUKKy8vIGhhcmR3YXJlLCBzZWVtcyB0byBnZW5lcmF0ZSBmYXN0ZXIgbWFjaGluZSBjb2RlIGJlY2F1c2UgcHR4YXMgY2FuIG1vcmUgZWFzaWx5CisvLyByZWFzb24gYWJvdXQgb3VyIGNvZGUuCisKKyN1bmRlZiBfX01BVEhfRlVOQ1RJT05TX0hQUF9fCisKKy8vIG1hdGhfZnVuY3Rpb25zLmhwcCBkZWZpbmVzIDo6c2lnbmJpdCBhcyBhIF9faG9zdF9fIF9fZGV2aWNlX18gZnVuY3Rpb24uICBUaGlzCisvLyBjb25mbGljdHMgd2l0aCBsaWJzdGRjKysncyBjb25zdGV4cHIgOjpzaWduYml0LCBzbyB3ZSBoYXZlIHRvIHJlbmFtZQorLy8gbWF0aF9mdW5jdGlvbi5ocHAncyA6OnNpZ25iaXQuICBJdCdzIGd1YXJkZWQgYnkgI3VuZGVmIHNpZ25iaXQsIGJ1dCB0aGF0J3MKKy8vIGNvbmRpdGlvbmFsIG9uIF9fR05VQ19fLiAgOikKKyNwcmFnbWEgcHVzaF9tYWNybygic2lnbmJpdCIpCisjcHJhZ21hIHB1c2hfbWFjcm8oIl9fR05VQ19fIikKKyN1bmRlZiBfX0dOVUNfXworI2RlZmluZSBzaWduYml0IF9faWdub3JlZF9jdWRhX3NpZ25iaXQKKyNpbmNsdWRlICJtYXRoX2Z1bmN0aW9ucy5ocHAiCisjcHJhZ21hIHBvcF9tYWNybygiX19HTlVDX18iKQorI3ByYWdtYSBwb3BfbWFjcm8oInNpZ25iaXQiKQorCisjcHJhZ21hIHBvcF9tYWNybygiX19ob3N0X18iKQorCisjaW5jbHVkZSAidGV4dHVyZV9pbmRpcmVjdF9mdW5jdGlvbnMuaCIKKworLy8gUmVzdG9yZSBzdGF0ZSBvZiBfX0NVREFfQVJDSF9fIGFuZCBfX1RIUk9XIHdlIGhhZCBvbiBlbnRyeS4KKyNwcmFnbWEgcG9wX21hY3JvKCJfX0NVREFfQVJDSF9fIikKKyNwcmFnbWEgcG9wX21hY3JvKCJfX1RIUk9XIikKKworLy8gU2V0IHVwIGNvbXBpbGVyIG1hY3JvcyBleHBlY3RlZCB0byBiZSBzZWVuIGR1cmluZyBjb21waWxhdGlvbi4KKyN1bmRlZiBfX0NVREFCRV9fCisjZGVmaW5lIF9fQ1VEQUNDX18KKworZXh0ZXJuICJDIiB7CisvLyBEZXZpY2Utc2lkZSBDVURBIHN5c3RlbSBjYWxscy4KKy8vIGh0dHA6Ly9kb2NzLm52aWRpYS5jb20vY3VkYS9wdHgtd3JpdGVycy1ndWlkZS10by1pbnRlcm9wZXJhYmlsaXR5L2luZGV4Lmh0bWwjc3lzdGVtLWNhbGxzCisvLyBXZSBuZWVkIHRoZXNlIGRlY2xhcmF0aW9ucyBhbmQgd3JhcHBlcnMgZm9yIGRldmljZS1zaWRlCisvLyBtYWxsb2MvZnJlZS9wcmludGYgY2FsbHMgdG8gd29yayB3aXRob3V0IHJlbHlpbmcgb24KKy8vIC1mY3VkYS1kaXNhYmxlLXRhcmdldC1jYWxsLWNoZWNrcyBvcHRpb24uCitfX2RldmljZV9fIGludCB2cHJpbnRmKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK19fZGV2aWNlX18gdm9pZCBmcmVlKHZvaWQgKikgX19hdHRyaWJ1dGUoKG5vdGhyb3cpKTsKK19fZGV2aWNlX18gdm9pZCAqbWFsbG9jKHNpemVfdCkgX19hdHRyaWJ1dGUoKG5vdGhyb3cpKSBfX2F0dHJpYnV0ZV9fKChtYWxsb2MpKTsKK19fZGV2aWNlX18gdm9pZCBfX2Fzc2VydGZhaWwoY29uc3QgY2hhciAqX19tZXNzYWdlLCBjb25zdCBjaGFyICpfX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9fbGluZSwgY29uc3QgY2hhciAqX19mdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fY2hhclNpemUpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CisKKy8vIEluIG9yZGVyIGZvciBzdGFuZGFyZCBhc3NlcnQoKSBtYWNybyBvbiBsaW51eCB0byB3b3JrIHdlIG5lZWQgdG8KKy8vIHByb3ZpZGUgZGV2aWNlLXNpZGUgX19hc3NlcnRfZmFpbCgpCitfX2RldmljZV9fIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Fzc2VydF9mYWlsKGNvbnN0IGNoYXIgKl9fbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19maWxlLCB1bnNpZ25lZCBfX2xpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fZnVuY3Rpb24pIHsKKyAgX19hc3NlcnRmYWlsKF9fbWVzc2FnZSwgX19maWxlLCBfX2xpbmUsIF9fZnVuY3Rpb24sIHNpemVvZihjaGFyKSk7Cit9CisKKy8vIENsYW5nIHdpbGwgY29udmVydCBwcmludGYgaW50byB2cHJpbnRmLCBidXQgd2Ugc3RpbGwgbmVlZAorLy8gZGV2aWNlLXNpZGUgZGVjbGFyYXRpb24gZm9yIGl0LgorX19kZXZpY2VfXyBpbnQgcHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4uKTsKK30gLy8gZXh0ZXJuICJDIgorCisvLyBXZSBhbHNvIG5lZWQgZGV2aWNlLXNpZGUgc3RkOjptYWxsb2MgYW5kIHN0ZDo6ZnJlZS4KK25hbWVzcGFjZSBzdGQgeworX19kZXZpY2VfXyBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZSh2b2lkICpfX3B0cikgeyA6OmZyZWUoX19wdHIpOyB9CitfX2RldmljZV9fIHN0YXRpYyBpbmxpbmUgdm9pZCAqbWFsbG9jKHNpemVfdCBfX3NpemUpIHsKKyAgcmV0dXJuIDo6bWFsbG9jKF9fc2l6ZSk7Cit9Cit9IC8vIG5hbWVzcGFjZSBzdGQKKworLy8gT3V0LW9mLWxpbmUgaW1wbGVtZW50YXRpb25zIGZyb20gX19jbGFuZ19jdWRhX2J1aWx0aW5fdmFycy5oLiAgVGhlc2UgbmVlZCB0bworLy8gY29tZSBhZnRlciB3ZSd2ZSBwdWxsZWQgaW4gdGhlIGRlZmluaXRpb24gb2YgdWludDMgYW5kIGRpbTMuCisKK19fZGV2aWNlX18gaW5saW5lIF9fY3VkYV9idWlsdGluX3RocmVhZElkeF90OjpvcGVyYXRvciB1aW50MygpIGNvbnN0IHsKKyAgdWludDMgcmV0OworICByZXQueCA9IHg7CisgIHJldC55ID0geTsKKyAgcmV0LnogPSB6OworICByZXR1cm4gcmV0OworfQorCitfX2RldmljZV9fIGlubGluZSBfX2N1ZGFfYnVpbHRpbl9ibG9ja0lkeF90OjpvcGVyYXRvciB1aW50MygpIGNvbnN0IHsKKyAgdWludDMgcmV0OworICByZXQueCA9IHg7CisgIHJldC55ID0geTsKKyAgcmV0LnogPSB6OworICByZXR1cm4gcmV0OworfQorCitfX2RldmljZV9fIGlubGluZSBfX2N1ZGFfYnVpbHRpbl9ibG9ja0RpbV90OjpvcGVyYXRvciBkaW0zKCkgY29uc3QgeworICByZXR1cm4gZGltMyh4LCB5LCB6KTsKK30KKworX19kZXZpY2VfXyBpbmxpbmUgX19jdWRhX2J1aWx0aW5fZ3JpZERpbV90OjpvcGVyYXRvciBkaW0zKCkgY29uc3QgeworICByZXR1cm4gZGltMyh4LCB5LCB6KTsKK30KKworI2luY2x1ZGUgPF9fY2xhbmdfY3VkYV9jbWF0aC5oPgorI2luY2x1ZGUgPF9fY2xhbmdfY3VkYV9pbnRyaW5zaWNzLmg+CisjaW5jbHVkZSA8X19jbGFuZ19jdWRhX2NvbXBsZXhfYnVpbHRpbnMuaD4KKworLy8gY3VyYW5kX210Z3AzMl9rZXJuZWwgaGVscGZ1bGx5IHJlZGVjbGFyZXMgYmxvY2tEaW0gYW5kIHRocmVhZElkeCBpbiBob3N0CisvLyBtb2RlLCBnaXZpbmcgdGhlbSB0aGVpciAicHJvcGVyIiB0eXBlcyBvZiBkaW0zIGFuZCB1aW50My4gIFRoaXMgaXMKKy8vIGluY29tcGF0aWJsZSB3aXRoIHRoZSB0eXBlcyB3ZSBnaXZlIGluIF9fY2xhbmdfY3VkYV9idWlsdGluX3ZhcnMuaC4gIEFzIGFzCisvLyBoYWNrLCBmb3JjZS1pbmNsdWRlIHRoZSBoZWFkZXIgKG52Y2MgZG9lc24ndCBpbmNsdWRlIGl0IGJ5IGRlZmF1bHQpIGJ1dAorLy8gcmVkZWZpbmUgZGltMyBhbmQgdWludDMgdG8gb3VyIGJ1aWx0aW4gdHlwZXMuICAoVGhhbmtmdWxseSBkaW0zIGFuZCB1aW50MyBhcmUKKy8vIG9ubHkgdXNlZCBoZXJlIGZvciB0aGUgcmVkZWNsYXJhdGlvbnMgb2YgYmxvY2tEaW0gYW5kIHRocmVhZElkeC4pCisjcHJhZ21hIHB1c2hfbWFjcm8oImRpbTMiKQorI3ByYWdtYSBwdXNoX21hY3JvKCJ1aW50MyIpCisjZGVmaW5lIGRpbTMgX19jdWRhX2J1aWx0aW5fYmxvY2tEaW1fdAorI2RlZmluZSB1aW50MyBfX2N1ZGFfYnVpbHRpbl90aHJlYWRJZHhfdAorI2luY2x1ZGUgImN1cmFuZF9tdGdwMzJfa2VybmVsLmgiCisjcHJhZ21hIHBvcF9tYWNybygiZGltMyIpCisjcHJhZ21hIHBvcF9tYWNybygidWludDMiKQorI3ByYWdtYSBwb3BfbWFjcm8oIl9fVVNFX0ZBU1RfTUFUSF9fIikKKworI2VuZGlmIC8vIF9fQ1VEQV9fCisjZW5kaWYgLy8gX19DTEFOR19DVURBX1JVTlRJTUVfV1JBUFBFUl9IX18KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvX19zdGRkZWZfbWF4X2FsaWduX3QuaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvX19zdGRkZWZfbWF4X2FsaWduX3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTEwY2E5Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9fX3N0ZGRlZl9tYXhfYWxpZ25fdC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qPT09LS0tLSBfX3N0ZGRlZl9tYXhfYWxpZ25fdC5oIC0gRGVmaW5pdGlvbiBvZiBtYXhfYWxpZ25fdCBmb3IgbW9kdWxlcyAtLS09PT0KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hhbmRsZXIgQ2FycnV0aAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0NMQU5HX01BWF9BTElHTl9UX0RFRklORUQKKyNkZWZpbmUgX19DTEFOR19NQVhfQUxJR05fVF9ERUZJTkVECisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQordHlwZWRlZiBkb3VibGUgbWF4X2FsaWduX3Q7CisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKK3R5cGVkZWYgbG9uZyBkb3VibGUgbWF4X2FsaWduX3Q7CisjZWxzZQorLy8gRGVmaW5lICdtYXhfYWxpZ25fdCcgdG8gbWF0Y2ggdGhlIEdDQyBkZWZpbml0aW9uLgordHlwZWRlZiBzdHJ1Y3QgeworICBsb25nIGxvbmcgX19jbGFuZ19tYXhfYWxpZ25fbm9uY2UxCisgICAgICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhfX2FsaWdub2ZfXyhsb25nIGxvbmcpKSkpOworICBsb25nIGRvdWJsZSBfX2NsYW5nX21heF9hbGlnbl9ub25jZTIKKyAgICAgIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKF9fYWxpZ25vZl9fKGxvbmcgZG91YmxlKSkpKTsKK30gbWF4X2FsaWduX3Q7CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL19fd21taW50cmluX2Flcy5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9fX3dtbWludHJpbl9hZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTE1MThlCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9fX3dtbWludHJpbl9hZXMuaApAQCAtMCwwICsxLDE1MSBAQAorLyo9PT0tLS0tIF9fd21taW50cmluX2Flcy5oIC0gQUVTIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKyNpZm5kZWYgX1dNTUlOVFJJTl9BRVNfSAorI2RlZmluZSBfV01NSU5UUklOX0FFU19ICisKKyNpbmNsdWRlIDxlbW1pbnRyaW4uaD4KKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhZXMiKSkpCisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBzaW5nbGUgcm91bmQgb2YgQUVTIGVuY3J5cHRpb24gdXNpbmcgdGhlIEVxdWl2YWxlbnQKKy8vLyAgICBJbnZlcnNlIENpcGhlciwgdHJhbnNmb3JtaW5nIHRoZSBzdGF0ZSB2YWx1ZSBmcm9tIHRoZSBmaXJzdCBzb3VyY2UKKy8vLyAgICBvcGVyYW5kIHVzaW5nIGEgMTI4LWJpdCByb3VuZCBrZXkgdmFsdWUgY29udGFpbmVkIGluIHRoZSBzZWNvbmQgc291cmNlCisvLy8gICAgb3BlcmFuZCwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQUVTRU5DIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fVgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzdGF0ZSB2YWx1ZS4KKy8vLyBccGFyYW0gX19SCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJvdW5kIGtleSB2YWx1ZS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgZW5jcnlwdGVkIHZhbHVlLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZXNlbmNfc2kxMjgoX19tMTI4aSBfX1YsIF9fbTEyOGkgX19SKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfYWVzZW5jMTI4KChfX3YyZGkpX19WLCAoX192MmRpKV9fUik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgdGhlIGZpbmFsIHJvdW5kIG9mIEFFUyBlbmNyeXB0aW9uIHVzaW5nIHRoZSBFcXVpdmFsZW50CisvLy8gICAgSW52ZXJzZSBDaXBoZXIsIHRyYW5zZm9ybWluZyB0aGUgc3RhdGUgdmFsdWUgZnJvbSB0aGUgZmlyc3Qgc291cmNlCisvLy8gICAgb3BlcmFuZCB1c2luZyBhIDEyOC1iaXQgcm91bmQga2V5IHZhbHVlIGNvbnRhaW5lZCBpbiB0aGUgc2Vjb25kIHNvdXJjZQorLy8vICAgIG9wZXJhbmQsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkFFU0VOQ0xBU1QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19WCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHN0YXRlIHZhbHVlLgorLy8vIFxwYXJhbSBfX1IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcm91bmQga2V5IHZhbHVlLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBlbmNyeXB0ZWQgdmFsdWUuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Flc2VuY2xhc3Rfc2kxMjgoX19tMTI4aSBfX1YsIF9fbTEyOGkgX19SKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfYWVzZW5jbGFzdDEyOCgoX192MmRpKV9fViwgKF9fdjJkaSlfX1IpOworfQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIGEgc2luZ2xlIHJvdW5kIG9mIEFFUyBkZWNyeXB0aW9uIHVzaW5nIHRoZSBFcXVpdmFsZW50CisvLy8gICAgSW52ZXJzZSBDaXBoZXIsIHRyYW5zZm9ybWluZyB0aGUgc3RhdGUgdmFsdWUgZnJvbSB0aGUgZmlyc3Qgc291cmNlCisvLy8gICAgb3BlcmFuZCB1c2luZyBhIDEyOC1iaXQgcm91bmQga2V5IHZhbHVlIGNvbnRhaW5lZCBpbiB0aGUgc2Vjb25kIHNvdXJjZQorLy8vICAgIG9wZXJhbmQsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkFFU0RFQyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX1YKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc3RhdGUgdmFsdWUuCisvLy8gXHBhcmFtIF9fUgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSByb3VuZCBrZXkgdmFsdWUuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGRlY3J5cHRlZCB2YWx1ZS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWVzZGVjX3NpMTI4KF9fbTEyOGkgX19WLCBfX20xMjhpIF9fUikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2Flc2RlYzEyOCgoX192MmRpKV9fViwgKF9fdjJkaSlfX1IpOworfQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIHRoZSBmaW5hbCByb3VuZCBvZiBBRVMgZGVjcnlwdGlvbiB1c2luZyB0aGUgRXF1aXZhbGVudAorLy8vICAgIEludmVyc2UgQ2lwaGVyLCB0cmFuc2Zvcm1pbmcgdGhlIHN0YXRlIHZhbHVlIGZyb20gdGhlIGZpcnN0IHNvdXJjZQorLy8vICAgIG9wZXJhbmQgdXNpbmcgYSAxMjgtYml0IHJvdW5kIGtleSB2YWx1ZSBjb250YWluZWQgaW4gdGhlIHNlY29uZCBzb3VyY2UKKy8vLyAgICBvcGVyYW5kLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIGRlc3RpbmF0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZBRVNERUNMQVNUIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fVgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzdGF0ZSB2YWx1ZS4KKy8vLyBccGFyYW0gX19SCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJvdW5kIGtleSB2YWx1ZS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgZGVjcnlwdGVkIHZhbHVlLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZXNkZWNsYXN0X3NpMTI4KF9fbTEyOGkgX19WLCBfX20xMjhpIF9fUikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2Flc2RlY2xhc3QxMjgoKF9fdjJkaSlfX1YsIChfX3YyZGkpX19SKTsKK30KKworLy8vIFxicmllZiBBcHBsaWVzIHRoZSBBRVMgSW52TWl4Q29sdW1ucygpIHRyYW5zZm9ybWF0aW9uIHRvIGFuIGV4cGFuZGVkIGtleQorLy8vICAgIGNvbnRhaW5lZCBpbiB0aGUgc291cmNlIG9wZXJhbmQsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQUVTSU1DIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fVgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBleHBhbmRlZCBrZXkuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybWVkIHZhbHVlLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZXNpbWNfc2kxMjgoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9hZXNpbWMxMjgoKF9fdjJkaSlfX1YpOworfQorCisvLy8gXGJyaWVmIEdlbmVyYXRlcyBhIHJvdW5kIGtleSBmb3IgQUVTIGVuY3lwdGlvbiwgb3BlcmF0aW5nIG9uIDEyOC1iaXQgZGF0YQorLy8vICAgIHNwZWNpZmllZCBpbiB0aGUgZmlyc3Qgc291cmNlIG9wZXJhbmQgYW5kIHVzaW5nIGFuIDgtYml0IHJvdW5kIGNvbnN0YW50CisvLy8gICAgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgc291cmNlIG9wZXJhbmQsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMTI4aSBfbW1fYWVza2V5Z2VuYXNzaXN0X3NpMTI4KF9fbTEyOGkgQywgY29uc3QgaW50IFIpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQUVTS0VZR0VOQVNTSVNUIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIEMKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgdGhhdCBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBBRVMgZW5jcnlwdGlvbiBrZXkuCisvLy8gXHBhcmFtIFIKKy8vLyAgICBBbiA4LWJpdCByb3VuZCBjb25zdGFudCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBBRVMgZW5jcnlwdGlvbiBrZXkuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHJvdW5kIGtleSBmb3IgQUVTIGVuY3J5cHRpb24uCisjZGVmaW5lIF9tbV9hZXNrZXlnZW5hc3Npc3Rfc2kxMjgoQywgUikgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9hZXNrZXlnZW5hc3Npc3QxMjgoKF9fdjJkaSkoX19tMTI4aSkoQyksIChpbnQpKFIpKQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAgLyogX1dNTUlOVFJJTl9BRVNfSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9fX3dtbWludHJpbl9wY2xtdWwuaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvX193bW1pbnRyaW5fcGNsbXVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlMDczZgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvX193bW1pbnRyaW5fcGNsbXVsLmgKQEAgLTAsMCArMSw1OCBAQAorLyo9PT0tLS0tIF9fd21taW50cmluX3BjbG11bC5oIC0gUENNVUwgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisjaWZuZGVmIF9XTU1JTlRSSU5fUENMTVVMX0gKKyNkZWZpbmUgX1dNTUlOVFJJTl9QQ0xNVUxfSAorCisvLy8gXGJyaWVmIE11bHRpcGxpZXMgdHdvIDY0LWJpdCBpbnRlZ2VyIHZhbHVlcywgd2hpY2ggYXJlIHNlbGVjdGVkIGZyb20gc291cmNlCisvLy8gICAgb3BlcmFuZHMgdXNpbmcgdGhlIGltbWVkaWF0ZS12YWx1ZSBvcGVyYW5kLiBUaGUgbXVsdGlwbGljYXRpb24gaXMgYQorLy8vICAgIGNhcnJ5LWxlc3MgbXVsdGlwbGljYXRpb24sIGFuZCB0aGUgMTI4LWJpdCBpbnRlZ2VyIHByb2R1Y3QgaXMgc3RvcmVkIGluCisvLy8gICAgdGhlIGRlc3RpbmF0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20xMjhpIF9tbV9jbG11bGVwaTY0X3NpMTI4KF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSwgY29uc3QgaW50IF9fSSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUENMTVVMUURRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fWAorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBpNjRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fWQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBpNjRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fSQorLy8vICAgIEFuIGltbWVkaWF0ZSB2YWx1ZSBzcGVjaWZ5aW5nIHdoaWNoIDY0LWJpdCB2YWx1ZXMgdG8gc2VsZWN0IGZyb20gdGhlCisvLy8gICAgb3BlcmFuZHMuCisvLy8gICAgQml0IDAgaXMgdXNlZCB0byBzZWxlY3QgYSB2YWx1ZSBmcm9tIG9wZXJhbmQgX19YLAorLy8vICAgIGFuZCBiaXQgNCBpcyB1c2VkIHRvIHNlbGVjdCBhIHZhbHVlIGZyb20gb3BlcmFuZCBfX1k6CisvLy8gICAgQml0WzBdPTAgaW5kaWNhdGVzIHRoYXQgYml0c1s2MzowXSBvZiBvcGVyYW5kIF9fWCBhcmUgdXNlZC4KKy8vLyAgICBCaXRbMF09MSBpbmRpY2F0ZXMgdGhhdCBiaXRzWzEyNzo2NF0gb2Ygb3BlcmFuZCBfX1ggYXJlIHVzZWQuCisvLy8gICAgQml0WzRdPTAgaW5kaWNhdGVzIHRoYXQgYml0c1s2MzowXSBvZiBvcGVyYW5kIF9fWSBhcmUgdXNlZC4KKy8vLyAgICBCaXRbNF09MSBpbmRpY2F0ZXMgdGhhdCBiaXRzWzEyNzo2NF0gb2Ygb3BlcmFuZCBfX1kgYXJlIHVzZWQuCisvLy8gXHJldHVybnMgVGhlIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjYXJyeS1sZXNzCisvLy8gICAgbXVsdGlwbGljYXRpb24gb2YgdGhlIHNlbGVjdGVkIDY0LWJpdCB2YWx1ZXMuCisjZGVmaW5lIF9tbV9jbG11bGVwaTY0X3NpMTI4KF9fWCwgX19ZLCBfX0kpIFwKKyAgKChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BjbG11bHFkcTEyOCgoX192MmRpKShfX20xMjhpKShfX1gpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoX19ZKSwgKGNoYXIpKF9fSSkpKQorCisjZW5kaWYgLyogX1dNTUlOVFJJTl9QQ0xNVUxfSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hZHhpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYWR4aW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzNDcyOAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYWR4aW50cmluLmgKQEAgLTAsMCArMSw4NiBAQAorLyo9PT0tLS0tIGFkeGludHJpbi5oIC0gQURYIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YWR4aW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0FEWElOVFJJTl9ICisjZGVmaW5lIF9fQURYSU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKKworLyogSW50cmluc2ljcyB0aGF0IGFyZSBhdmFpbGFibGUgb25seSBpZiBfX0FEWF9fIGRlZmluZWQgKi8KK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBjaGFyIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYWR4IikpKQorX2FkZGNhcnJ5eF91MzIodW5zaWduZWQgY2hhciBfX2NmLCB1bnNpZ25lZCBpbnQgX194LCB1bnNpZ25lZCBpbnQgX195LAorICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX3ApCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9hZGRjYXJyeXhfdTMyKF9fY2YsIF9feCwgX195LCBfX3ApOworfQorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGNoYXIgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhZHgiKSkpCitfYWRkY2Fycnl4X3U2NCh1bnNpZ25lZCBjaGFyIF9fY2YsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3gsCisgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX195LCB1bnNpZ25lZCBsb25nIGxvbmcgICpfX3ApCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9hZGRjYXJyeXhfdTY0KF9fY2YsIF9feCwgX195LCBfX3ApOworfQorI2VuZGlmCisKKy8qIEludHJpbnNpY3MgdGhhdCBhcmUgYWxzbyBhdmFpbGFibGUgaWYgX19BRFhfXyB1bmRlZmluZWQgKi8KK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX2FkZGNhcnJ5X3UzMih1bnNpZ25lZCBjaGFyIF9fY2YsIHVuc2lnbmVkIGludCBfX3gsIHVuc2lnbmVkIGludCBfX3ksCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19wKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfYWRkY2FycnlfdTMyKF9fY2YsIF9feCwgX195LCBfX3ApOworfQorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfYWRkY2FycnlfdTY0KHVuc2lnbmVkIGNoYXIgX19jZiwgdW5zaWduZWQgbG9uZyBsb25nIF9feCwKKyAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9feSwgdW5zaWduZWQgbG9uZyBsb25nICAqX19wKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfYWRkY2FycnlfdTY0KF9fY2YsIF9feCwgX195LCBfX3ApOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX3N1YmJvcnJvd191MzIodW5zaWduZWQgY2hhciBfX2NmLCB1bnNpZ25lZCBpbnQgX194LCB1bnNpZ25lZCBpbnQgX195LAorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fcCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3N1YmJvcnJvd191MzIoX19jZiwgX194LCBfX3ksIF9fcCk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19zdWJib3Jyb3dfdTY0KHVuc2lnbmVkIGNoYXIgX19jZiwgdW5zaWduZWQgbG9uZyBsb25nIF9feCwKKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ksIHVuc2lnbmVkIGxvbmcgbG9uZyAgKl9fcCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3N1YmJvcnJvd191NjQoX19jZiwgX194LCBfX3ksIF9fcCk7Cit9CisjZW5kaWYKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19BRFhJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hbHRpdmVjLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2FsdGl2ZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjYwOGNmCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hbHRpdmVjLmgKQEAgLTAsMCArMSwxNTU4MiBAQAorLyo9PT0tLS0tIGFsdGl2ZWMuaCAtIFN0YW5kYXJkIGhlYWRlciBmb3IgdHlwZSBnZW5lcmljIG1hdGggLS0tLS0tLS0tLS0tLS0tPT09KlwKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorXCo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ki8KKworI2lmbmRlZiBfX0FMVElWRUNfSAorI2RlZmluZSBfX0FMVElWRUNfSAorCisjaWZuZGVmIF9fQUxUSVZFQ19fCisjZXJyb3IgIkFsdGlWZWMgc3VwcG9ydCBub3QgZW5hYmxlZCIKKyNlbmRpZgorCisvKiBDb25zdGFudHMgZm9yIG1hcHBpbmcgQ1I2IGJpdHMgdG8gcHJlZGljYXRlIHJlc3VsdC4gKi8KKworI2RlZmluZSBfX0NSNl9FUSAwCisjZGVmaW5lIF9fQ1I2X0VRX1JFViAxCisjZGVmaW5lIF9fQ1I2X0xUIDIKKyNkZWZpbmUgX19DUjZfTFRfUkVWIDMKKworI2RlZmluZSBfX0FUVFJTX29fYWkgX19hdHRyaWJ1dGVfXygoX19vdmVybG9hZGFibGVfXywgX19hbHdheXNfaW5saW5lX18pKQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19wZXJtKAorICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Blcm0odmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcGVybSgKKyAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfcGVybSgKKyAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19wZXJtKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfcGVybSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfcGVybSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfcGVybSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfeG9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKTsKKworLyogdmVjX2FicyAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX2Fic192MTZxaSB2ZWNfYWJzCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX2Fic192OGhpIHZlY19hYnMKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfYWJzX3Y0c2kgdmVjX2FicworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYWJzKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzYihfX2EsIC1fX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2Ficyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNoKF9fYSwgLV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2Ficyh2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzdyhfX2EsIC1fX2EpOworfQorCisjaWYgZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfYWJzKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNkKF9fYSwgLV9fYSk7Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfYWJzKHZlY3RvciBmbG9hdCBfX2EpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2YWJzc3AoX19hKTsKKyNlbHNlCisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpKDB4N0ZGRkZGRkYpOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2Ficyh2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmFic2RwKF9fYSk7Cit9CisjZW5kaWYKKworLyogdmVjX2Fic3MgKi8KKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfYWJzc192MTZxaSB2ZWNfYWJzcworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY19hYnNzX3Y4aGkgdmVjX2Fic3MKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfYWJzc192NHNpIHZlY19hYnNzCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hYnNzKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzYigKKyAgICAgIF9fYSwgX19idWlsdGluX2FsdGl2ZWNfdnN1YnNicygodmVjdG9yIHNpZ25lZCBjaGFyKSgwKSwgX19hKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfYWJzcyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNoKAorICAgICAgX19hLCBfX2J1aWx0aW5fYWx0aXZlY192c3Vic2hzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KSgwKSwgX19hKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2Fic3ModmVjdG9yIHNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c3coCisgICAgICBfX2EsIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzd3MoKHZlY3RvciBzaWduZWQgaW50KSgwKSwgX19hKSk7Cit9CisKKy8qIHZlY19hYnNkICovCisjaWYgZGVmaW5lZChfX1BPV0VSOV9WRUNUT1JfXykKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYWJzZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFic2R1YihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19hYnNkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhYnNkdWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2Fic2QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFic2R1dyhfX2EsIF9fYik7Cit9CisKKyNlbmRpZiAvKiBFbmQgX19QT1dFUjlfVkVDVE9SX18gKi8KKworLyogdmVjX2FkZCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYWRkKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2FkZCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hZGQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSArICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hZGQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYWRkKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2FkZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgKyAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICsgKHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19hZGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfYWRkKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19hZGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgKyAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgKyAodmVjdG9yIGludClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfYWRkKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2FkZCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2FkZCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hICsgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworfQorCisjaWYgZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfYWRkKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfYWRkKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX2FkZCh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX2FkZCh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisjZW5kaWYgLy8gZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorI2VuZGlmIC8vIF9fVlNYX18KKworLyogdmVjX2FkZGUgKi8KKworI2lmIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfYWRkZSh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IsCisgICAgICAgICB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGV1cW0oX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY19hZGRlKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkZXVxbShfX2EsIF9fYiwgX19jKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfYWRkZWMgKi8KKworI2lmIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfYWRkZWModmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkZWN1cShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX2FkZGVjKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGVjdXEoX19hLCBfX2IsIF9fYyk7Cit9CisjZW5kaWYKKworLyogdmVjX3ZhZGR1Ym0gKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWJtIHZlY192YWRkdWJtCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192YWRkdWJtKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhZGR1Ym0odmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFkZHVibSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICsgKHZlY3RvciBzaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhZGR1Ym0odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFkZHVibSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192YWRkdWJtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSArICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Cit9CisKKy8qIHZlY192YWRkdWhtICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdmFkZHVobSB2ZWNfdmFkZHVobQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192YWRkdWhtKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFkZHVobSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192YWRkdWhtKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICsgKHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192YWRkdWhtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZhZGR1aG0odmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZhZGR1aG0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgKyAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKK30KKworLyogdmVjX3ZhZGR1d20gKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192YWRkdXdtIHZlY192YWRkdXdtCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YWRkdXdtKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1d20odmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YWRkdXdtKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hICsgKHZlY3RvciBpbnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZhZGR1d20odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdmFkZHV3bSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZhZGR1d20odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKK30KKworLyogdmVjX3ZhZGRmcCAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRmcCB2ZWNfdmFkZGZwCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmFkZGZwKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworLyogdmVjX2FkZGMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfYWRkYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRjdXcoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19hZGRjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGN1dyhfX2EsIF9fYik7Cit9CisKKyNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX2FkZGModmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBfX2ludDEyOClfX2J1aWx0aW5fYWx0aXZlY192YWRkY3VxKAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOClfX2EsICh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjgpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX2FkZGModmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGN1cShfX2EsIF9fYik7Cit9CisjZW5kaWYgLy8gZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorCisvKiB2ZWNfdmFkZGN1dyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192YWRkY3V3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGN1dyhfX2EsIF9fYik7Cit9CisKKy8qIHZlY19hZGRzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hZGRzKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzYnMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYWRkcyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2FkZHModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2FkZHModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1YnMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hZGRzKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYWRkcyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWJzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNocyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2hzKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19hZGRzKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNocyhfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2FkZHModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHVocyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19hZGRzKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2FkZHModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWhzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc3dzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc3dzKCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc3dzKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19hZGRzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHV3cyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfYWRkcyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHV3cygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfYWRkcyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHV3cyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKy8qIHZlY192YWRkc2JzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192YWRkc2JzKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzYnMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFkZHNicyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhZGRzYnModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Cit9CisKKy8qIHZlY192YWRkdWJzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhZGR1YnModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1YnMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192YWRkdWJzKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFkZHVicyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWJzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKKy8qIHZlY192YWRkc2hzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhZGRzaHModmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNocyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhZGRzaHModmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2hzKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192YWRkc2hzKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNocyhfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworLyogdmVjX3ZhZGR1aHMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZhZGR1aHModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHVocyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192YWRkdWhzKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZhZGR1aHModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWhzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCisvKiB2ZWNfdmFkZHN3cyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFkZHN3cyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc3dzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhZGRzd3ModmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc3dzKCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhZGRzd3ModmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc3dzKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworLyogdmVjX3ZhZGR1d3MgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192YWRkdXdzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHV3cyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdmFkZHV3cyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHV3cygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdmFkZHV3cyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHV3cyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKyNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCisvKiB2ZWNfdmFkZHVxbSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3ZhZGR1cW0odmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY192YWRkdXFtKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworLyogdmVjX3ZhZGRldXFtICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdmFkZGV1cW0odmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iLAorICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkZXVxbShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3ZhZGRldXFtKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IsCisgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGV1cW0oX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY192YWRkY3VxICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdmFkZGN1cSh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRjdXEoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdmFkZGN1cSh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkY3VxKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZhZGRlY3VxICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdmFkZGVjdXEodmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iLAorICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkZWN1cShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3ZhZGRlY3VxKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IsCisgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGVjdXEoX19hLCBfX2IsIF9fYyk7Cit9CisjZW5kaWYgLy8gZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorCisvKiB2ZWNfYW5kICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdmFuZCB2ZWNfYW5kCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hbmQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYW5kKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgKHZlY3RvciBzaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hbmQodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYW5kKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19hbmQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19hbmQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIGludClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfYW5kKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hICYgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfYW5kKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hICYgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hICYgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hbmQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hbmQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hbmQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hbmQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisjZW5kaWYKKworLyogdmVjX3ZhbmQgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhbmQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFuZCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFuZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhbmQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgKHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZhbmQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZhbmQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdmFuZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmICh2ZWN0b3IgaW50KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZhbmQodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdmFuZCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdmFuZCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdmFuZCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdmFuZCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdmFuZCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisjZW5kaWYKKworLyogdmVjX2FuZGMgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192YW5kYyB2ZWNfYW5kYworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfih2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfYW5kYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIGludClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfYW5kYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgfih2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfYW5kYyh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfYW5kYyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorI2VuZGlmCisKKy8qIHZlY192YW5kYyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhbmRjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192YW5kYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfih2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192YW5kYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhbmRjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZhbmRjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgfih2ZWN0b3Igc2hvcnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZhbmRjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZhbmRjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfih2ZWN0b3IgaW50KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192YW5kYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3ZhbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3ZhbmRjKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3ZhbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJiB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3ZhbmRjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKyNlbmRpZgorCisvKiB2ZWNfYXZnICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19hdmcodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3NiKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfYXZnKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YXZndWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19hdmcodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YXZnc2goX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfYXZnKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zhdmd1aChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19hdmcodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YXZnc3coX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2F2Zyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zhdmd1dyhfX2EsIF9fYik7Cit9CisKKy8qIHZlY192YXZnc2IgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192YXZnc2IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3NiKF9fYSwgX19iKTsKK30KKworLyogdmVjX3Zhdmd1YiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmF2Z3ViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YXZndWIoX19hLCBfX2IpOworfQorCisvKiB2ZWNfdmF2Z3NoICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmF2Z3NoKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhdmdzaChfX2EsIF9fYik7Cit9CisKKy8qIHZlY192YXZndWggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192YXZndWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3VoKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZhdmdzdyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192YXZnc3codmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YXZnc3coX19hLCBfX2IpOworfQorCisvKiB2ZWNfdmF2Z3V3ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Zhdmd1dyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zhdmd1dyhfX2EsIF9fYik7Cit9CisKKy8qIHZlY19jZWlsICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2NlaWwodmVjdG9yIGZsb2F0IF9fYSkgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyc3BpcChfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZmlwKF9fYSk7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19jZWlsKHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cmRwaXAoX19hKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnJmaXAgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192cmZpcCh2ZWN0b3IgZmxvYXQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmZpcChfX2EpOworfQorCisvKiB2ZWNfY21wYiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19jbXBiKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBiZnAoX19hLCBfX2IpOworfQorCisvKiB2ZWNfdmNtcGJmcCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192Y21wYmZwKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBiZnAoX19hLCBfX2IpOworfQorCisvKiB2ZWNfY21wZXEgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19jbXBlcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1YigodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfY21wZXEodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViKCh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19jbXBlcSh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19jbXBlcSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWgoKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBlcSh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX2NtcGVxKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1dygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2NtcGVxKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2NtcGVxKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZCgKKyAgICAgICh2ZWN0b3IgbG9uZyBsb25nKV9fYSwgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBlcSh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3ZzeF94dmNtcGVxc3AoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxZnAoX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZXEodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl92c3hfeHZjbXBlcWRwKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19QT1dFUjlfVkVDVE9SX18KKy8qIHZlY19jbXBuZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2NtcG5lKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdmNtcG5lYigodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19jbXBuZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192Y21wbmViKCh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2NtcG5lKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192Y21wbmViKCh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19jbXBuZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBuZWgoKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX2NtcG5lKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBuZWgoKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX2NtcG5lKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192Y21wbmVoKCh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfY21wbmUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wbmV3KCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfY21wbmUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcG5ldygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX2NtcG5lKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wbmV3KCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykKKyAgICB+KF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkKCh2ZWN0b3IgbG9uZyBsb25nKV9fYSwgKHZlY3RvciBsb25nIGxvbmcpX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBuZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykKKyAgICB+KF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkKCh2ZWN0b3IgbG9uZyBsb25nKV9fYSwgKHZlY3RvciBsb25nIGxvbmcpX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBuZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpCisgICAgfihfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZCgodmVjdG9yIGxvbmcgbG9uZylfX2EsICh2ZWN0b3IgbG9uZyBsb25nKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfY21wbmUodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wbmV3KCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wbmUodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKQorICAgIH4oX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWQoKHZlY3RvciBsb25nIGxvbmcpX19hLCAodmVjdG9yIGxvbmcgbG9uZylfX2IpKTsKK30KKworLyogdmVjX2NtcG5leiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2NtcG5leih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192Y21wbmV6YigodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfY21wbmV6KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192Y21wbmV6YigodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX2NtcG5leih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192Y21wbmV6aCgodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX2NtcG5leih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcG5lemgoKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfY21wbmV6KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBuZXp3KCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX2NtcG5leih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcG5lencoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBzaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2NudGx6X2xzYmIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y3R6bHNiYihfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbHpsc2JiKF9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19jbnRsel9sc2JiKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y3R6bHNiYihfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbHpsc2JiKF9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19jbnR0el9sc2JiKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNsemxzYmIoX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y3R6bHNiYihfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfY250dHpfbHNiYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNsemxzYmIoX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y3R6bHNiYihfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfcGFyaXR5X2xzYmIodmVjdG9yIHVuc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZwcnR5YncoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19wYXJpdHlfbHNiYih2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZwcnR5YncoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3Bhcml0eV9sc2JiKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZwcnR5YnEoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3Bhcml0eV9sc2JiKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cHJ0eWJxKF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfcGFyaXR5X2xzYmIodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZwcnR5YmQoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19wYXJpdHlfbHNiYih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZwcnR5YmQoX19hKTsKK30KKworI2VuZGlmCisKKy8qIHZlY19jbXBndCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2NtcGd0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19jbXBndCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2NtcGd0KHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX2NtcGd0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2NtcGd0KHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3coX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfY21wZ3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3KF9fYSwgX19iKTsKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZ3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2QoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZ3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBndCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3ZzeF94dmNtcGd0c3AoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0ZnAoX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZ3QodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl92c3hfeHZjbXBndGRwKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfY21wZ2UgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19jbXBnZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB+KHZlY19jbXBndChfX2IsIF9fYSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2NtcGdlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB+KHZlY19jbXBndChfX2IsIF9fYSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19jbXBnZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4odmVjX2NtcGd0KF9fYiwgX19hKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX2NtcGdlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4odmVjX2NtcGd0KF9fYiwgX19hKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19jbXBnZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfih2ZWNfY21wZ3QoX19iLCBfX2EpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX2NtcGdlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfih2ZWNfY21wZ3QoX19iLCBfX2EpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfY21wZ2UodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl92c3hfeHZjbXBnZXNwKF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBnZWZwKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2NtcGdlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fdnN4X3h2Y21wZ2VkcChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZ2UodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4odmVjX2NtcGd0KF9fYiwgX19hKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBnZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4odmVjX2NtcGd0KF9fYiwgX19hKSk7Cit9CisjZW5kaWYKKworLyogdmVjX3ZjbXBnZWZwICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmNtcGdlZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ2VmcChfX2EsIF9fYik7Cit9CisKKy8qIHZlY192Y21wZ3RzYiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192Y21wZ3RzYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYihfX2EsIF9fYik7Cit9CisKKy8qIHZlY192Y21wZ3R1YiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192Y21wZ3R1Yih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWIoX19hLCBfX2IpOworfQorCisvKiB2ZWNfdmNtcGd0c2ggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZjbXBndHNoKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaChfX2EsIF9fYik7Cit9CisKKy8qIHZlY192Y21wZ3R1aCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmNtcGd0dWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZjbXBndHN3ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmNtcGd0c3codmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3KF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZjbXBndHV3ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmNtcGd0dXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3KF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZjbXBndGZwICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmNtcGd0ZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RmcChfX2EsIF9fYik7Cit9CisKKy8qIHZlY19jbXBsZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2NtcGxlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBnZShfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfY21wbGUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBnZShfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX2NtcGxlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX2NtcGdlKF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfY21wbGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX2NtcGdlKF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX2NtcGxlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ2UoX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfY21wbGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ2UoX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBsZSh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gdmVjX2NtcGdlKF9fYiwgX19hKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBsZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBnZShfX2IsIF9fYSk7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBnZShfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBsZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBnZShfX2IsIF9fYSk7Cit9CisjZW5kaWYKKworLyogdmVjX2NtcGx0ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfY21wbHQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX2NtcGd0KF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19jbXBsdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX2NtcGd0KF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19jbXBsdCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ3QoX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19jbXBsdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ3QoX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBsdCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ3QoX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfY21wbHQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ3QoX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBsdCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gdmVjX2NtcGd0KF9fYiwgX19hKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBsdCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBndChfX2IsIF9fYSk7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wbHQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBndChfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBsdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBndChfX2IsIF9fYSk7Cit9CisKKy8qIHZlY19wb3BjbnQgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3BvcGNudCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cG9wY250YihfX2EpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfcG9wY250KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBvcGNudGIoX19hKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfcG9wY250KHZlY3RvciBzaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cG9wY250aChfX2EpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3BvcGNudCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cG9wY250aChfX2EpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfcG9wY250KHZlY3RvciBzaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBvcGNudHcoX19hKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfcG9wY250KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cG9wY250dyhfX2EpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfcG9wY250KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBvcGNudGQoX19hKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfcG9wY250KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cG9wY250ZChfX2EpOworfQorCisvKiB2ZWNfY250bHogKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2NudGx6KHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbHpiKF9fYSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19jbnRseih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbHpiKF9fYSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2NudGx6KHZlY3RvciBzaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y2x6aChfX2EpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2NudGx6KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbHpoKF9fYSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19jbnRseih2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbHp3KF9fYSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2NudGx6KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y2x6dyhfX2EpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY250bHoodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y2x6ZChfX2EpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbnRseih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNsemQoX19hKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19QT1dFUjlfVkVDVE9SX18KKworLyogdmVjX2NudHR6ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19jbnR0eih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y3R6YihfX2EpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfY250dHoodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y3R6YihfX2EpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19jbnR0eih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmN0emgoX19hKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19jbnR0eih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y3R6aChfX2EpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfY250dHoodmVjdG9yIHNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y3R6dyhfX2EpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19jbnR0eih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmN0encoX19hKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2NudHR6KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmN0emQoX19hKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY250dHoodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjdHpkKF9fYSk7Cit9CisKKy8qIHZlY19maXJzdF9tYXRjaF9pbmRleCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX0FUVFJTX29fYWkKK3ZlY19maXJzdF9tYXRjaF9pbmRleCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgICAgdmVjX2NudHR6KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKXZlY19jbXBlcShfX2EsIF9fYikpOworI2Vsc2UKKyAgICB2ZWNfY250bHooKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpdmVjX2NtcGVxKF9fYSwgX19iKSk7CisjZW5kaWYKKyAgaWYgKF9fcmVzWzBdID09IDY0KSB7CisgICAgcmV0dXJuIChfX3Jlc1sxXSArIDY0KSA+PiAzOworICB9CisgIHJldHVybiBfX3Jlc1swXSA+PiAzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX0FUVFJTX29fYWkKK3ZlY19maXJzdF9tYXRjaF9pbmRleCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICAgIHZlY19jbnR0eigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyl2ZWNfY21wZXEoX19hLCBfX2IpKTsKKyNlbHNlCisgICAgdmVjX2NudGx6KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKXZlY19jbXBlcShfX2EsIF9fYikpOworI2VuZGlmCisgIGlmIChfX3Jlc1swXSA9PSA2NCkgeworICAgIHJldHVybiAoX19yZXNbMV0gKyA2NCkgPj4gMzsKKyAgfQorICByZXR1cm4gX19yZXNbMF0gPj4gMzsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19BVFRSU19vX2FpCit2ZWNfZmlyc3RfbWF0Y2hfaW5kZXgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgICAgdmVjX2NudHR6KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKXZlY19jbXBlcShfX2EsIF9fYikpOworI2Vsc2UKKyAgICB2ZWNfY250bHooKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpdmVjX2NtcGVxKF9fYSwgX19iKSk7CisjZW5kaWYKKyAgaWYgKF9fcmVzWzBdID09IDY0KSB7CisgICAgcmV0dXJuIChfX3Jlc1sxXSArIDY0KSA+PiA0OworICB9CisgIHJldHVybiBfX3Jlc1swXSA+PiA0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX0FUVFJTX29fYWkKK3ZlY19maXJzdF9tYXRjaF9pbmRleCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgICAgdmVjX2NudHR6KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKXZlY19jbXBlcShfX2EsIF9fYikpOworI2Vsc2UKKyAgICB2ZWNfY250bHooKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpdmVjX2NtcGVxKF9fYSwgX19iKSk7CisjZW5kaWYKKyAgaWYgKF9fcmVzWzBdID09IDY0KSB7CisgICAgcmV0dXJuIChfX3Jlc1sxXSArIDY0KSA+PiA0OworICB9CisgIHJldHVybiBfX3Jlc1swXSA+PiA0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX0FUVFJTX29fYWkKK3ZlY19maXJzdF9tYXRjaF9pbmRleCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICAgIHZlY19jbnR0eigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyl2ZWNfY21wZXEoX19hLCBfX2IpKTsKKyNlbHNlCisgICAgdmVjX2NudGx6KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKXZlY19jbXBlcShfX2EsIF9fYikpOworI2VuZGlmCisgIGlmIChfX3Jlc1swXSA9PSA2NCkgeworICAgIHJldHVybiAoX19yZXNbMV0gKyA2NCkgPj4gNTsKKyAgfQorICByZXR1cm4gX19yZXNbMF0gPj4gNTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19BVFRSU19vX2FpCit2ZWNfZmlyc3RfbWF0Y2hfaW5kZXgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgICAgdmVjX2NudHR6KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKXZlY19jbXBlcShfX2EsIF9fYikpOworI2Vsc2UKKyAgICB2ZWNfY250bHooKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpdmVjX2NtcGVxKF9fYSwgX19iKSk7CisjZW5kaWYKKyAgaWYgKF9fcmVzWzBdID09IDY0KSB7CisgICAgcmV0dXJuIChfX3Jlc1sxXSArIDY0KSA+PiA1OworICB9CisgIHJldHVybiBfX3Jlc1swXSA+PiA1OworfQorCisvKiB2ZWNfZmlyc3RfbWF0Y2hfb3JfZW9zX2luZGV4ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9fQVRUUlNfb19haQordmVjX2ZpcnN0X21hdGNoX29yX2Vvc19pbmRleCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIC8qIENvbXBhcmUgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBvZiB0d28gdmVjdG9ycyB3aXRoIGVpdGhlciBhbmQgT1IgdGhlCisgICAgIHJlc3VsdC4gRWl0aGVyIHRoZSBlbGVtZW50cyBhcmUgZXF1YWwgb3Igb25lIHdpbGwgZXF1YWwgdGhlIGNvbXBhcmlzb24KKyAgICAgcmVzdWx0IGlmIGVpdGhlciBpcyB6ZXJvLgorICAqLworICB2ZWN0b3IgYm9vbCBjaGFyIF9fdG1wMSA9IHZlY19jbXBlcShfX2EsIF9fYik7CisgIHZlY3RvciBib29sIGNoYXIgX190bXAyID0gX190bXAxIHwgdmVjX2NtcGVxKF9fdG1wMSwgX19hKSB8CisgICAgdmVjX2NtcGVxKF9fdG1wMSwgX19iKTsKKworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICAgIHZlY19jbnR0eigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX3RtcDIpOworI2Vsc2UKKyAgICB2ZWNfY250bHooKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX190bXAyKTsKKyNlbmRpZgorICBpZiAoX19yZXNbMF0gPT0gNjQpIHsKKyAgICByZXR1cm4gKF9fcmVzWzFdICsgNjQpID4+IDM7CisgIH0KKyAgcmV0dXJuIF9fcmVzWzBdID4+IDM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9fQVRUUlNfb19haQordmVjX2ZpcnN0X21hdGNoX29yX2Vvc19pbmRleCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICB2ZWN0b3IgYm9vbCBjaGFyIF9fdG1wMSA9IHZlY19jbXBlcShfX2EsIF9fYik7CisgIHZlY3RvciBib29sIGNoYXIgX190bXAyID0gX190bXAxIHwgdmVjX2NtcGVxKF9fdG1wMSwgX19hKSB8CisgICAgdmVjX2NtcGVxKF9fdG1wMSwgX19iKTsKKworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICAgIHZlY19jbnR0eigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX3RtcDIpOworI2Vsc2UKKyAgICB2ZWNfY250bHooKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX190bXAyKTsKKyNlbmRpZgorICBpZiAoX19yZXNbMF0gPT0gNjQpIHsKKyAgICByZXR1cm4gKF9fcmVzWzFdICsgNjQpID4+IDM7CisgIH0KKyAgcmV0dXJuIF9fcmVzWzBdID4+IDM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9fQVRUUlNfb19haQordmVjX2ZpcnN0X21hdGNoX29yX2Vvc19pbmRleCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgdmVjdG9yIGJvb2wgc2hvcnQgX190bXAxID0gdmVjX2NtcGVxKF9fYSwgX19iKTsKKyAgdmVjdG9yIGJvb2wgc2hvcnQgX190bXAyID0gX190bXAxIHwgdmVjX2NtcGVxKF9fdG1wMSwgX19hKSB8CisgICAgdmVjX2NtcGVxKF9fdG1wMSwgX19iKTsKKworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICAgIHZlY19jbnR0eigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX3RtcDIpOworI2Vsc2UKKyAgICB2ZWNfY250bHooKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX190bXAyKTsKKyNlbmRpZgorICBpZiAoX19yZXNbMF0gPT0gNjQpIHsKKyAgICByZXR1cm4gKF9fcmVzWzFdICsgNjQpID4+IDQ7CisgIH0KKyAgcmV0dXJuIF9fcmVzWzBdID4+IDQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9fQVRUUlNfb19haQordmVjX2ZpcnN0X21hdGNoX29yX2Vvc19pbmRleCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHZlY3RvciBib29sIHNob3J0IF9fdG1wMSA9IHZlY19jbXBlcShfX2EsIF9fYik7CisgIHZlY3RvciBib29sIHNob3J0IF9fdG1wMiA9IF9fdG1wMSB8IHZlY19jbXBlcShfX3RtcDEsIF9fYSkgfAorICAgIHZlY19jbXBlcShfX3RtcDEsIF9fYik7CisKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgICB2ZWNfY250dHooKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX190bXAyKTsKKyNlbHNlCisgICAgdmVjX2NudGx6KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fdG1wMik7CisjZW5kaWYKKyAgaWYgKF9fcmVzWzBdID09IDY0KSB7CisgICAgcmV0dXJuIChfX3Jlc1sxXSArIDY0KSA+PiA0OworICB9CisgIHJldHVybiBfX3Jlc1swXSA+PiA0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX0FUVFJTX29fYWkKK3ZlY19maXJzdF9tYXRjaF9vcl9lb3NfaW5kZXgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgdmVjdG9yIGJvb2wgaW50IF9fdG1wMSA9IHZlY19jbXBlcShfX2EsIF9fYik7CisgIHZlY3RvciBib29sIGludCBfX3RtcDIgPSBfX3RtcDEgfCB2ZWNfY21wZXEoX190bXAxLCBfX2EpIHwKKyAgICB2ZWNfY21wZXEoX190bXAxLCBfX2IpOworCisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgICAgdmVjX2NudHR6KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fdG1wMik7CisjZWxzZQorICAgIHZlY19jbnRseigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX3RtcDIpOworI2VuZGlmCisgIGlmIChfX3Jlc1swXSA9PSA2NCkgeworICAgIHJldHVybiAoX19yZXNbMV0gKyA2NCkgPj4gNTsKKyAgfQorICByZXR1cm4gX19yZXNbMF0gPj4gNTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19BVFRSU19vX2FpCit2ZWNfZmlyc3RfbWF0Y2hfb3JfZW9zX2luZGV4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICB2ZWN0b3IgYm9vbCBpbnQgX190bXAxID0gdmVjX2NtcGVxKF9fYSwgX19iKTsKKyAgdmVjdG9yIGJvb2wgaW50IF9fdG1wMiA9IF9fdG1wMSB8IHZlY19jbXBlcShfX3RtcDEsIF9fYSkgfAorICAgIHZlY19jbXBlcShfX3RtcDEsIF9fYik7CisKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgICB2ZWNfY250dHooKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX190bXAyKTsKKyNlbHNlCisgICAgdmVjX2NudGx6KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fdG1wMik7CisjZW5kaWYKKyAgaWYgKF9fcmVzWzBdID09IDY0KSB7CisgICAgcmV0dXJuIChfX3Jlc1sxXSArIDY0KSA+PiA1OworICB9CisgIHJldHVybiBfX3Jlc1swXSA+PiA1OworfQorCisvKiB2ZWNfZmlyc3RfbWlzbWF0Y2hfaW5kZXggKi8KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19BVFRSU19vX2FpCit2ZWNfZmlyc3RfbWlzbWF0Y2hfaW5kZXgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICAgIHZlY19jbnR0eigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyl2ZWNfY21wbmUoX19hLCBfX2IpKTsKKyNlbHNlCisgICAgdmVjX2NudGx6KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKXZlY19jbXBuZShfX2EsIF9fYikpOworI2VuZGlmCisgIGlmIChfX3Jlc1swXSA9PSA2NCkgeworICAgIHJldHVybiAoX19yZXNbMV0gKyA2NCkgPj4gMzsKKyAgfQorICByZXR1cm4gX19yZXNbMF0gPj4gMzsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19BVFRSU19vX2FpCit2ZWNfZmlyc3RfbWlzbWF0Y2hfaW5kZXgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgICB2ZWNfY250dHooKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpdmVjX2NtcG5lKF9fYSwgX19iKSk7CisjZWxzZQorICAgIHZlY19jbnRseigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyl2ZWNfY21wbmUoX19hLCBfX2IpKTsKKyNlbmRpZgorICBpZiAoX19yZXNbMF0gPT0gNjQpIHsKKyAgICByZXR1cm4gKF9fcmVzWzFdICsgNjQpID4+IDM7CisgIH0KKyAgcmV0dXJuIF9fcmVzWzBdID4+IDM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9fQVRUUlNfb19haQordmVjX2ZpcnN0X21pc21hdGNoX2luZGV4KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICAgIHZlY19jbnR0eigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyl2ZWNfY21wbmUoX19hLCBfX2IpKTsKKyNlbHNlCisgICAgdmVjX2NudGx6KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKXZlY19jbXBuZShfX2EsIF9fYikpOworI2VuZGlmCisgIGlmIChfX3Jlc1swXSA9PSA2NCkgeworICAgIHJldHVybiAoX19yZXNbMV0gKyA2NCkgPj4gNDsKKyAgfQorICByZXR1cm4gX19yZXNbMF0gPj4gNDsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19BVFRSU19vX2FpCit2ZWNfZmlyc3RfbWlzbWF0Y2hfaW5kZXgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICAgIHZlY19jbnR0eigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyl2ZWNfY21wbmUoX19hLCBfX2IpKTsKKyNlbHNlCisgICAgdmVjX2NudGx6KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKXZlY19jbXBuZShfX2EsIF9fYikpOworI2VuZGlmCisgIGlmIChfX3Jlc1swXSA9PSA2NCkgeworICAgIHJldHVybiAoX19yZXNbMV0gKyA2NCkgPj4gNDsKKyAgfQorICByZXR1cm4gX19yZXNbMF0gPj4gNDsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19BVFRSU19vX2FpCit2ZWNfZmlyc3RfbWlzbWF0Y2hfaW5kZXgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgICB2ZWNfY250dHooKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpdmVjX2NtcG5lKF9fYSwgX19iKSk7CisjZWxzZQorICAgIHZlY19jbnRseigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyl2ZWNfY21wbmUoX19hLCBfX2IpKTsKKyNlbmRpZgorICBpZiAoX19yZXNbMF0gPT0gNjQpIHsKKyAgICByZXR1cm4gKF9fcmVzWzFdICsgNjQpID4+IDU7CisgIH0KKyAgcmV0dXJuIF9fcmVzWzBdID4+IDU7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9fQVRUUlNfb19haQordmVjX2ZpcnN0X21pc21hdGNoX2luZGV4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICAgIHZlY19jbnR0eigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyl2ZWNfY21wbmUoX19hLCBfX2IpKTsKKyNlbHNlCisgICAgdmVjX2NudGx6KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKXZlY19jbXBuZShfX2EsIF9fYikpOworI2VuZGlmCisgIGlmIChfX3Jlc1swXSA9PSA2NCkgeworICAgIHJldHVybiAoX19yZXNbMV0gKyA2NCkgPj4gNTsKKyAgfQorICByZXR1cm4gX19yZXNbMF0gPj4gNTsKK30KKworLyogdmVjX2ZpcnN0X21pc21hdGNoX29yX2Vvc19pbmRleCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX0FUVFJTX29fYWkKK3ZlY19maXJzdF9taXNtYXRjaF9vcl9lb3NfaW5kZXgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICAgIHZlY19jbnR0eigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyl2ZWNfY21wbmV6KF9fYSwgX19iKSk7CisjZWxzZQorICAgIHZlY19jbnRseigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyl2ZWNfY21wbmV6KF9fYSwgX19iKSk7CisjZW5kaWYKKyAgaWYgKF9fcmVzWzBdID09IDY0KSB7CisgICAgcmV0dXJuIChfX3Jlc1sxXSArIDY0KSA+PiAzOworICB9CisgIHJldHVybiBfX3Jlc1swXSA+PiAzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX0FUVFJTX29fYWkKK3ZlY19maXJzdF9taXNtYXRjaF9vcl9lb3NfaW5kZXgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgICB2ZWNfY250dHooKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpdmVjX2NtcG5leihfX2EsIF9fYikpOworI2Vsc2UKKyAgICB2ZWNfY250bHooKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpdmVjX2NtcG5leihfX2EsIF9fYikpOworI2VuZGlmCisgIGlmIChfX3Jlc1swXSA9PSA2NCkgeworICAgIHJldHVybiAoX19yZXNbMV0gKyA2NCkgPj4gMzsKKyAgfQorICByZXR1cm4gX19yZXNbMF0gPj4gMzsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19BVFRSU19vX2FpCit2ZWNfZmlyc3RfbWlzbWF0Y2hfb3JfZW9zX2luZGV4KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICAgIHZlY19jbnR0eigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyl2ZWNfY21wbmV6KF9fYSwgX19iKSk7CisjZWxzZQorICAgIHZlY19jbnRseigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyl2ZWNfY21wbmV6KF9fYSwgX19iKSk7CisjZW5kaWYKKyAgaWYgKF9fcmVzWzBdID09IDY0KSB7CisgICAgcmV0dXJuIChfX3Jlc1sxXSArIDY0KSA+PiA0OworICB9CisgIHJldHVybiBfX3Jlc1swXSA+PiA0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX0FUVFJTX29fYWkKK3ZlY19maXJzdF9taXNtYXRjaF9vcl9lb3NfaW5kZXgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICAgIHZlY19jbnR0eigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyl2ZWNfY21wbmV6KF9fYSwgX19iKSk7CisjZWxzZQorICAgIHZlY19jbnRseigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyl2ZWNfY21wbmV6KF9fYSwgX19iKSk7CisjZW5kaWYKKyAgaWYgKF9fcmVzWzBdID09IDY0KSB7CisgICAgcmV0dXJuIChfX3Jlc1sxXSArIDY0KSA+PiA0OworICB9CisgIHJldHVybiBfX3Jlc1swXSA+PiA0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX0FUVFJTX29fYWkKK3ZlY19maXJzdF9taXNtYXRjaF9vcl9lb3NfaW5kZXgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgICB2ZWNfY250dHooKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpdmVjX2NtcG5leihfX2EsIF9fYikpOworI2Vsc2UKKyAgICB2ZWNfY250bHooKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpdmVjX2NtcG5leihfX2EsIF9fYikpOworI2VuZGlmCisgIGlmIChfX3Jlc1swXSA9PSA2NCkgeworICAgIHJldHVybiAoX19yZXNbMV0gKyA2NCkgPj4gNTsKKyAgfQorICByZXR1cm4gX19yZXNbMF0gPj4gNTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19BVFRSU19vX2FpCit2ZWNfZmlyc3RfbWlzbWF0Y2hfb3JfZW9zX2luZGV4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICAgIHZlY19jbnR0eigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyl2ZWNfY21wbmV6KF9fYSwgX19iKSk7CisjZWxzZQorICAgIHZlY19jbnRseigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyl2ZWNfY21wbmV6KF9fYSwgX19iKSk7CisjZW5kaWYKKyAgaWYgKF9fcmVzWzBdID09IDY0KSB7CisgICAgcmV0dXJuIChfX3Jlc1sxXSArIDY0KSA+PiA1OworICB9CisgIHJldHVybiBfX3Jlc1swXSA+PiA1OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlICBfX0FUVFJTX29fYWkKK3ZlY19pbnNlcnRfZXhwKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmlleHBkcCgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSAgX19BVFRSU19vX2FpCit2ZWNfaW5zZXJ0X2V4cCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZpZXhwZHAoX19hLF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCAgX19BVFRSU19vX2FpCit2ZWNfaW5zZXJ0X2V4cCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmlleHBzcCgodmVjdG9yIHVuc2lnbmVkIGludClfX2EsX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0ICBfX0FUVFJTX29fYWkKK3ZlY19pbnNlcnRfZXhwKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmlleHBzcChfX2EsX19iKTsKK30KKworI2VuZGlmCisKKy8qIHZlY19jcHNnbiAqLworCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfY3BzZ24odmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjcHNnbnNwKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2Nwc2duKHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y3BzZ25kcChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX2N0ZiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19jdGYodmVjdG9yIGludCBfX2EsIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjZnN4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfY3RmKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjZnV4KCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfY3RmKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCBpbnQgX19iKSB7CisgIHZlY3RvciBkb3VibGUgX19yZXQgPSBfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2EsIHZlY3RvciBkb3VibGUpOworICBfX3JldCAqPSAodmVjdG9yIGRvdWJsZSkodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoKDB4M2ZmVUxMIC0gX19iKSA8PCA1Mik7CisgIHJldHVybiBfX3JldDsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY19jdGYodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCBpbnQgX19iKSB7CisgIHZlY3RvciBkb3VibGUgX19yZXQgPSBfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2EsIHZlY3RvciBkb3VibGUpOworICBfX3JldCAqPSAodmVjdG9yIGRvdWJsZSkodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoKDB4M2ZmVUxMIC0gX19iKSA8PCA1Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisvKiB2ZWNfdmNmc3ggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192Y2ZzeCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNmc3goX19hLCBfX2IpOworfQorCisvKiB2ZWNfdmNmdXggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192Y2Z1eCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNmdXgoKHZlY3RvciBpbnQpX19hLCBfX2IpOworfQorCisvKiB2ZWNfY3RzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19jdHModmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmN0c3hzKF9fYSwgX19iKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2N0cyh2ZWN0b3IgZG91YmxlIF9fYSwgaW50IF9fYikgeworICBfX2EgKj0gKHZlY3RvciBkb3VibGUpKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKCgweDNmZlVMTCArIF9fYikgPDwgNTIpOworICByZXR1cm4gX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyk7Cit9CisjZW5kaWYKKworLyogdmVjX3ZjdHN4cyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192Y3RzeHModmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmN0c3hzKF9fYSwgX19iKTsKK30KKworLyogdmVjX2N0dSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfY3R1KHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjdHV4cyhfX2EsIF9fYik7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2N0dSh2ZWN0b3IgZG91YmxlIF9fYSwgaW50IF9fYikgeworICBfX2EgKj0gKHZlY3RvciBkb3VibGUpKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKCgweDNmZlVMTCArIF9fYikgPDwgNTIpOworICByZXR1cm4gX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdmN0dXhzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZjdHV4cyh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y3R1eHMoX19hLCBfX2IpOworfQorCisvKiB2ZWNfZG91YmxlICovCisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX2RvdWJsZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgdmVjdG9yIGRvdWJsZSBfX3JldCA9IHtfX2FbMF0sIF9fYVsxXX07CisgIHJldHVybiBfX3JldDsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY19kb3VibGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgdmVjdG9yIGRvdWJsZSBfX3JldCA9IHtfX2FbMF0sIF9fYVsxXX07CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisvKiB2ZWNfZGl2ICovCisKKy8qIEludGVnZXIgdmVjdG9yIGRpdmlkZXMgKHZlY3RvcnMgYXJlIHNjYWxhcml6ZWQsIGVsZW1lbnRzIGRpdmlkZWQKKyAgIGFuZCB0aGUgdmVjdG9ycyByZWFzc2VtYmxlZCkuCisqLworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgLyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIC8gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAvIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgLyBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hIC8gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAvIF9fYjsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIC8gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAvIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfZGl2KHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gX19hIC8gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfZGl2KHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19hIC8gX19iOworfQorI2VuZGlmCisKKy8qIHZlY19kc3MgKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpIHZlY19kc3MoaW50IF9fYSkgeworICBfX2J1aWx0aW5fYWx0aXZlY19kc3MoX19hKTsKK30KKworLyogdmVjX2Rzc2FsbCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkgdmVjX2Rzc2FsbCh2b2lkKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX2Rzc2FsbCgpOworfQorCisvKiB2ZWNfZHN0ICovCisjZGVmaW5lIHZlY19kc3QoX19QVFIsIF9fQ1csIF9fU1RSKSBcCisgIF9fZXh0ZW5zaW9uX18oICAgICAgICAgICAgICAgICAgICBcCisgICAgICB7IF9fYnVpbHRpbl9hbHRpdmVjX2RzdCgoY29uc3Qgdm9pZCAqKShfX1BUUiksIChfX0NXKSwgKF9fU1RSKSk7IH0pCisKKy8qIHZlY19kc3RzdCAqLworI2RlZmluZSB2ZWNfZHN0c3QoX19QVFIsIF9fQ1csIF9fU1RSKSBcCisgIF9fZXh0ZW5zaW9uX18oICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgX19idWlsdGluX2FsdGl2ZWNfZHN0c3QoKGNvbnN0IHZvaWQgKikoX19QVFIpLCAoX19DVyksIChfX1NUUikpOyB9KQorCisvKiB2ZWNfZHN0c3R0ICovCisjZGVmaW5lIHZlY19kc3RzdHQoX19QVFIsIF9fQ1csIF9fU1RSKSBcCisgIF9fZXh0ZW5zaW9uX18oICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB7IF9fYnVpbHRpbl9hbHRpdmVjX2RzdHN0dCgoY29uc3Qgdm9pZCAqKShfX1BUUiksIChfX0NXKSwgKF9fU1RSKSk7IH0pCisKKy8qIHZlY19kc3R0ICovCisjZGVmaW5lIHZlY19kc3R0KF9fUFRSLCBfX0NXLCBfX1NUUikgXAorICBfX2V4dGVuc2lvbl9fKCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgX19idWlsdGluX2FsdGl2ZWNfZHN0dCgoY29uc3Qgdm9pZCAqKShfX1BUUiksIChfX0NXKSwgKF9fU1RSKSk7IH0pCisKKy8qIHZlY19lcXYgKi8KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfZXF2KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19lcXYodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fdnN4X3h4bGVxdigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2Vxdih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfZXF2KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2Vxdih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfZXF2KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2Vxdih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2Vxdih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHhsZXF2KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfZXF2KHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fdnN4X3h4bGVxdigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2Vxdih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl92c3hfeHhsZXF2KAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2Vxdih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl92c3hfeHhsZXF2KAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfZXF2KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19lcXYodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2Vxdih2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX2V4cHRlICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfZXhwdGUodmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmV4cHRlZnAoX19hKTsKK30KKworLyogdmVjX3ZleHB0ZWZwICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmV4cHRlZnAodmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmV4cHRlZnAoX19hKTsKK30KKworLyogdmVjX2Zsb29yICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2Zsb29yKHZlY3RvciBmbG9hdCBfX2EpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cnNwaW0oX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmZpbShfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfZmxvb3IodmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyZHBpbShfX2EpOworfQorI2VuZGlmCisKKy8qIHZlY192cmZpbSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZyZmltKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZmltKF9fYSk7Cit9CisKKy8qIHZlY19sZCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2xkKGludCBfX2EsIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2xkKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwgY29uc3Qgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2xkKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX2xkKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19sZChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbGQoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19sZChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwgY29uc3QgZmxvYXQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCisvKiB2ZWNfbHZ4ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdngoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2eChpbnQgX19hLCBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2eChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZ4KGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZ4KGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZ4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZ4KGludCBfX2EsIGNvbnN0IHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2x2eChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZ4KGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZ4KGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZ4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2eChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19sdngoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2x2eChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX2x2eChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgZmxvYXQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwgY29uc3QgZmxvYXQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCisvKiB2ZWNfbGRlICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sZGUoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdmVieChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2xkZShpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdmVieChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2xkZShpbnQgX19hLCBjb25zdCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2ZWh4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2xkZShpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2ZWh4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2xkZShpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZld3goX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2xkZShpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZld3goX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sZGUoaW50IF9fYSwgY29uc3QgZmxvYXQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY19sdmV3eChfX2EsIF9fYik7Cit9CisKKy8qIHZlY19sdmVieCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZlYngoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdmVieChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2ZWJ4KGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2ZWJ4KF9fYSwgX19iKTsKK30KKworLyogdmVjX2x2ZWh4ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2ZWh4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2ZWh4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2x2ZWh4KGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZlaHgoX19hLCBfX2IpOworfQorCisvKiB2ZWNfbHZld3ggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2ZXd4KGludCBfX2EsIGNvbnN0IGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY19sdmV3eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbHZld3goaW50IF9fYSwgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2ZXd4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZld3goaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfbHZld3goX19hLCBfX2IpOworfQorCisvKiB2ZWNfbGRsICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sZGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sZGwoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbGRsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbGRsKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2xkbChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sZGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3Igc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsIGNvbnN0IHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sZGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sZGwoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbGRsKGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIHBpeGVsICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sZGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2xkbChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbGRsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbGRsKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX2xkbChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2xkbChpbnQgX19hLCBjb25zdCBmbG9hdCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCisvKiB2ZWNfbHZ4bCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2eGwoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2eGwoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sdnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sdnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfbHZ4bChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2eGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsIGNvbnN0IGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19sdnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19sdnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBmbG9hdCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKKy8qIHZlY19sb2dlICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfbG9nZSh2ZWN0b3IgZmxvYXQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bG9nZWZwKF9fYSk7Cit9CisKKy8qIHZlY192bG9nZWZwICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmxvZ2VmcCh2ZWN0b3IgZmxvYXQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bG9nZWZwKF9fYSk7Cit9CisKKy8qIHZlY19sdnNsICovCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCisgICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCitsb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNsKGludCBfX2EsIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFzayA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHJldmVyc2UgPSB7MTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LCAgNiwgIDUsICA0LCAgMywgIDIsICAxLCAwfTsKKyAgcmV0dXJuIHZlY19wZXJtKG1hc2ssIG1hc2ssIHJldmVyc2UpOworfQorI2Vsc2UKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2c2woaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCisgICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCitsb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNsKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OworICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Cit9CisjZWxzZQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZzbChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQorICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAorbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzbChpbnQgX19hLCBjb25zdCBzaG9ydCAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2c2woaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKK2xvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c2woaW50IF9fYSwgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OworICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Cit9CisjZWxzZQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZzbChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKK2xvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c2woaW50IF9fYSwgY29uc3QgaW50ICpfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFzayA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHJldmVyc2UgPSB7MTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LCAgNiwgIDUsICA0LCAgMywgIDIsICAxLCAwfTsKKyAgcmV0dXJuIHZlY19wZXJtKG1hc2ssIG1hc2ssIHJldmVyc2UpOworfQorI2Vsc2UKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzbChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKK2xvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c2woaW50IF9fYSwgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFzayA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHJldmVyc2UgPSB7MTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LCAgNiwgIDUsICA0LCAgMywgIDIsICAxLCAwfTsKKyAgcmV0dXJuIHZlY19wZXJtKG1hc2ssIG1hc2ssIHJldmVyc2UpOworfQorI2Vsc2UKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2c2woaW50IF9fYSwgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQorICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAorbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzbChpbnQgX19hLCBjb25zdCBmbG9hdCAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2c2woaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX2x2c3IgKi8KKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKK2xvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c3IoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OworICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Cit9CisjZWxzZQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZzcihpbnQgX19hLCBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzcihfX2EsIF9fYik7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKK2xvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c3IoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdnNyKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCisgICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCitsb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNyKGludCBfX2EsIGNvbnN0IHNob3J0ICpfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFzayA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzcihfX2EsIF9fYik7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHJldmVyc2UgPSB7MTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LCAgNiwgIDUsICA0LCAgMywgIDIsICAxLCAwfTsKKyAgcmV0dXJuIHZlY19wZXJtKG1hc2ssIG1hc2ssIHJldmVyc2UpOworfQorI2Vsc2UKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzcihpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQorICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAorbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzcihpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdnNyKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQorICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAorbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzcihpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OworICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Cit9CisjZWxzZQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnNyKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQorICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAorbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzcihpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OworICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Cit9CisjZWxzZQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZzcihpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCisgICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCitsb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNyKGludCBfX2EsIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFzayA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzcihfX2EsIF9fYik7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHJldmVyc2UgPSB7MTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LCAgNiwgIDUsICA0LCAgMywgIDIsICAxLCAwfTsKKyAgcmV0dXJuIHZlY19wZXJtKG1hc2ssIG1hc2ssIHJldmVyc2UpOworfQorI2Vsc2UKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzcihpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfbWFkZCAqLworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tbGFkZCh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWxhZGQodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tbGFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX21sYWRkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbWFkZCgKKyAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsIHZlY3RvciBzaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiB2ZWNfbWxhZGQoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWFkZCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIHZlY19tbGFkZChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tYWRkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIHZlY19tbGFkZChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX21hZGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIHZlY19tbGFkZChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbWFkZCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19jKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dm1hZGRhc3AoX19hLCBfX2IsIF9fYyk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1hZGRmcChfX2EsIF9fYiwgX19jKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX21hZGQodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bWFkZGFkcChfX2EsIF9fYiwgX19jKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdm1hZGRmcCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZtYWRkZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYiwgdmVjdG9yIGZsb2F0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1hZGRmcChfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX21hZGRzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX21hZGRzKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1oYWRkc2hzKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfdm1oYWRkc2hzICovCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bWhhZGRzaHModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1oYWRkc2hzKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfbXN1YiAqLworCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbXN1Yih2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bXN1YmFzcChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX21zdWIodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bXN1YmFkcChfX2EsIF9fYiwgX19jKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfbWF4ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19tYXgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNiKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX21heCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNiKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2IoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX21heCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHViKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHViKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzaChfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX21heCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHVoKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHN3KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHN3KCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHN3KF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dXcoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX21heCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHV3KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1dyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2QoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tYXgodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2QoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNkKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHVkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tYXgodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1ZCgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWQoX19hLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bWF4c3AoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhmcChfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bWF4ZHAoX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY192bWF4c2IgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZtYXhzYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2IoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm1heHNiKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2IoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192bWF4c2IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzYihfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyogdmVjX3ZtYXh1YiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192bWF4dWIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1YihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZtYXh1Yih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm1heHViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1YihfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCisvKiB2ZWNfdm1heHNoICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtYXhzaCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtYXhzaCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192bWF4c2godmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzaChfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworLyogdmVjX3ZtYXh1aCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm1heHVoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1aChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bWF4dWgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bWF4dWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWgoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKKy8qIHZlY192bWF4c3cgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZtYXhzdyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzdyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192bWF4c3codmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzdygodmVjdG9yIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192bWF4c3codmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzdyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKy8qIHZlY192bWF4dXcgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192bWF4dXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dXcoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZtYXh1dyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHV3KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192bWF4dXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1dyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKy8qIHZlY192bWF4ZnAgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bWF4ZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZtYXhzcChfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heGZwKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfbWVyZ2VoICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MTAsIDB4MDEsIDB4MTEsIDB4MDIsIDB4MTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMsIDB4MTMsIDB4MDQsIDB4MTQsIDB4MDUsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MTYsIDB4MDcsIDB4MTcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgxMCwgMHgwMSwgMHgxMSwgMHgwMiwgMHgxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMywgMHgxMywgMHgwNCwgMHgxNCwgMHgwNSwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgxNiwgMHgwNywgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX21lcmdlaCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDEwLCAweDAxLCAweDExLCAweDAyLCAweDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzLCAweDEzLCAweDA0LCAweDE0LCAweDA1LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDE2LCAweDA3LCAweDE3KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21lcmdlaCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDEwLCAweDExLCAweDAyLCAweDAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDE0LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MTAsIDB4MTEsIDB4MDIsIDB4MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MTQsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MDcsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgxMCwgMHgxMSwgMHgwMiwgMHgwMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgxNCwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19tZXJnZWgodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgxMCwgMHgxMSwgMHgwMiwgMHgwMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgxNCwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VoKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMCwgMHgxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19tZXJnZWgodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMCwgMHgxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19tZXJnZWgodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMCwgMHgxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWgodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MDcsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDEwLCAweDExLCAweDEyLCAweDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MDcsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDEwLCAweDExLCAweDEyLCAweDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDEwLCAweDExLCAweDEyLCAweDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19tZXJnZWgodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWgodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgKHZlY3RvciBkb3VibGUpX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDEwLCAweDExLCAweDEyLCAweDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX21lcmdlaCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBkb3VibGUpX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MDcsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdm1yZ2hiICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdm1yZ2hiIHZlY192bXJnaGIKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZtcmdoYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgxMCwgMHgwMSwgMHgxMSwgMHgwMiwgMHgxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMywgMHgxMywgMHgwNCwgMHgxNCwgMHgwNSwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgxNiwgMHgwNywgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192bXJnaGIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDEwLCAweDAxLCAweDExLCAweDAyLCAweDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzLCAweDEzLCAweDA0LCAweDE0LCAweDA1LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDE2LCAweDA3LCAweDE3KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm1yZ2hiKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MTAsIDB4MDEsIDB4MTEsIDB4MDIsIDB4MTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMsIDB4MTMsIDB4MDQsIDB4MTQsIDB4MDUsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MTYsIDB4MDcsIDB4MTcpKTsKK30KKworLyogdmVjX3ZtcmdoaCAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZtcmdoaCB2ZWNfdm1yZ2hoCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtcmdoaCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDEwLCAweDExLCAweDAyLCAweDAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDE0LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bXJnaGgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MTAsIDB4MTEsIDB4MDIsIDB4MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MTQsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MDcsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm1yZ2hoKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgxMCwgMHgxMSwgMHgwMiwgMHgwMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgxNCwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192bXJnaGgodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgxMCwgMHgxMSwgMHgwMiwgMHgwMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgxNCwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxNiwgMHgxNykpOworfQorCisvKiB2ZWNfdm1yZ2h3ICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdm1yZ2h3IHZlY192bXJnaHcKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Ztcmdodyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDEwLCAweDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdm1yZ2h3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2h3KHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2h3KHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworLyogdmVjX21lcmdlbCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDE4LCAweDA5LCAweDE5LCAweDBBLCAweDFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCLCAweDFCLCAweDBDLCAweDFDLCAweDBELCAweDFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDFFLCAweDBGLCAweDFGKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MTgsIDB4MDksIDB4MTksIDB4MEEsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIsIDB4MUIsIDB4MEMsIDB4MUMsIDB4MEQsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MUUsIDB4MEYsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgxOCwgMHgwOSwgMHgxOSwgMHgwQSwgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQiwgMHgxQiwgMHgwQywgMHgxQywgMHgwRCwgMHgxRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgxRSwgMHgwRiwgMHgxRikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19tZXJnZWwodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgxOCwgMHgxOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgxQywgMHgxRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgwRiwgMHgxRSwgMHgxRikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDE4LCAweDE5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDFDLCAweDFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDFFLCAweDFGKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MTgsIDB4MTksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MUMsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VsKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MTgsIDB4MTksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MUMsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21lcmdlbCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDE4LCAweDE5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MTgsIDB4MTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VsKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MTgsIDB4MTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VsKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MTgsIDB4MTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MTgsIDBYMTksIDB4MUEsIDB4MUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgwRiwgMHgxOCwgMFgxOSwgMHgxQSwgMHgxQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDE4LCAwWDE5LCAweDFBLCAweDFCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDE4LCAwWDE5LCAweDFBLCAweDFCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MTgsIDBYMTksIDB4MUEsIDB4MUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgwRiwgMHgxOCwgMFgxOSwgMHgxQSwgMHgxQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgwRiwgMHgxOCwgMFgxOSwgMHgxQSwgMHgxQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX21lcmdlbCh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDE4LCAwWDE5LCAweDFBLCAweDFCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCAodmVjdG9yIGRvdWJsZSlfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MTgsIDBYMTksIDB4MUEsIDB4MUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGRvdWJsZSlfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgwRiwgMHgxOCwgMFgxOSwgMHgxQSwgMHgxQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorI2VuZGlmCisKKy8qIHZlY192bXJnbGIgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192bXJnbGIgdmVjX3ZtcmdsYgorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm1yZ2xiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDE4LCAweDA5LCAweDE5LCAweDBBLCAweDFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCLCAweDFCLCAweDBDLCAweDFDLCAweDBELCAweDFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDFFLCAweDBGLCAweDFGKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZtcmdsYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MTgsIDB4MDksIDB4MTksIDB4MEEsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIsIDB4MUIsIDB4MEMsIDB4MUMsIDB4MEQsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MUUsIDB4MEYsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192bXJnbGIodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgxOCwgMHgwOSwgMHgxOSwgMHgwQSwgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQiwgMHgxQiwgMHgwQywgMHgxQywgMHgwRCwgMHgxRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgxRSwgMHgwRiwgMHgxRikpOworfQorCisvKiB2ZWNfdm1yZ2xoICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdm1yZ2xoIHZlY192bXJnbGgKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2xoKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MTgsIDB4MTksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MUMsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZtcmdsaCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgxOCwgMHgxOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgxQywgMHgxRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgwRiwgMHgxRSwgMHgxRikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bXJnbGgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDE4LCAweDE5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDFDLCAweDFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDFFLCAweDFGKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3ZtcmdsaCh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDE4LCAweDE5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDFDLCAweDFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDFFLCAweDFGKSk7Cit9CisKKy8qIHZlY192bXJnbHcgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192bXJnbHcgdmVjX3ZtcmdsdworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2x3KHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MTgsIDB4MTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192bXJnbHcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgxOCwgMHgxOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY192bXJnbHcodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgxOCwgMHgxOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192bXJnbHcodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgxOCwgMHgxOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KKy8qIHZlY19tZXJnZWUgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VlKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgsIDB4MTksIDB4MUEsIDB4MUIpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMCwgMHgxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX21lcmdlZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDEwLCAweDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA4LCAweDA5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4LCAweDE5LCAweDFBLCAweDFCKSk7Cit9CisKKy8qIHZlY19tZXJnZW8gKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VvKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MTQsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTYsIDB4MTcsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VvKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgxNCwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNiwgMHgxNywgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX21lcmdlbyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDE0LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2LCAweDE3LCAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CisKKyNlbmRpZgorCisvKiB2ZWNfbWZ2c2NyICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfbWZ2c2NyKHZvaWQpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX21mdnNjcigpOworfQorCisvKiB2ZWNfbWluICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19taW4odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNiKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX21pbih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNiKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbWluKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2IoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX21pbih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnViKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbWluKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19taW4odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnViKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zaChfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX21pbih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWluKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnVoKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbWluKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnN3KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnN3KCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnN3KF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19taW4odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludXcoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX21pbih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnV3KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19taW4odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51dyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWluKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2QoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19taW4odmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2QoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWluKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNkKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnVkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19taW4odmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51ZCgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWQoX19hLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bWluc3AoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5mcChfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bWluZHAoX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY192bWluc2IgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZtaW5zYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2IoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm1pbnNiKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2IoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192bWluc2IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zYihfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyogdmVjX3ZtaW51YiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192bWludWIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51YihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZtaW51Yih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm1pbnViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51YihfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCisvKiB2ZWNfdm1pbnNoICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtaW5zaCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtaW5zaCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192bWluc2godmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zaChfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworLyogdmVjX3ZtaW51aCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm1pbnVoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51aChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bWludWgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bWludWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWgoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKKy8qIHZlY192bWluc3cgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZtaW5zdyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zdyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192bWluc3codmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zdygodmVjdG9yIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192bWluc3codmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zdyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKy8qIHZlY192bWludXcgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192bWludXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludXcoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZtaW51dyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnV3KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192bWludXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51dyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKy8qIHZlY192bWluZnAgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bWluZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZtaW5zcChfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbmZwKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfbWxhZGQgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192bWxhZGR1aG0gdmVjX21sYWRkCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21sYWRkKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYykgeworICByZXR1cm4gX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19tbGFkZCgKKyAgICB2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2EgKiAodmVjdG9yIHNob3J0KV9fYiArICh2ZWN0b3Igc2hvcnQpX19jOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19tbGFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWxhZGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2EgKiBfX2IgKyBfX2M7Cit9CisKKy8qIHZlY192bWxhZGR1aG0gKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1sYWRkdWhtKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2EgKiBfX2IgKyBfX2M7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtbGFkZHVobSgKKyAgICB2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2EgKiAodmVjdG9yIHNob3J0KV9fYiArICh2ZWN0b3Igc2hvcnQpX19jOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm1sYWRkdWhtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IsIHZlY3RvciBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm1sYWRkdWhtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYiArIF9fYzsKK30KKworLyogdmVjX21yYWRkcyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX21yYWRkcyh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iLCB2ZWN0b3Igc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWhyYWRkc2hzKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfdm1ocmFkZHNocyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZtaHJhZGRzaHModmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYiwgdmVjdG9yIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1ocmFkZHNocyhfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX21zdW0gKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21zdW0odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bW1ibShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19tc3VtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Ztc3VtdWJtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbXN1bSh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bXNobShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19tc3VtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1zdW11aG0oX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY192bXN1bW1ibSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXN1bW1ibSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsIHZlY3RvciBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bW1ibShfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX3Ztc3VtdWJtICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Ztc3VtdWJtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bXVibShfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX3Ztc3Vtc2htICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Ztc3Vtc2htKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IsIHZlY3RvciBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bXNobShfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX3Ztc3VtdWhtICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Ztc3VtdWhtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Ztc3VtdWhtKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfbXN1bXMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21zdW1zKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1zdW1zaHMoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbXN1bXModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1zdW11aHMoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY192bXN1bXNocyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXN1bXNocyh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iLCB2ZWN0b3IgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1zdW1zaHMoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY192bXN1bXVocyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXN1bXVocyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bXVocyhfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX210dnNjciAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfbXR2c2NyKCh2ZWN0b3IgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19tdHZzY3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX210dnNjcigodmVjdG9yIGludClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciBib29sIGNoYXIgX19hKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX210dnNjcigodmVjdG9yIGludClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciBzaG9ydCBfX2EpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfbXR2c2NyKCh2ZWN0b3IgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19tdHZzY3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSkgeworICBfX2J1aWx0aW5fYWx0aXZlY19tdHZzY3IoKHZlY3RvciBpbnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX210dnNjcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfbXR2c2NyKCh2ZWN0b3IgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19tdHZzY3IodmVjdG9yIHBpeGVsIF9fYSkgeworICBfX2J1aWx0aW5fYWx0aXZlY19tdHZzY3IoKHZlY3RvciBpbnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX210dnNjcih2ZWN0b3IgaW50IF9fYSkgeworICBfX2J1aWx0aW5fYWx0aXZlY19tdHZzY3IoKHZlY3RvciBpbnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX210dnNjcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSkgeworICBfX2J1aWx0aW5fYWx0aXZlY19tdHZzY3IoKHZlY3RvciBpbnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX210dnNjcih2ZWN0b3IgYm9vbCBpbnQgX19hKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX210dnNjcigodmVjdG9yIGludClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfbXR2c2NyKCh2ZWN0b3IgaW50KV9fYSk7Cit9CisKKy8qIHZlY19tdWwgKi8KKworLyogSW50ZWdlciB2ZWN0b3IgbXVsdGlwbGljYXRpb24gd2lsbCBpbnZvbHZlIG11bHRpcGxpY2F0aW9uIG9mIHRoZSBvZGQvZXZlbgorICAgZWxlbWVudHMgc2VwYXJhdGVseSwgdGhlbiB0cnVuY2F0aW5nIHRoZSByZXN1bHRzIGFuZCBtb3ZpbmcgdG8gdGhlCisgICByZXN1bHQgdmVjdG9yLgorKi8KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICogX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICogX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbXVsKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gX19hICogX19iOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX211bCh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKyNlbmRpZgorCisvKiBUaGUgdm11bG9zKiBhbmQgdm11bGVzKiBpbnN0cnVjdGlvbnMgaGF2ZSBhIGJpZyBlbmRpYW4gYmlhcywgc28KKyAgIHdlIG11c3QgcmV2ZXJzZSB0aGUgbWVhbmluZyBvZiAiZXZlbiIgYW5kICJvZGQiIGZvciBsaXR0bGUgZW5kaWFuLiAgKi8KKworLyogdmVjX211bGUgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbXVsZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvc2IoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxlc2IoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tdWxlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdWIoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldWIoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19tdWxlKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvc2goX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxlc2goX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbXVsZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdWgoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldWgoX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbXVsZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3N3KF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXN3KF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX211bGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdXcoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldXcoX19hLCBfX2IpOworI2VuZGlmCit9CisjZW5kaWYKKworLyogdmVjX3ZtdWxlc2IgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXVsZXNiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG9zYihfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGVzYihfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3ZtdWxldWIgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXVsZXViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdWIoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldWIoX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY192bXVsZXNoICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZtdWxlc2godmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3NoKF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXNoKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdm11bGV1aCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXVsZXVoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG91aChfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGV1aChfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX211bG8gKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbXVsbyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxlc2IoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvc2IoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tdWxvKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldWIoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdWIoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19tdWxvKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxlc2goX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvc2goX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbXVsbyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldWgoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdWgoX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbXVsbyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXN3KF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3N3KF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX211bG8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldXcoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdXcoX19hLCBfX2IpOworI2VuZGlmCit9CisjZW5kaWYKKworLyogdmVjX3ZtdWxvc2IgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXVsb3NiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGVzYihfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG9zYihfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3ZtdWxvdWIgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXVsb3ViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldWIoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdWIoX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY192bXVsb3NoICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZtdWxvc2godmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXNoKF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3NoKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdm11bG91aCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXVsb3VoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGV1aChfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG91aChfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogIHZlY19uYW5kICovCisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX25hbmQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX25hbmQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX25hbmQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX25hbmQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX25hbmQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIHNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX25hbmQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KSh+KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX25hbmQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX25hbmQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKSh+KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpKTsKK30KKworI2VuZGlmCisKKy8qIHZlY19ubWFkZCAqLworCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbm1hZGQodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bm1hZGRhc3AoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19ubWFkZCh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dm5tYWRkYWRwKF9fYSwgX19iLCBfX2MpOworfQorI2VuZGlmCisKKy8qIHZlY19ubXN1YiAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19ubXN1Yih2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2MpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bm1zdWJhc3AoX19hLCBfX2IsIF9fYyk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm5tc3ViZnAoX19hLCBfX2IsIF9fYyk7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19ubXN1Yih2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dm5tc3ViYWRwKF9fYSwgX19iLCBfX2MpOworfQorI2VuZGlmCisKKy8qIHZlY192bm1zdWJmcCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZubXN1YmZwKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IsIHZlY3RvciBmbG9hdCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZubXN1YmZwKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfbm9yICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdm5vciB2ZWNfbm9yCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19ub3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19ub3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX25vcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbm9yKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbm9yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbm9yKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19ub3IodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbm9yKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19ub3IodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX25vcih2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICB+KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX25vcih2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9CisgICAgICB+KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3JlczsKK30KKyNlbmRpZgorCisvKiB2ZWNfdm5vciAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm5vcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zub3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zub3IodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192bm9yKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Zub3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bm9yKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192bm9yKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192bm9yKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY192bm9yKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdm5vcih2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgfigodmVjdG9yIHVuc2lnbmVkIGludClfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX25vcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX25vcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX25vcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX29yICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdm9yIHZlY19vcgorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfb3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfb3IodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8ICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19vcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19vcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19vcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8ICh2ZWN0b3Igc2hvcnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfb3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfb3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX29yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIGludClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfb3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfb3IodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19vcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIHwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIHwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX29yKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX29yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfb3IodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX29yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX29yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfb3IodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX29yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKyNlbmRpZgorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19vcmModmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19vcmModmVjdG9yIHNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX29yYyh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworIHJldHVybiAodmVjdG9yIGZsb2F0KShfX2EgfCB+KHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KSgodmVjdG9yIHVuc2lnbmVkIGludClfX2EgfCB+X19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSB8IH5fX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpKF9fYSB8IH4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY192b3IgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zvcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192b3IodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm9yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdm9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zvcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192b3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8ICh2ZWN0b3Igc2hvcnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm9yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Zvcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm9yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Zvcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8ICh2ZWN0b3IgaW50KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192b3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdm9yKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdm9yKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIHwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Zvcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192b3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192b3IodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Zvcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192b3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192b3IodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Zvcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisjZW5kaWYKKworLyogdmVjX3BhY2sgKi8KKworLyogVGhlIHZhcmlvdXMgdmVjdG9yIHBhY2sgaW5zdHJ1Y3Rpb25zIGhhdmUgYSBiaWctZW5kaWFuIGJpYXMsIHNvIGZvcgorICAgbGl0dGxlIGVuZGlhbiB3ZSBtdXN0IGhhbmRsZSByZXZlcnNlZCBlbGVtZW50IG51bWJlcmluZy4gICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19wYWNrKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDIsIDB4MDQsIDB4MDYsIDB4MDgsIDB4MEEsIDB4MEMsIDB4MEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MUEsIDB4MUMsIDB4MUUpKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDEsIDB4MDMsIDB4MDUsIDB4MDcsIDB4MDksIDB4MEIsIDB4MEQsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4MTMsIDB4MTUsIDB4MTcsIDB4MTksIDB4MUIsIDB4MUQsIDB4MUYpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19wYWNrKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDIsIDB4MDQsIDB4MDYsIDB4MDgsIDB4MEEsIDB4MEMsIDB4MEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MUEsIDB4MUMsIDB4MUUpKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMSwgMHgwMywgMHgwNSwgMHgwNywgMHgwOSwgMHgwQiwgMHgwRCwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHgxMywgMHgxNSwgMHgxNywgMHgxOSwgMHgxQiwgMHgxRCwgMHgxRikpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfcGFjayh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcil2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAyLCAweDA0LCAweDA2LCAweDA4LCAweDBBLCAweDBDLCAweDBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDEyLCAweDE0LCAweDE2LCAweDE4LCAweDFBLCAweDFDLCAweDFFKSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMSwgMHgwMywgMHgwNSwgMHgwNywgMHgwOSwgMHgwQiwgMHgwRCwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHgxMywgMHgxNSwgMHgxNywgMHgxOSwgMHgxQiwgMHgxRCwgMHgxRikpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3BhY2sodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwNCwgMHgwNSwgMHgwOCwgMHgwOSwgMHgwQywgMHgwRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxNCwgMHgxNSwgMHgxOCwgMHgxOSwgMHgxQywgMHgxRCkpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMiwgMHgwMywgMHgwNiwgMHgwNywgMHgwQSwgMHgwQiwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgxQSwgMHgxQiwgMHgxRSwgMHgxRikpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19wYWNrKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDQsIDB4MDUsIDB4MDgsIDB4MDksIDB4MEMsIDB4MEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTQsIDB4MTUsIDB4MTgsIDB4MTksIDB4MUMsIDB4MUQpKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDIsIDB4MDMsIDB4MDYsIDB4MDcsIDB4MEEsIDB4MEIsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MTYsIDB4MTcsIDB4MUEsIDB4MUIsIDB4MUUsIDB4MUYpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3BhY2sodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDA0LCAweDA1LCAweDA4LCAweDA5LCAweDBDLCAweDBELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDE0LCAweDE1LCAweDE4LCAweDE5LCAweDFDLCAweDFEKSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDIsIDB4MDMsIDB4MDYsIDB4MDcsIDB4MEEsIDB4MEIsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MTYsIDB4MTcsIDB4MUEsIDB4MUIsIDB4MUUsIDB4MUYpKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfcGFjayh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQikpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDFDLCAweDFELCAweDFFLCAweDFGKSk7CisjZW5kaWYKK30KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfcGFjayh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQikpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfcGFjayh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQikpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworI2VuZGlmCit9CisKKyNlbmRpZgorCisvKiB2ZWNfdnBrdWh1bSAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VodW0gdmVjX3Zwa3VodW0KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zwa3VodW0odmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywgMHgwRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMiwgMHgxNCwgMHgxNiwgMHgxOCwgMHgxQSwgMHgxQywgMHgxRSkpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMSwgMHgwMywgMHgwNSwgMHgwNywgMHgwOSwgMHgwQiwgMHgwRCwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHgxMywgMHgxNSwgMHgxNywgMHgxOSwgMHgxQiwgMHgxRCwgMHgxRikpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zwa3VodW0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywgMHgwRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMiwgMHgxNCwgMHgxNiwgMHgxOCwgMHgxQSwgMHgxQywgMHgxRSkpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAxLCAweDAzLCAweDA1LCAweDA3LCAweDA5LCAweDBCLCAweDBELCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDEzLCAweDE1LCAweDE3LCAweDE5LCAweDFCLCAweDFELCAweDFGKSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192cGt1aHVtKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDIsIDB4MDQsIDB4MDYsIDB4MDgsIDB4MEEsIDB4MEMsIDB4MEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MUEsIDB4MUMsIDB4MUUpKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcil2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAxLCAweDAzLCAweDA1LCAweDA3LCAweDA5LCAweDBCLCAweDBELCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDEzLCAweDE1LCAweDE3LCAweDE5LCAweDFCLCAweDFELCAweDFGKSk7CisjZW5kaWYKK30KKworLyogdmVjX3Zwa3V3dW0gKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192cGt1d3VtIHZlY192cGt1d3VtCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zwa3V3dW0odmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwNCwgMHgwNSwgMHgwOCwgMHgwOSwgMHgwQywgMHgwRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxNCwgMHgxNSwgMHgxOCwgMHgxOSwgMHgxQywgMHgxRCkpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMiwgMHgwMywgMHgwNiwgMHgwNywgMHgwQSwgMHgwQiwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgxQSwgMHgxQiwgMHgxRSwgMHgxRikpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192cGt1d3VtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDQsIDB4MDUsIDB4MDgsIDB4MDksIDB4MEMsIDB4MEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTQsIDB4MTUsIDB4MTgsIDB4MTksIDB4MUMsIDB4MUQpKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDIsIDB4MDMsIDB4MDYsIDB4MDcsIDB4MEEsIDB4MEIsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MTYsIDB4MTcsIDB4MUEsIDB4MUIsIDB4MUUsIDB4MUYpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192cGt1d3VtKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDQsIDB4MDUsIDB4MDgsIDB4MDksIDB4MEMsIDB4MEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTQsIDB4MTUsIDB4MTgsIDB4MTksIDB4MUMsIDB4MUQpKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMiwgMHgwMywgMHgwNiwgMHgwNywgMHgwQSwgMHgwQiwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgxQSwgMHgxQiwgMHgxRSwgMHgxRikpOworI2VuZGlmCit9CisKKy8qIHZlY192cGt1ZHVtICovCisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192cGt1ZHVtIHZlY192cGt1ZHVtCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192cGt1ZHVtKHZlY3RvciBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGxvbmcgbG9uZyBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBpbnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQikpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgaW50KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3Zwa3VkdW0odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTgsIDB4MTksIDB4MUEsIDB4MUIpKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDFDLCAweDFELCAweDFFLCAweDFGKSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX3Zwa3VkdW0odmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KXZlY19wZXJtKAorICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19hLCAodmVjdG9yIGxvbmcgbG9uZylfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTgsIDB4MTksIDB4MUEsIDB4MUIpKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KXZlY19wZXJtKAorICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19hLCAodmVjdG9yIGxvbmcgbG9uZylfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIHZlY19wYWNrcHggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19wYWNrcHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnBrcHgoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnBrcHgoX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY192cGtweCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Zwa3B4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3Zwa3B4KF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3Zwa3B4KF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfcGFja3MgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcGFja3ModmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc2hzcyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc2hzcyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfcGFja3ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1aHVzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1aHVzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcGFja3ModmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc3dzcyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc3dzcyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3BhY2tzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1d3VzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1d3VzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19wYWNrcyh2ZWN0b3IgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgbG9uZyBsb25nIF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzZHNzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzZHNzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3BhY2tzKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1ZHVzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1ZHVzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIHZlY192cGtzaHNzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnBrc2hzcyh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3Noc3MoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3Noc3MoX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY192cGtzZHNzICovCisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Zwa3Nkc3ModmVjdG9yIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgbG9uZyBsb25nIF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzZHNzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzZHNzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIHZlY192cGt1aHVzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192cGt1aHVzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWh1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWh1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3Zwa3VkdXMgKi8KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192cGt1ZHVzKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1ZHVzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1ZHVzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIHZlY192cGtzd3NzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Zwa3N3c3ModmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3N3c3MoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3N3c3MoX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY192cGt1d3VzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnBrdXd1cyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdXd1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdXd1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3BhY2tzdSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19wYWNrc3UodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzaHVzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzaHVzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19wYWNrc3UodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1aHVzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1aHVzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfcGFja3N1KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzd3VzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzd3VzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfcGFja3N1KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1d3VzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1d3VzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfcGFja3N1KHZlY3RvciBsb25nIGxvbmcgX19hLCB2ZWN0b3IgbG9uZyBsb25nIF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzZHVzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzZHVzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3BhY2tzdSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWR1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWR1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKyNlbmRpZgorCisvKiB2ZWNfdnBrc2h1cyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192cGtzaHVzKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc2h1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc2h1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnBrc2h1cyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VodXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VodXMoX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY192cGtzd3VzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192cGtzd3VzKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzd3VzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGtzd3VzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnBrc3d1cyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdXd1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdXd1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3Zwa3NkdXMgKi8KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3Zwa3NkdXModmVjdG9yIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBsb25nIGxvbmcgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3NkdXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3NkdXMoX19hLCBfX2IpOworI2VuZGlmCit9CisjZW5kaWYKKworLyogdmVjX3Blcm0gKi8KKworLy8gVGhlIHZwZXJtIGluc3RydWN0aW9uIGlzIGRlZmluZWQgYXJjaGl0ZWN0dXJhbGx5IHdpdGggYSBiaWctZW5kaWFuIGJpYXMuCisvLyBGb3IgbGl0dGxlIGVuZGlhbiwgd2Ugc3dhcCB0aGUgaW5wdXQgb3BlcmFuZHMgYW5kIGludmVydCB0aGUgcGVybXV0ZQorLy8gY29udHJvbCB2ZWN0b3IuICBPbmx5IHRoZSByaWdodG1vc3QgNSBiaXRzIG1hdHRlciwgc28gd2UgY291bGQgdXNlCisvLyBhIHZlY3RvciBvZiBhbGwgMzFzIGluc3RlYWQgb2YgYWxsIDI1NXMgdG8gcGVyZm9ybSB0aGUgaW52ZXJzaW9uLgorLy8gSG93ZXZlciwgd2hlbiB0aGUgUENWIGlzIG5vdCBhIGNvbnN0YW50LCB1c2luZyAyNTUgaGFzIGFuIGFkdmFudGFnZQorLy8gaW4gdGhhdCB0aGUgdmVjX3hvciBjYW4gYmUgcmVjb2duaXplZCBhcyBhIHZlY19ub3IgKGFuZCBmb3IgUDggYW5kCisvLyBsYXRlciwgcG9zc2libHkgYSB2ZWNfbmFuZCkuCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Blcm0oCisgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OworICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IsIF9fYyk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfcGVybSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKAorICAgICAgKHZlY3RvciBpbnQpX19iLCAodmVjdG9yIGludClfX2EsIF9fZCk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgKKyAgICAgICh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfcGVybSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OworICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19wZXJtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koCisgICAgICAodmVjdG9yIGludClfX2IsICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgKKyAgICAgICh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcGVybSgKKyAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OworICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2EsIF9fZCk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2EsIF9fZCk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBzaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKF9fYiwgX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koX19hLCBfX2IsIF9fYyk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19wZXJtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfcGVybSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2EsIF9fZCk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Blcm0odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgKKyAgICAgICh2ZWN0b3IgaW50KV9fYiwgKHZlY3RvciBpbnQpX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koCisgICAgICAodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OworICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgKKyAgICAgICh2ZWN0b3IgaW50KV9fYiwgKHZlY3RvciBpbnQpX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgKKyAgICAgICh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19wZXJtKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koCisgICAgICAodmVjdG9yIGludClfX2IsICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgKKyAgICAgICh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfcGVybSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIHZlY192cGVybSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192cGVybSgKKyAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192cGVybSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnBlcm0oCisgICAgdmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnBlcm0odmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYiwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZwZXJtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY192cGVybSgKKyAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haQordmVjX3ZwZXJtKHZlY3RvciBwaXhlbCBfX2EsIHZlY3RvciBwaXhlbCBfX2IsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192cGVybSh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZwZXJtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnBlcm0odmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haQordmVjX3ZwZXJtKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfdnBlcm0oCisgICAgdmVjdG9yIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBsb25nIGxvbmcgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3ZwZXJtKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX3ZwZXJtKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgX19jKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfcmUgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfcmUodmVjdG9yIGZsb2F0IF9fYSkgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyZXNwKF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJlZnAoX19hKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3JlKHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cmVkcChfX2EpOworfQorI2VuZGlmCisKKy8qIHZlY192cmVmcCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZyZWZwKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZWZwKF9fYSk7Cit9CisKKy8qIHZlY19ybCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfcmwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZybGIoKHZlY3RvciBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfcmwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192cmxiKCh2ZWN0b3IgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3JsKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmxoKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3JsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnJsaCgodmVjdG9yIHNob3J0KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3JsKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmx3KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19ybCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZybHcoKHZlY3RvciBpbnQpX19hLCBfX2IpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3JsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZybGQoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3JsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJsZChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX3ZybGIgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZybGIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZybGIoKHZlY3RvciBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnJsYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZybGIoKHZlY3RvciBjaGFyKV9fYSwgX19iKTsKK30KKworLyogdmVjX3ZybGggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZybGgodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJsaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192cmxoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnJsaCgodmVjdG9yIHNob3J0KV9fYSwgX19iKTsKK30KKworLyogdmVjX3ZybHcgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZybHcodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJsdyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnJsdyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZybHcoKHZlY3RvciBpbnQpX19hLCBfX2IpOworfQorCisvKiB2ZWNfcm91bmQgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfcm91bmQodmVjdG9yIGZsb2F0IF9fYSkgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyc3BpKF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJmaW4oX19hKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3JvdW5kKHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cmRwaShfX2EpOworfQorCisvKiB2ZWNfcmludCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19yaW50KHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyc3BpYyhfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfcmludCh2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJkcGljKF9fYSk7Cit9CisKKy8qIHZlY19uZWFyYnlpbnQgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbmVhcmJ5aW50KHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyc3BpKF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19uZWFyYnlpbnQodmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyZHBpKF9fYSk7Cit9CisjZW5kaWYKKworLyogdmVjX3ZyZmluICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnJmaW4odmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJmaW4oX19hKTsKK30KKworLyogdmVjX3NxcnQgKi8KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3NxcnQodmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnNxcnRzcChfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfc3FydCh2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnNxcnRkcChfX2EpOworfQorI2VuZGlmCisKKy8qIHZlY19yc3FydGUgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfcnNxcnRlKHZlY3RvciBmbG9hdCBfX2EpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cnNxcnRlc3AoX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cnNxcnRlZnAoX19hKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3JzcXJ0ZSh2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJzcXJ0ZWRwKF9fYSk7Cit9CisjZW5kaWYKKworLyogdmVjX3Zyc3FydGVmcCAqLworCitzdGF0aWMgX19pbmxpbmVfXyBfX3ZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnJzcXJ0ZWZwKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zyc3FydGVmcChfX2EpOworfQorCisvKiB2ZWNfc2VsICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNlbF80c2kgdmVjX3NlbAorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zZWwoCisgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3Igc2lnbmVkIGNoYXIpX19jKSB8IChfX2IgJiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zZWwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwgdmVjdG9yIGJvb2wgY2hhciBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBzaWduZWQgY2hhcilfX2MpIHwgKF9fYiAmICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc2VsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+X19jKSB8IChfX2IgJiBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NlbCgKKyAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwgdmVjdG9yIGJvb2wgY2hhciBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYykgfCAoX19iICYgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc2VsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgYm9vbCBjaGFyKV9fYykgfCAoX19iICYgKHZlY3RvciBib29sIGNoYXIpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NlbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19jKSB7CisgIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3Igc2hvcnQpX19jKSB8IChfX2IgJiAodmVjdG9yIHNob3J0KV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NlbCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3Igc2hvcnQpX19jKSB8IChfX2IgJiAodmVjdG9yIHNob3J0KV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zZWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zZWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19jKSB8CisgICAgICAgICAoX19iICYgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NlbCgKKyAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIGJvb2wgc2hvcnQpX19jKSB8IChfX2IgJiAodmVjdG9yIGJvb2wgc2hvcnQpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfc2VsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+X19jKSB8IChfX2IgJiBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBpbnQpX19jKSB8IChfX2IgJiAodmVjdG9yIGludClfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIGludClfX2MpIHwgKF9fYiAmICh2ZWN0b3IgaW50KV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zZWwoCisgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc2VsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgdmVjdG9yIGJvb2wgaW50IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2MpIHwgKF9fYiAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19zZWwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBib29sIGludClfX2MpIHwgKF9fYiAmICh2ZWN0b3IgYm9vbCBpbnQpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICB2ZWN0b3IgaW50IF9fcmVzID0gKCh2ZWN0b3IgaW50KV9fYSAmIH4odmVjdG9yIGludClfX2MpIHwKKyAgICAgICAgICAgICAgICAgICAgICgodmVjdG9yIGludClfX2IgJiAodmVjdG9yIGludClfX2MpOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7CisgIHZlY3RvciBpbnQgX19yZXMgPSAoKHZlY3RvciBpbnQpX19hICYgfih2ZWN0b3IgaW50KV9fYykgfAorICAgICAgICAgICAgICAgICAgICAgKCh2ZWN0b3IgaW50KV9fYiAmICh2ZWN0b3IgaW50KV9fYyk7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY19zZWwodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19jKSB7CisgIHZlY3RvciBsb25nIGxvbmcgX19yZXMgPSAoKHZlY3RvciBsb25nIGxvbmcpX19hICYgfih2ZWN0b3IgbG9uZyBsb25nKV9fYykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2ZWN0b3IgbG9uZyBsb25nKV9fYiAmICh2ZWN0b3IgbG9uZyBsb25nKV9fYyk7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY19zZWwodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYykgeworICB2ZWN0b3IgbG9uZyBsb25nIF9fcmVzID0gKCh2ZWN0b3IgbG9uZyBsb25nKV9fYSAmIH4odmVjdG9yIGxvbmcgbG9uZylfX2MpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgodmVjdG9yIGxvbmcgbG9uZylfX2IgJiAodmVjdG9yIGxvbmcgbG9uZylfX2MpOworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19yZXM7Cit9CisjZW5kaWYKKworLyogdmVjX3ZzZWwgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNlbCgKKyAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBzaWduZWQgY2hhcilfX2MpIHwgKF9fYiAmICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzZWwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwgdmVjdG9yIGJvb2wgY2hhciBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBzaWduZWQgY2hhcilfX2MpIHwgKF9fYiAmICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNlbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNlbCgKKyAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwgdmVjdG9yIGJvb2wgY2hhciBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYykgfCAoX19iICYgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNlbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIGJvb2wgY2hhcilfX2MpIHwgKF9fYiAmICh2ZWN0b3IgYm9vbCBjaGFyKV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2VsKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYykgeworICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c2VsKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBzaG9ydClfX2MpIHwgKF9fYiAmICh2ZWN0b3Igc2hvcnQpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBzaG9ydClfX2MpIHwgKF9fYiAmICh2ZWN0b3Igc2hvcnQpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzZWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+X19jKSB8IChfX2IgJiBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNlbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19jKSB8CisgICAgICAgICAoX19iICYgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwoCisgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBib29sIHNob3J0KV9fYykgfCAoX19iICYgKHZlY3RvciBib29sIHNob3J0KV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzZWwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIHZlY3RvciBib29sIHNob3J0IF9fYykgeworICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c2VsKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIGludClfX2MpIHwgKF9fYiAmICh2ZWN0b3IgaW50KV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c2VsKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgaW50KV9fYykgfCAoX19iICYgKHZlY3RvciBpbnQpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwoCisgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192c2VsKAorICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgdmVjdG9yIGJvb2wgaW50IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2MpIHwgKF9fYiAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY192c2VsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgYm9vbCBpbnQpX19jKSB8IChfX2IgJiAodmVjdG9yIGJvb2wgaW50KV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYykgeworICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgdmVjdG9yIGludCBfX3JlcyA9ICgodmVjdG9yIGludClfX2EgJiB+KHZlY3RvciBpbnQpX19jKSB8CisgICAgICAgICAgICAgICAgICAgICAoKHZlY3RvciBpbnQpX19iICYgKHZlY3RvciBpbnQpX19jKTsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYykgeworICB2ZWN0b3IgaW50IF9fcmVzID0gKCh2ZWN0b3IgaW50KV9fYSAmIH4odmVjdG9yIGludClfX2MpIHwKKyAgICAgICAgICAgICAgICAgICAgICgodmVjdG9yIGludClfX2IgJiAodmVjdG9yIGludClfX2MpOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworLyogdmVjX3NsICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSA8PCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc2wodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSA8PCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NsKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgPDwgKHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgPDwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc2wodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSA8PCAodmVjdG9yIGludClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc2wodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgPDwgX19iOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSA8PCAodmVjdG9yIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfc2wodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgPDwgX19iOworfQorI2VuZGlmCisKKy8qIHZlY192c2xiICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNsYiB2ZWNfdnNsYgorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNsYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19zbChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzbGIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19zbChfX2EsIF9fYik7Cit9CisKKy8qIHZlY192c2xoICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNsaCB2ZWNfdnNsaAorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNsaCh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfc2woX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNsaCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfc2woX19hLCBfX2IpOworfQorCisvKiB2ZWNfdnNsdyAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzbHcgdmVjX3ZzbHcKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzbHcodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gdmVjX3NsKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192c2x3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gdmVjX3NsKF9fYSwgX19iKTsKK30KKworLyogdmVjX3NsZCAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzbGRvaV80c2kgdmVjX3NsZAorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zbGQoCisgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbGQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKKyAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAgLSBfX2QsIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCAtIF9fZCwgMjUgLSBfX2QsIDI2IC0gX19kLCAyNyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsIDMxIC0gX19kKSk7CisjZWxzZQorICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbGQodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwIC0gX19kLCAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgLSBfX2QsIDI1IC0gX19kLCAyNiAtIF9fZCwgMjcgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLCAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zbGQoCisgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLCB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwIC0gX19kLCAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgLSBfX2QsIDI1IC0gX19kLCAyNiAtIF9fZCwgMjcgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLCAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zbGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zbGQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKKyAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAgLSBfX2QsIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCAtIF9fZCwgMjUgLSBfX2QsIDI2IC0gX19kLCAyNyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsIDMxIC0gX19kKSk7CisjZWxzZQorICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfc2xkKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwIC0gX19kLCAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgLSBfX2QsIDI1IC0gX19kLCAyNiAtIF9fZCwgMjcgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLCAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3NsZCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc2xkKAorICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19zbGQodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKKyAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAgLSBfX2QsIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCAtIF9fZCwgMjUgLSBfX2QsIDI2IC0gX19kLCAyNyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsIDMxIC0gX19kKSk7CisjZWxzZQorICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfc2xkKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwIC0gX19kLCAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgLSBfX2QsIDI1IC0gX19kLCAyNiAtIF9fZCwgMjcgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLCAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfc2xkKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IsCisgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKKyAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAgLSBfX2QsIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCAtIF9fZCwgMjUgLSBfX2QsIDI2IC0gX19kLCAyNyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsIDMxIC0gX19kKSk7CisjZWxzZQorICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfc2xkKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwIC0gX19kLCAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgLSBfX2QsIDI1IC0gX19kLCAyNiAtIF9fZCwgMjcgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLCAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfc2xkKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfc2xkKHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIHZlY19zbGR3ICovCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zbGR3KAorICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKKyAgcmV0dXJuIHZlY19zbGQoX19hLCBfX2IsICgoX19jIDw8IDIpICYgMHgwRikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbGR3KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICByZXR1cm4gdmVjX3NsZChfX2EsIF9fYiwgKChfX2MgPDwgMikgJiAweDBGKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zbGR3KAorICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICByZXR1cm4gdmVjX3NsZChfX2EsIF9fYiwgKChfX2MgPDwgMikgJiAweDBGKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zbGR3KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7CisgIHJldHVybiB2ZWNfc2xkKF9fYSwgX19iLCAoKF9fYyA8PCAyKSAmIDB4MEYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc2xkdyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICByZXR1cm4gdmVjX3NsZChfX2EsIF9fYiwgKChfX2MgPDwgMikgJiAweDBGKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zbGR3KAorICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICByZXR1cm4gdmVjX3NsZChfX2EsIF9fYiwgKChfX2MgPDwgMikgJiAweDBGKSk7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19zbGR3KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICByZXR1cm4gdmVjX3NsZChfX2EsIF9fYiwgKChfX2MgPDwgMikgJiAweDBGKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfc2xkdyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7CisgIHJldHVybiB2ZWNfc2xkKF9fYSwgX19iLCAoKF9fYyA8PCAyKSAmIDB4MEYpKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19QT1dFUjlfVkVDVE9SX18KKy8qIHZlY19zbHYgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Nsdih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnNsdihfX2EsIF9fYik7Cit9CisKKy8qIHZlY19zcnYgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Nydih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnNydihfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX3ZzbGRvaSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNsZG9pKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwIC0gX19kLCAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgLSBfX2QsIDI1IC0gX19kLCAyNiAtIF9fZCwgMjcgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLCAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNsZG9pKAorICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLCB1bnNpZ25lZCBjaGFyIF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2xkb2kodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwIC0gX19kLCAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgLSBfX2QsIDI1IC0gX19kLCAyNiAtIF9fZCwgMjcgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLCAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzbGRvaSgKKyAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLCB1bnNpZ25lZCBjaGFyIF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c2xkb2kodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwIC0gX19kLCAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgLSBfX2QsIDI1IC0gX19kLCAyNiAtIF9fZCwgMjcgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLCAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c2xkb2kodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsZG9pKAorICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAgLSBfX2QsIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCAtIF9fZCwgMjUgLSBfX2QsIDI2IC0gX19kLCAyNyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsIDMxIC0gX19kKSk7CisjZWxzZQorICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnNsZG9pKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAtIF9fZCwgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0IC0gX19kLCAyNSAtIF9fZCwgMjYgLSBfX2QsIDI3IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfc2xsICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc2xsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc2xsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NsbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NsbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbChfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc2xsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX3ZzbCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c2wodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c2wodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c2wodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c2wodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbChfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbChfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX3ZzbCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCisvKiB2ZWNfc2xvICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbG8odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc2xvKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbG8odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zbG8odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Nsbyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zbG8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc2xvKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zbG8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Nsbyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Nsbyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19zbG8odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Nsbyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnNsbyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNsbyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c2xvKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c2xvKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNsbyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2xvKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzbG8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNsbyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c2xvKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c2xvKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZzbG8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZzbG8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKy8qIHZlY19zcGxhdCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3BsYXQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iICYgMHgwRikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcGxhdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYiAmIDB4MEYpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcGxhdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iICYgMHgwRikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NwbGF0KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7CisgIHVuc2lnbmVkIGNoYXIgYjAgPSAoX19iICYgMHgwNykgKiAyOworICB1bnNpZ25lZCBjaGFyIGIxID0gYjAgKyAxOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zcGxhdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7CisgIHVuc2lnbmVkIGNoYXIgYjAgPSAoX19iICYgMHgwNykgKiAyOworICB1bnNpZ25lZCBjaGFyIGIxID0gYjAgKyAxOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NwbGF0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDcpICogMjsKKyAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMTsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShiMCwgYjEsIGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19zcGxhdCh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDcpICogMjsKKyAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMTsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShiMCwgYjEsIGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zcGxhdCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKKyAgdW5zaWduZWQgY2hhciBiMCA9IChfX2IgJiAweDAzKSAqIDQ7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBiMCArIDEsIGIyID0gYjAgKyAyLCBiMyA9IGIwICsgMzsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShiMCwgYjEsIGIyLCBiMywgYjAsIGIxLCBiMiwgYjMsIGIwLCBiMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjIsIGIzLCBiMCwgYjEsIGIyLCBiMykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3NwbGF0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7CisgIHVuc2lnbmVkIGNoYXIgYjAgPSAoX19iICYgMHgwMykgKiA0OworICB1bnNpZ25lZCBjaGFyIGIxID0gYjAgKyAxLCBiMiA9IGIwICsgMiwgYjMgPSBiMCArIDM7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoYjAsIGIxLCBiMiwgYjMsIGIwLCBiMSwgYjIsIGIzLCBiMCwgYjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIyLCBiMywgYjAsIGIxLCBiMiwgYjMpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX3NwbGF0KHZlY3RvciBib29sIGludCBfX2EsIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKKyAgdW5zaWduZWQgY2hhciBiMCA9IChfX2IgJiAweDAzKSAqIDQ7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBiMCArIDEsIGIyID0gYjAgKyAyLCBiMyA9IGIwICsgMzsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShiMCwgYjEsIGIyLCBiMywgYjAsIGIxLCBiMiwgYjMsIGIwLCBiMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjIsIGIzLCBiMCwgYjEsIGIyLCBiMykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zcGxhdCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDMpICogNDsKKyAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMSwgYjIgPSBiMCArIDIsIGIzID0gYjAgKyAzOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjIsIGIzLCBiMCwgYjEsIGIyLCBiMywgYjAsIGIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMiwgYjMsIGIwLCBiMSwgYjIsIGIzKSk7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfc3BsYXQodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDEpICogODsKKyAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMSwgYjIgPSBiMCArIDIsIGIzID0gYjAgKyAzLCBiNCA9IGIwICsgNCwgYjUgPSBiMCArIDUsCisgICAgICAgICAgICAgICAgYjYgPSBiMCArIDYsIGI3ID0gYjAgKyA3OworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2LCBiNywgYjAsIGIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3KSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfc3BsYXQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDEpICogODsKKyAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMSwgYjIgPSBiMCArIDIsIGIzID0gYjAgKyAzLCBiNCA9IGIwICsgNCwgYjUgPSBiMCArIDUsCisgICAgICAgICAgICAgICAgYjYgPSBiMCArIDYsIGI3ID0gYjAgKyA3OworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2LCBiNywgYjAsIGIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3KSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19zcGxhdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKKyAgdW5zaWduZWQgY2hhciBiMCA9IChfX2IgJiAweDAxKSAqIDg7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBiMCArIDEsIGIyID0gYjAgKyAyLCBiMyA9IGIwICsgMywgYjQgPSBiMCArIDQsIGI1ID0gYjAgKyA1LAorICAgICAgICAgICAgICAgIGI2ID0gYjAgKyA2LCBiNyA9IGIwICsgNzsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjcsIGIwLCBiMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjIsIGIzLCBiNCwgYjUsIGI2LCBiNykpOworfQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19zcGxhdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDEpICogODsKKyAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMSwgYjIgPSBiMCArIDIsIGIzID0gYjAgKyAzLCBiNCA9IGIwICsgNCwgYjUgPSBiMCArIDUsCisgICAgICAgICAgICAgICAgYjYgPSBiMCArIDYsIGI3ID0gYjAgKyA3OworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2LCBiNywgYjAsIGIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3KSk7Cit9CisjZW5kaWYKKworLyogdmVjX3ZzcGx0YiAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcGx0YiB2ZWNfdnNwbHRiCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3BsdGIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3BsdGIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3BsdGIodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2IpKTsKK30KKworLyogdmVjX3ZzcGx0aCAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcGx0aCB2ZWNfdnNwbHRoCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzcGx0aCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIF9fYiAqPSAyOworICB1bnNpZ25lZCBjaGFyIGIxID0gX19iICsgMTsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2IsIGIxLCBfX2IsIGIxLCBfX2IsIGIxLCBfX2IsIGIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IsIGIxLCBfX2IsIGIxLCBfX2IsIGIxLCBfX2IsIGIxKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3BsdGgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgX19iICo9IDI7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBfX2IgKyAxOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNwbHRoKHZlY3RvciBib29sIHNob3J0IF9fYSwgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgX19iICo9IDI7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBfX2IgKyAxOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNwbHRoKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgX19iICo9IDI7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBfX2IgKyAxOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEpKTsKK30KKworLyogdmVjX3ZzcGx0dyAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcGx0dyB2ZWNfdnNwbHR3CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3BsdHcodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIF9fYiAqPSA0OworICB1bnNpZ25lZCBjaGFyIGIxID0gX19iICsgMSwgYjIgPSBfX2IgKyAyLCBiMyA9IF9fYiArIDM7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iLCBiMSwgYjIsIGIzLCBfX2IsIGIxLCBiMiwgYjMsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjEsIGIyLCBiMywgX19iLCBiMSwgYjIsIGIzKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNwbHR3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB1bnNpZ25lZCBjaGFyIF9fYikgeworICBfX2IgKj0gNDsKKyAgdW5zaWduZWQgY2hhciBiMSA9IF9fYiArIDEsIGIyID0gX19iICsgMiwgYjMgPSBfX2IgKyAzOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYiwgYjEsIGIyLCBiMywgX19iLCBiMSwgYjIsIGIzLCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIxLCBiMiwgYjMsIF9fYiwgYjEsIGIyLCBiMykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY192c3BsdHcodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYikgeworICBfX2IgKj0gNDsKKyAgdW5zaWduZWQgY2hhciBiMSA9IF9fYiArIDEsIGIyID0gX19iICsgMiwgYjMgPSBfX2IgKyAzOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYiwgYjEsIGIyLCBiMywgX19iLCBiMSwgYjIsIGIzLCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIxLCBiMiwgYjMsIF9fYiwgYjEsIGIyLCBiMykpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192c3BsdHcodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYikgeworICBfX2IgKj0gNDsKKyAgdW5zaWduZWQgY2hhciBiMSA9IF9fYiArIDEsIGIyID0gX19iICsgMiwgYjMgPSBfX2IgKyAzOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYiwgYjEsIGIyLCBiMywgX19iLCBiMSwgYjIsIGIzLCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIxLCBiMiwgYjMsIF9fYiwgYjEsIGIyLCBiMykpOworfQorCisvKiB2ZWNfc3BsYXRfczggKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c3BsdGlzYiB2ZWNfc3BsYXRfczgKKworLy8gRklYTUU6IHBhcmFtZXRlciBzaG91bGQgYmUgdHJlYXRlZCBhcyA1LWJpdCBzaWduZWQgbGl0ZXJhbAorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NwbGF0X3M4KHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikoX19hKTsKK30KKworLyogdmVjX3ZzcGx0aXNiICovCisKKy8vIEZJWE1FOiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgNS1iaXQgc2lnbmVkIGxpdGVyYWwKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3BsdGlzYihzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpKF9fYSk7Cit9CisKKy8qIHZlY19zcGxhdF9zMTYgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c3BsdGlzaCB2ZWNfc3BsYXRfczE2CisKKy8vIEZJWE1FOiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgNS1iaXQgc2lnbmVkIGxpdGVyYWwKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0X3MxNihzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpKF9fYSk7Cit9CisKKy8qIHZlY192c3BsdGlzaCAqLworCisvLyBGSVhNRTogcGFyYW1ldGVyIHNob3VsZCBiZSB0cmVhdGVkIGFzIDUtYml0IHNpZ25lZCBsaXRlcmFsCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3BsdGlzaChzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpKF9fYSk7Cit9CisKKy8qIHZlY19zcGxhdF9zMzIgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c3BsdGlzdyB2ZWNfc3BsYXRfczMyCisKKy8vIEZJWE1FOiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgNS1iaXQgc2lnbmVkIGxpdGVyYWwKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zcGxhdF9zMzIoc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiAodmVjdG9yIGludCkoX19hKTsKK30KKworLyogdmVjX3ZzcGx0aXN3ICovCisKKy8vIEZJWE1FOiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgNS1iaXQgc2lnbmVkIGxpdGVyYWwKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3BsdGlzdyhzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KShfX2EpOworfQorCisvKiB2ZWNfc3BsYXRfdTggKi8KKworLy8gRklYTUU6IHBhcmFtZXRlciBzaG91bGQgYmUgdHJlYXRlZCBhcyA1LWJpdCBzaWduZWQgbGl0ZXJhbAorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3BsYXRfdTgodW5zaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19hKTsKK30KKworLyogdmVjX3NwbGF0X3UxNiAqLworCisvLyBGSVhNRTogcGFyYW1ldGVyIHNob3VsZCBiZSB0cmVhdGVkIGFzIDUtYml0IHNpZ25lZCBsaXRlcmFsCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfc3BsYXRfdTE2KHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoX19hKTsKK30KKworLyogdmVjX3NwbGF0X3UzMiAqLworCisvLyBGSVhNRTogcGFyYW1ldGVyIHNob3VsZCBiZSB0cmVhdGVkIGFzIDUtYml0IHNpZ25lZCBsaXRlcmFsCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3NwbGF0X3UzMihzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KShfX2EpOworfQorCisvKiB2ZWNfc3IgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NyKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3JlcyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgPj4gX19iOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSA+PiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfc3IodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fcmVzID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgPj4gX19iOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgPj4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zcih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPSAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgPj4gX19iOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3NyKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hID4+IF9fYjsKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19zcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPSAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgPj4gX19iOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NyKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hID4+IF9fYjsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnNyYiAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcmIgdmVjX3ZzcmIKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzcmIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgPj4gKHZlY3RvciBzaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzcmIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSA+PiBfX2I7Cit9CisKKy8qIHZlY192c3JoICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNyaCB2ZWNfdnNyaAorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNyaCh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgPj4gKHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3JoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSA+PiBfX2I7Cit9CisKKy8qIHZlY192c3J3ICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNydyB2ZWNfdnNydworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNydyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgPj4gKHZlY3RvciBpbnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZzcncodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgPj4gX19iOworfQorCisvKiB2ZWNfc3JhICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcmEodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcmFiKCh2ZWN0b3IgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NyYSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcmFiKCh2ZWN0b3IgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NyYSh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcmFoKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfc3JhKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyYWgoKHZlY3RvciBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zcmEodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3JhdyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3JhKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyYXcoKHZlY3RvciBpbnQpX19hLCBfX2IpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NyYSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgPj4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NyYSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKSgodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hID4+IF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX3ZzcmFiICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3JhYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyYWIoKHZlY3RvciBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNyYWIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JhYigodmVjdG9yIGNoYXIpX19hLCBfX2IpOworfQorCisvKiB2ZWNfdnNyYWggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzcmFoKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcmFoKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNyYWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3JhaCgodmVjdG9yIHNob3J0KV9fYSwgX19iKTsKK30KKworLyogdmVjX3ZzcmF3ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3Jhdyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnNyYXcoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZzcmF3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyYXcoKHZlY3RvciBpbnQpX19hLCBfX2IpOworfQorCisvKiB2ZWNfc3JsICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3JsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3JsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcihfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3JsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19zcmwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX3ZzciAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zzcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zzcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Zzcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcihfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcihfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3Zzcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX3Zzcih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnNyKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCisvKiB2ZWNfc3JvICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcm8odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3JvKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcm8odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcm8odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Nybyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zcm8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNybyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zcm8odmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNybyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3JvKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zcm8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Nybyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Nybyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19zcm8odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Nybyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnNybyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNybyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3JvKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3JvKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnNybyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNybyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Zzcm8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnNybyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNybyh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c3JvKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3Zzcm8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3Zzcm8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnNybyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKy8qIHZlY19zdCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfc3R2eCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX3N0ZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWJ4KCh2ZWN0b3IgY2hhcilfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlYngoKHZlY3RvciBjaGFyKV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVieCgodmVjdG9yIGNoYXIpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlYngoKHZlY3RvciBjaGFyKV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWh4KF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWh4KCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlaHgoKHZlY3RvciBzaG9ydClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWh4KCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIGludCBfX2EsIGludCBfX2IsIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZXd4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZld3goKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZld3goKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19zdHZlYnggKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmVieCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVieCgodmVjdG9yIGNoYXIpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZlYngodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLCB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWJ4KCh2ZWN0b3IgY2hhcilfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmVieCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlYngoKHZlY3RvciBjaGFyKV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2ZWJ4KHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWJ4KCh2ZWN0b3IgY2hhcilfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX3N0dmVoeCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2ZWh4KHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWh4KF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2ZWh4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IsIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWh4KCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZlaHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2ZWh4KHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlaHgoKHZlY3RvciBzaG9ydClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmVoeCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2ZWh4KHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWh4KCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19zdHZld3ggKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmV3eCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZXd4KF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2ZXd4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZld3goKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZld3godmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZXd4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2ZXd4KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmV3eCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX3N0bCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIGludCBfX2EsIGludCBfX2IsIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19zdHZ4bCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLCB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfc3ViICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zdWIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3ViKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3N1Yih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIC0gKHZlY3RvciBzaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3N1Yih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zdWIodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3ViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgLSAodmVjdG9yIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3N1Yih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zdWIodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3N1Yih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zdWIodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtICh2ZWN0b3IgaW50KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zdWIodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3ViKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3ViKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgLSAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7Cit9CisKKyNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3N1Yih2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3N1Yih2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisjZW5kaWYgLy8gZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfc3ViKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfc3ViKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworLyogdmVjX3ZzdWJ1Ym0gKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c3VidWJtIHZlY192c3VidWJtCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3VidWJtKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzdWJ1Ym0odmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hIC0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnN1YnVibSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIC0gKHZlY3RvciBzaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzdWJ1Ym0odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnN1YnVibSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hIC0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3VidWJtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Cit9CisKKy8qIHZlY192c3VidWhtICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnN1YnVobSB2ZWNfdnN1YnVobQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3VidWhtKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnN1YnVobSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hIC0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3VidWhtKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIC0gKHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3VidWhtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzdWJ1aG0odmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzdWJ1aG0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgLSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKK30KKworLyogdmVjX3ZzdWJ1d20gKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c3VidXdtIHZlY192c3VidXdtCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3VidXdtKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1d20odmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3VidXdtKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIC0gKHZlY3RvciBpbnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZzdWJ1d20odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnN1YnV3bSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIC0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZzdWJ1d20odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKK30KKworLyogdmVjX3ZzdWJmcCAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJmcCB2ZWNfdnN1YmZwCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnN1YmZwKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworLyogdmVjX3N1YmMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zdWJjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YmN1dyhfX2EsIF9fYik7Cit9CisKKyNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfc3ViYyh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3ViY3VxKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY19zdWJjKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YmN1cShfX2EsIF9fYik7Cit9CisjZW5kaWYgLy8gZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorCisvKiB2ZWNfdnN1YmN1dyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192c3ViY3V3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YmN1dyhfX2EsIF9fYik7Cit9CisKKy8qIHZlY19zdWJzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zdWJzKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzYnMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3Vicyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnNicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3N1YnModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3N1YnModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1YnMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zdWJzKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfc3Vicyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidWJzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3N1YnModmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnNocyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3N1YnModmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic2hzKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnNocyhfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3N1YnModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVocyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19zdWJzKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3N1YnModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidWhzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3Vicyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic3dzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3N1YnModmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic3dzKCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3N1YnModmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic3dzKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zdWJzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnV3cyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3Vicyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnV3cygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3Vicyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnV3cyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKy8qIHZlY192c3Vic2JzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3Vic2JzKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzYnMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnN1YnNicyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnNicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzdWJzYnModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Cit9CisKKy8qIHZlY192c3VidWJzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzdWJ1YnModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1YnMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3VidWJzKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnN1YnVicyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidWJzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKKy8qIHZlY192c3Vic2hzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJzaHModmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnNocyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJzaHModmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic2hzKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3Vic2hzKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnNocyhfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworLyogdmVjX3ZzdWJ1aHMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzdWJ1aHModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVocyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3VidWhzKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzdWJ1aHModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidWhzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCisvKiB2ZWNfdnN1YnN3cyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnN1YnN3cyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic3dzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJzd3ModmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic3dzKCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJzd3ModmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic3dzKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworLyogdmVjX3ZzdWJ1d3MgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192c3VidXdzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnV3cyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnN1YnV3cyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnV3cygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnN1YnV3cyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnV3cyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKyNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCisvKiB2ZWNfdnN1YnVxbSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3ZzdWJ1cW0odmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY192c3VidXFtKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworLyogdmVjX3ZzdWJldXFtICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdnN1YmV1cW0odmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iLAorICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3ViZXVxbShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3ZzdWJldXFtKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IsCisgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YmV1cW0oX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY192c3ViY3VxICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdnN1YmN1cSh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJjdXEoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdnN1YmN1cSh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3ViY3VxKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZzdWJlY3VxICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdnN1YmVjdXEodmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iLAorICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3ViZWN1cShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3ZzdWJlY3VxKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IsCisgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YmVjdXEoX19hLCBfX2IsIF9fYyk7Cit9CisjZW5kaWYgLy8gZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorCisvKiB2ZWNfc3VtNHMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3N1bTRzKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW00c2JzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19zdW00cyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VtNHVicyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zdW00cyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1bTRzaHMoX19hLCBfX2IpOworfQorCisvKiB2ZWNfdnN1bTRzYnMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnN1bTRzYnModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW00c2JzKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZzdW00dWJzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZzdW00dWJzKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW00dWJzKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZzdW00c2hzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZzdW00c2hzKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1bTRzaHMoX19hLCBfX2IpOworfQorCisvKiB2ZWNfc3VtMnMgKi8KKworLyogVGhlIHZzdW0yc3dzIGluc3RydWN0aW9uIGhhcyBhIGJpZy1lbmRpYW4gYmlhcywgc28gdGhhdCB0aGUgc2Vjb25kCisgICBpbnB1dCB2ZWN0b3IgYW5kIHRoZSByZXN1bHQgYWx3YXlzIHJlZmVyZW5jZSBiaWctZW5kaWFuIGVsZW1lbnRzCisgICAxIGFuZCAzIChsaXR0bGUtZW5kaWFuIGVsZW1lbnQgMCBhbmQgMikuICBGb3IgZWFzZSBvZiBwb3J0aW5nIHRoZQorICAgcHJvZ3JhbW1lciB3YW50cyBlbGVtZW50cyAxIGFuZCAzIGluIGJvdGggY2FzZXMsIHNvIGZvciBsaXR0bGUKKyAgIGVuZGlhbiB3ZSBtdXN0IHBlcmZvcm0gc29tZSBwZXJtdXRlcy4gICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19zdW0ycyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgaW50IF9fYyA9ICh2ZWN0b3Igc2lnbmVkIGludCl2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDQsIDUsIDYsIDcsIDAsIDEsIDIsIDMsIDEyLCAxMywgMTQsIDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgOSwgMTAsIDExKSk7CisgIF9fYyA9IF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW0yc3dzKF9fYSwgX19jKTsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCl2ZWNfcGVybSgKKyAgICAgIF9fYywgX19jLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDQsIDUsIDYsIDcsIDAsIDEsIDIsIDMsIDEyLCAxMywgMTQsIDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgOSwgMTAsIDExKSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1bTJzd3MoX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY192c3VtMnN3cyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnN1bTJzd3ModmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgdmVjdG9yIGludCBfX2MgPSAodmVjdG9yIHNpZ25lZCBpbnQpdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSg0LCA1LCA2LCA3LCAwLCAxLCAyLCAzLCAxMiwgMTMsIDE0LCAxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsIDksIDEwLCAxMSkpOworICBfX2MgPSBfX2J1aWx0aW5fYWx0aXZlY192c3VtMnN3cyhfX2EsIF9fYyk7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpdmVjX3Blcm0oCisgICAgICBfX2MsIF9fYywgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSg0LCA1LCA2LCA3LCAwLCAxLCAyLCAzLCAxMiwgMTMsIDE0LCAxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsIDksIDEwLCAxMSkpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW0yc3dzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfc3VtcyAqLworCisvKiBUaGUgdnN1bXN3cyBpbnN0cnVjdGlvbiBoYXMgYSBiaWctZW5kaWFuIGJpYXMsIHNvIHRoYXQgdGhlIHNlY29uZAorICAgaW5wdXQgdmVjdG9yIGFuZCB0aGUgcmVzdWx0IGFsd2F5cyByZWZlcmVuY2UgYmlnLWVuZGlhbiBlbGVtZW50IDMKKyAgIChsaXR0bGUtZW5kaWFuIGVsZW1lbnQgMCkuICBGb3IgZWFzZSBvZiBwb3J0aW5nIHRoZSBwcm9ncmFtbWVyCisgICB3YW50cyBlbGVtZW50IDMgaW4gYm90aCBjYXNlcywgc28gZm9yIGxpdHRsZSBlbmRpYW4gd2UgbXVzdCBwZXJmb3JtCisgICBzb21lIHBlcm11dGVzLiAgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3N1bXModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICBfX2IgPSAodmVjdG9yIHNpZ25lZCBpbnQpdmVjX3NwbGF0KF9fYiwgMyk7CisgIF9fYiA9IF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW1zd3MoX19hLCBfX2IpOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KSgwLCAwLCAwLCBfX2JbMF0pOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW1zd3MoX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY192c3Vtc3dzICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192c3Vtc3dzKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgX19iID0gKHZlY3RvciBzaWduZWQgaW50KXZlY19zcGxhdChfX2IsIDMpOworICBfX2IgPSBfX2J1aWx0aW5fYWx0aXZlY192c3Vtc3dzKF9fYSwgX19iKTsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkoMCwgMCwgMCwgX19iWzBdKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vtc3dzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdHJ1bmMgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdHJ1bmModmVjdG9yIGZsb2F0IF9fYSkgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyc3BpeihfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZml6KF9fYSk7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY190cnVuYyh2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJkcGl6KF9fYSk7Cit9CisjZW5kaWYKKworLyogdmVjX3ZyZml6ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnJmaXoodmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJmaXooX19hKTsKK30KKworLyogdmVjX3VucGFja2ggKi8KKworLyogVGhlIHZlY3RvciB1bnBhY2sgaW5zdHJ1Y3Rpb25zIGFsbCBoYXZlIGEgYmlnLWVuZGlhbiBiaWFzLCBzbyBmb3IKKyAgIGxpdHRsZSBlbmRpYW4gd2UgbXVzdCByZXZlcnNlIHRoZSBtZWFuaW5ncyBvZiAiaGlnaCIgYW5kICJsb3cuIiAgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haQordmVjX3VucGFja2godmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNiKCh2ZWN0b3IgY2hhcilfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdW5wYWNraCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzYigodmVjdG9yIGNoYXIpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzYigodmVjdG9yIGNoYXIpX19hKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdW5wYWNraCh2ZWN0b3Igc2hvcnQgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2goX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBraHNoKF9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX3VucGFja2godmVjdG9yIGJvb2wgc2hvcnQgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzaCgodmVjdG9yIHNob3J0KV9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBraHNoKCh2ZWN0b3Igc2hvcnQpX19hKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3VucGFja2godmVjdG9yIHBpeGVsIF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHB4KCh2ZWN0b3Igc2hvcnQpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBraHB4KCh2ZWN0b3Igc2hvcnQpX19hKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY191bnBhY2toKHZlY3RvciBpbnQgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc3coX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBraHN3KF9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3VucGFja2godmVjdG9yIGJvb2wgaW50IF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc3coKHZlY3RvciBpbnQpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc3coKHZlY3RvciBpbnQpX19hKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIHZlY192dXBraHNiICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192dXBraHNiKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzYigodmVjdG9yIGNoYXIpX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBraHNiKCh2ZWN0b3IgY2hhcilfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Z1cGtoc2IodmVjdG9yIGJvb2wgY2hhciBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZW5kaWYKK30KKworLyogdmVjX3Z1cGtoc2ggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Z1cGtoc2godmVjdG9yIHNob3J0IF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNoKF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzaChfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY192dXBraHNoKHZlY3RvciBib29sIHNob3J0IF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2goKHZlY3RvciBzaG9ydClfX2EpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzaCgodmVjdG9yIHNob3J0KV9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192dXBraHNoKHZlY3RvciBwaXhlbCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2xweCgodmVjdG9yIHNob3J0KV9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2hweCgodmVjdG9yIHNob3J0KV9fYSk7CisjZW5kaWYKK30KKworLyogdmVjX3Z1cGtoc3cgKi8KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfdnVwa2hzdyh2ZWN0b3IgaW50IF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHN3KF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzdyhfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192dXBraHN3KHZlY3RvciBib29sIGludCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192dXBrbHN3KCh2ZWN0b3IgaW50KV9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192dXBraHN3KCh2ZWN0b3IgaW50KV9fYSk7CisjZW5kaWYKK30KKyNlbmRpZgorCisvKiB2ZWNfdW5wYWNrbCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdW5wYWNrbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzYigodmVjdG9yIGNoYXIpX19hKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY191bnBhY2tsKHZlY3RvciBib29sIGNoYXIgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192dXBraHNiKCh2ZWN0b3IgY2hhcilfX2EpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNiKCh2ZWN0b3IgY2hhcilfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY191bnBhY2tsKHZlY3RvciBzaG9ydCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzaChfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2goX19hKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdW5wYWNrbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBraHNoKCh2ZWN0b3Igc2hvcnQpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2goKHZlY3RvciBzaG9ydClfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdW5wYWNrbCh2ZWN0b3IgcGl4ZWwgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtocHgoKHZlY3RvciBzaG9ydClfX2EpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtscHgoKHZlY3RvciBzaG9ydClfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX3VucGFja2wodmVjdG9yIGludCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzdyhfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc3coX19hKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdW5wYWNrbCh2ZWN0b3IgYm9vbCBpbnQgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzdygodmVjdG9yIGludClfX2EpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzdygodmVjdG9yIGludClfX2EpOworI2VuZGlmCit9CisjZW5kaWYKKworLyogdmVjX3Z1cGtsc2IgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Z1cGtsc2IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBraHNiKCh2ZWN0b3IgY2hhcilfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnVwa2xzYih2ZWN0b3IgYm9vbCBjaGFyIF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzYigodmVjdG9yIGNoYXIpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzYigodmVjdG9yIGNoYXIpX19hKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdnVwa2xzaCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnVwa2xzaCh2ZWN0b3Igc2hvcnQgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2goX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNoKF9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX3Z1cGtsc2godmVjdG9yIGJvb2wgc2hvcnQgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzaCgodmVjdG9yIHNob3J0KV9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNoKCh2ZWN0b3Igc2hvcnQpX19hKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3Z1cGtsc2godmVjdG9yIHBpeGVsIF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBraHB4KCh2ZWN0b3Igc2hvcnQpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHB4KCh2ZWN0b3Igc2hvcnQpX19hKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdnVwa2xzdyAqLworCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY192dXBrbHN3KHZlY3RvciBpbnQgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc3coX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHN3KF9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Z1cGtsc3codmVjdG9yIGJvb2wgaW50IF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc3coKHZlY3RvciBpbnQpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc3coKHZlY3RvciBpbnQpX19hKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIHZlY192c3hfbGQgKi8KKworI2lmZGVmIF9fVlNYX18KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX3ZzeF9sZChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fdnN4X2x4dnc0eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZzeF9sZChpbnQgX19hLCBjb25zdCB2ZWN0b3Igc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3ZzeF9seHZ3NHgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3ZzeF9seHZ3NHgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3ZzeF9sZChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl92c3hfbHh2dzR4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl92c3hfbHh2dzR4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haQordmVjX3ZzeF9sZChpbnQgX19hLCBjb25zdCB2ZWN0b3IgZmxvYXQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fdnN4X2x4dnc0eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9sZChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX3ZzeF9seHZ3NHgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl92c3hfbHh2ZDJ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fdnN4X2x4dmQyeChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfdnN4X2xkKGludCBfX2EsIGNvbnN0IHZlY3RvciBkb3VibGUgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19idWlsdGluX3ZzeF9seHZkMngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX3ZzeF9sZChpbnQgX19hLCBjb25zdCBkb3VibGUgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19idWlsdGluX3ZzeF9seHZkMngoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl92c3hfbHh2dzR4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fdnN4X2x4dnc0eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnN4X2xkKGludCBfX2EsIGNvbnN0IHNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fdnN4X2x4dnc0eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3ZzeF9seHZ3NHgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnN4X2xkKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3ZzeF9seHZ3NHgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzeF9sZChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl92c3hfbHh2dzR4KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzeF9sZChpbnQgX19hLCBjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fdnN4X2x4dnc0eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fdnN4X2x4dnc0eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3ZzeF9sZChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX3ZzeF9seHZ3NHgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX3ZzeF9seHZ3NHgoX19hLCBfX2IpOworfQorCisjZW5kaWYKKworLyogdmVjX3ZzeF9zdCAqLworCisjaWZkZWYgX19WU1hfXworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX3ZzeF9zdHh2dzR4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX3ZzeF9zdHh2dzR4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX3ZzeF9zdHh2dzR4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nICpfX2MpIHsKKyAgX19idWlsdGluX3ZzeF9zdHh2ZDJ4KCh2ZWN0b3IgZG91YmxlKV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nICpfX2MpIHsKKyAgX19idWlsdGluX3ZzeF9zdHh2ZDJ4KCh2ZWN0b3IgZG91YmxlKV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciBkb3VibGUgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlICpfX2MpIHsKKyAgX19idWlsdGluX3ZzeF9zdHh2ZDJ4KCh2ZWN0b3IgZG91YmxlKV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciBkb3VibGUgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZkMngoKHZlY3RvciBkb3VibGUpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX3ZzeF9zdHh2dzR4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX3ZzeF9zdHh2dzR4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLCB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3ZzeF9zdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX3ZzeF9zdHh2dzR4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX3ZzeF9zdHh2dzR4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLCB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX3ZzeF9zdHh2dzR4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCisjZW5kaWYKKworLyogdmVjX3hvciAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3Z4b3IgdmVjX3hvcgorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfeG9yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfeG9yKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIF4gKHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfeG9yKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfeG9yKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIF4gKHZlY3RvciBpbnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIF4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSBeICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgXiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfeG9yKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfeG9yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIF4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfeG9yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKSgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgXgorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfeG9yKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSkoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIF4KKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSkoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIF4KKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY192eG9yICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192eG9yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Z4b3IodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnhvcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIF4gKHZlY3RvciBzaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Z4b3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfdnhvcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192eG9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3Igc2hvcnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnhvcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192eG9yKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192eG9yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIF4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX3Z4b3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIGludClfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnhvcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192eG9yKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnhvcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIF4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIF4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIF4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIF4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Z4b3IodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdnhvcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Z4b3IodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Z4b3IodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdnhvcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Z4b3IodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Z4b3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBleHRlbnNpb25zIGZvciBDQkVBIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIHZlY19leHRyYWN0ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfZXh0cmFjdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYVtfX2JdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2V4dHJhY3QodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iKSB7CisgIHJldHVybiBfX2FbX19iXTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2V4dHJhY3QodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iKSB7CisgIHJldHVybiBfX2FbX19iXTsKK30KKworc3RhdGljIF9faW5saW5lX18gc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfZXh0cmFjdCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYikgeworICByZXR1cm4gX19hW19fYl07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2V4dHJhY3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19hW19fYl07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfZXh0cmFjdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYikgeworICByZXR1cm4gX19hW19fYl07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19leHRyYWN0KHZlY3RvciBzaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYVtfX2JdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19leHRyYWN0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iKSB7CisgIHJldHVybiBfX2FbX19iXTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfZXh0cmFjdCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iKSB7CisgIHJldHVybiBfX2FbX19iXTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfZXh0cmFjdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYVtfX2JdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfZXh0cmFjdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19hW19fYl07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19leHRyYWN0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYVtfX2JdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBkb3VibGUgX19BVFRSU19vX2FpIHZlY19leHRyYWN0KHZlY3RvciBkb3VibGUgX19hLCBpbnQgX19iKSB7CisgIHJldHVybiBfX2FbX19iXTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2V4dHJhY3QodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19hW19fYl07Cit9CisKKy8qIHZlY19pbnNlcnQgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2luc2VydChzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIGludCBfX2MpIHsKKyAgX19iW19fY10gPSBfX2E7CisgIHJldHVybiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2luc2VydCh1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLCBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfaW5zZXJ0KHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYykgeworICBfX2JbX19jXSA9IF9fYTsKKyAgcmV0dXJuIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19pbnNlcnQoc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsIGludCBfX2MpIHsKKyAgX19iW19fY10gPSBfX2E7CisgIHJldHVybiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19pbnNlcnQodW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLCBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19pbnNlcnQodW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIGludCBfX2MpIHsKKyAgX19iW19fY10gPSBfX2E7CisgIHJldHVybiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2luc2VydChzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLCBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2luc2VydCh1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgaW50IF9fYykgeworICBfX2JbX19jXSA9IF9fYTsKKyAgcmV0dXJuIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfaW5zZXJ0KHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfaW5zZXJ0KHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IsIGludCBfX2MpIHsKKyAgX19iW19fY10gPSBfX2E7CisgIHJldHVybiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfaW5zZXJ0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLCBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfaW5zZXJ0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IsIGludCBfX2MpIHsKKyAgX19iW19fY10gPSBfX2E7CisgIHJldHVybiBfX2I7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfaW5zZXJ0KGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2luc2VydChmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorCisvKiB2ZWNfbHZseCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZseChpbnQgX19hLCBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIHNpZ25lZCBjaGFyKSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdmx4KGludCBfX2EsIGNvbnN0IHZlY3RvciBzaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIHNpZ25lZCBjaGFyKSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZseChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdmx4KGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZseChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgYm9vbCBjaGFyKSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZseChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIHNob3J0KSgwKSwgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZseChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3Igc2hvcnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciBzaG9ydCkoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sdmx4KGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2x2bHgoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sdmx4KGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgYm9vbCBzaG9ydCkoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIHBpeGVsICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgcGl4ZWwpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZseChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciBpbnQpKDApLCB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZseChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIGludCkoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbHZseChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19sdmx4KGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbHZseChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciBib29sIGludCkoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciBmbG9hdCkoMCksIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgZmxvYXQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCisvKiB2ZWNfbHZseGwgKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2bHhsKGludCBfX2EsIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIHNpZ25lZCBjaGFyKSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdmx4bChpbnQgX19hLCBjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3Igc2lnbmVkIGNoYXIpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdmx4bChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZseGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZseGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciBib29sIGNoYXIpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdmx4bChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvcnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3Igc2hvcnQpKDApLCB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdmx4bChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIHNob3J0KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2x2bHhsKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sdmx4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sdmx4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciBib29sIHNob3J0KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfbHZseGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBwaXhlbCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciBwaXhlbCkoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sdmx4bChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgaW50KSgwKSwgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2bHhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciBpbnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2x2bHhsKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19sdmx4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIHVuc2lnbmVkIGludCkoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19sdmx4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgYm9vbCBpbnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdmx4bChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgZmxvYXQpKDApLCB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdmx4bChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIGZsb2F0KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworLyogdmVjX2x2cnggKi8KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2cngoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaWduZWQgY2hhcikoMCksIHZlY19sZChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZyeChpbnQgX19hLCBjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaWduZWQgY2hhcikoMCksIHZlY19sZChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2cngoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZyeChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2cngoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGJvb2wgY2hhcikoMCksIHZlY19sZChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvcnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaG9ydCkoMCksIHZlY19sZChfX2EsIF9fYiksIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3Igc2hvcnQpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZyeChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sdnJ4KGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZyeChpbnQgX19hLCBjb25zdCB2ZWN0b3IgYm9vbCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGJvb2wgc2hvcnQpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19sdnJ4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBwaXhlbCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHBpeGVsKSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwgY29uc3QgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgaW50KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBpbnQpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2x2cngoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgdW5zaWduZWQgaW50KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbHZyeChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgdW5zaWduZWQgaW50KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX2x2cngoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgYm9vbCBpbnQpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdnJ4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgZmxvYXQpKDApLCB2ZWNfbGQoX19hLCBfX2IpLCB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdnJ4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBmbG9hdCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGZsb2F0KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworLyogdmVjX2x2cnhsICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdnJ4bChpbnQgX19hLCBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHNpZ25lZCBjaGFyKSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3Igc2lnbmVkIGNoYXIpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2cnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMCksIHZlY19sZGwoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2x2cnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBib29sIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBib29sIGNoYXIpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZyeGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3Igc2hvcnQpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZyeGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHNob3J0KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sdnJ4bChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBib29sIHNob3J0KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX2x2cnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBwaXhlbCkoMCksIHZlY19sZGwoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgaW50KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sdnJ4bChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBpbnQpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19sdnJ4bChpbnQgX19hLCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBpbnQpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGludCkoMCksIHZlY19sZGwoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIGJvb2wgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgYm9vbCBpbnQpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZyeGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgZmxvYXQpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZyeGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBmbG9hdCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGZsb2F0KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKKy8qIHZlY19zdHZseCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QodmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IsIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QodmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19zdHZseGwgKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYiwgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IsIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwodmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworLyogdmVjX3N0dnJ4ICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCh2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYiwgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCh2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworLyogdmVjX3N0dnJ4bCAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iLCB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYiwgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCh2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCisvKiB2ZWNfcHJvbW90ZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19wcm9tb3RlKHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19yZXMgPSAodmVjdG9yIHNpZ25lZCBjaGFyKSgwKTsKKyAgX19yZXNbX19iXSA9IF9fYTsKKyAgcmV0dXJuIF9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19wcm9tb3RlKHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fcmVzID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgwKTsKKyAgX19yZXNbX19iXSA9IF9fYTsKKyAgcmV0dXJuIF9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19wcm9tb3RlKHNob3J0IF9fYSwgaW50IF9fYikgeworICB2ZWN0b3Igc2hvcnQgX19yZXMgPSAodmVjdG9yIHNob3J0KSgwKTsKKyAgX19yZXNbX19iXSA9IF9fYTsKKyAgcmV0dXJuIF9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfcHJvbW90ZSh1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fcmVzID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoMCk7CisgIF9fcmVzW19fYl0gPSBfX2E7CisgIHJldHVybiBfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Byb21vdGUoaW50IF9fYSwgaW50IF9fYikgeworICB2ZWN0b3IgaW50IF9fcmVzID0gKHZlY3RvciBpbnQpKDApOworICBfX3Jlc1tfX2JdID0gX19hOworICByZXR1cm4gX19yZXM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19wcm9tb3RlKHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPSAodmVjdG9yIHVuc2lnbmVkIGludCkoMCk7CisgIF9fcmVzW19fYl0gPSBfX2E7CisgIHJldHVybiBfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfcHJvbW90ZShmbG9hdCBfX2EsIGludCBfX2IpIHsKKyAgdmVjdG9yIGZsb2F0IF9fcmVzID0gKHZlY3RvciBmbG9hdCkoMCk7CisgIF9fcmVzW19fYl0gPSBfX2E7CisgIHJldHVybiBfX3JlczsKK30KKworLyogdmVjX3NwbGF0cyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcGxhdHMoc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKShfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19zcGxhdHModW5zaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3BsYXRzKHNob3J0IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaG9ydCkoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3NwbGF0cyh1bnNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpKF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zcGxhdHMoaW50IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBpbnQpKF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfc3BsYXRzKHVuc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KShfX2EpOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfc3BsYXRzKHNpZ25lZCBsb25nIGxvbmcgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpKF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfc3BsYXRzKHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKShfX2EpOworfQorCisjaWYgZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY19zcGxhdHMoc2lnbmVkIF9faW50MTI4IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgX19pbnQxMjgpKF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY19zcGxhdHModW5zaWduZWQgX19pbnQxMjggX19hKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIF9faW50MTI4KShfX2EpOworfQorCisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3NwbGF0cyhkb3VibGUgX19hKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSkoX19hKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zcGxhdHMoZmxvYXQgX19hKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KShfX2EpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwcmVkaWNhdGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiB2ZWNfYWxsX2VxICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFQsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVCwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0xULCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVCwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0xULCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVCwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVCwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xULCBfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVCwgKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xULCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFQsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVCwgKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFQsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFQsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFQsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFQsIF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xULCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xULCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xULCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xULCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFQsICh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9MVCwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9MVCwgX19hLCAodmVjdG9yIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFQsICh2ZWN0b3IgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFQsICh2ZWN0b3IgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFQsICh2ZWN0b3IgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFQsICh2ZWN0b3IgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9MVCwgKHZlY3RvciBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZXFzcF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxZnBfcChfX0NSNl9MVCwgX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBlcWRwX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfYWxsX2dlICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfRVEsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfRVEsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUSwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVEsIF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfRVEsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNob3J0KV9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUSwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUSwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0VRLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0VRLCAodmVjdG9yIGludClfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUSwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUSwgX19iLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfRVEsIF9fYiwgX19hKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9FUSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUSwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBnZXNwX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ2VmcF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGdlZHBfcChfX0NSNl9MVCwgX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19hbGxfZ3QgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9MVCwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9MVCwgX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xULCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFQsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9MVCwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfTFQsIF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVCwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfTFQsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfTFQsIF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xULCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xULCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9MVCwgX19hLCBfX2IpOworfQorc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0xULCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGd0c3BfcChfX0NSNl9MVCwgX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndGZwX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ3RkcF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX2FsbF9pbiAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2FsbF9pbih2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wYmZwX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKK30KKworLyogdmVjX2FsbF9sZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0VRLCBfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUSwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9FUSwgX19hLCAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9FUSwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9FUSwgX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVEsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVEsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUSwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfRVEsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBnZXNwX3AoX19DUjZfTFQsIF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ2VmcF9wKF9fQ1I2X0xULCBfX2IsIF9fYSk7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGdlZHBfcChfX0NSNl9MVCwgX19iLCBfX2EpOworfQorI2VuZGlmCisKKy8qIHZlY19hbGxfbHQgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9MVCwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9MVCwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xULCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVCwgX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9MVCwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfTFQsICh2ZWN0b3Igc2hvcnQpX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xULCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xULCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfTFQsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfTFQsICh2ZWN0b3IgaW50KV9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xULCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xULCBfX2IsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9MVCwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0xULCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ3RzcF9wKF9fQ1I2X0xULCBfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0ZnBfcChfX0NSNl9MVCwgX19iLCBfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBndGRwX3AoX19DUjZfTFQsIF9fYiwgX19hKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfYWxsX25hbiAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmFuKHZlY3RvciBmbG9hdCBfX2EpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZXFzcF9wKF9fQ1I2X0VRLCBfX2EsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxZnBfcChfX0NSNl9FUSwgX19hLCBfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmFuKHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZXFkcF9wKF9fQ1I2X0VRLCBfX2EsIF9fYSk7Cit9CisjZW5kaWYKKworLyogdmVjX2FsbF9uZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVEsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUSwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVEsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUSwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVEsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVEsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUSwgX19hLCAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVEsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUSwgKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVEsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRLCBfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUSwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUSwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUSwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUSwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9FUSwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfRVEsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfRVEsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9FUSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfRVEsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZXFkcF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxZnBfcChfX0NSNl9FUSwgX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBlcWRwX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfYWxsX25nZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmdlKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ2VzcF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGdlZnBfcChfX0NSNl9FUSwgX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmdlKHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGdlZHBfcChfX0NSNl9FUSwgX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19hbGxfbmd0ICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZ3QodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBndHNwX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RmcF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZ3QodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ3RkcF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX2FsbF9ubGUgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19hbGxfbmxlKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBnZWZwX3AoX19DUjZfRVEsIF9fYiwgX19hKTsKK30KKworLyogdmVjX2FsbF9ubHQgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19hbGxfbmx0KHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndGZwX3AoX19DUjZfRVEsIF9fYiwgX19hKTsKK30KKworLyogdmVjX2FsbF9udW1lcmljICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfYWxsX251bWVyaWModmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxZnBfcChfX0NSNl9MVCwgX19hLCBfX2EpOworfQorCisvKiB2ZWNfYW55X2VxICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVFfUkVWLCBfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRX1JFViwgX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0VRX1JFViwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoCisgICAgICBfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoCisgICAgICBfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcCgKKyAgICAgIF9fQ1I2X0VRX1JFViwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoCisgICAgICBfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZXFzcF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcWZwX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxZHBfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfYW55X2dlICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfTFRfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xUX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVF9SRVYsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0xUX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHNob3J0KV9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVF9SRVYsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVF9SRVYsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfTFRfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBpbnQpX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFRfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFRfUkVWLCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfTFRfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVF9SRVYsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0xUX1JFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFRfUkVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVF9SRVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFRfUkVWLCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFRfUkVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBnZXNwX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGdlZnBfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ2VkcF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19hbnlfZ3QgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfRVFfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVFfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9FUV9SRVYsIF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVFfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfRVFfUkVWLCBfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfRVFfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUV9SRVYsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRX1JFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUV9SRVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUV9SRVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGd0c3BfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RmcF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBndGRwX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX2FueV9sZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9MVF9SRVYsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVF9SRVYsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0xUX1JFViwgX19hLCAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVF9SRVYsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9MVF9SRVYsIF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVF9SRVYsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9MVF9SRVYsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xUX1JFViwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFRfUkVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xUX1JFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xUX1JFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ2VzcF9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBnZWZwX3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGdlZHBfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfYW55X2x0ICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUV9SRVYsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHNob3J0KV9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUV9SRVYsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBpbnQpX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0VRX1JFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVFfUkVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUV9SRVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVFfUkVWLCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVFfUkVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBndHNwX3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0ZnBfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ3RkcF9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworfQorI2VuZGlmCisKKy8qIHZlY19hbnlfbmFuICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfYW55X25hbih2ZWN0b3IgZmxvYXQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXFmcF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2EpOworfQorCisvKiB2ZWNfYW55X25lICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFRfUkVWLCBfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xUX1JFViwgX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0xUX1JFViwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoCisgICAgICBfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoCisgICAgICBfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcCgKKyAgICAgIF9fQ1I2X0xUX1JFViwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoCisgICAgICBfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZXFzcF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcWZwX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxZHBfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfYW55X25nZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2FueV9uZ2UodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGdlZnBfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKK30KKworLyogdmVjX2FueV9uZ3QgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19hbnlfbmd0KHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndGZwX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Cit9CisKKy8qIHZlY19hbnlfbmxlICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfYW55X25sZSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ2VmcF9wKF9fQ1I2X0xUX1JFViwgX19iLCBfX2EpOworfQorCisvKiB2ZWNfYW55X25sdCAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2FueV9ubHQodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0ZnBfcChfX0NSNl9MVF9SRVYsIF9fYiwgX19hKTsKK30KKworLyogdmVjX2FueV9udW1lcmljICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfYW55X251bWVyaWModmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxZnBfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19hKTsKK30KKworLyogdmVjX2FueV9vdXQgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19hbnlfb3V0KHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBiZnBfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKK30KKworLyogUG93ZXIgOCBDcnlwdG8gZnVuY3Rpb25zCitOb3RlOiBXZSBkaXZlcmdlIGZyb20gdGhlIGN1cnJlbnQgR0NDIGltcGxlbWVudGF0aW9uIHdpdGggcmVnYXJkCit0byBjcnlwdG9ncmFwaHkgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGFzIGZvbGxvd3M6CistIE9ubHkgdGhlIFNIQSBhbmQgQUVTIGluc3RydWN0aW9ucyBhbmQgYnVpbHRpbnMgYXJlIGRpc2FibGVkIGJ5IC1tbm8tY3J5cHRvCistIFRoZSByZW1haW5pbmcgb25lcyBhcmUgb25seSBhdmFpbGFibGUgb24gUG93ZXI4IGFuZCB1cCBzbworICByZXF1aXJlIC1tcG93ZXI4LXZlY3RvcgorVGhlIGp1c3RpZmljYXRpb24gZm9yIHRoaXMgaXMgdGhhdCBleHBvcnQgcmVxdWlyZW1lbnRzIHJlcXVpcmUgdGhhdAorQ2F0ZWdvcnk6VmVjdG9yLkNyeXB0byBpcyBvcHRpb25hbCAoaS5lLiBjb21wbGlhbnQgaGFyZHdhcmUgbWF5IG5vdCBwcm92aWRlCitzdXBwb3J0KS4gQXMgYSByZXN1bHQsIHdlIG5lZWQgdG8gYmUgYWJsZSB0byB0dXJuIG9mZiBzdXBwb3J0IGZvciB0aG9zZS4KK1RoZSByZW1haW5pbmcgb25lcyAoY3VycmVudGx5IGNvbnRyb2xsZWQgYnkgLW1jcnlwdG8gZm9yIEdDQykgc3RpbGwKK25lZWQgdG8gYmUgcHJvdmlkZWQgb24gY29tcGxpYW50IGhhcmR3YXJlIGV2ZW4gaWYgVmVjdG9yLkNyeXB0byBpcyBub3QKK3Byb3ZpZGVkLgorKi8KKyNpZmRlZiBfX0NSWVBUT19fCisjZGVmaW5lIHZlY19zYm94X2JlIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192c2JveAorI2RlZmluZSB2ZWNfY2lwaGVyX2JlIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192Y2lwaGVyCisjZGVmaW5lIHZlY19jaXBoZXJsYXN0X2JlIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192Y2lwaGVybGFzdAorI2RlZmluZSB2ZWNfbmNpcGhlcl9iZSBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdm5jaXBoZXIKKyNkZWZpbmUgdmVjX25jaXBoZXJsYXN0X2JlIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192bmNpcGhlcmxhc3QKKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCitfX2J1aWx0aW5fY3J5cHRvX3ZzYm94KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdnNib3goX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCitfX2J1aWx0aW5fY3J5cHRvX3ZjaXBoZXIodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192Y2lwaGVyKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCitfX2J1aWx0aW5fY3J5cHRvX3ZjaXBoZXJsYXN0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZjaXBoZXJsYXN0KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCitfX2J1aWx0aW5fY3J5cHRvX3ZuY2lwaGVyKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZuY2lwaGVyKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCitfX2J1aWx0aW5fY3J5cHRvX3ZuY2lwaGVybGFzdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdm5jaXBoZXJsYXN0KF9fYSwgX19iKTsKK30KKworI2RlZmluZSBfX2J1aWx0aW5fY3J5cHRvX3ZzaGFzaWdtYWQgX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZzaGFzaWdtYWQKKyNkZWZpbmUgX19idWlsdGluX2NyeXB0b192c2hhc2lnbWF3IF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192c2hhc2lnbWF3CisKKyNkZWZpbmUgdmVjX3NoYXNpZ21hX2JlKFgsIFksIFopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9HZW5lcmljKChYKSwgdmVjdG9yIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICA6IF9fYnVpbHRpbl9jcnlwdG9fdnNoYXNpZ21hdywgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyAgICAgICAgICAgIFwKKyAgICAgICAgICAgOiBfX2J1aWx0aW5fY3J5cHRvX3ZzaGFzaWdtYWQpKChYKSwgKFkpLCAoWikpCisjZW5kaWYKKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK19fYnVpbHRpbl9jcnlwdG9fdnBlcm14b3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZwZXJteG9yKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCitfX2J1aWx0aW5fY3J5cHRvX3ZwZXJteG9yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZwZXJteG9yKAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSBfX2J1aWx0aW5fY3J5cHRvX3ZwZXJteG9yKAorICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192cGVybXhvcigKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK19fYnVpbHRpbl9jcnlwdG9fdnBlcm14b3IodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYykgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZwZXJteG9yKAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK19fYnVpbHRpbl9jcnlwdG9fdnBtc3VtYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZwbXN1bWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCitfX2J1aWx0aW5fY3J5cHRvX3ZwbXN1bWIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZwbXN1bWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQorX19idWlsdGluX2NyeXB0b192cG1zdW1iKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZwbXN1bXcoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQorX19idWlsdGluX2NyeXB0b192cG1zdW1iKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdnBtc3VtZChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192Z2JiZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Z2JiZCgodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworI2RlZmluZSB2ZWNfcG1zdW1fYmUgX19idWlsdGluX2NyeXB0b192cG1zdW1iCisjZGVmaW5lIHZlY19nYiBfX2J1aWx0aW5fYWx0aXZlY192Z2JiZAorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY192Z2JiZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZnYmJkKF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdmJwZXJtcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YnBlcm1xKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3ZicGVybXEodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZicGVybXEoX19hLCBfX2IpOworfQorCisjaWZkZWYgX19wb3dlcnBjNjRfXworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfYnBlcm0odmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YnBlcm1xKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorI2VuZGlmCisjZW5kaWYKKworCisvKiB2ZWNfcmV2ZSAqLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyIHZlY19yZXZlKHZlY3RvciBib29sIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUsIDQsIDMsIDIsIDEsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3JldmUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1LCA0LCAzLCAyLCAxLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19yZXZlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1LCA0LCAzLCAyLCAxLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50IHZlY19yZXZlKHZlY3RvciBib29sIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAzLCAyLCAxLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3JldmUodmVjdG9yIHNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMywgMiwgMSwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19yZXZlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMywgMiwgMSwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0IHZlY19yZXZlKHZlY3RvciBib29sIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfcmV2ZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19yZXZlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGZsb2F0IHZlY19yZXZlKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAzLCAyLCAxLCAwKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX3JldmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDEsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3JldmUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMSwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19yZXZlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMSwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUgdmVjX3JldmUodmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAxLCAwKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfcmV2YiAqLworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19yZXZiKHZlY3RvciBib29sIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19yZXZiKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfcmV2Yih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfcmV2Yih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19pbmRpY2VzID0KKyAgICAgIHsgMSwgMCwgMywgMiwgNSwgNCwgNywgNiwgOSwgOCwgMTEsIDEwLCAxMywgMTIsIDE1LCAxNCB9OworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsIF9faW5kaWNlcyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfcmV2Yih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2luZGljZXMgPQorICAgICAgeyAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2LCA5LCA4LCAxMSwgMTAsIDEzLCAxMiwgMTUsIDE0IH07CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwgX19pbmRpY2VzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3JldmIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSkgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2luZGljZXMgPQorICAgICB7IDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYsIDksIDgsIDExLCAxMCwgMTMsIDEyLCAxNSwgMTQgfTsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLCBfX2luZGljZXMpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfcmV2Yih2ZWN0b3IgYm9vbCBpbnQgX19hKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9faW5kaWNlcyA9CisgICAgICB7IDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQsIDExLCAxMCwgOSwgOCwgMTUsIDE0LCAxMywgMTIgfTsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLCBfX2luZGljZXMpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19yZXZiKHZlY3RvciBzaWduZWQgaW50IF9fYSkgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2luZGljZXMgPQorICAgICAgeyAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0LCAxMSwgMTAsIDksIDgsIDE1LCAxNCwgMTMsIDEyIH07CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwgX19pbmRpY2VzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19yZXZiKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9faW5kaWNlcyA9CisgICAgICB7IDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQsIDExLCAxMCwgOSwgOCwgMTUsIDE0LCAxMywgMTIgfTsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLCBfX2luZGljZXMpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpCit2ZWNfcmV2Yih2ZWN0b3IgZmxvYXQgX19hKSB7CisgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19pbmRpY2VzID0KKyAgICAgIHsgMywgMiwgMSwgMCwgNywgNiwgNSwgNCwgMTEsIDEwLCA5LCA4LCAxNSwgMTQsIDEzLCAxMiB9OworIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwgX19pbmRpY2VzKTsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19yZXZiKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19pbmRpY2VzID0KKyAgICAgIHsgNywgNiwgNSwgNCwgMywgMiwgMSwgMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCB9OworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsIF9faW5kaWNlcyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3JldmIodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9faW5kaWNlcyA9CisgICAgICB7IDcsIDYsIDUsIDQsIDMsIDIsIDEsIDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDggfTsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLCBfX2luZGljZXMpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3JldmIodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19pbmRpY2VzID0KKyAgICAgIHsgNywgNiwgNSwgNCwgMywgMiwgMSwgMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCB9OworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsIF9faW5kaWNlcyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfcmV2Yih2ZWN0b3IgZG91YmxlIF9fYSkgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2luZGljZXMgPQorICAgICAgeyA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4IH07CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwgX19pbmRpY2VzKTsKK30KKyNlbmRpZiAvKiBFbmQgX19WU1hfXyAqLworCisjaWYgZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorc3RhdGljIF9faW5saW5lX18gdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY19yZXZiKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9faW5kaWNlcyA9CisgICAgICB7IDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDAgfTsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIF9faW50MTI4KXZlY19wZXJtKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5kaWNlcyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY19yZXZiKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19pbmRpY2VzID0KKyAgICAgIHsgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCB9OworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCl2ZWNfcGVybSgodmVjdG9yIHNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbmRpY2VzKTsKK30KKyNlbmRpZiAvKiBFTkQgX19QT1dFUjhfVkVDVE9SX18gJiYgX19wb3dlcnBjNjRfXyAqLworCisjdW5kZWYgX19BVFRSU19vX2FpCisKKyNlbmRpZiAvKiBfX0FMVElWRUNfSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hbW1pbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYW1taW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk4NWJiNAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYW1taW50cmluLmgKQEAgLTAsMCArMSwxOTQgQEAKKy8qPT09LS0tLSBhbW1pbnRyaW4uaCAtIFNTRTRhIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19BTU1JTlRSSU5fSAorI2RlZmluZSBfX0FNTUlOVFJJTl9ICisKKyNpbmNsdWRlIDxwbW1pbnRyaW4uaD4KKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJzc2U0YSIpKSkKKworLy8vIFxicmllZiBFeHRyYWN0cyB0aGUgc3BlY2lmaWVkIGJpdHMgZnJvbSB0aGUgbG93ZXIgNjQgYml0cyBvZiB0aGUgMTI4LWJpdAorLy8vICAgIGludGVnZXIgdmVjdG9yIG9wZXJhbmQgYXQgdGhlIGluZGV4IGlkeCBhbmQgb2YgdGhlIGxlbmd0aCBsZW4uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTEyOGkgX21tX2V4dHJhY3RpX3NpNjQoX19tMTI4aSB4LCBjb25zdCBpbnQgbGVuLCBjb25zdCBpbnQgaWR4KTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEVYVFJRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIHgKKy8vLyAgICBUaGUgdmFsdWUgZnJvbSB3aGljaCBiaXRzIGFyZSBleHRyYWN0ZWQuCisvLy8gXHBhcmFtIGxlbgorLy8vICAgIEJpdHMgWzU6MF0gc3BlY2lmeSB0aGUgbGVuZ3RoOyB0aGUgb3RoZXIgYml0cyBhcmUgaWdub3JlZC4gSWYgYml0cyBbNTowXQorLy8vICAgIGFyZSB6ZXJvLCB0aGUgbGVuZ3RoIGlzIGludGVycHJldGVkIGFzIDY0LgorLy8vIFxwYXJhbSBpZHgKKy8vLyAgICBCaXRzIFs1OjBdIHNwZWNpZnkgdGhlIGluZGV4IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQ7IHRoZSBvdGhlcgorLy8vICAgIGJpdHMgYXJlIGlnbm9yZWQuIElmIHRoZSBzdW0gb2YgdGhlIGluZGV4IGFuZCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIDY0LAorLy8vICAgIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLiBJZiB0aGUgbGVuZ3RoIGFuZCBpbmRleCBhcmUgYm90aCB6ZXJvLCBiaXRzCisvLy8gICAgWzYzOjBdIG9mIHBhcmFtZXRlciB4IGFyZSBleHRyYWN0ZWQuIElmIHRoZSBsZW5ndGggaXMgemVybyBidXQgdGhlIGluZGV4CisvLy8gICAgaXMgbm9uLXplcm8sIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciB3aG9zZSBsb3dlciA2NCBiaXRzIGNvbnRhaW4gdGhlIGJpdHMKKy8vLyAgICBleHRyYWN0ZWQgZnJvbSB0aGUgc291cmNlIG9wZXJhbmQuCisjZGVmaW5lIF9tbV9leHRyYWN0aV9zaTY0KHgsIGxlbiwgaWR4KSBcCisgICgoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9leHRycWkoKF9fdjJkaSkoX19tMTI4aSkoeCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcikobGVuKSwgKGNoYXIpKGlkeCkpKQorCisvLy8gXGJyaWVmIEV4dHJhY3RzIHRoZSBzcGVjaWZpZWQgYml0cyBmcm9tIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZSAxMjgtYml0CisvLy8gICAgaW50ZWdlciB2ZWN0b3Igb3BlcmFuZCBhdCB0aGUgaW5kZXggYW5kIG9mIHRoZSBsZW5ndGggc3BlY2lmaWVkIGJ5IF9feS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBFWFRSUSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3gKKy8vLyAgICBUaGUgdmFsdWUgZnJvbSB3aGljaCBiaXRzIGFyZSBleHRyYWN0ZWQuCisvLy8gXHBhcmFtIF9feQorLy8vICAgIFNwZWNpZmllcyB0aGUgaW5kZXggb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBhdCBbMTM6OF0gYW5kIHRoZQorLy8vICAgIGxlbmd0aCBhdCBbNTowXTsgYWxsIG90aGVyIGJpdHMgYXJlIGlnbm9yZWQuIElmIGJpdHMgWzU6MF0gYXJlIHplcm8sIHRoZQorLy8vICAgIGxlbmd0aCBpcyBpbnRlcnByZXRlZCBhcyA2NC4gSWYgdGhlIHN1bSBvZiB0aGUgaW5kZXggYW5kIGxlbmd0aCBpcworLy8vICAgIGdyZWF0ZXIgdGhhbiA2NCwgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuIElmIHRoZSBsZW5ndGggYW5kIGluZGV4IGFyZQorLy8vICAgIGJvdGggemVybywgYml0cyBbNjM6MF0gb2YgcGFyYW1ldGVyIF9feCBhcmUgZXh0cmFjdGVkLiBJZiB0aGUgbGVuZ3RoIGlzCisvLy8gICAgemVybyBidXQgdGhlIGluZGV4IGlzIG5vbi16ZXJvLCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIHdob3NlIGxvd2VyIDY0IGJpdHMgY29udGFpbiB0aGUgYml0cyBleHRyYWN0ZWQKKy8vLyAgICBmcm9tIHRoZSBzb3VyY2Ugb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZXh0cmFjdF9zaTY0KF9fbTEyOGkgX194LCBfX20xMjhpIF9feSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2V4dHJxKChfX3YyZGkpX194LCAoX192MTZxaSlfX3kpOworfQorCisvLy8gXGJyaWVmIEluc2VydHMgYml0cyBvZiBhIHNwZWNpZmllZCBsZW5ndGggZnJvbSB0aGUgc291cmNlIGludGVnZXIgdmVjdG9yIHkKKy8vLyAgICBpbnRvIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBpbnRlZ2VyIHZlY3RvciB4IGF0IHRoZSBpbmRleAorLy8vICAgIGlkeCBhbmQgb2YgdGhlIGxlbmd0aCBsZW4uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTEyOGkgX21tX2luc2VydGlfc2k2NChfX20xMjhpIHgsIF9fbTEyOGkgeSwgY29uc3QgaW50IGxlbiwKKy8vLyBjb25zdCBpbnQgaWR4KTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIElOU0VSVFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0geAorLy8vICAgIFRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kIHdoZXJlIGJpdHMgd2lsbCBiZSBpbnNlcnRlZC4gVGhlIGluc2VydGVkIGJpdHMKKy8vLyAgICBhcmUgZGVmaW5lZCBieSB0aGUgbGVuZ3RoIGxlbiBhbmQgYnkgdGhlIGluZGV4IGlkeCBzcGVjaWZ5aW5nIHRoZSBsZWFzdAorLy8vICAgIHNpZ25pZmljYW50IGJpdC4KKy8vLyBccGFyYW0geQorLy8vICAgIFRoZSBzb3VyY2Ugb3BlcmFuZCBjb250YWluaW5nIHRoZSBiaXRzIHRvIGJlIGV4dHJhY3RlZC4gVGhlIGV4dHJhY3RlZAorLy8vICAgIGJpdHMgYXJlIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIG9wZXJhbmQgeSBvZiBsZW5ndGggbGVuLgorLy8vIFxwYXJhbSBsZW4KKy8vLyAgICBCaXRzIFs1OjBdIHNwZWNpZnkgdGhlIGxlbmd0aDsgdGhlIG90aGVyIGJpdHMgYXJlIGlnbm9yZWQuIElmIGJpdHMgWzU6MF0KKy8vLyAgICBhcmUgemVybywgdGhlIGxlbmd0aCBpcyBpbnRlcnByZXRlZCBhcyA2NC4KKy8vLyBccGFyYW0gaWR4CisvLy8gICAgQml0cyBbNTowXSBzcGVjaWZ5IHRoZSBpbmRleCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0OyB0aGUgb3RoZXIKKy8vLyAgICBiaXRzIGFyZSBpZ25vcmVkLiBJZiB0aGUgc3VtIG9mIHRoZSBpbmRleCBhbmQgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiA2NCwKKy8vLyAgICB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4gSWYgdGhlIGxlbmd0aCBhbmQgaW5kZXggYXJlIGJvdGggemVybywgYml0cworLy8vICAgIFs2MzowXSBvZiBwYXJhbWV0ZXIgeSBhcmUgaW5zZXJ0ZWQgaW50byBwYXJhbWV0ZXIgeC4gSWYgdGhlIGxlbmd0aCBpcworLy8vICAgIHplcm8gYnV0IHRoZSBpbmRleCBpcyBub24temVybywgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGxvd2VyIDY0LWJpdHMgb2YKKy8vLyAgICBkZXN0aW5hdGlvbiBvcGVyYW5kIHggd2l0aCB0aGUgc3BlY2lmaWVkIGJpdGZpZWxkcyByZXBsYWNlZCBieSB0aGUgbG93ZXIKKy8vLyAgICBiaXRzIG9mIHNvdXJjZSBvcGVyYW5kIHkuIFRoZSB1cHBlciA2NCBiaXRzIG9mIHRoZSByZXR1cm4gdmFsdWUgYXJlCisvLy8gICAgdW5kZWZpbmVkLgorCisjZGVmaW5lIF9tbV9pbnNlcnRpX3NpNjQoeCwgeSwgbGVuLCBpZHgpIFwKKyAgKChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2luc2VydHFpKChfX3YyZGkpKF9fbTEyOGkpKHgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKSh5KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIpKGxlbiksIChjaGFyKShpZHgpKSkKKworLy8vIFxicmllZiBJbnNlcnRzIGJpdHMgb2YgYSBzcGVjaWZpZWQgbGVuZ3RoIGZyb20gdGhlIHNvdXJjZSBpbnRlZ2VyIHZlY3RvcgorLy8vICAgIF9feSBpbnRvIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBpbnRlZ2VyIHZlY3RvciBfX3ggYXQgdGhlCisvLy8gICAgaW5kZXggYW5kIG9mIHRoZSBsZW5ndGggc3BlY2lmaWVkIGJ5IF9feS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBJTlNFUlRRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9feAorLy8vICAgIFRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kIHdoZXJlIGJpdHMgd2lsbCBiZSBpbnNlcnRlZC4gVGhlIGluc2VydGVkIGJpdHMKKy8vLyAgICBhcmUgZGVmaW5lZCBieSB0aGUgbGVuZ3RoIGFuZCBieSB0aGUgaW5kZXggb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdAorLy8vICAgIHNwZWNpZmllZCBieSBvcGVyYW5kIF9feS4KKy8vLyBccGFyYW0gX195CisvLy8gICAgVGhlIHNvdXJjZSBvcGVyYW5kIGNvbnRhaW5pbmcgdGhlIGJpdHMgdG8gYmUgZXh0cmFjdGVkLiBUaGUgZXh0cmFjdGVkCisvLy8gICAgYml0cyBhcmUgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2Ygb3BlcmFuZCBfX3kgd2l0aCBsZW5ndGggc3BlY2lmaWVkCisvLy8gICAgYnkgYml0cyBbNjk6NjRdLiBUaGVzZSBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgZGVzdGluYXRpb24gYXQgdGhlIGluZGV4CisvLy8gICAgc3BlY2lmaWVkIGJ5IGJpdHMgWzc3OjcyXTsgYWxsIG90aGVyIGJpdHMgYXJlIGlnbm9yZWQuIElmIGJpdHMgWzY5OjY0XQorLy8vICAgIGFyZSB6ZXJvLCB0aGUgbGVuZ3RoIGlzIGludGVycHJldGVkIGFzIDY0LiBJZiB0aGUgc3VtIG9mIHRoZSBpbmRleCBhbmQKKy8vLyAgICBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIDY0LCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4gSWYgdGhlIGxlbmd0aCBhbmQKKy8vLyAgICBpbmRleCBhcmUgYm90aCB6ZXJvLCBiaXRzIFs2MzowXSBvZiBwYXJhbWV0ZXIgX195IGFyZSBpbnNlcnRlZCBpbnRvCisvLy8gICAgcGFyYW1ldGVyIF9feC4gSWYgdGhlIGxlbmd0aCBpcyB6ZXJvIGJ1dCB0aGUgaW5kZXggaXMgbm9uLXplcm8sIHRoZQorLy8vICAgIHJlc3VsdCBpcyB1bmRlZmluZWQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGxvd2VyIDY0LWJpdHMgb2YKKy8vLyAgICBkZXN0aW5hdGlvbiBvcGVyYW5kIF9feCB3aXRoIHRoZSBzcGVjaWZpZWQgYml0ZmllbGRzIHJlcGxhY2VkIGJ5IHRoZQorLy8vICAgIGxvd2VyIGJpdHMgb2Ygc291cmNlIG9wZXJhbmQgX195LiBUaGUgdXBwZXIgNjQgYml0cyBvZiB0aGUgcmV0dXJuIHZhbHVlCisvLy8gICAgYXJlIHVuZGVmaW5lZC4KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9pbnNlcnRfc2k2NChfX20xMjhpIF9feCwgX19tMTI4aSBfX3kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9pbnNlcnRxKChfX3YyZGkpX194LCAoX192MmRpKV9feSk7Cit9CisKKy8vLyBcYnJpZWYgU3RvcmVzIGEgNjQtYml0IGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaW4gYSA2NC1iaXQgbWVtb3J5IGxvY2F0aW9uLgorLy8vICAgIFRvIG1pbmltaXplIGNhY2hpbmcsIHRoZSBkYXRhIGlzIGZsYWdnZWQgYXMgbm9uLXRlbXBvcmFsICh1bmxpa2VseSB0byBiZQorLy8vICAgIHVzZWQgYWdhaW4gc29vbikuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgTU9WTlRTRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3AKKy8vLyAgICBUaGUgNjQtYml0IG1lbW9yeSBsb2NhdGlvbiB1c2VkIHRvIHN0b3JlIHRoZSByZWdpc3RlciB2YWx1ZS4KKy8vLyBccGFyYW0gX19hCisvLy8gICAgVGhlIDY0LWJpdCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIHZhbHVlIHRvIGJlIHN0b3JlZC4KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RyZWFtX3NkKGRvdWJsZSAqX19wLCBfX20xMjhkIF9fYSkKK3sKKyAgX19idWlsdGluX2lhMzJfbW92bnRzZChfX3AsIChfX3YyZGYpX19hKTsKK30KKworLy8vIFxicmllZiBTdG9yZXMgYSAzMi1iaXQgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSBpbiBhIDMyLWJpdAorLy8vICAgIG1lbW9yeSBsb2NhdGlvbi4gVG8gbWluaW1pemUgY2FjaGluZywgdGhlIGRhdGEgaXMgZmxhZ2dlZCBhcworLy8vICAgIG5vbi10ZW1wb3JhbCAodW5saWtlbHkgdG8gYmUgdXNlZCBhZ2FpbiBzb29uKS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBNT1ZOVFNTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIFRoZSAzMi1iaXQgbWVtb3J5IGxvY2F0aW9uIHVzZWQgdG8gc3RvcmUgdGhlIHJlZ2lzdGVyIHZhbHVlLgorLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBUaGUgMzItYml0IHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgdmFsdWUgdG8gYmUgc3RvcmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdHJlYW1fc3MoZmxvYXQgKl9fcCwgX19tMTI4IF9fYSkKK3sKKyAgX19idWlsdGluX2lhMzJfbW92bnRzcyhfX3AsIChfX3Y0c2YpX19hKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19BTU1JTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hcm1fYWNsZS5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hcm1fYWNsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MjNlNjIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2FybV9hY2xlLmgKQEAgLTAsMCArMSwzMTIgQEAKKy8qPT09LS0tLSBhcm1fYWNsZS5oIC0gQVJNIE5vbi1OZW9uIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19BUk1fQUNMRV9ICisjZGVmaW5lIF9fQVJNX0FDTEVfSAorCisjaWZuZGVmIF9fQVJNX0FDTEUKKyNlcnJvciAiQUNMRSBpbnRyaW5zaWNzIHN1cHBvcnQgbm90IGVuYWJsZWQuIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiA4IFNZTkNIUk9OSVpBVElPTiwgQkFSUklFUiBBTkQgSElOVCBJTlRSSU5TSUNTICovCisvKiA4LjMgTWVtb3J5IGJhcnJpZXJzICovCisjaWYgIWRlZmluZWQoX01TQ19WRVIpCisjZGVmaW5lIF9fZG1iKGkpIF9fYnVpbHRpbl9hcm1fZG1iKGkpCisjZGVmaW5lIF9fZHNiKGkpIF9fYnVpbHRpbl9hcm1fZHNiKGkpCisjZGVmaW5lIF9faXNiKGkpIF9fYnVpbHRpbl9hcm1faXNiKGkpCisjZW5kaWYKKworLyogOC40IEhpbnRzICovCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkgX193Zmkodm9pZCkgeworICBfX2J1aWx0aW5fYXJtX3dmaSgpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpIF9fd2ZlKHZvaWQpIHsKKyAgX19idWlsdGluX2FybV93ZmUoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKSBfX3Nldih2b2lkKSB7CisgIF9fYnVpbHRpbl9hcm1fc2V2KCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkgX19zZXZsKHZvaWQpIHsKKyAgX19idWlsdGluX2FybV9zZXZsKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkgX195aWVsZCh2b2lkKSB7CisgIF9fYnVpbHRpbl9hcm1feWllbGQoKTsKK30KKyNlbmRpZgorCisjaWYgX19BUk1fMzJCSVRfU1RBVEUKKyNkZWZpbmUgX19kYmcodCkgX19idWlsdGluX2FybV9kYmcodCkKKyNlbmRpZgorCisvKiA4LjUgU3dhcCAqLworc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fc3dwKHVpbnQzMl90IF9feCwgdm9sYXRpbGUgdWludDMyX3QgKl9fcCkgeworICB1aW50MzJfdCB2OworICBkbworICAgIHYgPSBfX2J1aWx0aW5fYXJtX2xkcmV4KF9fcCk7CisgIHdoaWxlIChfX2J1aWx0aW5fYXJtX3N0cmV4KF9feCwgX19wKSk7CisgIHJldHVybiB2OworfQorCisvKiA4LjYgTWVtb3J5IHByZWZldGNoIGludHJpbnNpY3MgKi8KKy8qIDguNi4xIERhdGEgcHJlZmV0Y2ggKi8KKyNkZWZpbmUgX19wbGQoYWRkcikgX19wbGR4KDAsIDAsIDAsIGFkZHIpCisKKyNpZiBfX0FSTV8zMkJJVF9TVEFURQorI2RlZmluZSBfX3BsZHgoYWNjZXNzX2tpbmQsIGNhY2hlX2xldmVsLCByZXRlbnRpb25fcG9saWN5LCBhZGRyKSBcCisgIF9fYnVpbHRpbl9hcm1fcHJlZmV0Y2goYWRkciwgYWNjZXNzX2tpbmQsIDEpCisjZWxzZQorI2RlZmluZSBfX3BsZHgoYWNjZXNzX2tpbmQsIGNhY2hlX2xldmVsLCByZXRlbnRpb25fcG9saWN5LCBhZGRyKSBcCisgIF9fYnVpbHRpbl9hcm1fcHJlZmV0Y2goYWRkciwgYWNjZXNzX2tpbmQsIGNhY2hlX2xldmVsLCByZXRlbnRpb25fcG9saWN5LCAxKQorI2VuZGlmCisKKy8qIDguNi4yIEluc3RydWN0aW9uIHByZWZldGNoICovCisjZGVmaW5lIF9fcGxpKGFkZHIpIF9fcGxpeCgwLCAwLCBhZGRyKQorCisjaWYgX19BUk1fMzJCSVRfU1RBVEUKKyNkZWZpbmUgX19wbGl4KGNhY2hlX2xldmVsLCByZXRlbnRpb25fcG9saWN5LCBhZGRyKSBcCisgIF9fYnVpbHRpbl9hcm1fcHJlZmV0Y2goYWRkciwgMCwgMCkKKyNlbHNlCisjZGVmaW5lIF9fcGxpeChjYWNoZV9sZXZlbCwgcmV0ZW50aW9uX3BvbGljeSwgYWRkcikgXAorICBfX2J1aWx0aW5fYXJtX3ByZWZldGNoKGFkZHIsIDAsIGNhY2hlX2xldmVsLCByZXRlbnRpb25fcG9saWN5LCAwKQorI2VuZGlmCisKKy8qIDguNyBOT1AgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkgX19ub3Aodm9pZCkgeworICBfX2J1aWx0aW5fYXJtX25vcCgpOworfQorCisvKiA5IERBVEEtUFJPQ0VTU0lORyBJTlRSSU5TSUNTICovCisvKiA5LjIgTWlzY2VsbGFuZW91cyBkYXRhLXByb2Nlc3NpbmcgaW50cmluc2ljcyAqLworLyogUk9SICovCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19yb3IodWludDMyX3QgX194LCB1aW50MzJfdCBfX3kpIHsKKyAgX195ICU9IDMyOworICBpZiAoX195ID09IDApCisgICAgcmV0dXJuIF9feDsKKyAgcmV0dXJuIChfX3ggPj4gX195KSB8IChfX3ggPDwgKDMyIC0gX195KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVpbnQ2NF90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3JvcmxsKHVpbnQ2NF90IF9feCwgdWludDMyX3QgX195KSB7CisgIF9feSAlPSA2NDsKKyAgaWYgKF9feSA9PSAwKQorICAgIHJldHVybiBfX3g7CisgIHJldHVybiAoX194ID4+IF9feSkgfCAoX194IDw8ICg2NCAtIF9feSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3JvcmwodW5zaWduZWQgbG9uZyBfX3gsIHVpbnQzMl90IF9feSkgeworI2lmIF9fU0laRU9GX0xPTkdfXyA9PSA0CisgIHJldHVybiBfX3JvcihfX3gsIF9feSk7CisjZWxzZQorICByZXR1cm4gX19yb3JsbChfX3gsIF9feSk7CisjZW5kaWYKK30KKworCisvKiBDTFogKi8KK3N0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX2Nseih1aW50MzJfdCBfX3QpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9jbHooX190KTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19jbHpsKHVuc2lnbmVkIGxvbmcgX190KSB7CisgIHJldHVybiBfX2J1aWx0aW5fY2x6bChfX3QpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19jbHpsbCh1aW50NjRfdCBfX3QpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9jbHpsbChfX3QpOworfQorCisvKiBSRVYgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3Jldih1aW50MzJfdCBfX3QpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9ic3dhcDMyKF9fdCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fcmV2bCh1bnNpZ25lZCBsb25nIF9fdCkgeworI2lmIF9fU0laRU9GX0xPTkdfXyA9PSA0CisgIHJldHVybiBfX2J1aWx0aW5fYnN3YXAzMihfX3QpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9ic3dhcDY0KF9fdCk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lX18gdWludDY0X3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fcmV2bGwodWludDY0X3QgX190KSB7CisgIHJldHVybiBfX2J1aWx0aW5fYnN3YXA2NChfX3QpOworfQorCisvKiBSRVYxNiAqLworc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fcmV2MTYodWludDMyX3QgX190KSB7CisgIHJldHVybiBfX3JvcihfX3JldihfX3QpLCAxNik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVpbnQ2NF90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3JldjE2bGwodWludDY0X3QgX190KSB7CisgIHJldHVybiAoKCh1aW50NjRfdClfX3JldjE2KF9fdCA+PiAzMikpIDw8IDMyKSB8IF9fcmV2MTYoX190KTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19yZXYxNmwodW5zaWduZWQgbG9uZyBfX3QpIHsKKyNpZiBfX1NJWkVPRl9MT05HX18gPT0gNAorICAgIHJldHVybiBfX3JldjE2KF9fdCk7CisjZWxzZQorICAgIHJldHVybiBfX3JldjE2bGwoX190KTsKKyNlbmRpZgorfQorCisvKiBSRVZTSCAqLworc3RhdGljIF9faW5saW5lX18gaW50MTZfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19yZXZzaChpbnQxNl90IF9fdCkgeworICByZXR1cm4gX19idWlsdGluX2Jzd2FwMTYoX190KTsKK30KKworLyogUkJJVCAqLworc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fcmJpdCh1aW50MzJfdCBfX3QpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fcmJpdChfX3QpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19yYml0bGwodWludDY0X3QgX190KSB7CisjaWYgX19BUk1fMzJCSVRfU1RBVEUKKyAgcmV0dXJuICgoKHVpbnQ2NF90KV9fYnVpbHRpbl9hcm1fcmJpdChfX3QpKSA8PCAzMikgfAorICAgICAgICAgX19idWlsdGluX2FybV9yYml0KF9fdCA+PiAzMik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FybV9yYml0NjQoX190KTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3JiaXRsKHVuc2lnbmVkIGxvbmcgX190KSB7CisjaWYgX19TSVpFT0ZfTE9OR19fID09IDQKKyAgcmV0dXJuIF9fcmJpdChfX3QpOworI2Vsc2UKKyAgcmV0dXJuIF9fcmJpdGxsKF9fdCk7CisjZW5kaWYKK30KKworLyoKKyAqIDkuNCBTYXR1cmF0aW5nIGludHJpbnNpY3MKKyAqCisgKiBGSVhNRTogQ2hhbmdlIGd1YXJkIHRvIHRoZWlyIGNvcnJvc3BvbmRpbmcgX19BUk1fRkVBVFVSRSBmbGFnIHdoZW4gUSBmbGFnCisgKiBpbnRyaW5zaWNzIGFyZSBpbXBsZW1lbnRlZCBhbmQgdGhlIGZsYWcgaXMgZW5hYmxlZC4KKyAqLworLyogOS40LjEgV2lkdGgtc3BlY2lmaWVkIHNhdHVyYXRpb24gaW50cmluc2ljcyAqLworI2lmIF9fQVJNXzMyQklUX1NUQVRFCisjZGVmaW5lIF9fc3NhdCh4LCB5KSBfX2J1aWx0aW5fYXJtX3NzYXQoeCwgeSkKKyNkZWZpbmUgX191c2F0KHgsIHkpIF9fYnVpbHRpbl9hcm1fdXNhdCh4LCB5KQorI2VuZGlmCisKKy8qIDkuNC4yIFNhdHVyYXRpbmcgYWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uIGludHJpbnNpY3MgKi8KKyNpZiBfX0FSTV8zMkJJVF9TVEFURQorc3RhdGljIF9faW5saW5lX18gaW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19xYWRkKGludDMyX3QgX190LCBpbnQzMl90IF9fdikgeworICByZXR1cm4gX19idWlsdGluX2FybV9xYWRkKF9fdCwgX192KTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19xc3ViKGludDMyX3QgX190LCBpbnQzMl90IF9fdikgeworICByZXR1cm4gX19idWlsdGluX2FybV9xc3ViKF9fdCwgX192KTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19xZGJsKGludDMyX3QgX190KSB7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX3FhZGQoX190LCBfX3QpOworfQorI2VuZGlmCisKKy8qIDkuNyBDUkMzMiBpbnRyaW5zaWNzICovCisjaWYgX19BUk1fRkVBVFVSRV9DUkMzMgorc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fY3JjMzJiKHVpbnQzMl90IF9fYSwgdWludDhfdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fY3JjMzJiKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fY3JjMzJoKHVpbnQzMl90IF9fYSwgdWludDE2X3QgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX2NyYzMyaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX2NyYzMydyh1aW50MzJfdCBfX2EsIHVpbnQzMl90IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FybV9jcmMzMncoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19jcmMzMmQodWludDMyX3QgX19hLCB1aW50NjRfdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fY3JjMzJkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fY3JjMzJjYih1aW50MzJfdCBfX2EsIHVpbnQ4X3QgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX2NyYzMyY2IoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19jcmMzMmNoKHVpbnQzMl90IF9fYSwgdWludDE2X3QgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX2NyYzMyY2goX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19jcmMzMmN3KHVpbnQzMl90IF9fYSwgdWludDMyX3QgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX2NyYzMyY3coX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19jcmMzMmNkKHVpbnQzMl90IF9fYSwgdWludDY0X3QgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX2NyYzMyY2QoX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIDEwLjEgU3BlY2lhbCByZWdpc3RlciBpbnRyaW5zaWNzICovCisjZGVmaW5lIF9fYXJtX3JzcihzeXNyZWcpIF9fYnVpbHRpbl9hcm1fcnNyKHN5c3JlZykKKyNkZWZpbmUgX19hcm1fcnNyNjQoc3lzcmVnKSBfX2J1aWx0aW5fYXJtX3JzcjY0KHN5c3JlZykKKyNkZWZpbmUgX19hcm1fcnNycChzeXNyZWcpIF9fYnVpbHRpbl9hcm1fcnNycChzeXNyZWcpCisjZGVmaW5lIF9fYXJtX3dzcihzeXNyZWcsIHYpIF9fYnVpbHRpbl9hcm1fd3NyKHN5c3JlZywgdikKKyNkZWZpbmUgX19hcm1fd3NyNjQoc3lzcmVnLCB2KSBfX2J1aWx0aW5fYXJtX3dzcjY0KHN5c3JlZywgdikKKyNkZWZpbmUgX19hcm1fd3NycChzeXNyZWcsIHYpIF9fYnVpbHRpbl9hcm1fd3NycChzeXNyZWcsIHYpCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FSTV9BQ0xFX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXJtX25lb24uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXJtX25lb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWNhNTliCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hcm1fbmVvbi5oCkBAIC0wLDAgKzEsNjkyMzEgQEAKKy8qPT09LS0tLSBhcm1fbmVvbi5oIC0gQVJNIE5lb24gaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19BUk1fTkVPTl9ICisjZGVmaW5lIF9fQVJNX05FT05fSAorCisjaWYgIWRlZmluZWQoX19BUk1fTkVPTikKKyNlcnJvciAiTkVPTiBzdXBwb3J0IG5vdCBlbmFibGVkIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKwordHlwZWRlZiBmbG9hdCBmbG9hdDMyX3Q7Cit0eXBlZGVmIF9fZnAxNiBmbG9hdDE2X3Q7CisjaWZkZWYgX19hYXJjaDY0X18KK3R5cGVkZWYgZG91YmxlIGZsb2F0NjRfdDsKKyNlbmRpZgorCisjaWZkZWYgX19hYXJjaDY0X18KK3R5cGVkZWYgdWludDhfdCBwb2x5OF90OwordHlwZWRlZiB1aW50MTZfdCBwb2x5MTZfdDsKK3R5cGVkZWYgdWludDY0X3QgcG9seTY0X3Q7Cit0eXBlZGVmIF9fdWludDEyOF90IHBvbHkxMjhfdDsKKyNlbHNlCit0eXBlZGVmIGludDhfdCBwb2x5OF90OwordHlwZWRlZiBpbnQxNl90IHBvbHkxNl90OworI2VuZGlmCit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoOCkpKSBpbnQ4X3QgaW50OHg4X3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMTYpKSkgaW50OF90IGludDh4MTZfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg0KSkpIGludDE2X3QgaW50MTZ4NF90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDgpKSkgaW50MTZfdCBpbnQxNng4X3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMikpKSBpbnQzMl90IGludDMyeDJfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg0KSkpIGludDMyX3QgaW50MzJ4NF90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDEpKSkgaW50NjRfdCBpbnQ2NHgxX3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMikpKSBpbnQ2NF90IGludDY0eDJfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg4KSkpIHVpbnQ4X3QgdWludDh4OF90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDE2KSkpIHVpbnQ4X3QgdWludDh4MTZfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg0KSkpIHVpbnQxNl90IHVpbnQxNng0X3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoOCkpKSB1aW50MTZfdCB1aW50MTZ4OF90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDIpKSkgdWludDMyX3QgdWludDMyeDJfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg0KSkpIHVpbnQzMl90IHVpbnQzMng0X3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMSkpKSB1aW50NjRfdCB1aW50NjR4MV90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDIpKSkgdWludDY0X3QgdWludDY0eDJfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg0KSkpIGZsb2F0MTZfdCBmbG9hdDE2eDRfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg4KSkpIGZsb2F0MTZfdCBmbG9hdDE2eDhfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSgyKSkpIGZsb2F0MzJfdCBmbG9hdDMyeDJfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg0KSkpIGZsb2F0MzJfdCBmbG9hdDMyeDRfdDsKKyNpZmRlZiBfX2FhcmNoNjRfXwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDEpKSkgZmxvYXQ2NF90IGZsb2F0NjR4MV90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDIpKSkgZmxvYXQ2NF90IGZsb2F0NjR4Ml90OworI2VuZGlmCit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fcG9seXZlY3Rvcl90eXBlKDgpKSkgcG9seThfdCBwb2x5OHg4X3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fcG9seXZlY3Rvcl90eXBlKDE2KSkpIHBvbHk4X3QgcG9seTh4MTZfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl9wb2x5dmVjdG9yX3R5cGUoNCkpKSBwb2x5MTZfdCBwb2x5MTZ4NF90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3BvbHl2ZWN0b3JfdHlwZSg4KSkpIHBvbHkxNl90IHBvbHkxNng4X3Q7CisjaWZkZWYgX19hYXJjaDY0X18KK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl9wb2x5dmVjdG9yX3R5cGUoMSkpKSBwb2x5NjRfdCBwb2x5NjR4MV90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3BvbHl2ZWN0b3JfdHlwZSgyKSkpIHBvbHk2NF90IHBvbHk2NHgyX3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgaW50OHg4eDJfdCB7CisgIGludDh4OF90IHZhbFsyXTsKK30gaW50OHg4eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50OHgxNngyX3QgeworICBpbnQ4eDE2X3QgdmFsWzJdOworfSBpbnQ4eDE2eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MTZ4NHgyX3QgeworICBpbnQxNng0X3QgdmFsWzJdOworfSBpbnQxNng0eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MTZ4OHgyX3QgeworICBpbnQxNng4X3QgdmFsWzJdOworfSBpbnQxNng4eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MzJ4MngyX3QgeworICBpbnQzMngyX3QgdmFsWzJdOworfSBpbnQzMngyeDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MzJ4NHgyX3QgeworICBpbnQzMng0X3QgdmFsWzJdOworfSBpbnQzMng0eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50NjR4MXgyX3QgeworICBpbnQ2NHgxX3QgdmFsWzJdOworfSBpbnQ2NHgxeDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50NjR4MngyX3QgeworICBpbnQ2NHgyX3QgdmFsWzJdOworfSBpbnQ2NHgyeDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDh4OHgyX3QgeworICB1aW50OHg4X3QgdmFsWzJdOworfSB1aW50OHg4eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDh4MTZ4Ml90IHsKKyAgdWludDh4MTZfdCB2YWxbMl07Cit9IHVpbnQ4eDE2eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDE2eDR4Ml90IHsKKyAgdWludDE2eDRfdCB2YWxbMl07Cit9IHVpbnQxNng0eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDE2eDh4Ml90IHsKKyAgdWludDE2eDhfdCB2YWxbMl07Cit9IHVpbnQxNng4eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDMyeDJ4Ml90IHsKKyAgdWludDMyeDJfdCB2YWxbMl07Cit9IHVpbnQzMngyeDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDMyeDR4Ml90IHsKKyAgdWludDMyeDRfdCB2YWxbMl07Cit9IHVpbnQzMng0eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDY0eDF4Ml90IHsKKyAgdWludDY0eDFfdCB2YWxbMl07Cit9IHVpbnQ2NHgxeDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDY0eDJ4Ml90IHsKKyAgdWludDY0eDJfdCB2YWxbMl07Cit9IHVpbnQ2NHgyeDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQxNng0eDJfdCB7CisgIGZsb2F0MTZ4NF90IHZhbFsyXTsKK30gZmxvYXQxNng0eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQxNng4eDJfdCB7CisgIGZsb2F0MTZ4OF90IHZhbFsyXTsKK30gZmxvYXQxNng4eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQzMngyeDJfdCB7CisgIGZsb2F0MzJ4Ml90IHZhbFsyXTsKK30gZmxvYXQzMngyeDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQzMng0eDJfdCB7CisgIGZsb2F0MzJ4NF90IHZhbFsyXTsKK30gZmxvYXQzMng0eDJfdDsKKworI2lmZGVmIF9fYWFyY2g2NF9fCit0eXBlZGVmIHN0cnVjdCBmbG9hdDY0eDF4Ml90IHsKKyAgZmxvYXQ2NHgxX3QgdmFsWzJdOworfSBmbG9hdDY0eDF4Ml90OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDY0eDJ4Ml90IHsKKyAgZmxvYXQ2NHgyX3QgdmFsWzJdOworfSBmbG9hdDY0eDJ4Ml90OworCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IHBvbHk4eDh4Ml90IHsKKyAgcG9seTh4OF90IHZhbFsyXTsKK30gcG9seTh4OHgyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHk4eDE2eDJfdCB7CisgIHBvbHk4eDE2X3QgdmFsWzJdOworfSBwb2x5OHgxNngyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHkxNng0eDJfdCB7CisgIHBvbHkxNng0X3QgdmFsWzJdOworfSBwb2x5MTZ4NHgyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHkxNng4eDJfdCB7CisgIHBvbHkxNng4X3QgdmFsWzJdOworfSBwb2x5MTZ4OHgyX3Q7CisKKyNpZmRlZiBfX2FhcmNoNjRfXwordHlwZWRlZiBzdHJ1Y3QgcG9seTY0eDF4Ml90IHsKKyAgcG9seTY0eDFfdCB2YWxbMl07Cit9IHBvbHk2NHgxeDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTY0eDJ4Ml90IHsKKyAgcG9seTY0eDJfdCB2YWxbMl07Cit9IHBvbHk2NHgyeDJfdDsKKworI2VuZGlmCit0eXBlZGVmIHN0cnVjdCBpbnQ4eDh4M190IHsKKyAgaW50OHg4X3QgdmFsWzNdOworfSBpbnQ4eDh4M190OworCit0eXBlZGVmIHN0cnVjdCBpbnQ4eDE2eDNfdCB7CisgIGludDh4MTZfdCB2YWxbM107Cit9IGludDh4MTZ4M190OworCit0eXBlZGVmIHN0cnVjdCBpbnQxNng0eDNfdCB7CisgIGludDE2eDRfdCB2YWxbM107Cit9IGludDE2eDR4M190OworCit0eXBlZGVmIHN0cnVjdCBpbnQxNng4eDNfdCB7CisgIGludDE2eDhfdCB2YWxbM107Cit9IGludDE2eDh4M190OworCit0eXBlZGVmIHN0cnVjdCBpbnQzMngyeDNfdCB7CisgIGludDMyeDJfdCB2YWxbM107Cit9IGludDMyeDJ4M190OworCit0eXBlZGVmIHN0cnVjdCBpbnQzMng0eDNfdCB7CisgIGludDMyeDRfdCB2YWxbM107Cit9IGludDMyeDR4M190OworCit0eXBlZGVmIHN0cnVjdCBpbnQ2NHgxeDNfdCB7CisgIGludDY0eDFfdCB2YWxbM107Cit9IGludDY0eDF4M190OworCit0eXBlZGVmIHN0cnVjdCBpbnQ2NHgyeDNfdCB7CisgIGludDY0eDJfdCB2YWxbM107Cit9IGludDY0eDJ4M190OworCit0eXBlZGVmIHN0cnVjdCB1aW50OHg4eDNfdCB7CisgIHVpbnQ4eDhfdCB2YWxbM107Cit9IHVpbnQ4eDh4M190OworCit0eXBlZGVmIHN0cnVjdCB1aW50OHgxNngzX3QgeworICB1aW50OHgxNl90IHZhbFszXTsKK30gdWludDh4MTZ4M190OworCit0eXBlZGVmIHN0cnVjdCB1aW50MTZ4NHgzX3QgeworICB1aW50MTZ4NF90IHZhbFszXTsKK30gdWludDE2eDR4M190OworCit0eXBlZGVmIHN0cnVjdCB1aW50MTZ4OHgzX3QgeworICB1aW50MTZ4OF90IHZhbFszXTsKK30gdWludDE2eDh4M190OworCit0eXBlZGVmIHN0cnVjdCB1aW50MzJ4MngzX3QgeworICB1aW50MzJ4Ml90IHZhbFszXTsKK30gdWludDMyeDJ4M190OworCit0eXBlZGVmIHN0cnVjdCB1aW50MzJ4NHgzX3QgeworICB1aW50MzJ4NF90IHZhbFszXTsKK30gdWludDMyeDR4M190OworCit0eXBlZGVmIHN0cnVjdCB1aW50NjR4MXgzX3QgeworICB1aW50NjR4MV90IHZhbFszXTsKK30gdWludDY0eDF4M190OworCit0eXBlZGVmIHN0cnVjdCB1aW50NjR4MngzX3QgeworICB1aW50NjR4Ml90IHZhbFszXTsKK30gdWludDY0eDJ4M190OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDE2eDR4M190IHsKKyAgZmxvYXQxNng0X3QgdmFsWzNdOworfSBmbG9hdDE2eDR4M190OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDE2eDh4M190IHsKKyAgZmxvYXQxNng4X3QgdmFsWzNdOworfSBmbG9hdDE2eDh4M190OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDMyeDJ4M190IHsKKyAgZmxvYXQzMngyX3QgdmFsWzNdOworfSBmbG9hdDMyeDJ4M190OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDMyeDR4M190IHsKKyAgZmxvYXQzMng0X3QgdmFsWzNdOworfSBmbG9hdDMyeDR4M190OworCisjaWZkZWYgX19hYXJjaDY0X18KK3R5cGVkZWYgc3RydWN0IGZsb2F0NjR4MXgzX3QgeworICBmbG9hdDY0eDFfdCB2YWxbM107Cit9IGZsb2F0NjR4MXgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0NjR4MngzX3QgeworICBmbG9hdDY0eDJfdCB2YWxbM107Cit9IGZsb2F0NjR4MngzX3Q7CisKKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgcG9seTh4OHgzX3QgeworICBwb2x5OHg4X3QgdmFsWzNdOworfSBwb2x5OHg4eDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTh4MTZ4M190IHsKKyAgcG9seTh4MTZfdCB2YWxbM107Cit9IHBvbHk4eDE2eDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTE2eDR4M190IHsKKyAgcG9seTE2eDRfdCB2YWxbM107Cit9IHBvbHkxNng0eDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTE2eDh4M190IHsKKyAgcG9seTE2eDhfdCB2YWxbM107Cit9IHBvbHkxNng4eDNfdDsKKworI2lmZGVmIF9fYWFyY2g2NF9fCit0eXBlZGVmIHN0cnVjdCBwb2x5NjR4MXgzX3QgeworICBwb2x5NjR4MV90IHZhbFszXTsKK30gcG9seTY0eDF4M190OworCit0eXBlZGVmIHN0cnVjdCBwb2x5NjR4MngzX3QgeworICBwb2x5NjR4Ml90IHZhbFszXTsKK30gcG9seTY0eDJ4M190OworCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IGludDh4OHg0X3QgeworICBpbnQ4eDhfdCB2YWxbNF07Cit9IGludDh4OHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDh4MTZ4NF90IHsKKyAgaW50OHgxNl90IHZhbFs0XTsKK30gaW50OHgxNng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDE2eDR4NF90IHsKKyAgaW50MTZ4NF90IHZhbFs0XTsKK30gaW50MTZ4NHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDE2eDh4NF90IHsKKyAgaW50MTZ4OF90IHZhbFs0XTsKK30gaW50MTZ4OHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDMyeDJ4NF90IHsKKyAgaW50MzJ4Ml90IHZhbFs0XTsKK30gaW50MzJ4Mng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDMyeDR4NF90IHsKKyAgaW50MzJ4NF90IHZhbFs0XTsKK30gaW50MzJ4NHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDY0eDF4NF90IHsKKyAgaW50NjR4MV90IHZhbFs0XTsKK30gaW50NjR4MXg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDY0eDJ4NF90IHsKKyAgaW50NjR4Ml90IHZhbFs0XTsKK30gaW50NjR4Mng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQ4eDh4NF90IHsKKyAgdWludDh4OF90IHZhbFs0XTsKK30gdWludDh4OHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQ4eDE2eDRfdCB7CisgIHVpbnQ4eDE2X3QgdmFsWzRdOworfSB1aW50OHgxNng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQxNng0eDRfdCB7CisgIHVpbnQxNng0X3QgdmFsWzRdOworfSB1aW50MTZ4NHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQxNng4eDRfdCB7CisgIHVpbnQxNng4X3QgdmFsWzRdOworfSB1aW50MTZ4OHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQzMngyeDRfdCB7CisgIHVpbnQzMngyX3QgdmFsWzRdOworfSB1aW50MzJ4Mng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQzMng0eDRfdCB7CisgIHVpbnQzMng0X3QgdmFsWzRdOworfSB1aW50MzJ4NHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQ2NHgxeDRfdCB7CisgIHVpbnQ2NHgxX3QgdmFsWzRdOworfSB1aW50NjR4MXg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQ2NHgyeDRfdCB7CisgIHVpbnQ2NHgyX3QgdmFsWzRdOworfSB1aW50NjR4Mng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MTZ4NHg0X3QgeworICBmbG9hdDE2eDRfdCB2YWxbNF07Cit9IGZsb2F0MTZ4NHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MTZ4OHg0X3QgeworICBmbG9hdDE2eDhfdCB2YWxbNF07Cit9IGZsb2F0MTZ4OHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MzJ4Mng0X3QgeworICBmbG9hdDMyeDJfdCB2YWxbNF07Cit9IGZsb2F0MzJ4Mng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MzJ4NHg0X3QgeworICBmbG9hdDMyeDRfdCB2YWxbNF07Cit9IGZsb2F0MzJ4NHg0X3Q7CisKKyNpZmRlZiBfX2FhcmNoNjRfXwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQ2NHgxeDRfdCB7CisgIGZsb2F0NjR4MV90IHZhbFs0XTsKK30gZmxvYXQ2NHgxeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQ2NHgyeDRfdCB7CisgIGZsb2F0NjR4Ml90IHZhbFs0XTsKK30gZmxvYXQ2NHgyeDRfdDsKKworI2VuZGlmCit0eXBlZGVmIHN0cnVjdCBwb2x5OHg4eDRfdCB7CisgIHBvbHk4eDhfdCB2YWxbNF07Cit9IHBvbHk4eDh4NF90OworCit0eXBlZGVmIHN0cnVjdCBwb2x5OHgxNng0X3QgeworICBwb2x5OHgxNl90IHZhbFs0XTsKK30gcG9seTh4MTZ4NF90OworCit0eXBlZGVmIHN0cnVjdCBwb2x5MTZ4NHg0X3QgeworICBwb2x5MTZ4NF90IHZhbFs0XTsKK30gcG9seTE2eDR4NF90OworCit0eXBlZGVmIHN0cnVjdCBwb2x5MTZ4OHg0X3QgeworICBwb2x5MTZ4OF90IHZhbFs0XTsKK30gcG9seTE2eDh4NF90OworCisjaWZkZWYgX19hYXJjaDY0X18KK3R5cGVkZWYgc3RydWN0IHBvbHk2NHgxeDRfdCB7CisgIHBvbHk2NHgxX3QgdmFsWzRdOworfSBwb2x5NjR4MXg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHk2NHgyeDRfdCB7CisgIHBvbHk2NHgyX3QgdmFsWzRdOworfSBwb2x5NjR4Mng0X3Q7CisKKyNlbmRpZgorCisjZGVmaW5lIF9fYWkgc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2YWJkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmFiZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ4eDE2X3QgX19ub3N3YXBfdmFiZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmFiZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2YWJkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdmFiZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZhYmRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmFiZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MTZ4OF90IF9fbm9zd2FwX3ZhYmRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZhYmRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdmFiZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDh4MTZfdCBfX25vc3dhcF92YWJkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2YWJkcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdmFiZHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmFiZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmFiZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdmFiZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2YWJkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YWJkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDhfdCBfX25vc3dhcF92YWJkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZhYmRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2YWJkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50OHg4X3QgX19ub3N3YXBfdmFiZF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZhYmRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2YWJkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDJfdCBfX25vc3dhcF92YWJkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2YWJkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmFiZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng0X3QgX19ub3N3YXBfdmFiZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZhYmRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2YWJkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDh4OF90IF9fbm9zd2FwX3ZhYmRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZhYmRfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdmFiZF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZhYmRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2YWJkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMngyX3QgX19ub3N3YXBfdmFiZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdmFiZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZhYmRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDRfdCBfX25vc3dhcF92YWJkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2YWJzcV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFic3FfdigoaW50OHgxNl90KV9fcDAsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZhYnNxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZhYnNxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmFic3FfdigoaW50OHgxNl90KV9fcDAsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdmFic3FfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmFic3FfdigoaW50OHgxNl90KV9fcmV2MCwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZhYnNxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmFic3FfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZhYnNxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19yZXYwLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmFic3FfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19wMCwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmFic3FfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZhYnNfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19wMCwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZhYnNfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92YWJzX3YoKGludDh4OF90KV9fcmV2MCwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2YWJzX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmFic192KChpbnQ4eDhfdClfX3AwLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdmFic19mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJzX3YoKGludDh4OF90KV9fcmV2MCwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmFic19zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19wMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2YWJzX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJzX3YoKGludDh4OF90KV9fcmV2MCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdmFic19zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2YWJzX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJzX3YoKGludDh4OF90KV9fcmV2MCwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmFkZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmFkZHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmFkZHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2YWRkcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2YWRkcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmFkZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZhZGRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZhZGRxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2YWRkcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2YWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZhZGRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmFkZHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2YWRkcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2YWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2YWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmFkZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2YWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmFkZF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2YWRkX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmFkZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2YWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZhZGRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmFkZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdmFkZF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdmFkZF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2YWRkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdmFkZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZhZGRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2YWRkX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2YWRkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2YWRkaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmFkZGhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng0X3QgX19ub3N3YXBfdmFkZGhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmFkZGhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZhZGRobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3ZhZGRobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmFkZGhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZhZGRobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDh4OF90IF9fbm9zd2FwX3ZhZGRobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZhZGRobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2YWRkaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng0X3QgX19ub3N3YXBfdmFkZGhuX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmFkZGhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZhZGRobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDJfdCBfX25vc3dhcF92YWRkaG5fczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZhZGRobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2YWRkaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHg4X3QgX19ub3N3YXBfdmFkZGhuX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2YW5kcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZhbmRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2YW5kcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2YW5kcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZhbmRxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZhbmRxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmFuZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmFuZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZhbmRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2YW5kcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmFuZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2YW5kcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZhbmRxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmFuZHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2YW5kcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZhbmRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmFuZF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmFuZF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZhbmRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmFuZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZhbmRfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmFuZF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZhbmRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmFuZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2YW5kX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZhbmRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2YW5kX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdmFuZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZhbmRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2YW5kX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2YW5kX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmFuZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2YmljcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2YmljcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZiaWNxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2YmljcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2YmljcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmJpY3FfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmJpY3FfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZiaWNxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmJpY3FfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2YmljcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZiaWNxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZiaWNxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZiaWNxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZiaWNxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZiaWNxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZiaWNxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZiaWNfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2YmljX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZiaWNfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZiaWNfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmJpY191NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmJpY191NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2YmljX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2YmljX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2YmljX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2YmljX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZiaWNfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdmJpY19zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2YmljX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZiaWNfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2YmljX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZiaWNfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdmJzbF9wOCh1aW50OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEsIHBvbHk4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2YnNsX3A4KHVpbnQ4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSwgcG9seTh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdmJzbF9wMTYodWludDE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEsIHBvbHkxNng0X3QgX19wMikgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdmJzbF9wMTYodWludDE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEsIHBvbHkxNng0X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZic2xxX3A4KHVpbnQ4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxLCBwb2x5OHgxNl90IF9fcDIpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCAzNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdmJzbHFfcDgodWludDh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEsIHBvbHk4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDM2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdmJzbHFfcDE2KHVpbnQxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxLCBwb2x5MTZ4OF90IF9fcDIpIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCAzNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdmJzbHFfcDE2KHVpbnQxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxLCBwb2x5MTZ4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCAzNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZic2xxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmJzbHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmJzbHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmJzbHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZic2xxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSwgdWludDY0eDJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZic2xxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSwgdWludDY0eDJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2YnNscV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2YnNscV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2YnNscV9zOCh1aW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2YnNscV9zOCh1aW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdmJzbHFfZjMyKHVpbnQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMng0X3QgX19wMikgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2YnNscV9mMzIodWludDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2YnNscV9zMzIodWludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmJzbHFfczMyKHVpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmJzbHFfczY0KHVpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEsIGludDY0eDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZic2xxX3M2NCh1aW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxLCBpbnQ2NHgyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZic2xxX3MxNih1aW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YnNscV9zMTYodWludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2YnNsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2YnNsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZic2xfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2YnNsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZic2xfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxLCB1aW50NjR4MV90IF9fcDIpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2YnNsX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSwgdWludDY0eDFfdCBfX3AyKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2YnNsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmJzbF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmJzbF9zOCh1aW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmJzbF9zOCh1aW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2YnNsX2YzMih1aW50MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJ4Ml90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZic2xfZjMyKHVpbnQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZic2xfczMyKHVpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2YnNsX3MzMih1aW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2YnNsX3M2NCh1aW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxLCBpbnQ2NHgxX3QgX19wMikgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdmJzbF9zNjQodWludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSwgaW50NjR4MV90IF9fcDIpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdmJzbF9zMTYodWludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZic2xfczE2KHVpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2FnZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNhZ2VxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2FnZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNhZ2VfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNhZ2VfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2FnZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWdlX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2FndHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNhZ3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2FndHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FndHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNhZ3RfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNhZ3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2FndF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWd0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2FsZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNhbGVxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2FsZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FsZXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNhbGVfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNhbGVfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2FsZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2FsdHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNhbHRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2FsdHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNhbHRfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNhbHRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2FsdF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWx0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZjZXFfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNlcV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNlcXFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y2VxcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNlcXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y2VxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNlcXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNlcXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y2VxcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2VxcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjZXFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjZXFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjZXFxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNlcXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNlcXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjZXFxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y2VxcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmNlcXFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNlcV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2VxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2VxX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZXFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2VxX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjZXFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZjZXFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjZXFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNlcV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZXFfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNlcV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNlcV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNlcV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNlcV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNnZXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y2dlcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPj0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNnZXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNnZXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y2dlcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2dlcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19yZXYwID49IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjZ2VxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjZ2VxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19yZXYwID49IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjZ2VxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNnZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPj0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNnZXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjZ2VxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y2dlcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmNnZXFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19yZXYwID49IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNnZV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2dlX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2dlX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZ2VfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2dlX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjZ2VfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZjZ2VfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjZ2VfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3JldjAgPj0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNnZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZ2VfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPj0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNnZV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNnZV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPj0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNnZV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNnZV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3JldjAgPj0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNndHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjZ3RxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjZ3RxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNndHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZ3RxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmNndHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjZ3RxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNndHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPiBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2d0cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNndHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPiBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2d0cV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2d0cV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPiBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y2d0cV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2d0cV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPiBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZjZ3RfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2d0X3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjZ3RfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2d0X3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPiBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2d0X3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNndF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19yZXYwID4gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2d0X3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjZ3RfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3JldjAgPiBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2d0X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2d0X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwID4gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNndF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2d0X3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjZ3RfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNndF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3JldjAgPiBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2xlcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjbGVxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcmV2MCA8PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2xlcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2xlcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjbGVxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZjbGVxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPD0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNsZXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNsZXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPD0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNsZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2xlcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA8PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2xlcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNsZXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjbGVxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2xlcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPD0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2xlX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjbGVfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjbGVfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNsZV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjbGVfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNsZV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNsZV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNsZV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA8PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2xlX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNsZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA8PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2xlX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2xlX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA8PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2xlX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2xlX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcmV2MCA8PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZjbHNxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2xzcV92KChpbnQ4eDE2X3QpX19wMCwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdmNsc3FfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNsc3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZjbHNxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsc3FfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZjbHNxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xzcV92KChpbnQ4eDE2X3QpX19yZXYwLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmNsc3FfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2xzcV92KChpbnQ4eDE2X3QpX19wMCwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmNsc3FfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNxX3YoKGludDh4MTZfdClfX3JldjAsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZjbHNfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNfdigoaW50OHg4X3QpX19wMCwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZjbHNfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2xzX3YoKGludDh4OF90KV9fcmV2MCwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmNsc19zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNfdigoaW50OHg4X3QpX19wMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2Y2xzX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2xzX3YoKGludDh4OF90KV9fcmV2MCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdmNsc19zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNfdigoaW50OHg4X3QpX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2Y2xzX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xzX3YoKGludDh4OF90KV9fcmV2MCwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjbHRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y2x0cV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2x0cV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjbHRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y2x0cV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZjbHRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2x0cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjbHRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNsdHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjbHRxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNsdHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNsdHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmNsdHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmNsdHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2x0X3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNsdF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2x0X3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNsdF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNsdF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjbHRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcmV2MCA8IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNsdF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2x0X3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNsdF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNsdF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA8IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjbHRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNsdF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2x0X3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjbHRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNsenFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNsenFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNsenFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6cV92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjbHpxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsenFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y2x6cV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3AwLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmNsenFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmNsenFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3AwLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2Y2x6cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2x6cV92KChpbnQ4eDE2X3QpX19yZXYwLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmNsenFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6cV92KChpbnQ4eDE2X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmNsenFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2Y2x6cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3AwLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2Y2x6cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNsenFfdigoaW50OHgxNl90KV9fcmV2MCwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZjbHpfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19wMCwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNsel91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2x6X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsel92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNsel91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjbHpfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6X3YoKGludDh4OF90KV9fcDAsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2x6X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNsel92KChpbnQ4eDhfdClfX3JldjAsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZjbHpfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19wMCwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZjbHpfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6X3YoKGludDh4OF90KV9fcmV2MCwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmNsel9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19wMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2Y2x6X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2x6X3YoKGludDh4OF90KV9fcmV2MCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdmNsel9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2Y2x6X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6X3YoKGludDh4OF90KV9fcmV2MCwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdmNudF9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmNudF92KChpbnQ4eDhfdClfX3AwLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZjbnRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmNudF92KChpbnQ4eDhfdClfX3JldjAsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2Y250cV9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdmNudHFfdigoaW50OHgxNl90KV9fcDAsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2Y250cV9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdmNudHFfdigoaW50OHgxNl90KV9fcmV2MCwgMzYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y250cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNudHFfdigoaW50OHgxNl90KV9fcDAsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y250cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNudHFfdigoaW50OHgxNl90KV9fcmV2MCwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZjbnRxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y250cV92KChpbnQ4eDE2X3QpX19wMCwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdmNudHFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNudHFfdigoaW50OHgxNl90KV9fcmV2MCwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZjbnRfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbnRfdigoaW50OHg4X3QpX19wMCwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNudF91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y250X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmNudF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNudF92KChpbnQ4eDhfdClfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmNudF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbnRfdigoaW50OHg4X3QpX19yZXYwLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdmNvbWJpbmVfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdmNvbWJpbmVfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdmNvbWJpbmVfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdmNvbWJpbmVfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y29tYmluZV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y29tYmluZV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDh4MTZfdCBfX25vc3dhcF92Y29tYmluZV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjb21iaW5lX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjb21iaW5lX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxLCAyLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdmNvbWJpbmVfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y29tYmluZV91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y29tYmluZV91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmNvbWJpbmVfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmNvbWJpbmVfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDE2eDhfdCBfX25vc3dhcF92Y29tYmluZV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmNvbWJpbmVfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2Y29tYmluZV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDh4MTZfdCBfX25vc3dhcF92Y29tYmluZV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2Y29tYmluZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdmNvbWJpbmVfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMSwgMiwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDMyeDRfdCBfX25vc3dhcF92Y29tYmluZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2Y29tYmluZV9mMTYoZmxvYXQxNng0X3QgX19wMCwgZmxvYXQxNng0X3QgX19wMSkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdmNvbWJpbmVfZjE2KGZsb2F0MTZ4NF90IF9fcDAsIGZsb2F0MTZ4NF90IF9fcDEpIHsKKyAgZmxvYXQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDE2eDhfdCBfX25vc3dhcF92Y29tYmluZV9mMTYoZmxvYXQxNng0X3QgX19wMCwgZmxvYXQxNng0X3QgX19wMSkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmNvbWJpbmVfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2Y29tYmluZV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDEsIDIsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3Zjb21iaW5lX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2Y29tYmluZV9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZjb21iaW5lX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZjb21iaW5lX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmNvbWJpbmVfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDhfdCBfX25vc3dhcF92Y29tYmluZV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdmNyZWF0ZV9wOCh1aW50NjRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZjcmVhdGVfcDgodWludDY0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2Y3JlYXRlX3AxNih1aW50NjRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZjcmVhdGVfcDE2KHVpbnQ2NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZjcmVhdGVfdTgodWludDY0X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y3JlYXRlX3U4KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNyZWF0ZV91MzIodWludDY0X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y3JlYXRlX3UzMih1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNyZWF0ZV91NjQodWludDY0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y3JlYXRlX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNyZWF0ZV91MTYodWludDY0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y3JlYXRlX3UxNih1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZjcmVhdGVfczgodWludDY0X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2Y3JlYXRlX3M4KHVpbnQ2NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2Y3JlYXRlX2YzMih1aW50NjRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZjcmVhdGVfZjMyKHVpbnQ2NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2Y3JlYXRlX2YxNih1aW50NjRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZjcmVhdGVfZjE2KHVpbnQ2NF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmNyZWF0ZV9zMzIodWludDY0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2Y3JlYXRlX3MzMih1aW50NjRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdmNyZWF0ZV9zNjQodWludDY0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2Y3JlYXRlX3M2NCh1aW50NjRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdmNyZWF0ZV9zMTYodWludDY0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2Y3JlYXRlX3MxNih1aW50NjRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2Y3Z0cV9mMzJfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX2YzMl92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2Y3Z0cV9mMzJfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX2YzMl92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2Y3Z0cV9mMzJfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfZjMyX3YoKGludDh4MTZfdClfX3AwLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZjdnRxX2YzMl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX2YzMl92KChpbnQ4eDE2X3QpX19yZXYwLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2Y3Z0X2YzMl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9mMzJfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2Y3Z0X2YzMl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9mMzJfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2Y3Z0X2YzMl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl92KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdmN2dF9mMzJfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl92KChpbnQ4eDhfdClfX3JldjAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dHFfbl9mMzJfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX2YzMl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dHFfbl9mMzJfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fZjMyX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRxX25fZjMyX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX2YzMl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dHFfbl9mMzJfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX2YzMl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0X25fZjMyX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9uX2YzMl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0X25fZjMyX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fZjMyX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dF9uX2YzMl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9uX2YzMl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRfbl9mMzJfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fZjMyX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0cV9uX3MzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fczMyX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0cV9uX3MzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fczMyX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDM0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRfbl9zMzJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fczMyX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dF9uX3MzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl9zMzJfdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRxX25fdTMyX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX3UzMl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dHFfbl91MzJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fdTMyX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRfbl91MzJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl91MzJfdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dF9uX3UzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9uX3UzMl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2Y3Z0cV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX3MzMl92KChpbnQ4eDE2X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmN2dHFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfczMyX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2Y3Z0X3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9zMzJfdigoaW50OHg4X3QpX19wMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2Y3Z0X3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfczMyX3YoKGludDh4OF90KV9fcmV2MCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjdnRxX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV91MzJfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y3Z0cV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX3UzMl92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjdnRfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfdTMyX3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y3Z0X3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF91MzJfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2ZHVwX25fcDgocG9seThfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2ZHVwX25fcDgocG9seThfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZkdXBfbl9wMTYocG9seTE2X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdmR1cF9uX3AxNihwb2x5MTZfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdmR1cHFfbl9wOChwb2x5OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZkdXBxX25fcDgocG9seThfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdmR1cHFfbl9wMTYocG9seTE2X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdmR1cHFfbl9wMTYocG9seTE2X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZkdXBxX25fdTgodWludDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2ZHVwcV9uX3U4KHVpbnQ4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZkdXBxX25fdTMyKHVpbnQzMl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZkdXBxX25fdTMyKHVpbnQzMl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2ZHVwcV9uX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2ZHVwcV9uX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmR1cHFfbl91MTYodWludDE2X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmR1cHFfbl91MTYodWludDE2X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmR1cHFfbl9zOChpbnQ4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdmR1cHFfbl9zOChpbnQ4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdmR1cHFfbl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZkdXBxX25fZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDhfdCkge19fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczB9OyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDhfdCkge19fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczB9OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZkdXBxX25fczMyKGludDMyX3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmR1cHFfbl9zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmR1cHFfbl9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSB7X19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2ZHVwcV9uX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2ZHVwcV9uX3MxNihpbnQxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZkdXBxX25fczE2KGludDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZkdXBfbl91OCh1aW50OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZkdXBfbl91OCh1aW50OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmR1cF9uX3UzMih1aW50MzJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2ZHVwX25fdTMyKHVpbnQzMl90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkge19fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2ZHVwX25fdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkge19fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZkdXBfbl91NjQodWludDY0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2ZHVwX25fdTE2KHVpbnQxNl90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZkdXBfbl91MTYodWludDE2X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2ZHVwX25fczgoaW50OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZkdXBfbl9zOChpbnQ4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZkdXBfbl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSB7X19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZkdXBfbl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSB7X19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX25fZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpIHtfX3MwLCBfX3MwLCBfX3MwLCBfX3MwfTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDRfdCkge19fczAsIF9fczAsIF9fczAsIF9fczB9OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZkdXBfbl9zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSB7X19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2ZHVwX25fczMyKGludDMyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkge19fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZkdXBfbl9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2ZHVwX25fczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkge19fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2ZHVwX25fczE2KGludDE2X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmR1cF9uX3MxNihpbnQxNl90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmVvcnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIF4gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2ZW9ycV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCBeIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmVvcnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmVvcnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2ZW9ycV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIF4gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2ZW9ycV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZlb3JxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZlb3JxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCBeIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2ZW9ycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdmVvcnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZlb3JxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmVvcnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCBeIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2ZW9ycV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIF4gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZlb3JxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmVvcnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2ZW9ycV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZlb3JfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIF4gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZlb3JfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2ZW9yX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZlb3JfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2ZW9yX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZlb3JfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2ZW9yX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZlb3JfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmVvcl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2ZW9yX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmVvcl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIF4gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZlb3JfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCBeIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2ZW9yX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdmVvcl9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIF4gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdmVvcl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIF4gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZlb3JfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCBeIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0X3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dF9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dF9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0cV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dHFfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4MTZfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0cV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRxX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQ4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRxX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dHFfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRxX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dHFfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRxX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dHFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQ5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRxX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRxX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRxX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRxX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0cV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dHFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRxX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0cV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0X3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dF91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0X3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0X3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dF91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dF9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dF9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0X2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dF9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0X3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0X3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZnZXRfaGlnaF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdmdldF9oaWdoX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgcG9seTh4OF90IF9fbm9zd2FwX3ZnZXRfaGlnaF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdmdldF9oaWdoX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2Z2V0X2hpZ2hfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA0LCA1LCA2LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Z2V0X2hpZ2hfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZnZXRfaGlnaF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ4eDhfdCBfX25vc3dhcF92Z2V0X2hpZ2hfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZnZXRfaGlnaF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmdldF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMiwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Z2V0X2hpZ2hfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZnZXRfaGlnaF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmdldF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Z2V0X2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA0LCA1LCA2LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng0X3QgX19ub3N3YXBfdmdldF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2Z2V0X2hpZ2hfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZnZXRfaGlnaF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDh4OF90IF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2Z2V0X2hpZ2hfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZnZXRfaGlnaF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDIsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQzMngyX3QgX19ub3N3YXBfdmdldF9oaWdoX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDIsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZnZXRfaGlnaF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdmdldF9oaWdoX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgNCwgNSwgNiwgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDE2eDRfdCBfX25vc3dhcF92Z2V0X2hpZ2hfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNCwgNSwgNiwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZnZXRfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDIsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdmdldF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMiwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMngyX3QgX19ub3N3YXBfdmdldF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZnZXRfaGlnaF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdmdldF9oaWdoX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZnZXRfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmdldF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgNCwgNSwgNiwgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng0X3QgX19ub3N3YXBfdmdldF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNCwgNSwgNiwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seThfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTgoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k4KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pOCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pMTYoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTE2KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTE2KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldHFfbGFuZV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTgoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRxX2xhbmVfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTgoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pOCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0cV9sYW5lX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMTYoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRxX2xhbmVfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTE2KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTE2KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRxX2xhbmVfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k4KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0cV9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k4KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTgoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldHFfbGFuZV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTMyKChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0cV9sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kzMigoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kzMigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0cV9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRxX2xhbmVfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTY0KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTY0KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRxX2xhbmVfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kxNigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldHFfbGFuZV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMTYoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMTYoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldHFfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTgoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRxX2xhbmVfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pOCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k4KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRxX2xhbmVfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2YzMigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldHFfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfZjMyKChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfZjMyKChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRxX2xhbmVfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kzMigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldHFfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kzMigoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kzMigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0cV9sYW5lX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRxX2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pNjQoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldHFfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTE2KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0cV9sYW5lX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTE2KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTE2KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRfbGFuZV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k4KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRfbGFuZV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pOCgoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldF9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTgoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0X2xhbmVfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTMyKChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRfbGFuZV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kzMigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldF9sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kzMigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRfbGFuZV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRfbGFuZV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0X2xhbmVfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTE2KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRfbGFuZV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kxNigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldF9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kxNigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k4KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k4KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pOCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9mMzIoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2YzMigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldF9sYW5lX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2YzMigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pMzIoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pMzIoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pMzIoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0X2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRfbGFuZV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kxNigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0X2xhbmVfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kxNigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldF9sYW5lX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kxNigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2Z2V0X2xvd19wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdmdldF9sb3dfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZnZXRfbG93X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwLCAxLCAyLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2Z2V0X2xvd19wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDAsIDEsIDIsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZnZXRfbG93X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Z2V0X2xvd191OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmdldF9sb3dfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZnZXRfbG93X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZnZXRfbG93X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Z2V0X2xvd191NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmdldF9sb3dfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDAsIDEsIDIsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZnZXRfbG93X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCwgMSwgMiwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2Z2V0X2xvd19zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmdldF9sb3dfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2Z2V0X2xvd19mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdmdldF9sb3dfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZnZXRfbG93X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDAsIDEsIDIsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2Z2V0X2xvd19mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDAsIDEsIDIsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZnZXRfbG93X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2Z2V0X2xvd19zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDAsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZnZXRfbG93X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2Z2V0X2xvd19zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2Z2V0X2xvd19zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDAsIDEsIDIsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmdldF9sb3dfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwLCAxLCAyLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmhhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmhhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2aGFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmhhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmhhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZoYWRkcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmhhZGRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZoYWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92aGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2aGFkZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZoYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmhhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2aGFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZoYWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZoYWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2aGFkZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2aGFkZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZoYWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZoYWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZoYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZoYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmhhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdmhhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdmhhZGRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmhhZGRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZoc3VicV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92aHN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZoc3VicV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92aHN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmhzdWJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92aHN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZoc3VicV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmhzdWJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZoc3VicV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmhzdWJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2aHN1YnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZoc3VicV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2aHN1YnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmhzdWJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmhzdWJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2aHN1YnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZoc3VicV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92aHN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmhzdWJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92aHN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2aHN1Yl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2aHN1Yl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92aHN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmhzdWJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmhzdWJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2aHN1Yl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmhzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2aHN1Yl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmhzdWJfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2aHN1Yl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmhzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2aHN1Yl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92aHN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZoc3ViX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZoc3ViX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92aHN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZoc3ViX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZoc3ViX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92aHN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA0OCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA1MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA1MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA0OSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCAzMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgNDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA0MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDQwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgMzQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDMzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMTYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgOSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCA0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9kdXBfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCA1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgMzYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9kdXBfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDM3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9kdXBfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNDgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA1MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDMyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA0MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA0MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgOSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9kdXBfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9kdXBfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMTYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDE4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2R1cF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMTcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCA0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCBfX3AyLCA0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCA1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDM3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNTApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCA0OSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCA0MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDQxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgNDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDM0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCAzMyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgX19wMiwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDE2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICB1aW50MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDE4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDE3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgX19wMiwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIGZsb2F0MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCA5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgaW50MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCAyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgMSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDM2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDM2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDMzKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM191MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMTcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMTYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCA5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCAzNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDM3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNTApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCA0OSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgNDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCA0MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDQwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDM0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDMzKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDE2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICB1aW50MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCAxOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMTcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCA4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgaW50MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCAyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCAxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMTgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCA5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9kdXBfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDE4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCA0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIF9fcDIsIDQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIF9fcDIsIDUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCAzNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDUwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgNDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgNDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCAzNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDMzKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCBfX3AyLCAxNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgdWludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIF9fcDIsIDE4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMTcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIF9fcDIsIDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIGludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCAxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZtYXhxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2bWF4cV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bWF4cV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtYXhxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bWF4cV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtYXhxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZtYXhxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3Qgdm1heHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZtYXhxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2bWF4cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bWF4cV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bWF4cV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bWF4cV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bWF4cV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2bWF4X3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3Qgdm1heF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2bWF4X3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3Qgdm1heF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3Qgdm1heF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZtYXhfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2bWF4X3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3Qgdm1heF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2bWF4X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZtYXhfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2bWF4X3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3Qgdm1heF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZtYXhfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2bWF4X3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZtaW5xX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2bWlucV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bWlucV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtaW5xX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bWlucV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtaW5xX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZtaW5xX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3Qgdm1pbnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZtaW5xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2bWlucV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bWlucV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bWlucV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bWlucV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bWlucV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2bWluX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3Qgdm1pbl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2bWluX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3Qgdm1pbl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3Qgdm1pbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZtaW5fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2bWluX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3Qgdm1pbl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2bWluX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZtaW5fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2bWluX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3Qgdm1pbl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZtaW5fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2bWluX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZtbGFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3Qgdm1sYXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1sYXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1sYXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtbGFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtbGFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZtbGFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZtbGFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZtbGFxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyeDRfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3Qgdm1sYXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtbGFxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bWxhcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtbGFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bWxhcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZtbGFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3Qgdm1sYV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZtbGFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3Qgdm1sYV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3Qgdm1sYV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2bWxhX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3Qgdm1sYV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3Qgdm1sYV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZtbGFfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJ4Ml90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2bWxhX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyeDJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2bWxhX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2bWxhX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm1sYV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3Qgdm1sYV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYXFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYXFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhcV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhcV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bWxhcV9uX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogKHVpbnQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bWxhcV9uX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqICh1aW50MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtbGFxX25fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiAodWludDE2eDhfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtbGFxX25fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogKHVpbnQxNng4X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZtbGFxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogKGZsb2F0MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZtbGFxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogKGZsb2F0MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1sYXFfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogKGludDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1sYXFfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiAoaW50MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm1sYXFfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogKGludDE2eDhfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm1sYXFfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiAoaW50MTZ4OF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZtbGFfbl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqICh1aW50MzJ4Ml90KSB7X19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3Qgdm1sYV9uX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqICh1aW50MzJ4Ml90KSB7X19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZtbGFfbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqICh1aW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3Qgdm1sYV9uX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqICh1aW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2bWxhX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogKGZsb2F0MzJ4Ml90KSB7X19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZtbGFfbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiAoZmxvYXQzMngyX3QpIHtfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2bWxhX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIChpbnQzMngyX3QpIHtfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZtbGFfbl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiAoaW50MzJ4Ml90KSB7X19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm1sYV9uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiAoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2bWxhX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2bWxzcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZtbHNxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtbHNxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtbHNxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bWxzcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2bWxzcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2bWxzcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2bWxzcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2bWxzcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMng0X3QgX19wMikgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZtbHNxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyeDRfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bWxzcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1sc3FfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bWxzcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm1sc3FfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2bWxzX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZtbHNfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2bWxzX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZtbHNfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZtbHNfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3Qgdm1sc191MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZtbHNfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZtbHNfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2bWxzX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyeDJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3Qgdm1sc19mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3Qgdm1sc19zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3Qgdm1sc19zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZtbHNfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZtbHNfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc3FfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc3FfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc3FfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc3FfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzcV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc3FfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzcV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc19sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc19sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc19sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc19sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc19sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc19sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1sc3Ffbl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqICh1aW50MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1sc3Ffbl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiAodWludDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bWxzcV9uX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogKHVpbnQxNng4X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2bWxzcV9uX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqICh1aW50MTZ4OF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2bWxzcV9uX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyX3QgX19wMikgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIChmbG9hdDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2bWxzcV9uX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyX3QgX19wMikgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIChmbG9hdDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtbHNxX25fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIChpbnQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtbHNxX25fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogKGludDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtbHNxX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIChpbnQxNng4X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtbHNxX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogKGludDE2eDhfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2bWxzX25fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiAodWludDMyeDJfdCkge19fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZtbHNfbl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiAodWludDMyeDJfdCkge19fcDIsIF9fcDJ9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2bWxzX25fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiAodWludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZtbHNfbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiAodWludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3Qgdm1sc19uX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIChmbG9hdDMyeDJfdCkge19fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2bWxzX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogKGZsb2F0MzJ4Ml90KSB7X19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3Qgdm1sc19uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiAoaW50MzJ4Ml90KSB7X19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2bWxzX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogKGludDMyeDJfdCkge19fcDIsIF9fcDJ9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZtbHNfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3Qgdm1sc19uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIChpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2bW92X25fcDgocG9seThfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2bW92X25fcDgocG9seThfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZtb3Zfbl9wMTYocG9seTE2X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3Qgdm1vdl9uX3AxNihwb2x5MTZfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3Qgdm1vdnFfbl9wOChwb2x5OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZtb3ZxX25fcDgocG9seThfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3Qgdm1vdnFfbl9wMTYocG9seTE2X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3Qgdm1vdnFfbl9wMTYocG9seTE2X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZtb3ZxX25fdTgodWludDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2bW92cV9uX3U4KHVpbnQ4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtb3ZxX25fdTMyKHVpbnQzMl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtb3ZxX25fdTMyKHVpbnQzMl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2bW92cV9uX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2bW92cV9uX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm1vdnFfbl91MTYodWludDE2X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1vdnFfbl91MTYodWludDE2X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3Qgdm1vdnFfbl9zOChpbnQ4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3Qgdm1vdnFfbl9zOChpbnQ4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3Qgdm1vdnFfbl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZtb3ZxX25fZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1vdnFfbl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDhfdCkge19fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczB9OyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1vdnFfbl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDhfdCkge19fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczAsIF9fczB9OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtb3ZxX25fczMyKGludDMyX3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1vdnFfbl9zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm1vdnFfbl9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSB7X19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bW92cV9uX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bW92cV9uX3MxNihpbnQxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtb3ZxX25fczE2KGludDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZtb3Zfbl91OCh1aW50OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZtb3Zfbl91OCh1aW50OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3Qgdm1vdl9uX3UzMih1aW50MzJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2bW92X25fdTMyKHVpbnQzMl90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkge19fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2bW92X25fdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkge19fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZtb3Zfbl91NjQodWludDY0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2bW92X25fdTE2KHVpbnQxNl90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZtb3Zfbl91MTYodWludDE2X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2bW92X25fczgoaW50OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZtb3Zfbl9zOChpbnQ4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZtb3Zfbl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSB7X19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZtb3Zfbl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSB7X19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bW92X25fZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpIHtfX3MwLCBfX3MwLCBfX3MwLCBfX3MwfTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtb3Zfbl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDRfdCkge19fczAsIF9fczAsIF9fczAsIF9fczB9OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZtb3Zfbl9zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSB7X19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2bW92X25fczMyKGludDMyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkge19fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZtb3Zfbl9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2bW92X25fczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkge19fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2bW92X25fczE2KGludDE2X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3Qgdm1vdl9uX3MxNihpbnQxNl90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm1vdmxfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtb3ZsX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19yZXYwLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MTZ4OF90IF9fbm9zd2FwX3Ztb3ZsX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcDAsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZtb3ZsX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZtb3ZsX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50NjR4Ml90IF9fbm9zd2FwX3Ztb3ZsX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1vdmxfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1vdmxfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdm1vdmxfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtb3ZsX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcDAsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtb3ZsX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3JldjAsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDhfdCBfX25vc3dhcF92bW92bF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3AwLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZtb3ZsX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3Qgdm1vdmxfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcmV2MCwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3Ztb3ZsX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bW92bF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcDAsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtb3ZsX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3JldjAsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92bW92bF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcDAsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZtb3ZuX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcDAsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2bW92bl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3JldjAsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng0X3QgX19ub3N3YXBfdm1vdm5fdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3Qgdm1vdm5fdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZtb3ZuX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDJfdCBfX25vc3dhcF92bW92bl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZtb3ZuX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2bW92bl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50OHg4X3QgX19ub3N3YXBfdm1vdm5fdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcDAsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm1vdm5fczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2bW92bl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcmV2MCwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng0X3QgX19ub3N3YXBfdm1vdm5fczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZtb3ZuX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3Qgdm1vdm5fczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3JldjAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4Ml90IF9fbm9zd2FwX3Ztb3ZuX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZtb3ZuX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3Qgdm1vdm5fczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19yZXYwLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDh4OF90IF9fbm9zd2FwX3Ztb3ZuX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZtdWxxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3Qgdm11bHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtdWxxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtdWxxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm11bHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm11bHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZtdWxxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2bXVscV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2bXVscV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3Qgdm11bHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm11bHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bXVscV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtdWxxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm11bHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2bXVsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2bXVsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3Qgdm11bF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2bXVsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3Qgdm11bF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2bXVsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZtdWxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3Qgdm11bF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3Qgdm11bF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3Qgdm11bF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2bXVsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3Qgdm11bF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZtdWxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2bXVsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3Qgdm11bF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3Qgdm11bF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92bXVsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZtdWxxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2bXVscV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bXVscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVscV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVscV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVscV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVscV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtdWxxX25fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiAodWludDMyeDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtdWxxX25fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqICh1aW50MzJ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtdWxxX25fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiAodWludDE2eDhfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDF9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtdWxxX25fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqICh1aW50MTZ4OF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMX07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2bXVscV9uX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogKGZsb2F0MzJ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZtdWxxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiAoZmxvYXQzMng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bXVscV9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogKGludDMyeDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm11bHFfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiAoaW50MzJ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm11bHFfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIChpbnQxNng4X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtdWxxX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogKGludDE2eDhfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDF9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2bXVsX25fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiAodWludDMyeDJfdCkge19fcDEsIF9fcDF9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZtdWxfbl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogKHVpbnQzMngyX3QpIHtfX3AxLCBfX3AxfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3Qgdm11bF9uX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogKHVpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2bXVsX25fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqICh1aW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2bXVsX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiAoZmxvYXQzMngyX3QpIHtfX3AxLCBfX3AxfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3Qgdm11bF9uX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogKGZsb2F0MzJ4Ml90KSB7X19wMSwgX19wMX07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3Qgdm11bF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogKGludDMyeDJfdCkge19fcDEsIF9fcDF9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3Qgdm11bF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIChpbnQzMngyX3QpIHtfX3AxLCBfX3AxfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2bXVsX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiAoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2bXVsX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogKGludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2bXVsbF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDM3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2bXVsbF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMzcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgcG9seTE2eDhfdCBfX25vc3dhcF92bXVsbF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDM3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtdWxsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtdWxsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MTZ4OF90IF9fbm9zd2FwX3ZtdWxsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm11bGxfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm11bGxfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDY0eDJfdCBfX25vc3dhcF92bXVsbF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtdWxsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtdWxsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdm11bGxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtdWxsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bXVsbF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3ZtdWxsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZtdWxsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bXVsbF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdm11bGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm11bGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtdWxsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92bXVsbF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3UzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfdTMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3UxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfdTE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3MzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVsbF9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bGxfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9zMTYoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2bXVsbF9uX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KSh1aW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2bXVsbF9uX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpKHVpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDY0eDJfdCBfX25vc3dhcF92bXVsbF9uX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KSh1aW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtdWxsX25fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKHVpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtdWxsX25fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdCkodWludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4NF90IF9fbm9zd2FwX3ZtdWxsX25fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKHVpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2bXVsbF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDEsIF9fcDF9LCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bXVsbF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3ZtdWxsX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm11bGxfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm11bGxfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92bXVsbF9uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKGludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZtdm5fcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IH5fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3Qgdm12bl9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSB+X19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2bXZucV9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB+X19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2bXZucV9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB+X19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2bXZucV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB+X19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2bXZucV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB+X19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bXZucV91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm12bnFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IH5fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtdm5xX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB+X19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2bXZucV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2bXZucV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2bXZucV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB+X19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtdm5xX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bXZucV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bXZucV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IH5fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm12bnFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IH5fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3Qgdm12bl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2bXZuX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IH5fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZtdm5fdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IH5fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZtdm5fdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IH5fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZtdm5fdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IH5fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZtdm5fdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IH5fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2bXZuX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZtdm5fczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2bXZuX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2bXZuX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSB+X19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZtdm5fczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSB+X19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZtdm5fczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IH5fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3Qgdm5lZ3FfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IC1fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3Qgdm5lZ3FfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZuZWdxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IC1fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2bmVncV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bmVncV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IC1fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm5lZ3FfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IC1fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm5lZ3FfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAtX19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZuZWdxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAtX19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3Qgdm5lZ19zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IC1fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2bmVnX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IC1fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2bmVnX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IC1fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2bmVnX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAtX19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZuZWdfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAtX19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZuZWdfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IC1fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm5lZ19zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IC1fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3Qgdm5lZ19zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3Qgdm9ybnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3Qgdm9ybnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2b3JucV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm9ybnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm9ybnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZvcm5xX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZvcm5xX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2b3JucV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZvcm5xX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3Qgdm9ybnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2b3JucV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2b3JucV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2b3JucV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2b3JucV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2b3JucV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2b3JucV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2b3JuX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3Qgdm9ybl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2b3JuX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2b3JuX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZvcm5fdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZvcm5fdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3Qgdm9ybl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3Qgdm9ybl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3Qgdm9ybl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3Qgdm9ybl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2b3JuX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZvcm5fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3Qgdm9ybl9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2b3JuX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm9ybl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2b3JuX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2b3JycV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZvcnJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2b3JycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2b3JycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZvcnJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZvcnJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm9ycnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm9ycnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZvcnJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2b3JycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm9ycnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2b3JycV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZvcnJxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3Qgdm9ycnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2b3JycV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZvcnJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3Qgdm9ycl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3Qgdm9ycl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZvcnJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3Qgdm9ycl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZvcnJfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3Qgdm9ycl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZvcnJfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3Qgdm9ycl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2b3JyX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZvcnJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2b3JyX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3Qgdm9ycl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZvcnJfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2b3JyX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2b3JyX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3Qgdm9ycl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cGFkYWxxX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZwYWRhbHFfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cGFkYWxxX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cGFkYWxxX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZwYWRhbHFfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZwYWRhbHFfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cGFkYWxxX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cGFkYWxxX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cGFkYWxxX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnBhZGFscV9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZwYWRhbHFfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cGFkYWxxX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZwYWRhbF91OCh1aW50MTZ4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZwYWRhbF91OCh1aW50MTZ4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cGFkYWxfdTMyKHVpbnQ2NHgxX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZwYWRhbF91MzIodWludDY0eDFfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3JldjEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZwYWRhbF91MTYodWludDMyeDJfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnBhZGFsX3UxNih1aW50MzJ4Ml90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnBhZGFsX3M4KGludDE2eDRfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnBhZGFsX3M4KGludDE2eDRfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cGFkYWxfczMyKGludDY0eDFfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZwYWRhbF9zMzIoaW50NjR4MV90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19yZXYxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnBhZGFsX3MxNihpbnQzMngyX3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cGFkYWxfczE2KGludDMyeDJfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZwYWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZwYWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cGFkZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cGFkZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZwYWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZwYWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZwYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZwYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cGFkZF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnBhZGRfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnBhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnBhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnBhZGRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnBhZGRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZwYWRkbHFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcDAsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cGFkZGxxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxxX3YoKGludDh4MTZfdClfX3JldjAsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnBhZGRscV91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cGFkZGxxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGRscV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZwYWRkbHFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnBhZGRscV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZwYWRkbHFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcDAsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZwYWRkbHFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRscV92KChpbnQ4eDE2X3QpX19yZXYwLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnBhZGRscV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcDAsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZwYWRkbHFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcmV2MCwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZwYWRkbHFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxxX3YoKGludDh4MTZfdClfX3AwLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cGFkZGxxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxxX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnBhZGRsX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbF92KChpbnQ4eDhfdClfX3AwLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnBhZGRsX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcmV2MCwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cGFkZGxfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZwYWRkbF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbF92KChpbnQ4eDhfdClfX3JldjAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZwYWRkbF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbF92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnBhZGRsX3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZwYWRkbF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxfdigoaW50OHg4X3QpX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cGFkZGxfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbF92KChpbnQ4eDhfdClfX3JldjAsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZwYWRkbF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbF92KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZwYWRkbF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcmV2MCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZwYWRkbF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbF92KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZwYWRkbF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcmV2MCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnBtYXhfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnBtYXhfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZwbWF4X3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZwbWF4X3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnBtYXhfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnBtYXhfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnBtYXhfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnBtYXhfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZwbWF4X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cG1heF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cG1heF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cG1heF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cG1heF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cG1heF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cG1pbl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cG1pbl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnBtaW5fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnBtaW5fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cG1pbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cG1pbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBtaW5fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cG1pbl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnBtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cG1pbl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnBtaW5fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZwbWluX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZwbWluX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZwbWluX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZwbWluX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZwbWluX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxYWJzcV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFhYnNxX3YoKGludDh4MTZfdClfX3AwLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cWFic3FfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWFic3FfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFic3FfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxYWJzcV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cWFic3FfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFic3FfdigoaW50OHgxNl90KV9fcDAsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZxYWJzcV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxYWJzX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFic192KChpbnQ4eDhfdClfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnFhYnNfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFic192KChpbnQ4eDhfdClfX3JldjAsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZxYWJzX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFhYnNfdigoaW50OHg4X3QpX19wMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cWFic19zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFhYnNfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cWFic19zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzX3YoKGludDh4OF90KV9fcDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnFhYnNfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzX3YoKGludDh4OF90KV9fcmV2MCwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZxYWRkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZxYWRkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnFhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZxYWRkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZxYWRkcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cWFkZHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cWFkZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnFhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cWFkZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnFhZGRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFhZGRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92cWFkZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFhZGRxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWFkZHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZxYWRkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnFhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDhfdCBfX25vc3dhcF92cWFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnFhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnFhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZxYWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZxYWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnFhZGRfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnFhZGRfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cWFkZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cWFkZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cWFkZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cWFkZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZxYWRkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZxYWRkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4Ml90IF9fbm9zd2FwX3ZxYWRkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnFhZGRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnFhZGRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cWFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cWFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDRfdCBfX25vc3dhcF92cWFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZxZG1sYWxfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnFkbWxhbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdnFkbWxhbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxZG1sYWxfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFkbWxhbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdnFkbWxhbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxhbF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbWxhbF9zMzIoX19zMCwgX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxhbF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9zMzIoX19yZXYwLCBfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbGFsX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtbGFsX3MxNihfX3MwLCBfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbGFsX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbGFsX3MxNihfX3JldjAsIF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cWRtbGFsX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnFkbWxhbF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3ZxZG1sYWxfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDIsIF9fcDJ9LCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxZG1sYWxfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9LCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cWRtbGFsX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9LCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdnFkbWxhbF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0sIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFkbWxzbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxzbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWRtbHNsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92cWRtbHNsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFkbWxzbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbWxzbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cWRtbHNsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92cWRtbHNsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbHNsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtbHNsX3MzMihfX3MwLCBfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbHNsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX3MzMihfX3JldjAsIF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sc2xfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sc2xfczE2KF9fczAsIF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sc2xfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sc2xfczE2KF9fcmV2MCwgX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZxZG1sc2xfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDIsIF9fcDJ9LCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWRtbHNsX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxzbF92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDIsIF9fcDJ9LCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdnFkbWxzbF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxzbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMiwgX19wMn0sIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFkbWxzbF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbWxzbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0sIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG1sc2xfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0sIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92cWRtbHNsX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtdWxocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cWRtdWxocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92cWRtdWxocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZxZG11bGhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZxZG11bGhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxocV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3ZxZG11bGhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFkbXVsaF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZxZG11bGhfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDJfdCBfX25vc3dhcF92cWRtdWxoX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cWRtdWxoX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnFkbXVsaF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsaF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4NF90IF9fbm9zd2FwX3ZxZG11bGhfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsaF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsaHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsaHFfczMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGhxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsaHFfczMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGhxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG11bGhxX3MxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxocV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGhxX3MxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG11bGhfczMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGhfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxoX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG11bGhfczE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGhfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxoX3MxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFkbXVsaHFfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpKGludDMyeDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cWRtdWxocV9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpKGludDMyeDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnFkbXVsaHFfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpKGludDE2eDhfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cWRtdWxocV9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpKGludDE2eDhfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFkbXVsaF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFkbXVsaF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDEsIF9fcDF9LCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cWRtdWxoX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cWRtdWxoX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsaF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZxZG11bGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnFkbXVsbF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92cWRtdWxsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFkbXVsbF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cWRtdWxsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZxZG11bGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGxfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsbF9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsbF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfczMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGxfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsbF9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cWRtdWxsX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnFkbXVsbF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDEsIF9fcDF9LCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdnFkbXVsbF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFkbXVsbF9uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG11bGxfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZxZG11bGxfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKGludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cW1vdm5fdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcDAsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cW1vdm5fdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcmV2MCwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDE2eDRfdCBfX25vc3dhcF92cW1vdm5fdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcDAsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZxbW92bl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZxbW92bl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3ZxbW92bl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cW1vdm5fdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cW1vdm5fdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3JldjAsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ4eDhfdCBfX25vc3dhcF92cW1vdm5fdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxbW92bl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cW1vdm5fczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19yZXYwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDRfdCBfX25vc3dhcF92cW1vdm5fczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cW1vdm5fczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFtb3ZuX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcmV2MCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMngyX3QgX19ub3N3YXBfdnFtb3ZuX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cW1vdm5fczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnFtb3ZuX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3JldjAsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHg4X3QgX19ub3N3YXBfdnFtb3ZuX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19wMCwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cW1vdnVuX3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuX3YoKGludDh4MTZfdClfX3AwLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnFtb3Z1bl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuX3YoKGludDh4MTZfdClfX3JldjAsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng0X3QgX19ub3N3YXBfdnFtb3Z1bl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bl92KChpbnQ4eDE2X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnFtb3Z1bl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bl92KChpbnQ4eDE2X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZxbW92dW5fczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bl92KChpbnQ4eDE2X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3ZxbW92dW5fczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5fdigoaW50OHgxNl90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnFtb3Z1bl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5fdigoaW50OHgxNl90KV9fcDAsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZxbW92dW5fczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5fdigoaW50OHgxNl90KV9fcmV2MCwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDh4OF90IF9fbm9zd2FwX3ZxbW92dW5fczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuX3YoKGludDh4MTZfdClfX3AwLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxbmVncV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFuZWdxX3YoKGludDh4MTZfdClfX3AwLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cW5lZ3FfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFuZWdxX3YoKGludDh4MTZfdClfX3JldjAsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cW5lZ3FfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3FfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxbmVncV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFuZWdxX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cW5lZ3FfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3FfdigoaW50OHgxNl90KV9fcDAsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZxbmVncV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFuZWdxX3YoKGludDh4MTZfdClfX3JldjAsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxbmVnX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ192KChpbnQ4eDhfdClfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnFuZWdfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ192KChpbnQ4eDhfdClfX3JldjAsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZxbmVnX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFuZWdfdigoaW50OHg4X3QpX19wMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cW5lZ19zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFuZWdfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cW5lZ19zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnX3YoKGludDh4OF90KV9fcDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnFuZWdfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnX3YoKGludDh4OF90KV9fcmV2MCwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFyZG11bGhxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cXJkbXVsaHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxocV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZxcmRtdWxocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cXJkbXVsaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZxcmRtdWxocV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng4X3QgX19ub3N3YXBfdnFyZG11bGhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZxcmRtdWxoX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZxcmRtdWxoX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4Ml90IF9fbm9zd2FwX3ZxcmRtdWxoX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnFyZG11bGhfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnFyZG11bGhfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng0X3QgX19ub3N3YXBfdnFyZG11bGhfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtdWxocV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cXJkbXVsaHFfczMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtdWxocV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxcmRtdWxocV9zMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG11bGhxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IHZxcmRtdWxocV9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG11bGhxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFyZG11bGhxX3MxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbXVsaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cXJkbXVsaF9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG11bGhfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXJkbXVsaF9zMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG11bGhfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFyZG11bGhfczE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtdWxoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFyZG11bGhfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cXJkbXVsaHFfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KShpbnQzMng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFyZG11bGhxX25fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpKGludDMyeDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnFyZG11bGhxX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdCkoaW50MTZ4OF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMX0sIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZxcmRtdWxocV9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxocV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KShpbnQxNng4X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZxcmRtdWxoX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFyZG11bGhfbl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxcmRtdWxoX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnFyZG11bGhfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cXJzaGxxX3U4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnFyc2hscV91OCh1aW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cXJzaGxxX3UzMih1aW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZxcnNobHFfdTMyKHVpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZxcnNobHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnFyc2hscV91NjQodWludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnFyc2hscV91MTYodWludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cXJzaGxxX3UxNih1aW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxcnNobHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZxcnNobHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxcnNobHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cXJzaGxxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFyc2hscV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxcnNobHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cXJzaGxxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnFyc2hscV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZxcnNobF91OCh1aW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cXJzaGxfdTgodWludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnFyc2hsX3UzMih1aW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZxcnNobF91MzIodWludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnFyc2hsX3U2NCh1aW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZxcnNobF91NjQodWludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZxcnNobF91MTYodWludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cXJzaGxfdTE2KHVpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cXJzaGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZxcnNobF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cXJzaGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZxcnNobF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnFyc2hsX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cXJzaGxfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnFyc2hsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cXJzaGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZxcnNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZxcnNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5fbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFyc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZxcnNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5fbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFyc2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZxcnNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hydW5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocnVuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocnVuX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cXJzaHJ1bl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJ1bl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hydW5fbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZxcnNocnVuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocnVuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hydW5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cXJzaHJ1bl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocnVuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cXNobHFfdTgodWludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZxc2hscV91OCh1aW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZxc2hscV91MzIodWludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZxc2hscV91MzIodWludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cXNobHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cXNobHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnFzaGxxX3UxNih1aW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnFzaGxxX3UxNih1aW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnFzaGxxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZxc2hscV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cXNobHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxc2hscV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFzaGxxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cXNobHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZxc2hscV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnFzaGxxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cXNobF91OCh1aW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZxc2hsX3U4KHVpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnFzaGxfdTMyKHVpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cXNobF91MzIodWludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cXNobF91NjQodWludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZxc2hsX3U2NCh1aW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cXNobF91MTYodWludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZxc2hsX3UxNih1aW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cXNobF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cXNobF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZxc2hsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZxc2hsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZxc2hsX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZxc2hsX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnFzaGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnFzaGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHFfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHFfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNDgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxxX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hscV9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxxX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hscV9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxxX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hscV9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxxX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxxX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxxX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hscV9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHFfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxxX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDM1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hscV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHFfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobF9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGx1cV9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsdXFfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA0OCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHVxX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsdXFfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGx1cV9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzaGx1cV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHVxX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzaGx1cV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsdXFfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdXFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGx1cV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA0OSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHVfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaGx1X25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGx1X25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdV9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGx1X25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHVfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsdV9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzaGx1X25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGx1X25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsdV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaGx1X25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGx1X25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaGx1X25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cXNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cXNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5fbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zxc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cXNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zxc2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cXNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocnVuX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hydW5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFzaHJ1bl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hydW5fbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJ1bl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cXNocnVuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJ1bl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJ1bl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFzaHJ1bl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZxc3VicV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZxc3VicV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnFzdWJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZxc3VicV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZxc3VicV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cXN1YnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cXN1YnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnFzdWJxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cXN1YnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnFzdWJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxc3VicV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFzdWJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92cXN1YnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFzdWJxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cXN1YnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZxc3VicV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnFzdWJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDhfdCBfX25vc3dhcF92cXN1YnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnFzdWJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnFzdWJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZxc3ViX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZxc3ViX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnFzdWJfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnFzdWJfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cXN1Yl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cXN1Yl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cXN1Yl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cXN1Yl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZxc3ViX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZxc3ViX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4Ml90IF9fbm9zd2FwX3Zxc3ViX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnFzdWJfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnFzdWJfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cXN1Yl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cXN1Yl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDRfdCBfX25vc3dhcF92cXN1Yl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmFkZGhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmFkZGhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MTZ4NF90IF9fbm9zd2FwX3ZyYWRkaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJhZGRobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJhZGRobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDJfdCBfX25vc3dhcF92cmFkZGhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJhZGRobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJhZGRobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ4eDhfdCBfX25vc3dhcF92cmFkZGhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyYWRkaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyYWRkaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4NF90IF9fbm9zd2FwX3ZyYWRkaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJhZGRobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJhZGRobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMngyX3QgX19ub3N3YXBfdnJhZGRobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyYWRkaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyYWRkaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDh4OF90IF9fbm9zd2FwX3ZyYWRkaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVjcGVxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJlY3BlcV92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWNwZXFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWNwZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVxX3YoKGludDh4MTZfdClfX3AwLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWNwZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJlY3BlcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWNwZV91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZV92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlY3BlX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJlY3BlX3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlY3BlX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJlY3BlX3YoKGludDh4OF90KV9fcDAsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVjcGVfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJlY3BlX3YoKGludDh4OF90KV9fcmV2MCwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVjcHNxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJlY3BzcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWNwc3FfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwc3FfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWNwc19mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwc192KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWNwc19mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJlY3BzX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJldjE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZXYxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZXYxNnFfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNiwgOSwgOCwgMTEsIDEwLCAxMywgMTIsIDE1LCAxNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJldjE2cV9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNiwgOSwgOCwgMTEsIDEwLCAxMywgMTIsIDE1LCAxNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZXYxNnFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNiwgOSwgOCwgMTEsIDEwLCAxMywgMTIsIDE1LCAxNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJldjE2cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNiwgOSwgOCwgMTEsIDEwLCAxMywgMTIsIDE1LCAxNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJldjE2cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNiwgOSwgOCwgMTEsIDEwLCAxMywgMTIsIDE1LCAxNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmV2MTZxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2LCA5LCA4LCAxMSwgMTAsIDEzLCAxMiwgMTUsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmV2MTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJldjE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZXYxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmV2MTZfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZXYzMl9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmV2MzJfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmV2MzJfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZXYzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmV2MzJxX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQsIDExLCAxMCwgOSwgOCwgMTUsIDE0LCAxMywgMTIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZXYzMnFfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQsIDExLCAxMCwgOSwgOCwgMTUsIDE0LCAxMywgMTIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmV2MzJxX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmV2MzJxX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZXYzMnFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCwgMTEsIDEwLCA5LCA4LCAxNSwgMTQsIDEzLCAxMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJldjMycV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCwgMTEsIDEwLCA5LCA4LCAxNSwgMTQsIDEzLCAxMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZXYzMnFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZXYzMnFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmV2MzJxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0LCAxMSwgMTAsIDksIDgsIDE1LCAxNCwgMTMsIDEyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZXYzMnFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQsIDExLCAxMCwgOSwgOCwgMTUsIDE0LCAxMywgMTIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZXYzMnFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZXYzMnFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmV2MzJfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJldjMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJldjMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmV2MzJfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZXYzMl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmV2MzJfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZXYzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJldjMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJldjY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZXY2NF9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZXY2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJldjY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZXY2NHFfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJldjY0cV9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZXY2NHFfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZXY2NHFfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJldjY0cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmV2NjRxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJldjY0cV91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJldjY0cV91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmV2NjRxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmV2NjRxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJldjY0cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmV2NjRxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZXY2NHFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZXY2NHFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmV2NjRxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmV2NjRxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJldjY0cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJldjY0cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZXY2NF91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmV2NjRfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmV2NjRfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZXY2NF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmV2NjRfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZXY2NF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJldjY0X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZXY2NF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmV2NjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZXY2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZXY2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJldjY0X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJldjY0X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmV2NjRfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJoYWRkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmhhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJoYWRkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJoYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJoYWRkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJoYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmhhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmhhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJoYWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJoYWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJoYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyaGFkZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmhhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJoYWRkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJoYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyaGFkZF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJoYWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJoYWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmhhZGRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJoYWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmhhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyaGFkZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJoYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJoYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyaGFkZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJoYWRkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmhhZGRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJoYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyaGFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyc2hscV91OCh1aW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJzaGxxX3U4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJzaGxxX3UzMih1aW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJzaGxxX3UzMih1aW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyc2hscV91NjQodWludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyc2hscV91NjQodWludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cnNobHFfdTE2KHVpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cnNobHFfdTE2KHVpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cnNobHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJzaGxxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyc2hscV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJzaGxxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cnNobHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyc2hscV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJzaGxxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cnNobHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyc2hsX3U4KHVpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJzaGxfdTgodWludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cnNobF91MzIodWludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyc2hsX3UzMih1aW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyc2hsX3U2NCh1aW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJzaGxfdTY0KHVpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyc2hsX3UxNih1aW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJzaGxfdTE2KHVpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyc2hsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyc2hsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJzaGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJzaGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJzaGxfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJzaGxfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cnNobF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cnNobF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hycV9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJzaHJxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hycV9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA0OCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocnFfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJxX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocnFfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJxX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocnFfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJxX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA0OSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocnFfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocnFfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocnFfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJxX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDM0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hycV9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocnFfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzaHJxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJxX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hycV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocl9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocl9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hyX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocl9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJuX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cnNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJuX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cnNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocm5fbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zyc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cnNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zyc2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cnNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyc3FydGVxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZXFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cnNxcnRlcV91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyc3FydGVxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZXFfdigoaW50OHgxNl90KV9fcDAsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJzcXJ0ZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZXFfdigoaW50OHgxNl90KV9fcmV2MCwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cnNxcnRlX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZV92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJzcXJ0ZV91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cnNxcnRlX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZV92KChpbnQ4eDhfdClfX3AwLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJzcXJ0ZV9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlX3YoKGludDh4OF90KV9fcmV2MCwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cnNxcnRzcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydHNxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJzcXJ0c3FfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydHNxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cnNxcnRzX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c192KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyc3FydHNfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydHNfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhcV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNyYXFfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYXFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhcV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYXFfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhcV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYXFfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhcV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYXFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNyYXFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYXFfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFxX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhcV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNyYXFfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNyYXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzcmFxX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhcV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzcmFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhX25fdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNyYV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzcmFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cnN1YmhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cnN1YmhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MTZ4NF90IF9fbm9zd2FwX3Zyc3ViaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJzdWJobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJzdWJobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDJfdCBfX25vc3dhcF92cnN1YmhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJzdWJobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJzdWJobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ4eDhfdCBfX25vc3dhcF92cnN1YmhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyc3ViaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyc3ViaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4NF90IF9fbm9zd2FwX3Zyc3ViaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJzdWJobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJzdWJobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMngyX3QgX19ub3N3YXBfdnJzdWJobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyc3ViaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyc3ViaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDh4OF90IF9fbm9zd2FwX3Zyc3ViaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldF9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTgoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldF9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k4KF9fczAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldF9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTgoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0X2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kxNihfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0X2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTE2KF9fczAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldF9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMTYoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0cV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k4KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0cV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTgoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seThfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pOChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0cV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTE2KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0cV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMTYoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kxNihfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0cV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k4KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0cV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTgoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pOChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0cV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTMyKF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0cV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMzIoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kzMihfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0cV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTY0KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0cV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pNjQoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k2NChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0cV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTE2KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0cV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMTYoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kxNihfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0cV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTgoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTgoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k4KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfZjMyKF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0cV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2YzMihfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2YzMihfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0cV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMzIoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMzIoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTMyKF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k2NChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldHFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k2NChfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pNjQoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTE2KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0cV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTE2KF9fczAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kxNihfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0X2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pOChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0X2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTgoX19zMCwgKGludDh4OF90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pOChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTMyKF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMzIoX19zMCwgKGludDh4OF90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kzMihfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldF9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pNjQoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0X2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kxNihfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0X2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTE2KF9fczAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMTYoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0X2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k4KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTgoX19zMCwgKGludDh4OF90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k4KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfZjMyKF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2YzMihfX3MwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2YzMihfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMzIoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMzIoX19zMCwgKGludDh4OF90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTMyKF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldF9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k2NChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0X2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldF9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k2NChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMTYoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMTYoX19zMCwgKGludDh4OF90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTE2KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2c2hscV91OCh1aW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2c2hscV91OCh1aW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnNobHFfdTMyKHVpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzaGxxX3UzMih1aW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnNobHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZzaGxxX3U2NCh1aW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnNobHFfdTE2KHVpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZzaGxxX3UxNih1aW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2c2hscV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZzaGxxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnNobHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnNobHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnNobHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnNobHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnNobHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnNobHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnNobF91OCh1aW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnNobF91OCh1aW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnNobF91MzIodWludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnNobF91MzIodWludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZzaGxfdTY0KHVpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZzaGxfdTY0KHVpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnNobF91MTYodWludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnNobF91MTYodWludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2c2hsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnNobF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnNobF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZzaGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2c2hsX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnNobF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnNobF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZzaGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxxX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hscV9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDQ4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxxX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobHFfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobHFfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hscV9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hscV9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxxX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDQ5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxxX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hscV9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobHFfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hscV9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDM0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxxX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobHFfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hscV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxxX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobF9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobF9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobF9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobF9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobF9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxsX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobGxfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCA0OSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2hsbF9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobGxfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxsX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgNTEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNobGxfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobGxfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxsX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgNTApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNobGxfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobGxfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsbF9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMzMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNobGxfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxsX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNobGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsbF9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMzUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNobGxfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobGxfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxsX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAzNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2hsbF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hycV9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocnFfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA0OCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hycV9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJxX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJxX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocnFfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocnFfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hycV9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA0OSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hycV9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocnFfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDMyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJxX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocnFfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hycV9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJxX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocnFfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hycV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDMzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hyX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hyX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hyX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hyX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hyX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hyX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hybl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJuX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzaHJuX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hybl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJuX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzaHJuX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNocm5fbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzaHJuX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNocm5fbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzaHJuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpX25fcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlfbl9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaV9uX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlfbl9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlxX25fcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4MTZfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaXFfbl9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlxX25fcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlxX25fcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaXFfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpcV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaXFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaXFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpcV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpcV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlxX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlxX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaXFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlxX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpcV9uX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlxX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaXFfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpcV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlxX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaXFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpX25fdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmFxX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyYXFfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQ4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmFxX25fdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFxX25fdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNTApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYXFfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyYXFfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhcV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhcV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQ5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmFxX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhcV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYXFfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhcV9uX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmFxX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyYXFfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhcV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFxX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyYV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhX25fdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYV9uX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyYV9uX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyYV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpX25fcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlfbl9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaV9uX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlfbl9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlxX25fcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4MTZfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaXFfbl9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlxX25fcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlxX25fcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaXFfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpcV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaXFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaXFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpcV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpcV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlxX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlxX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaXFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlxX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpcV9uX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlxX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaXFfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpcV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlxX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaXFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpX25fdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCA1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDM2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgMzYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDM3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIDM3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDQ4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDUwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCA1MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgNDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCAzMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDQxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCA0MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIDQwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDM0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCAzNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgMzUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgMzMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgMTYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgMTYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDE4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAxOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDE5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAxNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzcpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0OCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCA0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCA0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgMzYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDM2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAzNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDM3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDQ4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCA0OCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgNTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCA1MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgNDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCA0OSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDMyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgMzIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDQxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDQxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCA0MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCA0MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDM0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMzQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAzMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDMzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAxNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgMTYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgMTgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDE4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDE5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAxOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAxNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgMTcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCA5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCA5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCA0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgX19wMiwgNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCAzNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCAzNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDUwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDUwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgNDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCA0MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgNDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCA0MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgNDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMzQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgMzQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMzMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgMzMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDE2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDE4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDE3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIDQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCA1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAzNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAzNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgMzcpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDM3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDQ4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDQ4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCA1MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgNTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDQ5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCA0OSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDMyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAzMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDQxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDQxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgNDApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgNDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMzQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCAzNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAzMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDMzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M191OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDE2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgMTYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAxOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIDE4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M191NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgMTkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M191NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgMTkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAxNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIDE3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCAyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCAxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCA0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCA1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgMzcpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCAzNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDUwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCA0OSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDQ5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDQxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCA0MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCA0MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgNDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDM0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDM0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAzMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCAzMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgMTYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMTYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgMTgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMTgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgMTcpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMTcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCA4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCA0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCAzNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDM2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCAzNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAzNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCA0OCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDQ4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCA1MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCA1MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgNDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgNDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCAzMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAzMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCA0MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCA0MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCA0MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCA0MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMzQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCAzNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMzMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCAzMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDE2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDE2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCAxOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCAxOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgMTkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCAxOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgMTcpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgMTcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIF9fcDIsIDUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCAzNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMzcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCA1MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCA0OSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDQxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCA0MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgNDApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDQwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMzQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgMzQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAzMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCAzMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMTYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMTgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMTcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCA5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCAxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2c3VicV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZzdWJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c3VicV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2c3VicV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZzdWJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZzdWJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnN1YnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnN1YnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZzdWJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2c3VicV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2c3VicV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnN1YnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnN1YnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2c3VicV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZzdWJxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnN1YnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2c3VicV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZzdWJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnN1Yl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnN1Yl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZzdWJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnN1Yl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZzdWJfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnN1Yl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZzdWJfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnN1Yl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2c3ViX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZzdWJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZzdWJfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZzdWJfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnN1Yl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZzdWJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2c3ViX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnN1Yl9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnN1Yl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZzdWJfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnN1YmhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZzdWJobl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MTZ4NF90IF9fbm9zd2FwX3ZzdWJobl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZzdWJobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2c3ViaG5fdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDJfdCBfX25vc3dhcF92c3ViaG5fdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZzdWJobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2c3ViaG5fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ4eDhfdCBfX25vc3dhcF92c3ViaG5fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2c3ViaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnN1YmhuX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4NF90IF9fbm9zd2FwX3ZzdWJobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZzdWJobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2c3ViaG5fczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMngyX3QgX19ub3N3YXBfdnN1YmhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2c3ViaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnN1YmhuX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDh4OF90IF9fbm9zd2FwX3ZzdWJobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnN1YmxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfdTgoX19wMCkgLSB2bW92bF91OChfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2c3VibF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfdTgoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX3U4KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZzdWJsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX3UzMihfX3AwKSAtIHZtb3ZsX3UzMihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2c3VibF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF91MzIoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX3UzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c3VibF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF91MTYoX19wMCkgLSB2bW92bF91MTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnN1YmxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfdTE2KF9fcmV2MCkgLSBfX25vc3dhcF92bW92bF91MTYoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2c3VibF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9zOChfX3AwKSAtIHZtb3ZsX3M4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnN1YmxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9zOChfX3JldjApIC0gX19ub3N3YXBfdm1vdmxfczgoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2c3VibF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9zMzIoX19wMCkgLSB2bW92bF9zMzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2c3VibF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfczMyKF9fcmV2MCkgLSBfX25vc3dhcF92bW92bF9zMzIoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2c3VibF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9zMTYoX19wMCkgLSB2bW92bF9zMTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2c3VibF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfczE2KF9fcmV2MCkgLSBfX25vc3dhcF92bW92bF9zMTYoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnN1YndfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bW92bF91OChfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2c3Vid191OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bW92bF91OChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2c3Vid191MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm1vdmxfdTMyKF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZzdWJ3X3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3Ztb3ZsX3UzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c3Vid191MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm1vdmxfdTE2KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzdWJ3X3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3Ztb3ZsX3UxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZzdWJ3X3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm1vdmxfczgoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2c3Vid19zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfczgoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2c3Vid19zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm1vdmxfczMyKF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnN1YndfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3Ztb3ZsX3MzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZzdWJ3X3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bW92bF9zMTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2c3Vid19zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfczE2KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnRibDFfcDgocG9seTh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2dGJsMV9wOChwb2x5OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZ0YmwxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDFfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZ0YmwxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwxX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnRibDFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwxX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnRibDFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDFfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2dGJsMl9wOChwb2x5OHg4eDJfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRibDJfdigoaW50OHg4X3QpX19wMC52YWxbMF0sIChpbnQ4eDhfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDEsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnRibDJfcDgocG9seTh4OHgyX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4OHgyX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwyX3YoKGludDh4OF90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDhfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dGJsMl91OCh1aW50OHg4eDJfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDJfdigoaW50OHg4X3QpX19wMC52YWxbMF0sIChpbnQ4eDhfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZ0YmwyX3U4KHVpbnQ4eDh4Ml90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDh4Ml90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMl92KChpbnQ4eDhfdClfX3JldjAudmFsWzBdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnRibDJfczgoaW50OHg4eDJfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDJfdigoaW50OHg4X3QpX19wMC52YWxbMF0sIChpbnQ4eDhfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2dGJsMl9zOChpbnQ4eDh4Ml90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4eDJfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDJfdigoaW50OHg4X3QpX19yZXYwLnZhbFswXSwgKGludDh4OF90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZ0YmwzX3A4KHBvbHk4eDh4M190IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsM192KChpbnQ4eDhfdClfX3AwLnZhbFswXSwgKGludDh4OF90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMC52YWxbMl0sIChpbnQ4eDhfdClfX3AxLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZ0YmwzX3A4KHBvbHk4eDh4M190IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDh4M190IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRibDNfdigoaW50OHg4X3QpX19yZXYwLnZhbFswXSwgKGludDh4OF90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDhfdClfX3JldjAudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dGJsM191OCh1aW50OHg4eDNfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDNfdigoaW50OHg4X3QpX19wMC52YWxbMF0sIChpbnQ4eDhfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDAudmFsWzJdLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRibDNfdTgodWludDh4OHgzX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OHgzX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsM192KChpbnQ4eDhfdClfX3JldjAudmFsWzBdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZ0YmwzX3M4KGludDh4OHgzX3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwzX3YoKGludDh4OF90KV9fcDAudmFsWzBdLCAoaW50OHg4X3QpX19wMC52YWxbMV0sIChpbnQ4eDhfdClfX3AwLnZhbFsyXSwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2dGJsM19zOChpbnQ4eDh4M190IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4eDNfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwzX3YoKGludDh4OF90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDhfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnRibDRfcDgocG9seTh4OHg0X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Ymw0X3YoKGludDh4OF90KV9fcDAudmFsWzBdLCAoaW50OHg4X3QpX19wMC52YWxbMV0sIChpbnQ4eDhfdClfX3AwLnZhbFsyXSwgKGludDh4OF90KV9fcDAudmFsWzNdLCAoaW50OHg4X3QpX19wMSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2dGJsNF9wOChwb2x5OHg4eDRfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICBwb2x5OHg4eDRfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFszXSwgX19wMC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsNF92KChpbnQ4eDhfdClfX3JldjAudmFsWzBdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDhfdClfX3JldjAudmFsWzNdLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dGJsNF91OCh1aW50OHg4eDRfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDRfdigoaW50OHg4X3QpX19wMC52YWxbMF0sIChpbnQ4eDhfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDAudmFsWzJdLCAoaW50OHg4X3QpX19wMC52YWxbM10sIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2dGJsNF91OCh1aW50OHg4eDRfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4eDRfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFszXSwgX19wMC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsNF92KChpbnQ4eDhfdClfX3JldjAudmFsWzBdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDhfdClfX3JldjAudmFsWzNdLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2dGJsNF9zOChpbnQ4eDh4NF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsNF92KChpbnQ4eDhfdClfX3AwLnZhbFswXSwgKGludDh4OF90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMC52YWxbMl0sIChpbnQ4eDhfdClfX3AwLnZhbFszXSwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2dGJsNF9zOChpbnQ4eDh4NF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4eDRfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFszXSwgX19wMC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsNF92KChpbnQ4eDhfdClfX3JldjAudmFsWzBdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDhfdClfX3JldjAudmFsWzNdLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2dGJ4MV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4MV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnRieDFfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRieDFfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dGJ4MV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4MV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZ0YngxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngxX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnRieDFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngxX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZ0YngxX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4MV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZ0YngyX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4eDJfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRieDJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEudmFsWzBdLCAoaW50OHg4X3QpX19wMS52YWxbMV0sIChpbnQ4eDhfdClfX3AyLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZ0YngyX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4eDJfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDh4Ml90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4Ml92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MiwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnRieDJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDh4Ml90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4Ml92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMS52YWxbMF0sIChpbnQ4eDhfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDIsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZ0YngyX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4eDJfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDh4Ml90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4Ml92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MiwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnRieDJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4eDJfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRieDJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEudmFsWzBdLCAoaW50OHg4X3QpX19wMS52YWxbMV0sIChpbnQ4eDhfdClfX3AyLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnRieDJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4eDJfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDh4Ml90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4Ml92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MiwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnRieDNfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDh4M190IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4M192KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMS52YWxbMF0sIChpbnQ4eDhfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDEudmFsWzJdLCAoaW50OHg4X3QpX19wMiwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2dGJ4M19wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OHgzX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4eDNfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngzX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MiwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnRieDNfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDh4M190IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4M192KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMS52YWxbMF0sIChpbnQ4eDhfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDEudmFsWzJdLCAoaW50OHg4X3QpX19wMiwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRieDNfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDh4M190IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OHgzX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4M192KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjIsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZ0YngzX3M4KGludDh4OF90IF9fcDAsIGludDh4OHgzX3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLnZhbFswXSwgKGludDh4OF90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMS52YWxbMl0sIChpbnQ4eDhfdClfX3AyLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnRieDNfczgoaW50OHg4X3QgX19wMCwgaW50OHg4eDNfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDh4M190IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRieDNfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYyLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2dGJ4NF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OHg0X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Yng0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLnZhbFswXSwgKGludDh4OF90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMS52YWxbMl0sIChpbnQ4eDhfdClfX3AxLnZhbFszXSwgKGludDh4OF90KV9fcDIsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnRieDRfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDh4NF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OHg0X3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbM10sIF9fcDEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRieDRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgKGludDh4OF90KV9fcmV2MiwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnRieDRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDh4NF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4NF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMS52YWxbMF0sIChpbnQ4eDhfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDEudmFsWzJdLCAoaW50OHg4X3QpX19wMS52YWxbM10sIChpbnQ4eDhfdClfX3AyLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2dGJ4NF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OHg0X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4eDRfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFszXSwgX19wMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4NF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCAoaW50OHg4X3QpX19yZXYyLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2dGJ4NF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDh4NF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4NF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMS52YWxbMF0sIChpbnQ4eDhfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDEudmFsWzJdLCAoaW50OHg4X3QpX19wMS52YWxbM10sIChpbnQ4eDhfdClfX3AyLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnRieDRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4eDRfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDh4NF90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzNdLCBfX3AxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Yng0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIChpbnQ4eDhfdClfX3JldjIsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OHgyX3QgdnRybl9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDh4Ml90IHZ0cm5fcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDR4Ml90IHZ0cm5fcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDR4Ml90IHZ0cm5fcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZ4Ml90IHZ0cm5xX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2eDJfdCB2dHJucV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM2KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OHgyX3QgdnRybnFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4eDJfdCB2dHJucV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNyk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZ4Ml90IHZ0cm5xX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2eDJfdCB2dHJucV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NHgyX3QgdnRybnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0eDJfdCB2dHJucV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDh4Ml90IHZ0cm5xX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OHgyX3QgdnRybnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZ4Ml90IHZ0cm5xX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZ4Ml90IHZ0cm5xX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDR4Ml90IHZ0cm5xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDR4Ml90IHZ0cm5xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDR4Ml90IHZ0cm5xX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0eDJfdCB2dHJucV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDh4Ml90IHZ0cm5xX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4eDJfdCB2dHJucV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDh4Ml90IHZ0cm5fdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OHgyX3QgdnRybl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJ4Ml90IHZ0cm5fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyeDJfdCB2dHJuX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4MngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NHgyX3QgdnRybl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDR4Ml90IHZ0cm5fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OHgyX3QgdnRybl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OHgyX3QgdnRybl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyeDJfdCB2dHJuX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4MngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4MngyX3QgdnRybl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4MngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJ4Ml90IHZ0cm5fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4MngyX3QgdnRybl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NHgyX3QgdnRybl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0eDJfdCB2dHJuX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnRzdF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZ0c3RfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnRzdF9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZ0c3RfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZ0c3RxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2dHN0cV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2dHN0cV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZ0c3RxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2dHN0cV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnRzdHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnRzdHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2dHN0cV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnRzdHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2dHN0cV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnRzdHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2dHN0cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZ0c3RxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZ0c3RxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZ0c3RxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZ0c3RxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnRzdF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZ0c3RfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnRzdF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZ0c3RfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZ0c3RfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2dHN0X3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZ0c3RfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRzdF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZ0c3RfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnRzdF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2dHN0X3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZ0c3RfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDh4Ml90IHZ1enBfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4eDJfdCB2dXpwX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDQpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0eDJfdCB2dXpwX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgeworICBwb2x5MTZ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0eDJfdCB2dXpwX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgeworICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDUpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2eDJfdCB2dXpwcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNngyX3QgdnV6cHFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNik7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDh4Ml90IHZ1enBxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OHgyX3QgdnV6cHFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzcpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2eDJfdCB2dXpwcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNngyX3QgdnV6cHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDR4Ml90IHZ1enBxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NHgyX3QgdnV6cHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4eDJfdCB2dXpwcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDh4Ml90IHZ1enBxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2eDJfdCB2dXpwcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2eDJfdCB2dXpwcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0eDJfdCB2dXpwcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0eDJfdCB2dXpwcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0eDJfdCB2dXpwcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NHgyX3QgdnV6cHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4eDJfdCB2dXpwcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OHgyX3QgdnV6cHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4eDJfdCB2dXpwX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDh4Ml90IHZ1enBfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyeDJfdCB2dXpwX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4MngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4MngyX3QgdnV6cF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDR4Ml90IHZ1enBfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0eDJfdCB2dXpwX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDh4Ml90IHZ1enBfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDh4Ml90IHZ1enBfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4MngyX3QgdnV6cF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJ4Ml90IHZ1enBfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyeDJfdCB2dXpwX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4MngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJ4Ml90IHZ1enBfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4MngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDR4Ml90IHZ1enBfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NHgyX3QgdnV6cF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OHgyX3QgdnppcF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDh4Ml90IHZ6aXBfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDR4Ml90IHZ6aXBfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDR4Ml90IHZ6aXBfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZ4Ml90IHZ6aXBxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2eDJfdCB2emlwcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM2KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OHgyX3QgdnppcHFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4eDJfdCB2emlwcV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNyk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZ4Ml90IHZ6aXBxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2eDJfdCB2emlwcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NHgyX3QgdnppcHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0eDJfdCB2emlwcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDh4Ml90IHZ6aXBxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OHgyX3QgdnppcHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZ4Ml90IHZ6aXBxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZ4Ml90IHZ6aXBxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDR4Ml90IHZ6aXBxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDR4Ml90IHZ6aXBxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDR4Ml90IHZ6aXBxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0eDJfdCB2emlwcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDh4Ml90IHZ6aXBxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4eDJfdCB2emlwcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDh4Ml90IHZ6aXBfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OHgyX3QgdnppcF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJ4Ml90IHZ6aXBfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyeDJfdCB2emlwX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4MngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NHgyX3QgdnppcF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDR4Ml90IHZ6aXBfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OHgyX3QgdnppcF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OHgyX3QgdnppcF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyeDJfdCB2emlwX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4MngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4MngyX3QgdnppcF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4MngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJ4Ml90IHZ6aXBfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4MngyX3QgdnppcF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NHgyX3QgdnppcF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0eDJfdCB2emlwX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX2FhcmNoNjRfXykKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTgodWludDh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3M4KGludDh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3M4KGludDh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3MzMihpbnQzMngyX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3MxNihpbnQxNng0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zOChpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zOChpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3MxNihpbnQxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3MxNihpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3MxNihpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9wOChwb2x5OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91OCh1aW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9wOChwb2x5OHg4X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTgodWludDh4OF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91OCh1aW50OHg4X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczgoaW50OHg4X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3M4KGludDh4OF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3MzMihpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3MzMihpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91OCh1aW50OHg4X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczgoaW50OHg4X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3MxNihpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3MxNihpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91OCh1aW50OHg4X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91OCh1aW50OHg4X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91OCh1aW50OHg4X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2VuZGlmCisjaWYgKF9fQVJNX0ZQICYgMikKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2Y3Z0X2YxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjE2X2YzMigoaW50OHgxNl90KV9fcDAsIDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2Y3Z0X2YxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YxNl9mMzIoKGludDh4MTZfdClfX3JldjAsIDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQxNng0X3QgX19ub3N3YXBfdmN2dF9mMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YxNl9mMzIoKGludDh4MTZfdClfX3AwLCA4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2Y3Z0X2YzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjMyX2YxNigoaW50OHg4X3QpX19wMCwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2Y3Z0X2YzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl9mMTYoKGludDh4OF90KV9fcmV2MCwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQzMng0X3QgX19ub3N3YXBfdmN2dF9mMzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl9mMTYoKGludDh4OF90KV9fcDAsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNlbmRpZgorI2lmIF9fQVJNX0FSQ0ggPj0gOAorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2Y3Z0YXFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXFfczMyX3YoKGludDh4MTZfdClfX3AwLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2Y3Z0YXFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dGFxX3MzMl92KChpbnQ4eDE2X3QpX19yZXYwLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmN2dGFfczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YV9zMzJfdigoaW50OHg4X3QpX19wMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2Y3Z0YV9zMzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YV9zMzJfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmN2dGFxX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXFfdTMyX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmN2dGFxX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dGFxX3UzMl92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjdnRhX3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YV91MzJfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjdnRhX3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dGFfdTMyX3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZjdnRtcV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtcV9zMzJfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZjdnRtcV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bXFfczMyX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2Y3Z0bV9zMzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtX3MzMl92KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZjdnRtX3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtX3MzMl92KChpbnQ4eDhfdClfX3JldjAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y3Z0bXFfdTMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtcV91MzJfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y3Z0bXFfdTMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bXFfdTMyX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmN2dG1fdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtX3UzMl92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmN2dG1fdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bV91MzJfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmN2dG5xX3MzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dG5xX3MzMl92KChpbnQ4eDE2X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmN2dG5xX3MzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRucV9zMzJfdigoaW50OHgxNl90KV9fcmV2MCwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZjdnRuX3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dG5fczMyX3YoKGludDh4OF90KV9fcDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdmN2dG5fczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dG5fczMyX3YoKGludDh4OF90KV9fcmV2MCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjdnRucV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dG5xX3UzMl92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjdnRucV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRucV91MzJfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y3Z0bl91MzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dG5fdTMyX3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y3Z0bl91MzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuX3UzMl92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2Y3Z0cHFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHFfczMyX3YoKGludDh4MTZfdClfX3AwLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2Y3Z0cHFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHBxX3MzMl92KChpbnQ4eDE2X3QpX19yZXYwLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmN2dHBfczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cF9zMzJfdigoaW50OHg4X3QpX19wMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2Y3Z0cF9zMzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cF9zMzJfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmN2dHBxX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHFfdTMyX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmN2dHBxX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHBxX3UzMl92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjdnRwX3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cF91MzJfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjdnRwX3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dHBfdTMyX3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjZW5kaWYKKyNpZiBfX0FSTV9BUkNIID49IDggJiYgZGVmaW5lZChfX0FSTV9GRUFUVVJFX0RJUkVDVEVEX1JPVU5ESU5HKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZybmRxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZHFfdigoaW50OHgxNl90KV9fcDAsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJuZHFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZHFfdigoaW50OHgxNl90KV9fcmV2MCwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJuZF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRfdigoaW50OHg4X3QpX19wMCwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZybmRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZF92KChpbnQ4eDhfdClfX3JldjAsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJuZGFxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZGFxX3YoKGludDh4MTZfdClfX3AwLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZybmRhcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kYXFfdigoaW50OHgxNl90KV9fcmV2MCwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJuZGFfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kYV92KChpbnQ4eDhfdClfX3AwLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJuZGFfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZGFfdigoaW50OHg4X3QpX19yZXYwLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZybmRtcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRtcV92KChpbnQ4eDE2X3QpX19wMCwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cm5kbXFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZG1xX3YoKGludDh4MTZfdClfX3JldjAsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZybmRtX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZG1fdigoaW50OHg4X3QpX19wMCwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZybmRtX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRtX3YoKGludDh4OF90KV9fcmV2MCwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cm5kbnFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kbnFfdigoaW50OHgxNl90KV9fcDAsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJuZG5xX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRucV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cm5kbl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRuX3YoKGludDh4OF90KV9fcDAsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cm5kbl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kbl92KChpbnQ4eDhfdClfX3JldjAsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJuZHBxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZHBxX3YoKGludDh4MTZfdClfX3AwLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZybmRwcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kcHFfdigoaW50OHgxNl90KV9fcmV2MCwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJuZHBfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kcF92KChpbnQ4eDhfdClfX3AwLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJuZHBfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZHBfdigoaW50OHg4X3QpX19yZXYwLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZybmR4cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmR4cV92KChpbnQ4eDE2X3QpX19wMCwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cm5keHFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZHhxX3YoKGludDh4MTZfdClfX3JldjAsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZybmR4X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZHhfdigoaW50OHg4X3QpX19wMCwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZybmR4X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmR4X3YoKGludDh4OF90KV9fcmV2MCwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNlbmRpZgorI2lmIF9fQVJNX0FSQ0ggPj0gOCAmJiBkZWZpbmVkKF9fQVJNX0ZFQVRVUkVfTlVNRVJJQ19NQVhNSU4pCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3Qgdm1heG5tcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2bWF4bm1xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4bm1xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2bWF4bm1fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWF4bm1fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2bWF4bm1fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3Qgdm1pbm5tcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2bWlubm1xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWlubm1xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2bWlubm1fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWlubm1fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2bWlubm1fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjZW5kaWYKKyNpZiBfX0FSTV9BUkNIID49IDggJiYgZGVmaW5lZChfX2FhcmNoNjRfXykKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmN2dGFxX3M2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dGFxX3M2NF92KChpbnQ4eDE2X3QpX19wMCwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmN2dGFxX3M2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhcV9zNjRfdigoaW50OHgxNl90KV9fcmV2MCwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZjdnRhX3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dGFfczY0X3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdmN2dGFfczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YV9zNjRfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y3Z0YXFfdTY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhcV91NjRfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y3Z0YXFfdTY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXFfdTY0X3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmN2dGFfdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhX3U2NF92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmN2dGFfdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhX3U2NF92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZjdnRtcV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtcV9zNjRfdigoaW50OHgxNl90KV9fcDAsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZjdnRtcV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bXFfczY0X3YoKGludDh4MTZfdClfX3JldjAsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2Y3Z0bV9zNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtX3M2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZjdnRtX3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dG1fczY0X3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmN2dG1xX3U2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bXFfdTY0X3YoKGludDh4MTZfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmN2dG1xX3U2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dG1xX3U2NF92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjdnRtX3U2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bV91NjRfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjdnRtX3U2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bV91NjRfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2Y3Z0bnFfczY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bnFfczY0X3YoKGludDh4MTZfdClfX3AwLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2Y3Z0bnFfczY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dG5xX3M2NF92KChpbnQ4eDE2X3QpX19yZXYwLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdmN2dG5fczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bl9zNjRfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2Y3Z0bl9zNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuX3M2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjdnRucV91NjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dG5xX3U2NF92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjdnRucV91NjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRucV91NjRfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y3Z0bl91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dG5fdTY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y3Z0bl91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dG5fdTY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmN2dHBxX3M2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHBxX3M2NF92KChpbnQ4eDE2X3QpX19wMCwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmN2dHBxX3M2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwcV9zNjRfdigoaW50OHgxNl90KV9fcmV2MCwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZjdnRwX3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dHBfczY0X3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdmN2dHBfczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cF9zNjRfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y3Z0cHFfdTY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwcV91NjRfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y3Z0cHFfdTY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHFfdTY0X3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmN2dHBfdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwX3U2NF92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmN2dHBfdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwX3U2NF92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTgodWludDh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3M4KGludDh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3M4KGludDh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfdTgodWludDh4OF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF91OCh1aW50OHg4X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfczgoaW50OHg4X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3M4KGludDh4OF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3MzMihpbnQzMngyX3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3MzMihpbnQzMngyX3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91OCh1aW50OHg4X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczgoaW50OHg4X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3MxNihpbnQxNng0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3MxNihpbnQxNng0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3MzMihpbnQzMng0X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3MxNihpbnQxNng4X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3MzMihpbnQzMng0X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zOChpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zOChpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3MxNihpbnQxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3MzMihpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3MxNihpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczgoaW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczgoaW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3MzMihpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zOChpbnQ4eDE2X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zOChpbnQ4eDE2X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3MxNihpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9wOChwb2x5OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTgodWludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9wOChwb2x5OHg4X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfdTgodWludDh4OF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3M4KGludDh4OF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9wOChwb2x5OHg4X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTgodWludDh4OF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3M4KGludDh4OF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9wOChwb2x5OHg4X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91OCh1aW50OHg4X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTgodWludDh4OF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91OCh1aW50OHg4X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjZW5kaWYKKyNpZiBfX0FSTV9BUkNIID49IDggJiYgZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FSTV9GRUFUVVJFX0RJUkVDVEVEX1JPVU5ESU5HKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZybmRxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZHFfdigoaW50OHgxNl90KV9fcDAsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJuZHFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZHFfdigoaW50OHgxNl90KV9fcmV2MCwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJuZF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cm5kX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZF92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJuZGFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZGFxX3YoKGludDh4MTZfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZybmRhcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kYXFfdigoaW50OHgxNl90KV9fcmV2MCwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJuZGFfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kYV92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZybmRhX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZGFfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZybmRpcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRpcV92KChpbnQ4eDE2X3QpX19wMCwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cm5kaXFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZGlxX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZybmRpcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRpcV92KChpbnQ4eDE2X3QpX19wMCwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cm5kaXFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZGlxX3YoKGludDh4MTZfdClfX3JldjAsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZybmRpX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZGlfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cm5kaV9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRpX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cm5kaV9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRpX3YoKGludDh4OF90KV9fcDAsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cm5kaV9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kaV92KChpbnQ4eDhfdClfX3JldjAsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJuZG1xX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZG1xX3YoKGludDh4MTZfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZybmRtcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kbXFfdigoaW50OHgxNl90KV9fcmV2MCwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJuZG1fZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kbV92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZybmRtX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZG1fdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZybmRucV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRucV92KChpbnQ4eDE2X3QpX19wMCwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cm5kbnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZG5xX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZybmRuX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZG5fdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cm5kbl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRuX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cm5kcHFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kcHFfdigoaW50OHgxNl90KV9fcDAsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJuZHBxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRwcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cm5kcF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRwX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJuZHBfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kcF92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJuZHhxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZHhxX3YoKGludDh4MTZfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZybmR4cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5keHFfdigoaW50OHgxNl90KV9fcmV2MCwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJuZHhfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5keF92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZybmR4X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZHhfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2VuZGlmCisjaWYgX19BUk1fQVJDSCA+PSA4ICYmIGRlZmluZWQoX19hYXJjaDY0X18pICYmIGRlZmluZWQoX19BUk1fRkVBVFVSRV9OVU1FUklDX01BWE1JTikKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2bWF4bm1xX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdm1heG5tcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZtYXhubXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZtYXhubV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2bWF4bm1fZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bWF4bm1fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2bWlubm1xX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdm1pbm5tcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZtaW5ubXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZtaW5ubV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2bWlubm1fZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bWlubm1fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNlbmRpZgorI2lmIF9fQVJNX0ZFQVRVUkVfQ1JZUFRPCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2YWVzZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFlc2RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2YWVzZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFlc2RxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZhZXNlcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWVzZXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZhZXNlcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWVzZXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmFlc2ltY3FfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZXNpbWNxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmFlc2ltY3FfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZXNpbWNxX3YoKGludDh4MTZfdClfX3JldjAsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmFlc21jcV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFlc21jcV92KChpbnQ4eDE2X3QpX19wMCwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZhZXNtY3FfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZXNtY3FfdigoaW50OHgxNl90KV9fcmV2MCwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c2hhMWNxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMl90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMWNxX3UzMigoaW50OHgxNl90KV9fcDAsIF9fcDEsIChpbnQ4eDE2X3QpX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnNoYTFjcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTFjcV91MzIoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIChpbnQ4eDE2X3QpX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZzaGExaF91MzIodWludDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGExaF91MzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZzaGExaF91MzIodWludDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGExaF91MzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c2hhMW1xX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMl90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMW1xX3UzMigoaW50OHgxNl90KV9fcDAsIF9fcDEsIChpbnQ4eDE2X3QpX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnNoYTFtcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTFtcV91MzIoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIChpbnQ4eDE2X3QpX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnNoYTFwcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTFwcV91MzIoKGludDh4MTZfdClfX3AwLCBfX3AxLCAoaW50OHgxNl90KV9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzaGExcHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyX3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGExcHFfdTMyKChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAoaW50OHgxNl90KV9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzaGExc3UwcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMXN1MHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnNoYTFzdTBxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGExc3UwcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnNoYTFzdTFxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMXN1MXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzaGExc3UxcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTFzdTFxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzaGEyNTZocV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMjU2aHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnNoYTI1NmhxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGEyNTZocV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnNoYTI1NmgycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMjU2aDJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzaGEyNTZoMnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTI1NmgycV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnNoYTI1NnN1MHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGEyNTZzdTBxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2c2hhMjU2c3UwcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTI1NnN1MHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnNoYTI1NnN1MXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTI1NnN1MXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnNoYTI1NnN1MXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTI1NnN1MXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUk1fRkVBVFVSRV9GTUEpCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdmZtYXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdmZtYXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGZsb2F0MzJ4NF90IF9fbm9zd2FwX3ZmbWFxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyeDRfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmZtYXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdmZtYV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdmZtYV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGZsb2F0MzJ4Ml90IF9fbm9zd2FwX3ZmbWFfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJ4Ml90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdmZtc3FfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmZtYXFfZjMyKF9fcDAsIC1fX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdmZtc3FfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmZtYXFfZjMyKF9fcmV2MCwgLV9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZmbXNfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJ4Ml90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gdmZtYV9mMzIoX19wMCwgLV9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2Zm1zX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyeDJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZmbWFfZjMyKF9fcmV2MCwgLV9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FSTV9GRUFUVVJFX1FSRE1YKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cXJkbWxhaHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZxYWRkcV9zMzIoX19wMCwgdnFyZG11bGhxX3MzMihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cXJkbWxhaHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxYWRkcV9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczMyKF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnFyZG1sYWhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2cWFkZHFfczE2KF9fcDAsIHZxcmRtdWxocV9zMTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnFyZG1sYWhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWFkZHFfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhxX3MxNihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZxcmRtbGFoX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSB2cWFkZF9zMzIoX19wMCwgdnFyZG11bGhfczMyKF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZxcmRtbGFoX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWFkZF9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMzIoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cXJkbWxhaF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdnFhZGRfczE2KF9fcDAsIHZxcmRtdWxoX3MxNihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cXJkbWxhaF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczE2KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxhaHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxYWRkcV9zMzIoX19zMCwgdnFyZG11bGhxX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sYWhxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWFkZHFfczMyKF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhxX3MzMihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG1sYWhxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWFkZHFfczE2KF9fczAsIHZxcmRtdWxocV9zMTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbGFocV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRxX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWFkZF9zMzIoX19zMCwgdnFyZG11bGhfczMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxhaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRfczMyKF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxhaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFhZGRfczE2KF9fczAsIHZxcmRtdWxoX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sYWhfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxYWRkX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxoX3MxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxcmRtbHNocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdnFzdWJxX3MzMihfX3AwLCB2cXJkbXVsaHFfczMyKF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxcmRtbHNocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJxX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMzIoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cXJkbWxzaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZxc3VicV9zMTYoX19wMCwgdnFyZG11bGhxX3MxNihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cXJkbWxzaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zxc3VicV9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczE2KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFyZG1sc2hfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IHZxc3ViX3MzMihfX3AwLCB2cXJkbXVsaF9zMzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFyZG1sc2hfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zxc3ViX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxoX3MzMihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxcmRtbHNoX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSB2cXN1Yl9zMTYoX19wMCwgdnFyZG11bGhfczE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZxcmRtbHNoX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cXN1Yl9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMTYoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbHNocV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFzdWJxX3MzMihfX3MwLCB2cXJkbXVsaHFfczMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxzaHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3Zxc3VicV9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxzaHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IHZxc3VicV9zMTYoX19zMCwgdnFyZG11bGhxX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sc2hxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXN1YnFfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhxX3MxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG1sc2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxc3ViX3MzMihfX3MwLCB2cXJkbXVsaF9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbHNoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXN1Yl9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbHNoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cXN1Yl9zMTYoX19zMCwgdnFyZG11bGhfczE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxzaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUk1fRkVBVFVSRV9RUkRNWCkgJiYgZGVmaW5lZChfX2FhcmNoNjRfXykKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxhaHFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWFkZHFfczMyKF9fczAsIHZxcmRtdWxocV9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbGFocV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxYWRkcV9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxhaHFfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWFkZHFfczE2KF9fczAsIHZxcmRtdWxocV9zMTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbGFocV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxYWRkcV9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxhaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxYWRkX3MzMihfX3MwLCB2cXJkbXVsaF9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbGFoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRfczMyKF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxhaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxYWRkX3MxNihfX3MwLCB2cXJkbXVsaF9zMTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbGFoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxzaHFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cXN1YnFfczMyKF9fczAsIHZxcmRtdWxocV9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbHNocV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3Zxc3VicV9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxzaHFfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cXN1YnFfczE2KF9fczAsIHZxcmRtdWxocV9zMTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbHNocV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3Zxc3VicV9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxzaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxc3ViX3MzMihfX3MwLCB2cXJkbXVsaF9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbHNoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJfczMyKF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxzaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxc3ViX3MxNihfX3MwLCB2cXJkbXVsaF9zMTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbHNoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNlbmRpZgorI2lmIGRlZmluZWQoX19hYXJjaDY0X18pCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmFiZHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZhYmRxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdmFiZF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdmFiZF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3QgdmFiZGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmFiZGRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3QgdmFiZGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmFiZGRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2YWJkc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWJkc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2YWJkc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWJkc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmFic3FfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19wMCwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2YWJzcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmFic3FfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19wMCwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmFic3FfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZhYnNfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92YWJzX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdmFic19mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2YWJzX3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmFic192KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZhYnNfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92YWJzX3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmFic2RfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWJzZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmFic2RfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWJzZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmFkZHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZhZGRxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdmFkZF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdmFkZF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2YWRkZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmFkZGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2YWRkZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmFkZGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZhZGRkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2YWRkaG5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3UxNihfX3AwLCB2YWRkaG5fdTMyKF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2YWRkaG5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UxNihfX3JldjAsIF9fbm9zd2FwX3ZhZGRobl91MzIoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmFkZGhuX2hpZ2hfdTY0KHVpbnQzMngyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxLCB1aW50NjR4Ml90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91MzIoX19wMCwgdmFkZGhuX3U2NChfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmFkZGhuX2hpZ2hfdTY0KHVpbnQzMngyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxLCB1aW50NjR4Ml90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MzIoX19yZXYwLCBfX25vc3dhcF92YWRkaG5fdTY0KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZhZGRobl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91OChfX3AwLCB2YWRkaG5fdTE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2YWRkaG5faGlnaF91MTYodWludDh4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91OChfX3JldjAsIF9fbm9zd2FwX3ZhZGRobl91MTYoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2YWRkaG5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczE2KF9fcDAsIHZhZGRobl9zMzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmFkZGhuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZhZGRobl9zMzIoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2YWRkaG5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxLCBpbnQ2NHgyX3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczMyKF9fcDAsIHZhZGRobl9zNjQoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmFkZGhuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSwgaW50NjR4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZhZGRobl9zNjQoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2YWRkaG5faGlnaF9zMTYoaW50OHg4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zOChfX3AwLCB2YWRkaG5fczE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZhZGRobl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczgoX19yZXYwLCBfX25vc3dhcF92YWRkaG5fczE2KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZfdCB2YWRkbHZxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfdTgoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2X3QgdmFkZGx2cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZxX3U4KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2YWRkbHZxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZxX3UzMigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2YWRkbHZxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZxX3UzMigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmFkZGx2cV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZGx2cV91MTYoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmFkZGx2cV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZGx2cV91MTYoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdmFkZGx2cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZxX3M4KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdmFkZGx2cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfczgoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmFkZGx2cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmFkZGx2cV9zMzIoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2YWRkbHZxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfczMyKChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZhZGRsdnFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfczE2KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdmFkZGx2cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZxX3MxNigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2X3QgdmFkZGx2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZGx2X3U4KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2X3QgdmFkZGx2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZfdTgoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmFkZGx2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZfdTMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmFkZGx2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZfdTMyKChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZhZGRsdl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZGx2X3UxNigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZhZGRsdl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZGx2X3UxNigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZhZGRsdl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdl9zOCgoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdmFkZGx2X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdl9zOCgoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZhZGRsdl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmFkZGx2X3MzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmFkZGx2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdl9zMzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2YWRkbHZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdl9zMTYoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZhZGRsdl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZfczE2KChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4X3QgdmFkZHZxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfdTgoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDhfdCB2YWRkdnFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV91OCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmFkZHZxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfdTMyKChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZhZGR2cV91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3UzMigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmFkZHZxX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfdTY0KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZhZGR2cV91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3U2NCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2X3QgdmFkZHZxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfdTE2KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNl90IHZhZGR2cV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3UxNigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OF90IHZhZGR2cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3M4KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDhfdCB2YWRkdnFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3M4KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3QgdmFkZHZxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfZjY0KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2YWRkdnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfZjY0KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdmFkZHZxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfZjMyKChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2YWRkdnFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfZjMyKChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZhZGR2cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3MzMigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZhZGR2cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfczMyKChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZhZGR2cV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3M2NCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZhZGR2cV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfczY0KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZhZGR2cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3MxNigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZhZGR2cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfczE2KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OF90IHZhZGR2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X3U4KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDhfdCB2YWRkdl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X3U4KChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZhZGR2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl91MzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2YWRkdl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZHZfdTMyKChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNl90IHZhZGR2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl91MTYoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZfdCB2YWRkdl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZHZfdTE2KChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDhfdCB2YWRkdl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl9zOCgoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDhfdCB2YWRkdl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmFkZHZfczgoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZhZGR2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl9mMzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3QgdmFkZHZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl9mMzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2YWRkdl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZHZfczMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2YWRkdl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl9zMzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2YWRkdl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZHZfczE2KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2YWRkdl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl9zMTYoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2YnNsX3A2NCh1aW50NjR4MV90IF9fcDAsIHBvbHk2NHgxX3QgX19wMSwgcG9seTY0eDFfdCBfX3AyKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2YnNsX3A2NCh1aW50NjR4MV90IF9fcDAsIHBvbHk2NHgxX3QgX19wMSwgcG9seTY0eDFfdCBfX3AyKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZic2xxX3A2NCh1aW50NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSwgcG9seTY0eDJfdCBfX3AyKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgMzgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZic2xxX3A2NCh1aW50NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSwgcG9seTY0eDJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgMzgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmJzbHFfZjY0KHVpbnQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2YnNscV9mNjQodWludDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZic2xfZjY0KHVpbnQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSwgZmxvYXQ2NHgxX3QgX19wMikgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZic2xfZjY0KHVpbnQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSwgZmxvYXQ2NHgxX3QgX19wMikgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2FnZXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNhZ2VxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2FnZXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNhZ2VfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNhZ2VfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2FnZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjYWdlZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNhZ2VkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNhZ2VkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZWRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjYWdlc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNhZ2VzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmNhZ2VzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZXNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNhZ3RxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWd0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNhZ3RxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNhZ3RxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjYWd0X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWd0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNhZ3RfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNhZ3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2FndGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWd0ZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjYWd0ZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNhZ3RkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y2FndHNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWd0c19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjYWd0c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNhZ3RzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjYWxlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FsZXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjYWxlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2FsZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2FsZV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjYWxlX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNhbGVkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FsZWRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2FsZWRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmNhbGVzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2FsZXNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2FsZXNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2FsdHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNhbHRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2FsdHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNhbHRfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNhbHRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2FsdF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjYWx0ZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNhbHRkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNhbHRkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdGRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjYWx0c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNhbHRzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmNhbHRzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdHNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNlcV9wNjQocG9seTY0eDFfdCBfX3AwLCBwb2x5NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2VxX3A2NChwb2x5NjR4MV90IF9fcDAsIHBvbHk2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNlcXFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNlcXFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2VxcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2VxcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZXFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNlcXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNlcXFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjZXFxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2VxX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZXFfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2VxX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNlcV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNlcV9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNlcV9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNlcWRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjZXFkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNlcWRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmNlcWRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXFkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2Y2VxZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNlcWRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjZXFkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjZXFkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmNlcXNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXFzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmNlcXNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXFzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNlcXpfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjZXF6X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2Vxel9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2Vxel9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjZXF6X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjZXF6X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19yZXYwLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjZXF6cV9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNlcXpxX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcmV2MCwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2VxenFfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2VxenFfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y2VxenFfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2VxenFfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcmV2MCwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2VxenFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19wMCwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjZXF6cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNlcXpxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNlcXpxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNlcXpxX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNlcXpxX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmNlcXpxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmNlcXpxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNlcXpxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19wMCwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjZXF6cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZXF6cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2VxenFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjZXF6cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2VxenFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjZXF6cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNlcXpxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZXF6cV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNlcXpxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZXF6cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmNlcXpxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNlcXpfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjZXF6X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2Vxel91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2Vxel91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2Vxel91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2Vxel91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjZXF6X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjZXF6X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19yZXYwLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNlcXpfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNlcXpfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2Vxel9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNlcXpfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNlcXpfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZXF6X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNlcXpfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2Vxel9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNlcXpfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2Vxel9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNlcXpfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2Vxel9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3JldjAsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjZXF6ZF91NjQodWludDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6ZF91NjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjZXF6ZF91NjQodWludDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6ZF91NjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2Y2VxemRfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxemRfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZjZXF6ZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6ZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNlcXpkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6ZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjZXF6ZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxemRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjZXF6c19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2VxenNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNlcXpzX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZ2VxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjZ2VxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPj0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNnZXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2dlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2dlcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNnZXFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwID49IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZ2VfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNnZV91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZ2VfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2dlX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2dlX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2dlX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjZ2VkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmNnZWRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2VkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2dlZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2VkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNnZWRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNnZWRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2VkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNnZWRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2VkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y2dlc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNnZXNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2dlc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNnZXNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNnZXpxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19wMCwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjZ2V6cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZ2V6cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2dlenFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2dlenFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjZ2V6cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlenFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2dlenFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjZ2V6cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNnZXpxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZ2V6cV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNnZXpxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZ2V6cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3AwLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmNnZXpxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNnZXpfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNnZXpfdigoaW50OHg4X3QpX19wMCwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNnZXpfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2dlel9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2dlel92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNnZXpfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNnZXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNnZXpfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNnZXpfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZ2V6X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2dlel92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNnZXpfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6X3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2dlel9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2dlel92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNnZXpfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2dlel9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNnZXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNnZXpfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6X3YoKGludDh4OF90KV9fcDAsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2dlel9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlel92KChpbnQ4eDhfdClfX3JldjAsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmNnZXpkX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNnZXpkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2Y2dlemRfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlemRfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjZ2V6ZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlemRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2dlemRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNnZXpkX2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y2dlenNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNnZXpzX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmNnZXpzX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6c19mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2d0cV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjZ3RxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPiBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2d0cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNndHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPiBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2d0cV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2d0cV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPiBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2d0X3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNndF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNndF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNndF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2d0X3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZ3RfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2Y2d0ZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNndGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZjZ3RkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0ZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNndGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0ZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjZ3RkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNndGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjZ3RkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0ZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjZ3RkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0ZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmNndHNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3RzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmNndHNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3RzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjZ3R6cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcDAsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y2d0enFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcmV2MCwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2d0enFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNndHpxX3YoKGludDh4MTZfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNndHpxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2d0enFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNndHpxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNndHpxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2d0enFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjZ3R6cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2d0enFfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjZ3R6cV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y2d0enFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19wMCwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZjZ3R6cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcmV2MCwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZjZ3R6X3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6X3YoKGludDh4OF90KV9fcDAsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjZ3R6X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0el92KChpbnQ4eDhfdClfX3JldjAsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNndHpfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNndHpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZ3R6X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjZ3R6X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6X3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2d0el9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNndHpfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjZ3R6X3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2d0el92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNndHpfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNndHpfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZ3R6X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2d0el92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNndHpfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjZ3R6X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0el92KChpbnQ4eDhfdClfX3AwLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNndHpfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNndHpfdigoaW50OHg4X3QpX19yZXYwLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjZ3R6ZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6ZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmNndHpkX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNndHpkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2d0emRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNndHpkX2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNndHpkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6ZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmNndHpzX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6c19mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjZ3R6c19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNsZXFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNsZXFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA8PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2xlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjbGVxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjbGVxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2xlcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPD0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNsZV91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2xlX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNsZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjbGVfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjbGVfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjbGVfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjbGVkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsZWRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2xlZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGVkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjbGVkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmNsZWRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGVkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2xlZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsZWRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2xlZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsZWRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjbGVzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2xlc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjbGVzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2xlc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2xlenFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNsZXpxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNsZXpxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6cV92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjbGV6cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNsZXpxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6cV92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjbGV6cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNsZXpxX3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2xlenFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNsZXpxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2xlenFfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmNsZXpxX3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcDAsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2xlenFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2xlel9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlel92KChpbnQ4eDhfdClfX3AwLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2xlel9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNsZXpfdigoaW50OHg4X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjbGV6X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2xlel9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2xlel92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2xlel9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2xlel92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNsZXpfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2xlel9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsZXpfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjbGV6X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2xlel9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNsZXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjbGV6X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2xlel92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2xlel9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNsZXpfdigoaW50OHg4X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjbGV6X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6X3YoKGludDh4OF90KV9fcmV2MCwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2Y2xlemRfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlemRfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZjbGV6ZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6ZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNsZXpkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6ZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjbGV6ZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlemRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjbGV6c19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2xlenNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNsZXpzX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjbHRxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNsdHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA8IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjbHRxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2x0cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA8IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjbHRxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjbHRxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA8IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjbHRfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2x0X3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2x0X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2x0X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjbHRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNsdF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2x0ZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHRkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNsdGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0ZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2Y2x0ZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNsdGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZjbHRkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0ZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNsdGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHRkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNsdGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHRkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y2x0c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNsdHNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2x0c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNsdHNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNsdHpxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19wMCwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjbHR6cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjbHR6cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2x0enFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2x0enFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjbHR6cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0enFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2x0enFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjbHR6cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNsdHpxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjbHR6cV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNsdHpxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjbHR6cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3AwLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmNsdHpxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNsdHpfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNsdHpfdigoaW50OHg4X3QpX19wMCwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNsdHpfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2x0el9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2x0el92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNsdHpfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNsdHpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNsdHpfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsdHpfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjbHR6X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2x0el92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNsdHpfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6X3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2x0el9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2x0el92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNsdHpfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2x0el9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNsdHpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNsdHpfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6X3YoKGludDh4OF90KV9fcDAsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2x0el9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0el92KChpbnQ4eDhfdClfX3JldjAsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmNsdHpkX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNsdHpkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2Y2x0emRfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0emRfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjbHR6ZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0emRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2x0emRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsdHpkX2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y2x0enNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNsdHpzX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmNsdHpzX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6c19mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2Y29tYmluZV9wNjQocG9seTY0eDFfdCBfX3AwLCBwb2x5NjR4MV90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2Y29tYmluZV9wNjQocG9seTY0eDFfdCBfX3AwLCBwb2x5NjR4MV90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZjb21iaW5lX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2Y29tYmluZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lX3A4KF9fcDBfMCwgX19wMV8wLCBfX3AyXzAsIF9fcDNfMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMF8wID0gX19wMF8wOyBcCisgIHBvbHk4eDhfdCBfX3MyXzAgPSBfX3AyXzA7IFwKKyAgcG9seTh4MTZfdCBfX3JldF8wOyBcCisgIF9fcmV0XzAgPSB2c2V0cV9sYW5lX3A4KHZnZXRfbGFuZV9wOChfX3MyXzAsIF9fcDNfMCksIF9fczBfMCwgX19wMV8wKTsgXAorICBfX3JldF8wOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfcDgoX19wMF8xLCBfX3AxXzEsIF9fcDJfMSwgX19wM18xKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwXzEgPSBfX3AwXzE7IFwKKyAgcG9seTh4OF90IF9fczJfMSA9IF9fcDJfMTsgXAorICBwb2x5OHgxNl90IF9fcmV2MF8xOyAgX19yZXYwXzEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzEsIF9fczBfMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4OF90IF9fcmV2Ml8xOyAgX19yZXYyXzEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzEsIF9fczJfMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4MTZfdCBfX3JldF8xOyBcCisgIF9fcmV0XzEgPSBfX25vc3dhcF92c2V0cV9sYW5lX3A4KF9fbm9zd2FwX3ZnZXRfbGFuZV9wOChfX3JldjJfMSwgX19wM18xKSwgX19yZXYwXzEsIF9fcDFfMSk7IFwKKyAgX19yZXRfMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzEsIF9fcmV0XzEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lX3AxNihfX3AwXzIsIF9fcDFfMiwgX19wMl8yLCBfX3AzXzIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczBfMiA9IF9fcDBfMjsgXAorICBwb2x5MTZ4NF90IF9fczJfMiA9IF9fcDJfMjsgXAorICBwb2x5MTZ4OF90IF9fcmV0XzI7IFwKKyAgX19yZXRfMiA9IHZzZXRxX2xhbmVfcDE2KHZnZXRfbGFuZV9wMTYoX19zMl8yLCBfX3AzXzIpLCBfX3MwXzIsIF9fcDFfMik7IFwKKyAgX19yZXRfMjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lX3AxNihfX3AwXzMsIF9fcDFfMywgX19wMl8zLCBfX3AzXzMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczBfMyA9IF9fcDBfMzsgXAorICBwb2x5MTZ4NF90IF9fczJfMyA9IF9fcDJfMzsgXAorICBwb2x5MTZ4OF90IF9fcmV2MF8zOyAgX19yZXYwXzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzMsIF9fczBfMywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDRfdCBfX3JldjJfMzsgIF9fcmV2Ml8zID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8zLCBfX3MyXzMsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4X3QgX19yZXRfMzsgXAorICBfX3JldF8zID0gX19ub3N3YXBfdnNldHFfbGFuZV9wMTYoX19ub3N3YXBfdmdldF9sYW5lX3AxNihfX3JldjJfMywgX19wM18zKSwgX19yZXYwXzMsIF9fcDFfMyk7IFwKKyAgX19yZXRfMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzMsIF9fcmV0XzMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lX3U4KF9fcDBfNCwgX19wMV80LCBfX3AyXzQsIF9fcDNfNCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMF80ID0gX19wMF80OyBcCisgIHVpbnQ4eDhfdCBfX3MyXzQgPSBfX3AyXzQ7IFwKKyAgdWludDh4MTZfdCBfX3JldF80OyBcCisgIF9fcmV0XzQgPSB2c2V0cV9sYW5lX3U4KHZnZXRfbGFuZV91OChfX3MyXzQsIF9fcDNfNCksIF9fczBfNCwgX19wMV80KTsgXAorICBfX3JldF80OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfdTgoX19wMF81LCBfX3AxXzUsIF9fcDJfNSwgX19wM181KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwXzUgPSBfX3AwXzU7IFwKKyAgdWludDh4OF90IF9fczJfNSA9IF9fcDJfNTsgXAorICB1aW50OHgxNl90IF9fcmV2MF81OyAgX19yZXYwXzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzUsIF9fczBfNSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV2Ml81OyAgX19yZXYyXzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzUsIF9fczJfNSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldF81OyBcCisgIF9fcmV0XzUgPSBfX25vc3dhcF92c2V0cV9sYW5lX3U4KF9fbm9zd2FwX3ZnZXRfbGFuZV91OChfX3JldjJfNSwgX19wM181KSwgX19yZXYwXzUsIF9fcDFfNSk7IFwKKyAgX19yZXRfNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzUsIF9fcmV0XzUsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lX3UzMihfX3AwXzYsIF9fcDFfNiwgX19wMl82LCBfX3AzXzYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczBfNiA9IF9fcDBfNjsgXAorICB1aW50MzJ4Ml90IF9fczJfNiA9IF9fcDJfNjsgXAorICB1aW50MzJ4NF90IF9fcmV0XzY7IFwKKyAgX19yZXRfNiA9IHZzZXRxX2xhbmVfdTMyKHZnZXRfbGFuZV91MzIoX19zMl82LCBfX3AzXzYpLCBfX3MwXzYsIF9fcDFfNik7IFwKKyAgX19yZXRfNjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lX3UzMihfX3AwXzcsIF9fcDFfNywgX19wMl83LCBfX3AzXzcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczBfNyA9IF9fcDBfNzsgXAorICB1aW50MzJ4Ml90IF9fczJfNyA9IF9fcDJfNzsgXAorICB1aW50MzJ4NF90IF9fcmV2MF83OyAgX19yZXYwXzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzcsIF9fczBfNywgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjJfNzsgIF9fcmV2Ml83ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl83LCBfX3MyXzcsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXRfNzsgXAorICBfX3JldF83ID0gX19ub3N3YXBfdnNldHFfbGFuZV91MzIoX19ub3N3YXBfdmdldF9sYW5lX3UzMihfX3JldjJfNywgX19wM183KSwgX19yZXYwXzcsIF9fcDFfNyk7IFwKKyAgX19yZXRfNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzcsIF9fcmV0XzcsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0Xzc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lX3U2NChfX3AwXzgsIF9fcDFfOCwgX19wMl84LCBfX3AzXzgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczBfOCA9IF9fcDBfODsgXAorICB1aW50NjR4MV90IF9fczJfOCA9IF9fcDJfODsgXAorICB1aW50NjR4Ml90IF9fcmV0Xzg7IFwKKyAgX19yZXRfOCA9IHZzZXRxX2xhbmVfdTY0KHZnZXRfbGFuZV91NjQoX19zMl84LCBfX3AzXzgpLCBfX3MwXzgsIF9fcDFfOCk7IFwKKyAgX19yZXRfODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lX3U2NChfX3AwXzksIF9fcDFfOSwgX19wMl85LCBfX3AzXzkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczBfOSA9IF9fcDBfOTsgXAorICB1aW50NjR4MV90IF9fczJfOSA9IF9fcDJfOTsgXAorICB1aW50NjR4Ml90IF9fcmV2MF85OyAgX19yZXYwXzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzksIF9fczBfOSwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldF85OyBcCisgIF9fcmV0XzkgPSBfX25vc3dhcF92c2V0cV9sYW5lX3U2NChfX25vc3dhcF92Z2V0X2xhbmVfdTY0KF9fczJfOSwgX19wM185KSwgX19yZXYwXzksIF9fcDFfOSk7IFwKKyAgX19yZXRfOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzksIF9fcmV0XzksIDEsIDApOyBcCisgIF9fcmV0Xzk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lX3UxNihfX3AwXzEwLCBfX3AxXzEwLCBfX3AyXzEwLCBfX3AzXzEwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwXzEwID0gX19wMF8xMDsgXAorICB1aW50MTZ4NF90IF9fczJfMTAgPSBfX3AyXzEwOyBcCisgIHVpbnQxNng4X3QgX19yZXRfMTA7IFwKKyAgX19yZXRfMTAgPSB2c2V0cV9sYW5lX3UxNih2Z2V0X2xhbmVfdTE2KF9fczJfMTAsIF9fcDNfMTApLCBfX3MwXzEwLCBfX3AxXzEwKTsgXAorICBfX3JldF8xMDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lX3UxNihfX3AwXzExLCBfX3AxXzExLCBfX3AyXzExLCBfX3AzXzExKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwXzExID0gX19wMF8xMTsgXAorICB1aW50MTZ4NF90IF9fczJfMTEgPSBfX3AyXzExOyBcCisgIHVpbnQxNng4X3QgX19yZXYwXzExOyAgX19yZXYwXzExID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xMSwgX19zMF8xMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjJfMTE7ICBfX3JldjJfMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzExLCBfX3MyXzExLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0XzExOyBcCisgIF9fcmV0XzExID0gX19ub3N3YXBfdnNldHFfbGFuZV91MTYoX19ub3N3YXBfdmdldF9sYW5lX3UxNihfX3JldjJfMTEsIF9fcDNfMTEpLCBfX3JldjBfMTEsIF9fcDFfMTEpOyBcCisgIF9fcmV0XzExID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTEsIF9fcmV0XzExLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xMTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfczgoX19wMF8xMiwgX19wMV8xMiwgX19wMl8xMiwgX19wM18xMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwXzEyID0gX19wMF8xMjsgXAorICBpbnQ4eDhfdCBfX3MyXzEyID0gX19wMl8xMjsgXAorICBpbnQ4eDE2X3QgX19yZXRfMTI7IFwKKyAgX19yZXRfMTIgPSB2c2V0cV9sYW5lX3M4KHZnZXRfbGFuZV9zOChfX3MyXzEyLCBfX3AzXzEyKSwgX19zMF8xMiwgX19wMV8xMik7IFwKKyAgX19yZXRfMTI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weXFfbGFuZV9zOChfX3AwXzEzLCBfX3AxXzEzLCBfX3AyXzEzLCBfX3AzXzEzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczBfMTMgPSBfX3AwXzEzOyBcCisgIGludDh4OF90IF9fczJfMTMgPSBfX3AyXzEzOyBcCisgIGludDh4MTZfdCBfX3JldjBfMTM7ICBfX3JldjBfMTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzEzLCBfX3MwXzEzLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldjJfMTM7ICBfX3JldjJfMTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzEzLCBfX3MyXzEzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXRfMTM7IFwKKyAgX19yZXRfMTMgPSBfX25vc3dhcF92c2V0cV9sYW5lX3M4KF9fbm9zd2FwX3ZnZXRfbGFuZV9zOChfX3JldjJfMTMsIF9fcDNfMTMpLCBfX3JldjBfMTMsIF9fcDFfMTMpOyBcCisgIF9fcmV0XzEzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTMsIF9fcmV0XzEzLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xMzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfZjMyKF9fcDBfMTQsIF9fcDFfMTQsIF9fcDJfMTQsIF9fcDNfMTQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwXzE0ID0gX19wMF8xNDsgXAorICBmbG9hdDMyeDJfdCBfX3MyXzE0ID0gX19wMl8xNDsgXAorICBmbG9hdDMyeDRfdCBfX3JldF8xNDsgXAorICBfX3JldF8xNCA9IHZzZXRxX2xhbmVfZjMyKHZnZXRfbGFuZV9mMzIoX19zMl8xNCwgX19wM18xNCksIF9fczBfMTQsIF9fcDFfMTQpOyBcCisgIF9fcmV0XzE0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfZjMyKF9fcDBfMTUsIF9fcDFfMTUsIF9fcDJfMTUsIF9fcDNfMTUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwXzE1ID0gX19wMF8xNTsgXAorICBmbG9hdDMyeDJfdCBfX3MyXzE1ID0gX19wMl8xNTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjBfMTU7ICBfX3JldjBfMTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE1LCBfX3MwXzE1LCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjJfMTU7ICBfX3JldjJfMTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzE1LCBfX3MyXzE1LCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldF8xNTsgXAorICBfX3JldF8xNSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfZjMyKF9fbm9zd2FwX3ZnZXRfbGFuZV9mMzIoX19yZXYyXzE1LCBfX3AzXzE1KSwgX19yZXYwXzE1LCBfX3AxXzE1KTsgXAorICBfX3JldF8xNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE1LCBfX3JldF8xNSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lX3MzMihfX3AwXzE2LCBfX3AxXzE2LCBfX3AyXzE2LCBfX3AzXzE2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczBfMTYgPSBfX3AwXzE2OyBcCisgIGludDMyeDJfdCBfX3MyXzE2ID0gX19wMl8xNjsgXAorICBpbnQzMng0X3QgX19yZXRfMTY7IFwKKyAgX19yZXRfMTYgPSB2c2V0cV9sYW5lX3MzMih2Z2V0X2xhbmVfczMyKF9fczJfMTYsIF9fcDNfMTYpLCBfX3MwXzE2LCBfX3AxXzE2KTsgXAorICBfX3JldF8xNjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lX3MzMihfX3AwXzE3LCBfX3AxXzE3LCBfX3AyXzE3LCBfX3AzXzE3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczBfMTcgPSBfX3AwXzE3OyBcCisgIGludDMyeDJfdCBfX3MyXzE3ID0gX19wMl8xNzsgXAorICBpbnQzMng0X3QgX19yZXYwXzE3OyAgX19yZXYwXzE3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xNywgX19zMF8xNywgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2Ml8xNzsgIF9fcmV2Ml8xNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTcsIF9fczJfMTcsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldF8xNzsgXAorICBfX3JldF8xNyA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfczMyKF9fbm9zd2FwX3ZnZXRfbGFuZV9zMzIoX19yZXYyXzE3LCBfX3AzXzE3KSwgX19yZXYwXzE3LCBfX3AxXzE3KTsgXAorICBfX3JldF8xNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE3LCBfX3JldF8xNywgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lX3M2NChfX3AwXzE4LCBfX3AxXzE4LCBfX3AyXzE4LCBfX3AzXzE4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczBfMTggPSBfX3AwXzE4OyBcCisgIGludDY0eDFfdCBfX3MyXzE4ID0gX19wMl8xODsgXAorICBpbnQ2NHgyX3QgX19yZXRfMTg7IFwKKyAgX19yZXRfMTggPSB2c2V0cV9sYW5lX3M2NCh2Z2V0X2xhbmVfczY0KF9fczJfMTgsIF9fcDNfMTgpLCBfX3MwXzE4LCBfX3AxXzE4KTsgXAorICBfX3JldF8xODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lX3M2NChfX3AwXzE5LCBfX3AxXzE5LCBfX3AyXzE5LCBfX3AzXzE5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczBfMTkgPSBfX3AwXzE5OyBcCisgIGludDY0eDFfdCBfX3MyXzE5ID0gX19wMl8xOTsgXAorICBpbnQ2NHgyX3QgX19yZXYwXzE5OyAgX19yZXYwXzE5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xOSwgX19zMF8xOSwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0XzE5OyBcCisgIF9fcmV0XzE5ID0gX19ub3N3YXBfdnNldHFfbGFuZV9zNjQoX19ub3N3YXBfdmdldF9sYW5lX3M2NChfX3MyXzE5LCBfX3AzXzE5KSwgX19yZXYwXzE5LCBfX3AxXzE5KTsgXAorICBfX3JldF8xOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE5LCBfX3JldF8xOSwgMSwgMCk7IFwKKyAgX19yZXRfMTk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lX3MxNihfX3AwXzIwLCBfX3AxXzIwLCBfX3AyXzIwLCBfX3AzXzIwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczBfMjAgPSBfX3AwXzIwOyBcCisgIGludDE2eDRfdCBfX3MyXzIwID0gX19wMl8yMDsgXAorICBpbnQxNng4X3QgX19yZXRfMjA7IFwKKyAgX19yZXRfMjAgPSB2c2V0cV9sYW5lX3MxNih2Z2V0X2xhbmVfczE2KF9fczJfMjAsIF9fcDNfMjApLCBfX3MwXzIwLCBfX3AxXzIwKTsgXAorICBfX3JldF8yMDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lX3MxNihfX3AwXzIxLCBfX3AxXzIxLCBfX3AyXzIxLCBfX3AzXzIxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczBfMjEgPSBfX3AwXzIxOyBcCisgIGludDE2eDRfdCBfX3MyXzIxID0gX19wMl8yMTsgXAorICBpbnQxNng4X3QgX19yZXYwXzIxOyAgX19yZXYwXzIxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMSwgX19zMF8yMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2Ml8yMTsgIF9fcmV2Ml8yMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjEsIF9fczJfMjEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldF8yMTsgXAorICBfX3JldF8yMSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfczE2KF9fbm9zd2FwX3ZnZXRfbGFuZV9zMTYoX19yZXYyXzIxLCBfX3AzXzIxKSwgX19yZXYwXzIxLCBfX3AxXzIxKTsgXAorICBfX3JldF8yMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIxLCBfX3JldF8yMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVfcDgoX19wMF8yMiwgX19wMV8yMiwgX19wMl8yMiwgX19wM18yMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwXzIyID0gX19wMF8yMjsgXAorICBwb2x5OHg4X3QgX19zMl8yMiA9IF9fcDJfMjI7IFwKKyAgcG9seTh4OF90IF9fcmV0XzIyOyBcCisgIF9fcmV0XzIyID0gdnNldF9sYW5lX3A4KHZnZXRfbGFuZV9wOChfX3MyXzIyLCBfX3AzXzIyKSwgX19zMF8yMiwgX19wMV8yMik7IFwKKyAgX19yZXRfMjI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lX3A4KF9fcDBfMjMsIF9fcDFfMjMsIF9fcDJfMjMsIF9fcDNfMjMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMF8yMyA9IF9fcDBfMjM7IFwKKyAgcG9seTh4OF90IF9fczJfMjMgPSBfX3AyXzIzOyBcCisgIHBvbHk4eDhfdCBfX3JldjBfMjM7ICBfX3JldjBfMjMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIzLCBfX3MwXzIzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXYyXzIzOyAgX19yZXYyXzIzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yMywgX19zMl8yMywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4OF90IF9fcmV0XzIzOyBcCisgIF9fcmV0XzIzID0gX19ub3N3YXBfdnNldF9sYW5lX3A4KF9fbm9zd2FwX3ZnZXRfbGFuZV9wOChfX3JldjJfMjMsIF9fcDNfMjMpLCBfX3JldjBfMjMsIF9fcDFfMjMpOyBcCisgIF9fcmV0XzIzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjMsIF9fcmV0XzIzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZV9wMTYoX19wMF8yNCwgX19wMV8yNCwgX19wMl8yNCwgX19wM18yNCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMF8yNCA9IF9fcDBfMjQ7IFwKKyAgcG9seTE2eDRfdCBfX3MyXzI0ID0gX19wMl8yNDsgXAorICBwb2x5MTZ4NF90IF9fcmV0XzI0OyBcCisgIF9fcmV0XzI0ID0gdnNldF9sYW5lX3AxNih2Z2V0X2xhbmVfcDE2KF9fczJfMjQsIF9fcDNfMjQpLCBfX3MwXzI0LCBfX3AxXzI0KTsgXAorICBfX3JldF8yNDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVfcDE2KF9fcDBfMjUsIF9fcDFfMjUsIF9fcDJfMjUsIF9fcDNfMjUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczBfMjUgPSBfX3AwXzI1OyBcCisgIHBvbHkxNng0X3QgX19zMl8yNSA9IF9fcDJfMjU7IFwKKyAgcG9seTE2eDRfdCBfX3JldjBfMjU7ICBfX3JldjBfMjUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzI1LCBfX3MwXzI1LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV2Ml8yNTsgIF9fcmV2Ml8yNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjUsIF9fczJfMjUsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng0X3QgX19yZXRfMjU7IFwKKyAgX19yZXRfMjUgPSBfX25vc3dhcF92c2V0X2xhbmVfcDE2KF9fbm9zd2FwX3ZnZXRfbGFuZV9wMTYoX19yZXYyXzI1LCBfX3AzXzI1KSwgX19yZXYwXzI1LCBfX3AxXzI1KTsgXAorICBfX3JldF8yNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzI1LCBfX3JldF8yNSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVfdTgoX19wMF8yNiwgX19wMV8yNiwgX19wMl8yNiwgX19wM18yNikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwXzI2ID0gX19wMF8yNjsgXAorICB1aW50OHg4X3QgX19zMl8yNiA9IF9fcDJfMjY7IFwKKyAgdWludDh4OF90IF9fcmV0XzI2OyBcCisgIF9fcmV0XzI2ID0gdnNldF9sYW5lX3U4KHZnZXRfbGFuZV91OChfX3MyXzI2LCBfX3AzXzI2KSwgX19zMF8yNiwgX19wMV8yNik7IFwKKyAgX19yZXRfMjY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lX3U4KF9fcDBfMjcsIF9fcDFfMjcsIF9fcDJfMjcsIF9fcDNfMjcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMF8yNyA9IF9fcDBfMjc7IFwKKyAgdWludDh4OF90IF9fczJfMjcgPSBfX3AyXzI3OyBcCisgIHVpbnQ4eDhfdCBfX3JldjBfMjc7ICBfX3JldjBfMjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzI3LCBfX3MwXzI3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXYyXzI3OyAgX19yZXYyXzI3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNywgX19zMl8yNywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0XzI3OyBcCisgIF9fcmV0XzI3ID0gX19ub3N3YXBfdnNldF9sYW5lX3U4KF9fbm9zd2FwX3ZnZXRfbGFuZV91OChfX3JldjJfMjcsIF9fcDNfMjcpLCBfX3JldjBfMjcsIF9fcDFfMjcpOyBcCisgIF9fcmV0XzI3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjcsIF9fcmV0XzI3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yNzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZV91MzIoX19wMF8yOCwgX19wMV8yOCwgX19wMl8yOCwgX19wM18yOCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMF8yOCA9IF9fcDBfMjg7IFwKKyAgdWludDMyeDJfdCBfX3MyXzI4ID0gX19wMl8yODsgXAorICB1aW50MzJ4Ml90IF9fcmV0XzI4OyBcCisgIF9fcmV0XzI4ID0gdnNldF9sYW5lX3UzMih2Z2V0X2xhbmVfdTMyKF9fczJfMjgsIF9fcDNfMjgpLCBfX3MwXzI4LCBfX3AxXzI4KTsgXAorICBfX3JldF8yODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVfdTMyKF9fcDBfMjksIF9fcDFfMjksIF9fcDJfMjksIF9fcDNfMjkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczBfMjkgPSBfX3AwXzI5OyBcCisgIHVpbnQzMngyX3QgX19zMl8yOSA9IF9fcDJfMjk7IFwKKyAgdWludDMyeDJfdCBfX3JldjBfMjk7ICBfX3JldjBfMjkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzI5LCBfX3MwXzI5LCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2Ml8yOTsgIF9fcmV2Ml8yOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjksIF9fczJfMjksIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXRfMjk7IFwKKyAgX19yZXRfMjkgPSBfX25vc3dhcF92c2V0X2xhbmVfdTMyKF9fbm9zd2FwX3ZnZXRfbGFuZV91MzIoX19yZXYyXzI5LCBfX3AzXzI5KSwgX19yZXYwXzI5LCBfX3AxXzI5KTsgXAorICBfX3JldF8yOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzI5LCBfX3JldF8yOSwgMSwgMCk7IFwKKyAgX19yZXRfMjk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVfdTY0KF9fcDBfMzAsIF9fcDFfMzAsIF9fcDJfMzAsIF9fcDNfMzApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczBfMzAgPSBfX3AwXzMwOyBcCisgIHVpbnQ2NHgxX3QgX19zMl8zMCA9IF9fcDJfMzA7IFwKKyAgdWludDY0eDFfdCBfX3JldF8zMDsgXAorICBfX3JldF8zMCA9IHZzZXRfbGFuZV91NjQodmdldF9sYW5lX3U2NChfX3MyXzMwLCBfX3AzXzMwKSwgX19zMF8zMCwgX19wMV8zMCk7IFwKKyAgX19yZXRfMzA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lX3U2NChfX3AwXzMxLCBfX3AxXzMxLCBfX3AyXzMxLCBfX3AzXzMxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwXzMxID0gX19wMF8zMTsgXAorICB1aW50NjR4MV90IF9fczJfMzEgPSBfX3AyXzMxOyBcCisgIHVpbnQ2NHgxX3QgX19yZXRfMzE7IFwKKyAgX19yZXRfMzEgPSBfX25vc3dhcF92c2V0X2xhbmVfdTY0KF9fbm9zd2FwX3ZnZXRfbGFuZV91NjQoX19zMl8zMSwgX19wM18zMSksIF9fczBfMzEsIF9fcDFfMzEpOyBcCisgIF9fcmV0XzMxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lX3UxNihfX3AwXzMyLCBfX3AxXzMyLCBfX3AyXzMyLCBfX3AzXzMyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwXzMyID0gX19wMF8zMjsgXAorICB1aW50MTZ4NF90IF9fczJfMzIgPSBfX3AyXzMyOyBcCisgIHVpbnQxNng0X3QgX19yZXRfMzI7IFwKKyAgX19yZXRfMzIgPSB2c2V0X2xhbmVfdTE2KHZnZXRfbGFuZV91MTYoX19zMl8zMiwgX19wM18zMiksIF9fczBfMzIsIF9fcDFfMzIpOyBcCisgIF9fcmV0XzMyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZV91MTYoX19wMF8zMywgX19wMV8zMywgX19wMl8zMywgX19wM18zMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMF8zMyA9IF9fcDBfMzM7IFwKKyAgdWludDE2eDRfdCBfX3MyXzMzID0gX19wMl8zMzsgXAorICB1aW50MTZ4NF90IF9fcmV2MF8zMzsgIF9fcmV2MF8zMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMzMsIF9fczBfMzMsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYyXzMzOyAgX19yZXYyXzMzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8zMywgX19zMl8zMywgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldF8zMzsgXAorICBfX3JldF8zMyA9IF9fbm9zd2FwX3ZzZXRfbGFuZV91MTYoX19ub3N3YXBfdmdldF9sYW5lX3UxNihfX3JldjJfMzMsIF9fcDNfMzMpLCBfX3JldjBfMzMsIF9fcDFfMzMpOyBcCisgIF9fcmV0XzMzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMzMsIF9fcmV0XzMzLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8zMzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZV9zOChfX3AwXzM0LCBfX3AxXzM0LCBfX3AyXzM0LCBfX3AzXzM0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF8zNCA9IF9fcDBfMzQ7IFwKKyAgaW50OHg4X3QgX19zMl8zNCA9IF9fcDJfMzQ7IFwKKyAgaW50OHg4X3QgX19yZXRfMzQ7IFwKKyAgX19yZXRfMzQgPSB2c2V0X2xhbmVfczgodmdldF9sYW5lX3M4KF9fczJfMzQsIF9fcDNfMzQpLCBfX3MwXzM0LCBfX3AxXzM0KTsgXAorICBfX3JldF8zNDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVfczgoX19wMF8zNSwgX19wMV8zNSwgX19wMl8zNSwgX19wM18zNSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczBfMzUgPSBfX3AwXzM1OyBcCisgIGludDh4OF90IF9fczJfMzUgPSBfX3AyXzM1OyBcCisgIGludDh4OF90IF9fcmV2MF8zNTsgIF9fcmV2MF8zNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMzUsIF9fczBfMzUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV2Ml8zNTsgIF9fcmV2Ml8zNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMzUsIF9fczJfMzUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0XzM1OyBcCisgIF9fcmV0XzM1ID0gX19ub3N3YXBfdnNldF9sYW5lX3M4KF9fbm9zd2FwX3ZnZXRfbGFuZV9zOChfX3JldjJfMzUsIF9fcDNfMzUpLCBfX3JldjBfMzUsIF9fcDFfMzUpOyBcCisgIF9fcmV0XzM1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMzUsIF9fcmV0XzM1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8zNTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZV9mMzIoX19wMF8zNiwgX19wMV8zNiwgX19wMl8zNiwgX19wM18zNikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczBfMzYgPSBfX3AwXzM2OyBcCisgIGZsb2F0MzJ4Ml90IF9fczJfMzYgPSBfX3AyXzM2OyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0XzM2OyBcCisgIF9fcmV0XzM2ID0gdnNldF9sYW5lX2YzMih2Z2V0X2xhbmVfZjMyKF9fczJfMzYsIF9fcDNfMzYpLCBfX3MwXzM2LCBfX3AxXzM2KTsgXAorICBfX3JldF8zNjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVfZjMyKF9fcDBfMzcsIF9fcDFfMzcsIF9fcDJfMzcsIF9fcDNfMzcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwXzM3ID0gX19wMF8zNzsgXAorICBmbG9hdDMyeDJfdCBfX3MyXzM3ID0gX19wMl8zNzsgXAorICBmbG9hdDMyeDJfdCBfX3JldjBfMzc7ICBfX3JldjBfMzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzM3LCBfX3MwXzM3LCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjJfMzc7ICBfX3JldjJfMzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzM3LCBfX3MyXzM3LCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldF8zNzsgXAorICBfX3JldF8zNyA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9mMzIoX19ub3N3YXBfdmdldF9sYW5lX2YzMihfX3JldjJfMzcsIF9fcDNfMzcpLCBfX3JldjBfMzcsIF9fcDFfMzcpOyBcCisgIF9fcmV0XzM3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMzcsIF9fcmV0XzM3LCAxLCAwKTsgXAorICBfX3JldF8zNzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZV9zMzIoX19wMF8zOCwgX19wMV8zOCwgX19wMl8zOCwgX19wM18zOCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwXzM4ID0gX19wMF8zODsgXAorICBpbnQzMngyX3QgX19zMl8zOCA9IF9fcDJfMzg7IFwKKyAgaW50MzJ4Ml90IF9fcmV0XzM4OyBcCisgIF9fcmV0XzM4ID0gdnNldF9sYW5lX3MzMih2Z2V0X2xhbmVfczMyKF9fczJfMzgsIF9fcDNfMzgpLCBfX3MwXzM4LCBfX3AxXzM4KTsgXAorICBfX3JldF8zODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVfczMyKF9fcDBfMzksIF9fcDFfMzksIF9fcDJfMzksIF9fcDNfMzkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF8zOSA9IF9fcDBfMzk7IFwKKyAgaW50MzJ4Ml90IF9fczJfMzkgPSBfX3AyXzM5OyBcCisgIGludDMyeDJfdCBfX3JldjBfMzk7ICBfX3JldjBfMzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzM5LCBfX3MwXzM5LCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYyXzM5OyAgX19yZXYyXzM5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8zOSwgX19zMl8zOSwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0XzM5OyBcCisgIF9fcmV0XzM5ID0gX19ub3N3YXBfdnNldF9sYW5lX3MzMihfX25vc3dhcF92Z2V0X2xhbmVfczMyKF9fcmV2Ml8zOSwgX19wM18zOSksIF9fcmV2MF8zOSwgX19wMV8zOSk7IFwKKyAgX19yZXRfMzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8zOSwgX19yZXRfMzksIDEsIDApOyBcCisgIF9fcmV0XzM5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lX3M2NChfX3AwXzQwLCBfX3AxXzQwLCBfX3AyXzQwLCBfX3AzXzQwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczBfNDAgPSBfX3AwXzQwOyBcCisgIGludDY0eDFfdCBfX3MyXzQwID0gX19wMl80MDsgXAorICBpbnQ2NHgxX3QgX19yZXRfNDA7IFwKKyAgX19yZXRfNDAgPSB2c2V0X2xhbmVfczY0KHZnZXRfbGFuZV9zNjQoX19zMl80MCwgX19wM180MCksIF9fczBfNDAsIF9fcDFfNDApOyBcCisgIF9fcmV0XzQwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZV9zNjQoX19wMF80MSwgX19wMV80MSwgX19wMl80MSwgX19wM180MSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwXzQxID0gX19wMF80MTsgXAorICBpbnQ2NHgxX3QgX19zMl80MSA9IF9fcDJfNDE7IFwKKyAgaW50NjR4MV90IF9fcmV0XzQxOyBcCisgIF9fcmV0XzQxID0gX19ub3N3YXBfdnNldF9sYW5lX3M2NChfX25vc3dhcF92Z2V0X2xhbmVfczY0KF9fczJfNDEsIF9fcDNfNDEpLCBfX3MwXzQxLCBfX3AxXzQxKTsgXAorICBfX3JldF80MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZV9zMTYoX19wMF80MiwgX19wMV80MiwgX19wMl80MiwgX19wM180MikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzQyID0gX19wMF80MjsgXAorICBpbnQxNng0X3QgX19zMl80MiA9IF9fcDJfNDI7IFwKKyAgaW50MTZ4NF90IF9fcmV0XzQyOyBcCisgIF9fcmV0XzQyID0gdnNldF9sYW5lX3MxNih2Z2V0X2xhbmVfczE2KF9fczJfNDIsIF9fcDNfNDIpLCBfX3MwXzQyLCBfX3AxXzQyKTsgXAorICBfX3JldF80MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVfczE2KF9fcDBfNDMsIF9fcDFfNDMsIF9fcDJfNDMsIF9fcDNfNDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMF80MyA9IF9fcDBfNDM7IFwKKyAgaW50MTZ4NF90IF9fczJfNDMgPSBfX3AyXzQzOyBcCisgIGludDE2eDRfdCBfX3JldjBfNDM7ICBfX3JldjBfNDMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzQzLCBfX3MwXzQzLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyXzQzOyAgX19yZXYyXzQzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl80MywgX19zMl80MywgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0XzQzOyBcCisgIF9fcmV0XzQzID0gX19ub3N3YXBfdnNldF9sYW5lX3MxNihfX25vc3dhcF92Z2V0X2xhbmVfczE2KF9fcmV2Ml80MywgX19wM180MyksIF9fcmV2MF80MywgX19wMV80Myk7IFwKKyAgX19yZXRfNDMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF80MywgX19yZXRfNDMsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzQzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZXFfcDgoX19wMF80NCwgX19wMV80NCwgX19wMl80NCwgX19wM180NCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMF80NCA9IF9fcDBfNDQ7IFwKKyAgcG9seTh4MTZfdCBfX3MyXzQ0ID0gX19wMl80NDsgXAorICBwb2x5OHgxNl90IF9fcmV0XzQ0OyBcCisgIF9fcmV0XzQ0ID0gdnNldHFfbGFuZV9wOCh2Z2V0cV9sYW5lX3A4KF9fczJfNDQsIF9fcDNfNDQpLCBfX3MwXzQ0LCBfX3AxXzQ0KTsgXAorICBfX3JldF80NDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9wOChfX3AwXzQ1LCBfX3AxXzQ1LCBfX3AyXzQ1LCBfX3AzXzQ1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwXzQ1ID0gX19wMF80NTsgXAorICBwb2x5OHgxNl90IF9fczJfNDUgPSBfX3AyXzQ1OyBcCisgIHBvbHk4eDE2X3QgX19yZXYwXzQ1OyAgX19yZXYwXzQ1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF80NSwgX19zMF80NSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4MTZfdCBfX3JldjJfNDU7ICBfX3JldjJfNDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzQ1LCBfX3MyXzQ1LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV0XzQ1OyBcCisgIF9fcmV0XzQ1ID0gX19ub3N3YXBfdnNldHFfbGFuZV9wOChfX25vc3dhcF92Z2V0cV9sYW5lX3A4KF9fcmV2Ml80NSwgX19wM180NSksIF9fcmV2MF80NSwgX19wMV80NSk7IFwKKyAgX19yZXRfNDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF80NSwgX19yZXRfNDUsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzQ1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZXFfcDE2KF9fcDBfNDYsIF9fcDFfNDYsIF9fcDJfNDYsIF9fcDNfNDYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczBfNDYgPSBfX3AwXzQ2OyBcCisgIHBvbHkxNng4X3QgX19zMl80NiA9IF9fcDJfNDY7IFwKKyAgcG9seTE2eDhfdCBfX3JldF80NjsgXAorICBfX3JldF80NiA9IHZzZXRxX2xhbmVfcDE2KHZnZXRxX2xhbmVfcDE2KF9fczJfNDYsIF9fcDNfNDYpLCBfX3MwXzQ2LCBfX3AxXzQ2KTsgXAorICBfX3JldF80NjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9wMTYoX19wMF80NywgX19wMV80NywgX19wMl80NywgX19wM180NykgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMF80NyA9IF9fcDBfNDc7IFwKKyAgcG9seTE2eDhfdCBfX3MyXzQ3ID0gX19wMl80NzsgXAorICBwb2x5MTZ4OF90IF9fcmV2MF80NzsgIF9fcmV2MF80NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNDcsIF9fczBfNDcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4X3QgX19yZXYyXzQ3OyAgX19yZXYyXzQ3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl80NywgX19zMl80NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldF80NzsgXAorICBfX3JldF80NyA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfcDE2KF9fbm9zd2FwX3ZnZXRxX2xhbmVfcDE2KF9fcmV2Ml80NywgX19wM180NyksIF9fcmV2MF80NywgX19wMV80Nyk7IFwKKyAgX19yZXRfNDcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF80NywgX19yZXRfNDcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzQ3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZXFfdTgoX19wMF80OCwgX19wMV80OCwgX19wMl80OCwgX19wM180OCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMF80OCA9IF9fcDBfNDg7IFwKKyAgdWludDh4MTZfdCBfX3MyXzQ4ID0gX19wMl80ODsgXAorICB1aW50OHgxNl90IF9fcmV0XzQ4OyBcCisgIF9fcmV0XzQ4ID0gdnNldHFfbGFuZV91OCh2Z2V0cV9sYW5lX3U4KF9fczJfNDgsIF9fcDNfNDgpLCBfX3MwXzQ4LCBfX3AxXzQ4KTsgXAorICBfX3JldF80ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lcV91OChfX3AwXzQ5LCBfX3AxXzQ5LCBfX3AyXzQ5LCBfX3AzXzQ5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwXzQ5ID0gX19wMF80OTsgXAorICB1aW50OHgxNl90IF9fczJfNDkgPSBfX3AyXzQ5OyBcCisgIHVpbnQ4eDE2X3QgX19yZXYwXzQ5OyAgX19yZXYwXzQ5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF80OSwgX19zMF80OSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldjJfNDk7ICBfX3JldjJfNDkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzQ5LCBfX3MyXzQ5LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV0XzQ5OyBcCisgIF9fcmV0XzQ5ID0gX19ub3N3YXBfdnNldHFfbGFuZV91OChfX25vc3dhcF92Z2V0cV9sYW5lX3U4KF9fcmV2Ml80OSwgX19wM180OSksIF9fcmV2MF80OSwgX19wMV80OSk7IFwKKyAgX19yZXRfNDkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF80OSwgX19yZXRfNDksIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzQ5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZXFfdTMyKF9fcDBfNTAsIF9fcDFfNTAsIF9fcDJfNTAsIF9fcDNfNTApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczBfNTAgPSBfX3AwXzUwOyBcCisgIHVpbnQzMng0X3QgX19zMl81MCA9IF9fcDJfNTA7IFwKKyAgdWludDMyeDRfdCBfX3JldF81MDsgXAorICBfX3JldF81MCA9IHZzZXRxX2xhbmVfdTMyKHZnZXRxX2xhbmVfdTMyKF9fczJfNTAsIF9fcDNfNTApLCBfX3MwXzUwLCBfX3AxXzUwKTsgXAorICBfX3JldF81MDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lcV91MzIoX19wMF81MSwgX19wMV81MSwgX19wMl81MSwgX19wM181MSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMF81MSA9IF9fcDBfNTE7IFwKKyAgdWludDMyeDRfdCBfX3MyXzUxID0gX19wMl81MTsgXAorICB1aW50MzJ4NF90IF9fcmV2MF81MTsgIF9fcmV2MF81MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNTEsIF9fczBfNTEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYyXzUxOyAgX19yZXYyXzUxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl81MSwgX19zMl81MSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldF81MTsgXAorICBfX3JldF81MSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfdTMyKF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTMyKF9fcmV2Ml81MSwgX19wM181MSksIF9fcmV2MF81MSwgX19wMV81MSk7IFwKKyAgX19yZXRfNTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF81MSwgX19yZXRfNTEsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzUxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZXFfdTY0KF9fcDBfNTIsIF9fcDFfNTIsIF9fcDJfNTIsIF9fcDNfNTIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczBfNTIgPSBfX3AwXzUyOyBcCisgIHVpbnQ2NHgyX3QgX19zMl81MiA9IF9fcDJfNTI7IFwKKyAgdWludDY0eDJfdCBfX3JldF81MjsgXAorICBfX3JldF81MiA9IHZzZXRxX2xhbmVfdTY0KHZnZXRxX2xhbmVfdTY0KF9fczJfNTIsIF9fcDNfNTIpLCBfX3MwXzUyLCBfX3AxXzUyKTsgXAorICBfX3JldF81MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lcV91NjQoX19wMF81MywgX19wMV81MywgX19wMl81MywgX19wM181MykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMF81MyA9IF9fcDBfNTM7IFwKKyAgdWludDY0eDJfdCBfX3MyXzUzID0gX19wMl81MzsgXAorICB1aW50NjR4Ml90IF9fcmV2MF81MzsgIF9fcmV2MF81MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNTMsIF9fczBfNTMsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYyXzUzOyAgX19yZXYyXzUzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl81MywgX19zMl81MywgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldF81MzsgXAorICBfX3JldF81MyA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfdTY0KF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTY0KF9fcmV2Ml81MywgX19wM181MyksIF9fcmV2MF81MywgX19wMV81Myk7IFwKKyAgX19yZXRfNTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF81MywgX19yZXRfNTMsIDEsIDApOyBcCisgIF9fcmV0XzUzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZXFfdTE2KF9fcDBfNTQsIF9fcDFfNTQsIF9fcDJfNTQsIF9fcDNfNTQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczBfNTQgPSBfX3AwXzU0OyBcCisgIHVpbnQxNng4X3QgX19zMl81NCA9IF9fcDJfNTQ7IFwKKyAgdWludDE2eDhfdCBfX3JldF81NDsgXAorICBfX3JldF81NCA9IHZzZXRxX2xhbmVfdTE2KHZnZXRxX2xhbmVfdTE2KF9fczJfNTQsIF9fcDNfNTQpLCBfX3MwXzU0LCBfX3AxXzU0KTsgXAorICBfX3JldF81NDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lcV91MTYoX19wMF81NSwgX19wMV81NSwgX19wMl81NSwgX19wM181NSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMF81NSA9IF9fcDBfNTU7IFwKKyAgdWludDE2eDhfdCBfX3MyXzU1ID0gX19wMl81NTsgXAorICB1aW50MTZ4OF90IF9fcmV2MF81NTsgIF9fcmV2MF81NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNTUsIF9fczBfNTUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYyXzU1OyAgX19yZXYyXzU1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl81NSwgX19zMl81NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldF81NTsgXAorICBfX3JldF81NSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfdTE2KF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTE2KF9fcmV2Ml81NSwgX19wM181NSksIF9fcmV2MF81NSwgX19wMV81NSk7IFwKKyAgX19yZXRfNTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF81NSwgX19yZXRfNTUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzU1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZXFfczgoX19wMF81NiwgX19wMV81NiwgX19wMl81NiwgX19wM181NikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwXzU2ID0gX19wMF81NjsgXAorICBpbnQ4eDE2X3QgX19zMl81NiA9IF9fcDJfNTY7IFwKKyAgaW50OHgxNl90IF9fcmV0XzU2OyBcCisgIF9fcmV0XzU2ID0gdnNldHFfbGFuZV9zOCh2Z2V0cV9sYW5lX3M4KF9fczJfNTYsIF9fcDNfNTYpLCBfX3MwXzU2LCBfX3AxXzU2KTsgXAorICBfX3JldF81NjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9zOChfX3AwXzU3LCBfX3AxXzU3LCBfX3AyXzU3LCBfX3AzXzU3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczBfNTcgPSBfX3AwXzU3OyBcCisgIGludDh4MTZfdCBfX3MyXzU3ID0gX19wMl81NzsgXAorICBpbnQ4eDE2X3QgX19yZXYwXzU3OyAgX19yZXYwXzU3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF81NywgX19zMF81NywgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV2Ml81NzsgIF9fcmV2Ml81NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNTcsIF9fczJfNTcsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldF81NzsgXAorICBfX3JldF81NyA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfczgoX19ub3N3YXBfdmdldHFfbGFuZV9zOChfX3JldjJfNTcsIF9fcDNfNTcpLCBfX3JldjBfNTcsIF9fcDFfNTcpOyBcCisgIF9fcmV0XzU3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNTcsIF9fcmV0XzU3LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF81NzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVxX2YzMihfX3AwXzU4LCBfX3AxXzU4LCBfX3AyXzU4LCBfX3AzXzU4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMF81OCA9IF9fcDBfNTg7IFwKKyAgZmxvYXQzMng0X3QgX19zMl81OCA9IF9fcDJfNTg7IFwKKyAgZmxvYXQzMng0X3QgX19yZXRfNTg7IFwKKyAgX19yZXRfNTggPSB2c2V0cV9sYW5lX2YzMih2Z2V0cV9sYW5lX2YzMihfX3MyXzU4LCBfX3AzXzU4KSwgX19zMF81OCwgX19wMV81OCk7IFwKKyAgX19yZXRfNTg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weXFfbGFuZXFfZjMyKF9fcDBfNTksIF9fcDFfNTksIF9fcDJfNTksIF9fcDNfNTkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwXzU5ID0gX19wMF81OTsgXAorICBmbG9hdDMyeDRfdCBfX3MyXzU5ID0gX19wMl81OTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjBfNTk7ICBfX3JldjBfNTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzU5LCBfX3MwXzU5LCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjJfNTk7ICBfX3JldjJfNTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzU5LCBfX3MyXzU5LCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldF81OTsgXAorICBfX3JldF81OSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfZjMyKF9fbm9zd2FwX3ZnZXRxX2xhbmVfZjMyKF9fcmV2Ml81OSwgX19wM181OSksIF9fcmV2MF81OSwgX19wMV81OSk7IFwKKyAgX19yZXRfNTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF81OSwgX19yZXRfNTksIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzU5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZXFfczMyKF9fcDBfNjAsIF9fcDFfNjAsIF9fcDJfNjAsIF9fcDNfNjApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMF82MCA9IF9fcDBfNjA7IFwKKyAgaW50MzJ4NF90IF9fczJfNjAgPSBfX3AyXzYwOyBcCisgIGludDMyeDRfdCBfX3JldF82MDsgXAorICBfX3JldF82MCA9IHZzZXRxX2xhbmVfczMyKHZnZXRxX2xhbmVfczMyKF9fczJfNjAsIF9fcDNfNjApLCBfX3MwXzYwLCBfX3AxXzYwKTsgXAorICBfX3JldF82MDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9zMzIoX19wMF82MSwgX19wMV82MSwgX19wMl82MSwgX19wM182MSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwXzYxID0gX19wMF82MTsgXAorICBpbnQzMng0X3QgX19zMl82MSA9IF9fcDJfNjE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MF82MTsgIF9fcmV2MF82MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNjEsIF9fczBfNjEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjJfNjE7ICBfX3JldjJfNjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzYxLCBfX3MyXzYxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXRfNjE7IFwKKyAgX19yZXRfNjEgPSBfX25vc3dhcF92c2V0cV9sYW5lX3MzMihfX25vc3dhcF92Z2V0cV9sYW5lX3MzMihfX3JldjJfNjEsIF9fcDNfNjEpLCBfX3JldjBfNjEsIF9fcDFfNjEpOyBcCisgIF9fcmV0XzYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNjEsIF9fcmV0XzYxLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF82MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3M2NChfX3AwXzYyLCBfX3AxXzYyLCBfX3AyXzYyLCBfX3AzXzYyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczBfNjIgPSBfX3AwXzYyOyBcCisgIGludDY0eDJfdCBfX3MyXzYyID0gX19wMl82MjsgXAorICBpbnQ2NHgyX3QgX19yZXRfNjI7IFwKKyAgX19yZXRfNjIgPSB2c2V0cV9sYW5lX3M2NCh2Z2V0cV9sYW5lX3M2NChfX3MyXzYyLCBfX3AzXzYyKSwgX19zMF82MiwgX19wMV82Mik7IFwKKyAgX19yZXRfNjI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weXFfbGFuZXFfczY0KF9fcDBfNjMsIF9fcDFfNjMsIF9fcDJfNjMsIF9fcDNfNjMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMF82MyA9IF9fcDBfNjM7IFwKKyAgaW50NjR4Ml90IF9fczJfNjMgPSBfX3AyXzYzOyBcCisgIGludDY0eDJfdCBfX3JldjBfNjM7ICBfX3JldjBfNjMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzYzLCBfX3MwXzYzLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXYyXzYzOyAgX19yZXYyXzYzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl82MywgX19zMl82MywgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0XzYzOyBcCisgIF9fcmV0XzYzID0gX19ub3N3YXBfdnNldHFfbGFuZV9zNjQoX19ub3N3YXBfdmdldHFfbGFuZV9zNjQoX19yZXYyXzYzLCBfX3AzXzYzKSwgX19yZXYwXzYzLCBfX3AxXzYzKTsgXAorICBfX3JldF82MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzYzLCBfX3JldF82MywgMSwgMCk7IFwKKyAgX19yZXRfNjM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9zMTYoX19wMF82NCwgX19wMV82NCwgX19wMl82NCwgX19wM182NCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwXzY0ID0gX19wMF82NDsgXAorICBpbnQxNng4X3QgX19zMl82NCA9IF9fcDJfNjQ7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzY0OyBcCisgIF9fcmV0XzY0ID0gdnNldHFfbGFuZV9zMTYodmdldHFfbGFuZV9zMTYoX19zMl82NCwgX19wM182NCksIF9fczBfNjQsIF9fcDFfNjQpOyBcCisgIF9fcmV0XzY0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3MxNihfX3AwXzY1LCBfX3AxXzY1LCBfX3AyXzY1LCBfX3AzXzY1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczBfNjUgPSBfX3AwXzY1OyBcCisgIGludDE2eDhfdCBfX3MyXzY1ID0gX19wMl82NTsgXAorICBpbnQxNng4X3QgX19yZXYwXzY1OyAgX19yZXYwXzY1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF82NSwgX19zMF82NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2Ml82NTsgIF9fcmV2Ml82NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNjUsIF9fczJfNjUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldF82NTsgXAorICBfX3JldF82NSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfczE2KF9fbm9zd2FwX3ZnZXRxX2xhbmVfczE2KF9fcmV2Ml82NSwgX19wM182NSksIF9fcmV2MF82NSwgX19wMV82NSk7IFwKKyAgX19yZXRfNjUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF82NSwgX19yZXRfNjUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzY1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lcV9wOChfX3AwXzY2LCBfX3AxXzY2LCBfX3AyXzY2LCBfX3AzXzY2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczBfNjYgPSBfX3AwXzY2OyBcCisgIHBvbHk4eDE2X3QgX19zMl82NiA9IF9fcDJfNjY7IFwKKyAgcG9seTh4OF90IF9fcmV0XzY2OyBcCisgIF9fcmV0XzY2ID0gdnNldF9sYW5lX3A4KHZnZXRxX2xhbmVfcDgoX19zMl82NiwgX19wM182NiksIF9fczBfNjYsIF9fcDFfNjYpOyBcCisgIF9fcmV0XzY2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZXFfcDgoX19wMF82NywgX19wMV82NywgX19wMl82NywgX19wM182NykgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwXzY3ID0gX19wMF82NzsgXAorICBwb2x5OHgxNl90IF9fczJfNjcgPSBfX3AyXzY3OyBcCisgIHBvbHk4eDhfdCBfX3JldjBfNjc7ICBfX3JldjBfNjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzY3LCBfX3MwXzY3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV2Ml82NzsgIF9fcmV2Ml82NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNjcsIF9fczJfNjcsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDhfdCBfX3JldF82NzsgXAorICBfX3JldF82NyA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9wOChfX25vc3dhcF92Z2V0cV9sYW5lX3A4KF9fcmV2Ml82NywgX19wM182NyksIF9fcmV2MF82NywgX19wMV82Nyk7IFwKKyAgX19yZXRfNjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF82NywgX19yZXRfNjcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzY3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lcV9wMTYoX19wMF82OCwgX19wMV82OCwgX19wMl82OCwgX19wM182OCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMF82OCA9IF9fcDBfNjg7IFwKKyAgcG9seTE2eDhfdCBfX3MyXzY4ID0gX19wMl82ODsgXAorICBwb2x5MTZ4NF90IF9fcmV0XzY4OyBcCisgIF9fcmV0XzY4ID0gdnNldF9sYW5lX3AxNih2Z2V0cV9sYW5lX3AxNihfX3MyXzY4LCBfX3AzXzY4KSwgX19zMF82OCwgX19wMV82OCk7IFwKKyAgX19yZXRfNjg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lcV9wMTYoX19wMF82OSwgX19wMV82OSwgX19wMl82OSwgX19wM182OSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMF82OSA9IF9fcDBfNjk7IFwKKyAgcG9seTE2eDhfdCBfX3MyXzY5ID0gX19wMl82OTsgXAorICBwb2x5MTZ4NF90IF9fcmV2MF82OTsgIF9fcmV2MF82OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNjksIF9fczBfNjksIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4X3QgX19yZXYyXzY5OyAgX19yZXYyXzY5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl82OSwgX19zMl82OSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDRfdCBfX3JldF82OTsgXAorICBfX3JldF82OSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9wMTYoX19ub3N3YXBfdmdldHFfbGFuZV9wMTYoX19yZXYyXzY5LCBfX3AzXzY5KSwgX19yZXYwXzY5LCBfX3AxXzY5KTsgXAorICBfX3JldF82OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzY5LCBfX3JldF82OSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNjk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVxX3U4KF9fcDBfNzAsIF9fcDFfNzAsIF9fcDJfNzAsIF9fcDNfNzApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMF83MCA9IF9fcDBfNzA7IFwKKyAgdWludDh4MTZfdCBfX3MyXzcwID0gX19wMl83MDsgXAorICB1aW50OHg4X3QgX19yZXRfNzA7IFwKKyAgX19yZXRfNzAgPSB2c2V0X2xhbmVfdTgodmdldHFfbGFuZV91OChfX3MyXzcwLCBfX3AzXzcwKSwgX19zMF83MCwgX19wMV83MCk7IFwKKyAgX19yZXRfNzA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lcV91OChfX3AwXzcxLCBfX3AxXzcxLCBfX3AyXzcxLCBfX3AzXzcxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczBfNzEgPSBfX3AwXzcxOyBcCisgIHVpbnQ4eDE2X3QgX19zMl83MSA9IF9fcDJfNzE7IFwKKyAgdWludDh4OF90IF9fcmV2MF83MTsgIF9fcmV2MF83MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNzEsIF9fczBfNzEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYyXzcxOyAgX19yZXYyXzcxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl83MSwgX19zMl83MSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0XzcxOyBcCisgIF9fcmV0XzcxID0gX19ub3N3YXBfdnNldF9sYW5lX3U4KF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTgoX19yZXYyXzcxLCBfX3AzXzcxKSwgX19yZXYwXzcxLCBfX3AxXzcxKTsgXAorICBfX3JldF83MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzcxLCBfX3JldF83MSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNzE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVxX3UzMihfX3AwXzcyLCBfX3AxXzcyLCBfX3AyXzcyLCBfX3AzXzcyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwXzcyID0gX19wMF83MjsgXAorICB1aW50MzJ4NF90IF9fczJfNzIgPSBfX3AyXzcyOyBcCisgIHVpbnQzMngyX3QgX19yZXRfNzI7IFwKKyAgX19yZXRfNzIgPSB2c2V0X2xhbmVfdTMyKHZnZXRxX2xhbmVfdTMyKF9fczJfNzIsIF9fcDNfNzIpLCBfX3MwXzcyLCBfX3AxXzcyKTsgXAorICBfX3JldF83MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVxX3UzMihfX3AwXzczLCBfX3AxXzczLCBfX3AyXzczLCBfX3AzXzczKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwXzczID0gX19wMF83MzsgXAorICB1aW50MzJ4NF90IF9fczJfNzMgPSBfX3AyXzczOyBcCisgIHVpbnQzMngyX3QgX19yZXYwXzczOyAgX19yZXYwXzczID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF83MywgX19zMF83MywgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjJfNzM7ICBfX3JldjJfNzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzczLCBfX3MyXzczLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0XzczOyBcCisgIF9fcmV0XzczID0gX19ub3N3YXBfdnNldF9sYW5lX3UzMihfX25vc3dhcF92Z2V0cV9sYW5lX3UzMihfX3JldjJfNzMsIF9fcDNfNzMpLCBfX3JldjBfNzMsIF9fcDFfNzMpOyBcCisgIF9fcmV0XzczID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNzMsIF9fcmV0XzczLCAxLCAwKTsgXAorICBfX3JldF83MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZXFfdTY0KF9fcDBfNzQsIF9fcDFfNzQsIF9fcDJfNzQsIF9fcDNfNzQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczBfNzQgPSBfX3AwXzc0OyBcCisgIHVpbnQ2NHgyX3QgX19zMl83NCA9IF9fcDJfNzQ7IFwKKyAgdWludDY0eDFfdCBfX3JldF83NDsgXAorICBfX3JldF83NCA9IHZzZXRfbGFuZV91NjQodmdldHFfbGFuZV91NjQoX19zMl83NCwgX19wM183NCksIF9fczBfNzQsIF9fcDFfNzQpOyBcCisgIF9fcmV0Xzc0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZXFfdTY0KF9fcDBfNzUsIF9fcDFfNzUsIF9fcDJfNzUsIF9fcDNfNzUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczBfNzUgPSBfX3AwXzc1OyBcCisgIHVpbnQ2NHgyX3QgX19zMl83NSA9IF9fcDJfNzU7IFwKKyAgdWludDY0eDJfdCBfX3JldjJfNzU7ICBfX3JldjJfNzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzc1LCBfX3MyXzc1LCAxLCAwKTsgXAorICB1aW50NjR4MV90IF9fcmV0Xzc1OyBcCisgIF9fcmV0Xzc1ID0gX19ub3N3YXBfdnNldF9sYW5lX3U2NChfX25vc3dhcF92Z2V0cV9sYW5lX3U2NChfX3JldjJfNzUsIF9fcDNfNzUpLCBfX3MwXzc1LCBfX3AxXzc1KTsgXAorICBfX3JldF83NTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZXFfdTE2KF9fcDBfNzYsIF9fcDFfNzYsIF9fcDJfNzYsIF9fcDNfNzYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczBfNzYgPSBfX3AwXzc2OyBcCisgIHVpbnQxNng4X3QgX19zMl83NiA9IF9fcDJfNzY7IFwKKyAgdWludDE2eDRfdCBfX3JldF83NjsgXAorICBfX3JldF83NiA9IHZzZXRfbGFuZV91MTYodmdldHFfbGFuZV91MTYoX19zMl83NiwgX19wM183NiksIF9fczBfNzYsIF9fcDFfNzYpOyBcCisgIF9fcmV0Xzc2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZXFfdTE2KF9fcDBfNzcsIF9fcDFfNzcsIF9fcDJfNzcsIF9fcDNfNzcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczBfNzcgPSBfX3AwXzc3OyBcCisgIHVpbnQxNng4X3QgX19zMl83NyA9IF9fcDJfNzc7IFwKKyAgdWludDE2eDRfdCBfX3JldjBfNzc7ICBfX3JldjBfNzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzc3LCBfX3MwXzc3LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2Ml83NzsgIF9fcmV2Ml83NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNzcsIF9fczJfNzcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXRfNzc7IFwKKyAgX19yZXRfNzcgPSBfX25vc3dhcF92c2V0X2xhbmVfdTE2KF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTE2KF9fcmV2Ml83NywgX19wM183NyksIF9fcmV2MF83NywgX19wMV83Nyk7IFwKKyAgX19yZXRfNzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF83NywgX19yZXRfNzcsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0Xzc3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lcV9zOChfX3AwXzc4LCBfX3AxXzc4LCBfX3AyXzc4LCBfX3AzXzc4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF83OCA9IF9fcDBfNzg7IFwKKyAgaW50OHgxNl90IF9fczJfNzggPSBfX3AyXzc4OyBcCisgIGludDh4OF90IF9fcmV0Xzc4OyBcCisgIF9fcmV0Xzc4ID0gdnNldF9sYW5lX3M4KHZnZXRxX2xhbmVfczgoX19zMl83OCwgX19wM183OCksIF9fczBfNzgsIF9fcDFfNzgpOyBcCisgIF9fcmV0Xzc4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZXFfczgoX19wMF83OSwgX19wMV83OSwgX19wMl83OSwgX19wM183OSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczBfNzkgPSBfX3AwXzc5OyBcCisgIGludDh4MTZfdCBfX3MyXzc5ID0gX19wMl83OTsgXAorICBpbnQ4eDhfdCBfX3JldjBfNzk7ICBfX3JldjBfNzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzc5LCBfX3MwXzc5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXYyXzc5OyAgX19yZXYyXzc5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl83OSwgX19zMl83OSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXRfNzk7IFwKKyAgX19yZXRfNzkgPSBfX25vc3dhcF92c2V0X2xhbmVfczgoX19ub3N3YXBfdmdldHFfbGFuZV9zOChfX3JldjJfNzksIF9fcDNfNzkpLCBfX3JldjBfNzksIF9fcDFfNzkpOyBcCisgIF9fcmV0Xzc5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNzksIF9fcmV0Xzc5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF83OTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZXFfZjMyKF9fcDBfODAsIF9fcDFfODAsIF9fcDJfODAsIF9fcDNfODApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwXzgwID0gX19wMF84MDsgXAorICBmbG9hdDMyeDRfdCBfX3MyXzgwID0gX19wMl84MDsgXAorICBmbG9hdDMyeDJfdCBfX3JldF84MDsgXAorICBfX3JldF84MCA9IHZzZXRfbGFuZV9mMzIodmdldHFfbGFuZV9mMzIoX19zMl84MCwgX19wM184MCksIF9fczBfODAsIF9fcDFfODApOyBcCisgIF9fcmV0XzgwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZXFfZjMyKF9fcDBfODEsIF9fcDFfODEsIF9fcDJfODEsIF9fcDNfODEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwXzgxID0gX19wMF84MTsgXAorICBmbG9hdDMyeDRfdCBfX3MyXzgxID0gX19wMl84MTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjBfODE7ICBfX3JldjBfODEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzgxLCBfX3MwXzgxLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjJfODE7ICBfX3JldjJfODEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzgxLCBfX3MyXzgxLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldF84MTsgXAorICBfX3JldF84MSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9mMzIoX19ub3N3YXBfdmdldHFfbGFuZV9mMzIoX19yZXYyXzgxLCBfX3AzXzgxKSwgX19yZXYwXzgxLCBfX3AxXzgxKTsgXAorICBfX3JldF84MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzgxLCBfX3JldF84MSwgMSwgMCk7IFwKKyAgX19yZXRfODE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVxX3MzMihfX3AwXzgyLCBfX3AxXzgyLCBfX3AyXzgyLCBfX3AzXzgyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczBfODIgPSBfX3AwXzgyOyBcCisgIGludDMyeDRfdCBfX3MyXzgyID0gX19wMl84MjsgXAorICBpbnQzMngyX3QgX19yZXRfODI7IFwKKyAgX19yZXRfODIgPSB2c2V0X2xhbmVfczMyKHZnZXRxX2xhbmVfczMyKF9fczJfODIsIF9fcDNfODIpLCBfX3MwXzgyLCBfX3AxXzgyKTsgXAorICBfX3JldF84MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVxX3MzMihfX3AwXzgzLCBfX3AxXzgzLCBfX3AyXzgzLCBfX3AzXzgzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczBfODMgPSBfX3AwXzgzOyBcCisgIGludDMyeDRfdCBfX3MyXzgzID0gX19wMl84MzsgXAorICBpbnQzMngyX3QgX19yZXYwXzgzOyAgX19yZXYwXzgzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF84MywgX19zMF84MywgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2Ml84MzsgIF9fcmV2Ml84MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfODMsIF9fczJfODMsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldF84MzsgXAorICBfX3JldF84MyA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9zMzIoX19ub3N3YXBfdmdldHFfbGFuZV9zMzIoX19yZXYyXzgzLCBfX3AzXzgzKSwgX19yZXYwXzgzLCBfX3AxXzgzKTsgXAorICBfX3JldF84MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzgzLCBfX3JldF84MywgMSwgMCk7IFwKKyAgX19yZXRfODM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVxX3M2NChfX3AwXzg0LCBfX3AxXzg0LCBfX3AyXzg0LCBfX3AzXzg0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczBfODQgPSBfX3AwXzg0OyBcCisgIGludDY0eDJfdCBfX3MyXzg0ID0gX19wMl84NDsgXAorICBpbnQ2NHgxX3QgX19yZXRfODQ7IFwKKyAgX19yZXRfODQgPSB2c2V0X2xhbmVfczY0KHZnZXRxX2xhbmVfczY0KF9fczJfODQsIF9fcDNfODQpLCBfX3MwXzg0LCBfX3AxXzg0KTsgXAorICBfX3JldF84NDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVxX3M2NChfX3AwXzg1LCBfX3AxXzg1LCBfX3AyXzg1LCBfX3AzXzg1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczBfODUgPSBfX3AwXzg1OyBcCisgIGludDY0eDJfdCBfX3MyXzg1ID0gX19wMl84NTsgXAorICBpbnQ2NHgyX3QgX19yZXYyXzg1OyAgX19yZXYyXzg1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl84NSwgX19zMl84NSwgMSwgMCk7IFwKKyAgaW50NjR4MV90IF9fcmV0Xzg1OyBcCisgIF9fcmV0Xzg1ID0gX19ub3N3YXBfdnNldF9sYW5lX3M2NChfX25vc3dhcF92Z2V0cV9sYW5lX3M2NChfX3JldjJfODUsIF9fcDNfODUpLCBfX3MwXzg1LCBfX3AxXzg1KTsgXAorICBfX3JldF84NTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZXFfczE2KF9fcDBfODYsIF9fcDFfODYsIF9fcDJfODYsIF9fcDNfODYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMF84NiA9IF9fcDBfODY7IFwKKyAgaW50MTZ4OF90IF9fczJfODYgPSBfX3AyXzg2OyBcCisgIGludDE2eDRfdCBfX3JldF84NjsgXAorICBfX3JldF84NiA9IHZzZXRfbGFuZV9zMTYodmdldHFfbGFuZV9zMTYoX19zMl84NiwgX19wM184NiksIF9fczBfODYsIF9fcDFfODYpOyBcCisgIF9fcmV0Xzg2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZXFfczE2KF9fcDBfODcsIF9fcDFfODcsIF9fcDJfODcsIF9fcDNfODcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMF84NyA9IF9fcDBfODc7IFwKKyAgaW50MTZ4OF90IF9fczJfODcgPSBfX3AyXzg3OyBcCisgIGludDE2eDRfdCBfX3JldjBfODc7ICBfX3JldjBfODcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzg3LCBfX3MwXzg3LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyXzg3OyAgX19yZXYyXzg3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl84NywgX19zMl84NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0Xzg3OyBcCisgIF9fcmV0Xzg3ID0gX19ub3N3YXBfdnNldF9sYW5lX3MxNihfX25vc3dhcF92Z2V0cV9sYW5lX3MxNihfX3JldjJfODcsIF9fcDNfODcpLCBfX3JldjBfODcsIF9fcDFfODcpOyBcCisgIF9fcmV0Xzg3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfODcsIF9fcmV0Xzg3LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF84NzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2Y3JlYXRlX3A2NCh1aW50NjRfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZjcmVhdGVfcDY0KHVpbnQ2NF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdmNyZWF0ZV9mNjQodWludDY0X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2Y3JlYXRlX2Y2NCh1aW50NjRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZjdnRzX2YzMl9zMzIoaW50MzJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19mMzJfczMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3QgdmN2dHNfZjMyX3MzMihpbnQzMl90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX2YzMl9zMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZjdnRzX2YzMl91MzIodWludDMyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfZjMyX3UzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZjdnRzX2YzMl91MzIodWludDMyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfZjMyX3UzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2Y3Z0X2YzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjMyX2Y2NCgoaW50OHgxNl90KV9fcDAsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2Y3Z0X2YzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl9mNjQoKGludDh4MTZfdClfX3JldjAsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQzMngyX3QgX19ub3N3YXBfdmN2dF9mMzJfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl9mNjQoKGludDh4MTZfdClfX3AwLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3QgdmN2dGRfZjY0X3M2NChpbnQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX2Y2NF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2Y3Z0ZF9mNjRfczY0KGludDY0X3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmN2dGRfZjY0X3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3QgdmN2dGRfZjY0X3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9mNjRfdTY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3QgdmN2dGRfZjY0X3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9mNjRfdTY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZjdnRxX2Y2NF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfZjY0X3YoKGludDh4MTZfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZjdnRxX2Y2NF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfZjY0X3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZjdnRxX2Y2NF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9mNjRfdigoaW50OHgxNl90KV9fcDAsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmN2dHFfZjY0X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfZjY0X3YoKGludDh4MTZfdClfX3JldjAsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZjdnRfZjY0X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2Y2NF92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZjdnRfZjY0X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2Y2NF92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdmN2dF9mNjRfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9mNjRfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZjdnRfZjY0X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjY0X3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZjdnRfZjY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dF9mNjRfZjMyKChpbnQ4eDhfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZjdnRfZjY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjY0X2YzMigoaW50OHg4X3QpX19yZXYwLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDY0eDJfdCBfX25vc3dhcF92Y3Z0X2Y2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjY0X2YzMigoaW50OHg4X3QpX19wMCwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZjdnRfaGlnaF9mMTZfZjMyKGZsb2F0MTZ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfZjE2KF9fcDAsIHZjdnRfZjE2X2YzMihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZjdnRfaGlnaF9mMTZfZjMyKGZsb2F0MTZ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9mMTYoX19yZXYwLCBfX25vc3dhcF92Y3Z0X2YxNl9mMzIoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2Y3Z0X2hpZ2hfZjMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZjdnRfZjMyX2YxNih2Z2V0X2hpZ2hfZjE2KF9fcDApKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdmN2dF9oaWdoX2YzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmN2dF9mMzJfZjE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9mMTYoX19yZXYwKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2Y3Z0X2hpZ2hfZjMyX2Y2NChmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX2YzMihfX3AwLCB2Y3Z0X2YzMl9mNjQoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2Y3Z0X2hpZ2hfZjMyX2Y2NChmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfZjMyKF9fcmV2MCwgX19ub3N3YXBfdmN2dF9mMzJfZjY0KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmN2dF9oaWdoX2Y2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2Y3Z0X2Y2NF9mMzIodmdldF9oaWdoX2YzMihfX3AwKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZjdnRfaGlnaF9mNjRfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZjdnRfZjY0X2YzMihfX25vc3dhcF92Z2V0X2hpZ2hfZjMyKF9fcmV2MCkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dHNfbl9mMzJfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19uX2YzMl91MzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0c19uX2YzMl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX25fZjMyX3UzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dHNfbl9mMzJfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX25fZjMyX3MzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRzX25fZjMyX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19uX2YzMl9zMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRxX25fZjY0X3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl9mNjRfdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRxX25fZjY0X3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX2Y2NF92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0cV9uX2Y2NF9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl9mNjRfdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRxX25fZjY0X3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl9mNjRfdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dF9uX2Y2NF91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl9mNjRfdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dF9uX2Y2NF91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl9mNjRfdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0X25fZjY0X3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fZjY0X3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dF9uX2Y2NF9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9uX2Y2NF92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dGRfbl9mNjRfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9uX2Y2NF91NjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0ZF9uX2Y2NF91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX25fZjY0X3U2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dGRfbl9mNjRfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX25fZjY0X3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRkX25fZjY0X3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9uX2Y2NF9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRzX25fczMyX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfbl9zMzJfZjMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dHNfbl9zMzJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19uX3MzMl9mMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRxX25fczY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl9zNjRfdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRxX25fczY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl9zNjRfdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dF9uX3M2NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl9zNjRfdigoaW50OHg4X3QpX19zMCwgX19wMSwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0X25fczY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9uX3M2NF92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dGRfbl9zNjRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9uX3M2NF9mNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0ZF9uX3M2NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX25fczY0X2Y2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dHNfbl91MzJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX25fdTMyX2YzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRzX25fdTMyX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19uX3UzMl9mMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRxX25fdTY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX3U2NF92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dHFfbl91NjRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fdTY0X3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRfbl91NjRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl91NjRfdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dF9uX3U2NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9uX3U2NF92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRkX25fdTY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9uX3U2NF9mNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0ZF9uX3U2NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dGRfbl91NjRfZjY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZjdnRzX3MzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfczMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2Y3Z0c19zMzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX3MzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2Y3Z0ZF9zNjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX3M2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmN2dGRfczY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9zNjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2Y3Z0cV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX3M2NF92KChpbnQ4eDE2X3QpX19wMCwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmN2dHFfczY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfczY0X3YoKGludDh4MTZfdClfX3JldjAsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2Y3Z0X3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9zNjRfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2Y3Z0X3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9zNjRfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmN2dHNfdTMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX3UzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjdnRzX3UzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c191MzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjdnRkX3U2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF91NjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y3Z0ZF91NjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dGRfdTY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjdnRxX3U2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV91NjRfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y3Z0cV91NjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX3U2NF92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjdnRfdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfdTY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y3Z0X3U2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X3U2NF92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2Y3Z0YXNfczMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXNfczMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2Y3Z0YXNfczMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXNfczMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjdnRhZF9zNjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhZF9zNjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZjdnRhZF9zNjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhZF9zNjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjdnRhc191MzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dGFzX3UzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjdnRhc191MzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dGFzX3UzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmN2dGFkX3U2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YWRfdTY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmN2dGFkX3U2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YWRfdTY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZjdnRtc19zMzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtc19zMzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZjdnRtc19zMzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtc19zMzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmN2dG1kX3M2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dG1kX3M2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmN2dG1kX3M2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dG1kX3M2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmN2dG1zX3UzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bXNfdTMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmN2dG1zX3UzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bXNfdTMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y3Z0bWRfdTY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtZF91NjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y3Z0bWRfdTY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtZF91NjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdmN2dG5zX3MzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dG5zX3MzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdmN2dG5zX3MzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dG5zX3MzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2Y3Z0bmRfczY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bmRfczY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2Y3Z0bmRfczY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bmRfczY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y3Z0bnNfdTMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuc191MzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y3Z0bnNfdTMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuc191MzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjdnRuZF91NjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dG5kX3U2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjdnRuZF91NjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dG5kX3U2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2Y3Z0cHNfczMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHNfczMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2Y3Z0cHNfczMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHNfczMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjdnRwZF9zNjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwZF9zNjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZjdnRwZF9zNjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwZF9zNjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjdnRwc191MzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dHBzX3UzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjdnRwc191MzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dHBzX3UzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmN2dHBkX3U2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cGRfdTY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmN2dHBkX3U2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cGRfdTY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdmN2dHhkX2YzMl9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnR4ZF9mMzJfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3QgdmN2dHhkX2YzMl9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnR4ZF9mMzJfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZjdnR4X2YzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnR4X2YzMl92KChpbnQ4eDE2X3QpX19wMCwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2Y3Z0eF9mMzJfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dHhfZjMyX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGZsb2F0MzJ4Ml90IF9fbm9zd2FwX3ZjdnR4X2YzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnR4X2YzMl92KChpbnQ4eDE2X3QpX19wMCwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZjdnR4X2hpZ2hfZjMyX2Y2NChmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX2YzMihfX3AwLCB2Y3Z0eF9mMzJfZjY0KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdmN2dHhfaGlnaF9mMzJfZjY0KGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9mMzIoX19yZXYwLCBfX25vc3dhcF92Y3Z0eF9mMzJfZjY0KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmRpdnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAvIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZkaXZxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC8gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdmRpdnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAvIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZkaXZxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC8gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdmRpdl9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC8gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdmRpdl9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC8gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2ZGl2X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2ZGl2X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC8gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cGJfbGFuZV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZV9pOCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwYl9sYW5lX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZV9pOCgoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cGhfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBoX2xhbmVfaTE2KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBoX2xhbmVfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBoX2xhbmVfaTE2KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwYl9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lX2k4KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBiX2xhbmVfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lX2k4KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwc19sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmR1cHNfbGFuZV9pMzIoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHNfbGFuZV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmR1cHNfbGFuZV9pMzIoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBkX2xhbmVfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwZF9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmR1cGRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwaF9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZV9pMTYoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGhfbGFuZV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZV9pMTYoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBiX2xhbmVfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBiX2xhbmVfaTgoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGJfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZV9pOCgoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cGRfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBkX2xhbmVfZjY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBkX2xhbmVfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lX2Y2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBzX2xhbmVfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lX2YzMigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwc19sYW5lX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmR1cHNfbGFuZV9mMzIoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBzX2xhbmVfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lX2kzMigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwc19sYW5lX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBzX2xhbmVfaTMyKChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwZF9sYW5lX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmR1cGRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGRfbGFuZV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBkX2xhbmVfaTY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cGhfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBoX2xhbmVfaTE2KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBoX2xhbmVfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZV9pMTYoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwYl9sYW5lcV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBiX2xhbmVxX2k4KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwYl9sYW5lcV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZXFfaTgoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwaF9sYW5lcV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBoX2xhbmVxX2kxNigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGhfbGFuZXFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBoX2xhbmVxX2kxNigoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBiX2xhbmVxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZXFfaTgoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBiX2xhbmVxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lcV9pOCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBzX2xhbmVxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmR1cHNfbGFuZXFfaTMyKChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwc19sYW5lcV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmR1cHNfbGFuZXFfaTMyKChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cGRfbGFuZXFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lcV9pNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBkX2xhbmVxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lcV9pNjQoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwaF9sYW5lcV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBoX2xhbmVxX2kxNigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGhfbGFuZXFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBoX2xhbmVxX2kxNigoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBiX2xhbmVxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZXFfaTgoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBiX2xhbmVxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBiX2xhbmVxX2k4KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cGRfbGFuZXFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lcV9mNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBkX2xhbmVxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmR1cGRfbGFuZXFfZjY0KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHNfbGFuZXFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lcV9mMzIoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBzX2xhbmVxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmR1cHNfbGFuZXFfZjMyKChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHNfbGFuZXFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lcV9pMzIoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBzX2xhbmVxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBzX2xhbmVxX2kzMigoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBkX2xhbmVxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmR1cGRfbGFuZXFfaTY0KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwZF9sYW5lcV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lcV9pNjQoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwaF9sYW5lcV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBoX2xhbmVxX2kxNigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGhfbGFuZXFfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZXFfaTE2KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZXFfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZXFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZXFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lcV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBwb2x5NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZXFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lcV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lcV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lcV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZXFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lcV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZXFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lcV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZXFfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZXFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZXFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lcV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lcV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZXFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lcV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZXFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lcV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZXFfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lcV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZXFfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZXFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZXFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZXFfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lcV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZXFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lcV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZXFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZXFfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lcV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZXFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZXFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZXFfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZkdXBfbl9wNjQocG9seTY0X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdmR1cF9uX3A2NChwb2x5NjRfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZkdXBxX25fcDY0KHBvbHk2NF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkge19fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZkdXBxX25fcDY0KHBvbHk2NF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkge19fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmR1cHFfbl9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSB7X19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZkdXBxX25fZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkge19fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdmR1cF9uX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdmR1cF9uX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0X3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0X3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRxX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dHFfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRxX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRxX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0Mik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0X2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2Zm1hcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2Zm1hcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQ2NHgyX3QgX19ub3N3YXBfdmZtYXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjR4Ml90IF9fcDIpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2Zm1hX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxLCBmbG9hdDY0eDFfdCBfX3AyKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmZtYV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdmZtYV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSwgZmxvYXQ2NHgxX3QgX19wMikgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQ2NHgxX3QgX19ub3N3YXBfdmZtYV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSwgZmxvYXQ2NHgxX3QgX19wMikgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYWRfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmZtYWRfbGFuZV9mNjQoX19zMCwgX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtYWRfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmZtYWRfbGFuZV9mNjQoX19zMCwgX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Zm1hZF9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hZF9sYW5lX2Y2NChfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbWFzX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFzX2xhbmVfZjMyKF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbWFzX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFzX2xhbmVfZjMyKF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3JldjIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Zm1hc19sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Zm1hc19sYW5lX2YzMihfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbWFxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmZtYXFfbGFuZV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMywgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtYXFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHg4X3QpX19zMiwgX19wMywgNDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmZtYXFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbWFxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmZtYXFfbGFuZV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMywgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtYXFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCBfX3AzLCA0MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Zm1hcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX2xhbmVfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfbGFuZV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbWFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZmbWFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbWFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbWFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCBfX3AzLCA5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZmbWFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYWRfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFkX2xhbmVxX2Y2NChfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtYWRfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFkX2xhbmVxX2Y2NChfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fcmV2MiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZmbWFkX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hZF9sYW5lcV9mNjQoX19zMCwgX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYXNfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFzX2xhbmVxX2YzMihfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtYXNfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFzX2xhbmVxX2YzMihfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fcmV2MiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZmbWFzX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Zm1hc19sYW5lcV9mMzIoX19zMCwgX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYXFfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmZtYXFfbGFuZXFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1hcV9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIF9fcDMsIDQyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZmbWFxX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX2xhbmVxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIChpbnQ4eDE2X3QpX19zMiwgX19wMywgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1hcV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lcV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbWFxX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX2xhbmVxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgX19wMywgNDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmZtYXFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmZtYXFfbGFuZXFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzLCA0MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbWFfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmZtYV9sYW5lcV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1hX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfbGFuZXFfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIChpbnQ4eDE2X3QpX19yZXYyLCBfX3AzLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZmbWFfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmZtYV9sYW5lcV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbWFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmZtYV9sYW5lcV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbWFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmZtYV9sYW5lcV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCBfX3AzLCA5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZmbWFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmZtYV9sYW5lcV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmZtYXFfbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NF90IF9fcDIpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdmZtYXFfZjY0KF9fcDAsIF9fcDEsIChmbG9hdDY0eDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmZtYXFfbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NF90IF9fcDIpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Zm1hcV9mNjQoX19yZXYwLCBfX3JldjEsIChmbG9hdDY0eDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZmbWFxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZmbWFxX2YzMihfX3AwLCBfX3AxLCAoZmxvYXQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZmbWFxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmZtYXFfZjMyKF9fcmV2MCwgX19yZXYxLCAoZmxvYXQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2Zm1hX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IHZmbWFfZjMyKF9fcDAsIF9fcDEsIChmbG9hdDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdmZtYV9uX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZmbWFfZjMyKF9fcmV2MCwgX19yZXYxLCAoZmxvYXQzMngyX3QpIHtfX3AyLCBfX3AyfSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2Zm1zcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2Zm1hcV9mNjQoX19wMCwgLV9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2Zm1zcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Zm1hcV9mNjQoX19yZXYwLCAtX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdmZtc19mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSwgZmxvYXQ2NHgxX3QgX19wMikgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSB2Zm1hX2Y2NChfX3AwLCAtX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZmbXNfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEsIGZsb2F0NjR4MV90IF9fcDIpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmZtYV9mNjQoX19wMCwgLV9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbXNkX2xhbmVfZjY0KF9fcDBfODgsIF9fcDFfODgsIF9fcDJfODgsIF9fcDNfODgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMF84OCA9IF9fcDBfODg7IFwKKyAgZmxvYXQ2NF90IF9fczFfODggPSBfX3AxXzg4OyBcCisgIGZsb2F0NjR4MV90IF9fczJfODggPSBfX3AyXzg4OyBcCisgIGZsb2F0NjRfdCBfX3JldF84ODsgXAorICBfX3JldF84OCA9IHZmbWFkX2xhbmVfZjY0KF9fczBfODgsIC1fX3MxXzg4LCBfX3MyXzg4LCBfX3AzXzg4KTsgXAorICBfX3JldF84ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbXNkX2xhbmVfZjY0KF9fcDBfODksIF9fcDFfODksIF9fcDJfODksIF9fcDNfODkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMF84OSA9IF9fcDBfODk7IFwKKyAgZmxvYXQ2NF90IF9fczFfODkgPSBfX3AxXzg5OyBcCisgIGZsb2F0NjR4MV90IF9fczJfODkgPSBfX3AyXzg5OyBcCisgIGZsb2F0NjRfdCBfX3JldF84OTsgXAorICBfX3JldF84OSA9IF9fbm9zd2FwX3ZmbWFkX2xhbmVfZjY0KF9fczBfODksIC1fX3MxXzg5LCBfX3MyXzg5LCBfX3AzXzg5KTsgXAorICBfX3JldF84OTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtc3NfbGFuZV9mMzIoX19wMF85MCwgX19wMV85MCwgX19wMl85MCwgX19wM185MCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwXzkwID0gX19wMF85MDsgXAorICBmbG9hdDMyX3QgX19zMV85MCA9IF9fcDFfOTA7IFwKKyAgZmxvYXQzMngyX3QgX19zMl85MCA9IF9fcDJfOTA7IFwKKyAgZmxvYXQzMl90IF9fcmV0XzkwOyBcCisgIF9fcmV0XzkwID0gdmZtYXNfbGFuZV9mMzIoX19zMF85MCwgLV9fczFfOTAsIF9fczJfOTAsIF9fcDNfOTApOyBcCisgIF9fcmV0XzkwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtc3NfbGFuZV9mMzIoX19wMF85MSwgX19wMV85MSwgX19wMl85MSwgX19wM185MSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwXzkxID0gX19wMF85MTsgXAorICBmbG9hdDMyX3QgX19zMV85MSA9IF9fcDFfOTE7IFwKKyAgZmxvYXQzMngyX3QgX19zMl85MSA9IF9fcDJfOTE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYyXzkxOyAgX19yZXYyXzkxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl85MSwgX19zMl85MSwgMSwgMCk7IFwKKyAgZmxvYXQzMl90IF9fcmV0XzkxOyBcCisgIF9fcmV0XzkxID0gX19ub3N3YXBfdmZtYXNfbGFuZV9mMzIoX19zMF85MSwgLV9fczFfOTEsIF9fcmV2Ml85MSwgX19wM185MSk7IFwKKyAgX19yZXRfOTE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbXNxX2xhbmVfZjY0KF9fcDBfOTIsIF9fcDFfOTIsIF9fcDJfOTIsIF9fcDNfOTIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwXzkyID0gX19wMF85MjsgXAorICBmbG9hdDY0eDJfdCBfX3MxXzkyID0gX19wMV85MjsgXAorICBmbG9hdDY0eDFfdCBfX3MyXzkyID0gX19wMl85MjsgXAorICBmbG9hdDY0eDJfdCBfX3JldF85MjsgXAorICBfX3JldF85MiA9IHZmbWFxX2xhbmVfZjY0KF9fczBfOTIsIC1fX3MxXzkyLCBfX3MyXzkyLCBfX3AzXzkyKTsgXAorICBfX3JldF85MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbXNxX2xhbmVfZjY0KF9fcDBfOTMsIF9fcDFfOTMsIF9fcDJfOTMsIF9fcDNfOTMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwXzkzID0gX19wMF85MzsgXAorICBmbG9hdDY0eDJfdCBfX3MxXzkzID0gX19wMV85MzsgXAorICBmbG9hdDY0eDFfdCBfX3MyXzkzID0gX19wMl85MzsgXAorICBmbG9hdDY0eDJfdCBfX3JldjBfOTM7ICBfX3JldjBfOTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzkzLCBfX3MwXzkzLCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjFfOTM7ICBfX3JldjFfOTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzkzLCBfX3MxXzkzLCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldF85MzsgXAorICBfX3JldF85MyA9IF9fbm9zd2FwX3ZmbWFxX2xhbmVfZjY0KF9fcmV2MF85MywgLV9fcmV2MV85MywgX19zMl85MywgX19wM185Myk7IFwKKyAgX19yZXRfOTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF85MywgX19yZXRfOTMsIDEsIDApOyBcCisgIF9fcmV0XzkzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1zcV9sYW5lX2YzMihfX3AwXzk0LCBfX3AxXzk0LCBfX3AyXzk0LCBfX3AzXzk0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMF85NCA9IF9fcDBfOTQ7IFwKKyAgZmxvYXQzMng0X3QgX19zMV85NCA9IF9fcDFfOTQ7IFwKKyAgZmxvYXQzMngyX3QgX19zMl85NCA9IF9fcDJfOTQ7IFwKKyAgZmxvYXQzMng0X3QgX19yZXRfOTQ7IFwKKyAgX19yZXRfOTQgPSB2Zm1hcV9sYW5lX2YzMihfX3MwXzk0LCAtX19zMV85NCwgX19zMl85NCwgX19wM185NCk7IFwKKyAgX19yZXRfOTQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1zcV9sYW5lX2YzMihfX3AwXzk1LCBfX3AxXzk1LCBfX3AyXzk1LCBfX3AzXzk1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMF85NSA9IF9fcDBfOTU7IFwKKyAgZmxvYXQzMng0X3QgX19zMV85NSA9IF9fcDFfOTU7IFwKKyAgZmxvYXQzMngyX3QgX19zMl85NSA9IF9fcDJfOTU7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwXzk1OyAgX19yZXYwXzk1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF85NSwgX19zMF85NSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxXzk1OyAgX19yZXYxXzk1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV85NSwgX19zMV85NSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYyXzk1OyAgX19yZXYyXzk1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl85NSwgX19zMl85NSwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXRfOTU7IFwKKyAgX19yZXRfOTUgPSBfX25vc3dhcF92Zm1hcV9sYW5lX2YzMihfX3JldjBfOTUsIC1fX3JldjFfOTUsIF9fcmV2Ml85NSwgX19wM185NSk7IFwKKyAgX19yZXRfOTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF85NSwgX19yZXRfOTUsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0Xzk1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1zX2xhbmVfZjY0KF9fcDBfOTYsIF9fcDFfOTYsIF9fcDJfOTYsIF9fcDNfOTYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwXzk2ID0gX19wMF85NjsgXAorICBmbG9hdDY0eDFfdCBfX3MxXzk2ID0gX19wMV85NjsgXAorICBmbG9hdDY0eDFfdCBfX3MyXzk2ID0gX19wMl85NjsgXAorICBmbG9hdDY0eDFfdCBfX3JldF85NjsgXAorICBfX3JldF85NiA9IHZmbWFfbGFuZV9mNjQoX19zMF85NiwgLV9fczFfOTYsIF9fczJfOTYsIF9fcDNfOTYpOyBcCisgIF9fcmV0Xzk2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtc19sYW5lX2Y2NChfX3AwXzk3LCBfX3AxXzk3LCBfX3AyXzk3LCBfX3AzXzk3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMF85NyA9IF9fcDBfOTc7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMV85NyA9IF9fcDFfOTc7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMl85NyA9IF9fcDJfOTc7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXRfOTc7IFwKKyAgX19yZXRfOTcgPSBfX25vc3dhcF92Zm1hX2xhbmVfZjY0KF9fczBfOTcsIC1fX3MxXzk3LCBfX3MyXzk3LCBfX3AzXzk3KTsgXAorICBfX3JldF85NzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtc19sYW5lX2YzMihfX3AwXzk4LCBfX3AxXzk4LCBfX3AyXzk4LCBfX3AzXzk4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMF85OCA9IF9fcDBfOTg7IFwKKyAgZmxvYXQzMngyX3QgX19zMV85OCA9IF9fcDFfOTg7IFwKKyAgZmxvYXQzMngyX3QgX19zMl85OCA9IF9fcDJfOTg7IFwKKyAgZmxvYXQzMngyX3QgX19yZXRfOTg7IFwKKyAgX19yZXRfOTggPSB2Zm1hX2xhbmVfZjMyKF9fczBfOTgsIC1fX3MxXzk4LCBfX3MyXzk4LCBfX3AzXzk4KTsgXAorICBfX3JldF85ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbXNfbGFuZV9mMzIoX19wMF85OSwgX19wMV85OSwgX19wMl85OSwgX19wM185OSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczBfOTkgPSBfX3AwXzk5OyBcCisgIGZsb2F0MzJ4Ml90IF9fczFfOTkgPSBfX3AxXzk5OyBcCisgIGZsb2F0MzJ4Ml90IF9fczJfOTkgPSBfX3AyXzk5OyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MF85OTsgIF9fcmV2MF85OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfOTksIF9fczBfOTksIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MV85OTsgIF9fcmV2MV85OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfOTksIF9fczFfOTksIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2Ml85OTsgIF9fcmV2Ml85OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfOTksIF9fczJfOTksIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0Xzk5OyBcCisgIF9fcmV0Xzk5ID0gX19ub3N3YXBfdmZtYV9sYW5lX2YzMihfX3JldjBfOTksIC1fX3JldjFfOTksIF9fcmV2Ml85OSwgX19wM185OSk7IFwKKyAgX19yZXRfOTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF85OSwgX19yZXRfOTksIDEsIDApOyBcCisgIF9fcmV0Xzk5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1zZF9sYW5lcV9mNjQoX19wMF8xMDAsIF9fcDFfMTAwLCBfX3AyXzEwMCwgX19wM18xMDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMF8xMDAgPSBfX3AwXzEwMDsgXAorICBmbG9hdDY0X3QgX19zMV8xMDAgPSBfX3AxXzEwMDsgXAorICBmbG9hdDY0eDJfdCBfX3MyXzEwMCA9IF9fcDJfMTAwOyBcCisgIGZsb2F0NjRfdCBfX3JldF8xMDA7IFwKKyAgX19yZXRfMTAwID0gdmZtYWRfbGFuZXFfZjY0KF9fczBfMTAwLCAtX19zMV8xMDAsIF9fczJfMTAwLCBfX3AzXzEwMCk7IFwKKyAgX19yZXRfMTAwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtc2RfbGFuZXFfZjY0KF9fcDBfMTAxLCBfX3AxXzEwMSwgX19wMl8xMDEsIF9fcDNfMTAxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczBfMTAxID0gX19wMF8xMDE7IFwKKyAgZmxvYXQ2NF90IF9fczFfMTAxID0gX19wMV8xMDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMl8xMDEgPSBfX3AyXzEwMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjJfMTAxOyAgX19yZXYyXzEwMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTAxLCBfX3MyXzEwMSwgMSwgMCk7IFwKKyAgZmxvYXQ2NF90IF9fcmV0XzEwMTsgXAorICBfX3JldF8xMDEgPSBfX25vc3dhcF92Zm1hZF9sYW5lcV9mNjQoX19zMF8xMDEsIC1fX3MxXzEwMSwgX19yZXYyXzEwMSwgX19wM18xMDEpOyBcCisgIF9fcmV0XzEwMTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtc3NfbGFuZXFfZjMyKF9fcDBfMTAyLCBfX3AxXzEwMiwgX19wMl8xMDIsIF9fcDNfMTAyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczBfMTAyID0gX19wMF8xMDI7IFwKKyAgZmxvYXQzMl90IF9fczFfMTAyID0gX19wMV8xMDI7IFwKKyAgZmxvYXQzMng0X3QgX19zMl8xMDIgPSBfX3AyXzEwMjsgXAorICBmbG9hdDMyX3QgX19yZXRfMTAyOyBcCisgIF9fcmV0XzEwMiA9IHZmbWFzX2xhbmVxX2YzMihfX3MwXzEwMiwgLV9fczFfMTAyLCBfX3MyXzEwMiwgX19wM18xMDIpOyBcCisgIF9fcmV0XzEwMjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbXNzX2xhbmVxX2YzMihfX3AwXzEwMywgX19wMV8xMDMsIF9fcDJfMTAzLCBfX3AzXzEwMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwXzEwMyA9IF9fcDBfMTAzOyBcCisgIGZsb2F0MzJfdCBfX3MxXzEwMyA9IF9fcDFfMTAzOyBcCisgIGZsb2F0MzJ4NF90IF9fczJfMTAzID0gX19wMl8xMDM7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYyXzEwMzsgIF9fcmV2Ml8xMDMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzEwMywgX19zMl8xMDMsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJfdCBfX3JldF8xMDM7IFwKKyAgX19yZXRfMTAzID0gX19ub3N3YXBfdmZtYXNfbGFuZXFfZjMyKF9fczBfMTAzLCAtX19zMV8xMDMsIF9fcmV2Ml8xMDMsIF9fcDNfMTAzKTsgXAorICBfX3JldF8xMDM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbXNxX2xhbmVxX2Y2NChfX3AwXzEwNCwgX19wMV8xMDQsIF9fcDJfMTA0LCBfX3AzXzEwNCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczBfMTA0ID0gX19wMF8xMDQ7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMV8xMDQgPSBfX3AxXzEwNDsgXAorICBmbG9hdDY0eDJfdCBfX3MyXzEwNCA9IF9fcDJfMTA0OyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0XzEwNDsgXAorICBfX3JldF8xMDQgPSB2Zm1hcV9sYW5lcV9mNjQoX19zMF8xMDQsIC1fX3MxXzEwNCwgX19zMl8xMDQsIF9fcDNfMTA0KTsgXAorICBfX3JldF8xMDQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1zcV9sYW5lcV9mNjQoX19wMF8xMDUsIF9fcDFfMTA1LCBfX3AyXzEwNSwgX19wM18xMDUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwXzEwNSA9IF9fcDBfMTA1OyBcCisgIGZsb2F0NjR4Ml90IF9fczFfMTA1ID0gX19wMV8xMDU7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMl8xMDUgPSBfX3AyXzEwNTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjBfMTA1OyAgX19yZXYwXzEwNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTA1LCBfX3MwXzEwNSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxXzEwNTsgIF9fcmV2MV8xMDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzEwNSwgX19zMV8xMDUsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2Ml8xMDU7ICBfX3JldjJfMTA1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8xMDUsIF9fczJfMTA1LCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldF8xMDU7IFwKKyAgX19yZXRfMTA1ID0gX19ub3N3YXBfdmZtYXFfbGFuZXFfZjY0KF9fcmV2MF8xMDUsIC1fX3JldjFfMTA1LCBfX3JldjJfMTA1LCBfX3AzXzEwNSk7IFwKKyAgX19yZXRfMTA1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTA1LCBfX3JldF8xMDUsIDEsIDApOyBcCisgIF9fcmV0XzEwNTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtc3FfbGFuZXFfZjMyKF9fcDBfMTA2LCBfX3AxXzEwNiwgX19wMl8xMDYsIF9fcDNfMTA2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMF8xMDYgPSBfX3AwXzEwNjsgXAorICBmbG9hdDMyeDRfdCBfX3MxXzEwNiA9IF9fcDFfMTA2OyBcCisgIGZsb2F0MzJ4NF90IF9fczJfMTA2ID0gX19wMl8xMDY7IFwKKyAgZmxvYXQzMng0X3QgX19yZXRfMTA2OyBcCisgIF9fcmV0XzEwNiA9IHZmbWFxX2xhbmVxX2YzMihfX3MwXzEwNiwgLV9fczFfMTA2LCBfX3MyXzEwNiwgX19wM18xMDYpOyBcCisgIF9fcmV0XzEwNjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbXNxX2xhbmVxX2YzMihfX3AwXzEwNywgX19wMV8xMDcsIF9fcDJfMTA3LCBfX3AzXzEwNykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczBfMTA3ID0gX19wMF8xMDc7IFwKKyAgZmxvYXQzMng0X3QgX19zMV8xMDcgPSBfX3AxXzEwNzsgXAorICBmbG9hdDMyeDRfdCBfX3MyXzEwNyA9IF9fcDJfMTA3OyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MF8xMDc7ICBfX3JldjBfMTA3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xMDcsIF9fczBfMTA3LCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjFfMTA3OyAgX19yZXYxXzEwNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTA3LCBfX3MxXzEwNywgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYyXzEwNzsgIF9fcmV2Ml8xMDcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzEwNywgX19zMl8xMDcsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0XzEwNzsgXAorICBfX3JldF8xMDcgPSBfX25vc3dhcF92Zm1hcV9sYW5lcV9mMzIoX19yZXYwXzEwNywgLV9fcmV2MV8xMDcsIF9fcmV2Ml8xMDcsIF9fcDNfMTA3KTsgXAorICBfX3JldF8xMDcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMDcsIF9fcmV0XzEwNywgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTA3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1zX2xhbmVxX2Y2NChfX3AwXzEwOCwgX19wMV8xMDgsIF9fcDJfMTA4LCBfX3AzXzEwOCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczBfMTA4ID0gX19wMF8xMDg7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMV8xMDggPSBfX3AxXzEwODsgXAorICBmbG9hdDY0eDJfdCBfX3MyXzEwOCA9IF9fcDJfMTA4OyBcCisgIGZsb2F0NjR4MV90IF9fcmV0XzEwODsgXAorICBfX3JldF8xMDggPSB2Zm1hX2xhbmVxX2Y2NChfX3MwXzEwOCwgLV9fczFfMTA4LCBfX3MyXzEwOCwgX19wM18xMDgpOyBcCisgIF9fcmV0XzEwODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbXNfbGFuZXFfZjY0KF9fcDBfMTA5LCBfX3AxXzEwOSwgX19wMl8xMDksIF9fcDNfMTA5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMF8xMDkgPSBfX3AwXzEwOTsgXAorICBmbG9hdDY0eDFfdCBfX3MxXzEwOSA9IF9fcDFfMTA5OyBcCisgIGZsb2F0NjR4Ml90IF9fczJfMTA5ID0gX19wMl8xMDk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYyXzEwOTsgIF9fcmV2Ml8xMDkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzEwOSwgX19zMl8xMDksIDEsIDApOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0XzEwOTsgXAorICBfX3JldF8xMDkgPSBfX25vc3dhcF92Zm1hX2xhbmVxX2Y2NChfX3MwXzEwOSwgLV9fczFfMTA5LCBfX3JldjJfMTA5LCBfX3AzXzEwOSk7IFwKKyAgX19yZXRfMTA5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1zX2xhbmVxX2YzMihfX3AwXzExMCwgX19wMV8xMTAsIF9fcDJfMTEwLCBfX3AzXzExMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczBfMTEwID0gX19wMF8xMTA7IFwKKyAgZmxvYXQzMngyX3QgX19zMV8xMTAgPSBfX3AxXzExMDsgXAorICBmbG9hdDMyeDRfdCBfX3MyXzExMCA9IF9fcDJfMTEwOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0XzExMDsgXAorICBfX3JldF8xMTAgPSB2Zm1hX2xhbmVxX2YzMihfX3MwXzExMCwgLV9fczFfMTEwLCBfX3MyXzExMCwgX19wM18xMTApOyBcCisgIF9fcmV0XzExMDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbXNfbGFuZXFfZjMyKF9fcDBfMTExLCBfX3AxXzExMSwgX19wMl8xMTEsIF9fcDNfMTExKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMF8xMTEgPSBfX3AwXzExMTsgXAorICBmbG9hdDMyeDJfdCBfX3MxXzExMSA9IF9fcDFfMTExOyBcCisgIGZsb2F0MzJ4NF90IF9fczJfMTExID0gX19wMl8xMTE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwXzExMTsgIF9fcmV2MF8xMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzExMSwgX19zMF8xMTEsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MV8xMTE7ICBfX3JldjFfMTExID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xMTEsIF9fczFfMTExLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjJfMTExOyAgX19yZXYyXzExMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTExLCBfX3MyXzExMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXRfMTExOyBcCisgIF9fcmV0XzExMSA9IF9fbm9zd2FwX3ZmbWFfbGFuZXFfZjMyKF9fcmV2MF8xMTEsIC1fX3JldjFfMTExLCBfX3JldjJfMTExLCBfX3AzXzExMSk7IFwKKyAgX19yZXRfMTExID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTExLCBfX3JldF8xMTEsIDEsIDApOyBcCisgIF9fcmV0XzExMTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmZtc3Ffbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NF90IF9fcDIpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdmZtYXFfZjY0KF9fcDAsIC1fX3AxLCAoZmxvYXQ2NHgyX3QpIHtfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZmbXNxX25fZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjRfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmZtYXFfZjY0KF9fcmV2MCwgLV9fcmV2MSwgKGZsb2F0NjR4Ml90KSB7X19wMiwgX19wMn0pOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdmZtc3Ffbl9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmZtYXFfZjMyKF9fcDAsIC1fX3AxLCAoZmxvYXQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZmbXNxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmZtYXFfZjMyKF9fcmV2MCwgLV9fcmV2MSwgKGZsb2F0MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdmZtc19uX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSB2Zm1hX2YzMihfX3AwLCAtX19wMSwgKGZsb2F0MzJ4Ml90KSB7X19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2Zm1zX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmZtYV9mMzIoX19yZXYwLCAtX19yZXYxLCAoZmxvYXQzMngyX3QpIHtfX3AyLCBfX3AyfSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZnZXRfaGlnaF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdmdldF9oaWdoX3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgcG9seTY0eDFfdCBfX25vc3dhcF92Z2V0X2hpZ2hfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZnZXRfaGlnaF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdmdldF9oaWdoX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjRfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0X2xhbmVfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldF9sYW5lX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjRfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRxX2xhbmVfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k2NCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldHFfbGFuZV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBwb2x5NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pNjQoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldHFfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfZjY0KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0cV9sYW5lX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9mNjQoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9mNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2Y2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0X2xhbmVfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfZjY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldF9sYW5lX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2Y2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdmdldF9sb3dfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZnZXRfbG93X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdmdldF9sb3dfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZnZXRfbG93X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCAzOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgNDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgMzgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA0Mik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0Mik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3A4X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfcDhfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3A2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9wNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9wMTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfcDE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3A4X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDM2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3A4X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDM2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfcDY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3A2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3AxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9wMTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV91OF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91OF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3UzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91MzJfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgNTApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV91NjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfdTY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfdTE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3UxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3M4X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfczhfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2Y2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZjY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2YzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZjMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2YxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgNDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZjE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3MzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3MzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfczY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfczY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9zMTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9zMTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfdThfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfdThfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV91MzJfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3UzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDE4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV91NjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3U2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV91MTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3UxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9zOF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfczhfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZjY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZjY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9mMzJfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2YzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCA5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9mMTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2YxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9zMzJfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zMzJfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3M2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3M2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfczE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfczE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9wOF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3A4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfcDY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3A2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3AxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9wMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3A4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDM2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3A4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDM2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3A2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9wNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfcDE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3AxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV91OF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91OF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV91MzJfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfdTMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3U2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91NjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNTEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfdTE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3UxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9zOF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3M4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZjY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9mNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2YzMl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZjMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9mMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2YxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfczMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfczMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfczY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfczY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfczE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfczE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzMpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV91OF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91OF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMTYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV91MzJfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3UzMl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDE4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfdTY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91NjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfdTE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91MTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3M4X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zOF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZjY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZjY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9mMzJfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2YzMl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCA5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZjE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9mMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3MzMl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3MzMl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3M2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3M2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfczE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfczE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfcDhfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9wOF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9wNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfcDY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfcDE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3AxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3A4X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDM2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3A4X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDM2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9wNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfcDY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9wMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfcDE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV91OF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91OF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfdTMyX3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3UzMl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfdTY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3U2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfdTE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3UxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfczhfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9zOF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9mNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2Y2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2YzMl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZjMyX3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZjE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9mMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9zMzJfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9zMzJfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfczY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfczY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3MxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3MxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDMzKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3U4X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3U4X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV91MzJfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3UzMl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDE4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3U2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfdTY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3UxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfdTE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMTcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfczhfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3M4X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZjY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZjY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9mMzJfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2YzMl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCA5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2YxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZjE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfczMyX3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfczMyX3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3M2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3M2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfczE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfczE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNTEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDM2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9kdXBfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNTApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2R1cF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2R1cF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgX19wMiwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDM2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMzYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgcG9seTY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCAzOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCA0OCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICB1aW50NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDUxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCAzMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBmbG9hdDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDQyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBpbnQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCAzNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9kdXBfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9kdXBfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9kdXBfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNTApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNTEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgMzYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDM2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBwb2x5NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMzgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIHVpbnQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCA1MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMzIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBmbG9hdDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDQyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIGludDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDM1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9kdXBfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgMzYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMzYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBwb2x5NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCAzOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCA0OCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIHVpbnQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDUxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCAzMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCA0Mik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIGludDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDM1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGRycV9wMTI4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTI4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTEyOF90KSBfX2J1aWx0aW5fbmVvbl92bGRycV9wMTI4KF9fcDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkcnFfcDEyOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTEyOF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxMjhfdCkgX19idWlsdGluX25lb25fdmxkcnFfcDEyOChfX3AwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3Qgdm1heHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZtYXhxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3Qgdm1heF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3Qgdm1heF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3Qgdm1heG5tdnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubXZxX2Y2NCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3Qgdm1heG5tdnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4bm12cV9mNjQoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2bWF4bm12cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1heG5tdnFfZjMyKChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2bWF4bm12cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubXZxX2YzMigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZtYXhubXZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubXZfZjMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZtYXhubXZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4bm12X2YzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OF90IHZtYXh2cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdm1heHZxX3U4KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4X3Qgdm1heHZxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfdTgoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZtYXh2cV91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdm1heHZxX3UzMigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2bWF4dnFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV91MzIoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNl90IHZtYXh2cV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdm1heHZxX3UxNigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZfdCB2bWF4dnFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV91MTYoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDhfdCB2bWF4dnFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV9zOCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4X3Qgdm1heHZxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV9zOCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NF90IHZtYXh2cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdm1heHZxX2Y2NCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3Qgdm1heHZxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdm1heHZxX2Y2NCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZtYXh2cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1heHZxX2YzMigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3Qgdm1heHZxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1heHZxX2YzMigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2bWF4dnFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV9zMzIoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2bWF4dnFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdm1heHZxX3MzMigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2bWF4dnFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV9zMTYoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2bWF4dnFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdm1heHZxX3MxNigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDhfdCB2bWF4dl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl91OCgoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4X3Qgdm1heHZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl91OCgoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2bWF4dl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdm1heHZfdTMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3Qgdm1heHZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2X3UzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZfdCB2bWF4dl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdm1heHZfdTE2KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2X3Qgdm1heHZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2X3UxNigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4X3Qgdm1heHZfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdm1heHZfczgoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4X3Qgdm1heHZfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2X3M4KChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2bWF4dl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1heHZfZjMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZtYXh2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1heHZfZjMyKChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3Qgdm1heHZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2X3MzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3Qgdm1heHZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdm1heHZfczMyKChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3Qgdm1heHZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2X3MxNigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3Qgdm1heHZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdm1heHZfczE2KChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZtaW5xX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2bWlucV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZtaW5fZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZtaW5fZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NF90IHZtaW5ubXZxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92bWlubm12cV9mNjQoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZtaW5ubXZxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdm1pbm5tdnFfZjY0KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3Qgdm1pbm5tdnFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubXZxX2YzMigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3Qgdm1pbm5tdnFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWlubm12cV9mMzIoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2bWlubm12X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWlubm12X2YzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2bWlubm12X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1pbm5tdl9mMzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDhfdCB2bWludnFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV91OCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OF90IHZtaW52cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3U4KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2bWludnFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV91MzIoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3Qgdm1pbnZxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfdTMyKChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZfdCB2bWludnFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV91MTYoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2X3Qgdm1pbnZxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfdTE2KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4X3Qgdm1pbnZxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfczgoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZtaW52cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfczgoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2bWludnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV9mNjQoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZtaW52cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV9mNjQoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2bWludnFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV9mMzIoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZtaW52cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV9mMzIoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3Qgdm1pbnZxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfczMyKChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3Qgdm1pbnZxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV9zMzIoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3Qgdm1pbnZxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfczE2KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3Qgdm1pbnZxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV9zMTYoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4X3Qgdm1pbnZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdm1pbnZfdTgoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OF90IHZtaW52X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdm1pbnZfdTgoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3Qgdm1pbnZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3UzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZtaW52X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWludl91MzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2X3Qgdm1pbnZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3UxNigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNl90IHZtaW52X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWludl91MTYoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OF90IHZtaW52X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3M4KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZtaW52X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWludl9zOCgoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3Qgdm1pbnZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X2YzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2bWludl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X2YzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZtaW52X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWludl9zMzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZtaW52X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3MzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZtaW52X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWludl9zMTYoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZtaW52X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3MxNigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2bWxhcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZtbGFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZtbGFfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEsIGZsb2F0NjR4MV90IF9fcDIpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2bWxhX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxLCBmbG9hdDY0eDFfdCBfX3AyKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhcV9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYXFfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYXFfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFxX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFxX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYXFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYXFfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYXFfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZtbGFxX25fZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjRfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogKGZsb2F0NjR4Ml90KSB7X19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZtbGFxX25fZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjRfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogKGZsb2F0NjR4Ml90KSB7X19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIHZtdWxsX3UzMih2Z2V0X2hpZ2hfdTMyKF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfdTMyKF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgdm11bGxfdTE2KHZnZXRfaGlnaF91MTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MTYoX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIHZtdWxsX3MzMih2Z2V0X2hpZ2hfczMyKF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIHZtdWxsX3MxNih2Z2V0X2hpZ2hfczE2KF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgdm11bGxfdTMyKHZnZXRfaGlnaF91MzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfdTMyKF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIHZtdWxsX3UxNih2Z2V0X2hpZ2hfdTE2KF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UxNihfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIHZtdWxsX3MzMih2Z2V0X2hpZ2hfczMyKF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfczMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgdm11bGxfczE2KHZnZXRfaGlnaF9zMTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYWxfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIHZtdWxsX3UzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhbF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYWxfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIHZtdWxsX3UxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhbF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYWxfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgdm11bGxfczMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIHZtdWxsX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhbF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2bWxzcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZtbHNxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZtbHNfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEsIGZsb2F0NjR4MV90IF9fcDIpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2bWxzX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxLCBmbG9hdDY0eDFfdCBfX3AyKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzcV9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc3FfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc3FfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNxX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNxX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc3FfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc3FfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc3FfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc19sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc19sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc19sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZtbHNxX25fZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjRfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogKGZsb2F0NjR4Ml90KSB7X19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZtbHNxX25fZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjRfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogKGZsb2F0NjR4Ml90KSB7X19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIHZtdWxsX3UzMih2Z2V0X2hpZ2hfdTMyKF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTMyKF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gdm11bGxfdTE2KHZnZXRfaGlnaF91MTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF91MTYoX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIHZtdWxsX3MzMih2Z2V0X2hpZ2hfczMyKF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIHZtdWxsX3MxNih2Z2V0X2hpZ2hfczE2KF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gdm11bGxfdTMyKHZnZXRfaGlnaF91MzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTMyKF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIHZtdWxsX3UxNih2Z2V0X2hpZ2hfdTE2KF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UxNihfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIHZtdWxsX3MzMih2Z2V0X2hpZ2hfczMyKF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gdm11bGxfczE2KHZnZXRfaGlnaF9zMTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc2xfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIHZtdWxsX3UzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzbF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF91MzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc2xfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIHZtdWxsX3UxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzbF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF91MTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc2xfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gdm11bGxfczMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIHZtdWxsX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzbF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZtb3Zfbl9wNjQocG9seTY0X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3Qgdm1vdl9uX3A2NChwb2x5NjRfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZtb3ZxX25fcDY0KHBvbHk2NF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkge19fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZtb3ZxX25fcDY0KHBvbHk2NF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkge19fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3Qgdm1vdnFfbl9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSB7X19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZtb3ZxX25fZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkge19fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3Qgdm1vdl9uX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3Qgdm1vdl9uX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtb3ZsX2hpZ2hfdTgodWludDh4MTZfdCBfX3AwXzExMikgeworICB1aW50MTZ4OF90IF9fcmV0XzExMjsKKyAgdWludDh4OF90IF9fYTFfMTEyID0gdmdldF9oaWdoX3U4KF9fcDBfMTEyKTsKKyAgX19yZXRfMTEyID0gKHVpbnQxNng4X3QpKHZzaGxsX25fdTgoX19hMV8xMTIsIDApKTsKKyAgcmV0dXJuIF9fcmV0XzExMjsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1vdmxfaGlnaF91OCh1aW50OHgxNl90IF9fcDBfMTEzKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwXzExMzsgIF9fcmV2MF8xMTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwXzExMywgX19wMF8xMTMsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0XzExMzsKKyAgdWludDh4OF90IF9fYTFfMTEzID0gX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcmV2MF8xMTMpOworICBfX3JldF8xMTMgPSAodWludDE2eDhfdCkoX19ub3N3YXBfdnNobGxfbl91OChfX2ExXzExMywgMCkpOworICBfX3JldF8xMTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMTMsIF9fcmV0XzExMywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldF8xMTM7Cit9CitfX2FpIHVpbnQxNng4X3QgX19ub3N3YXBfdm1vdmxfaGlnaF91OCh1aW50OHgxNl90IF9fcDBfMTE0KSB7CisgIHVpbnQxNng4X3QgX19yZXRfMTE0OworICB1aW50OHg4X3QgX19hMV8xMTQgPSBfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19wMF8xMTQpOworICBfX3JldF8xMTQgPSAodWludDE2eDhfdCkoX19ub3N3YXBfdnNobGxfbl91OChfX2ExXzExNCwgMCkpOworICByZXR1cm4gX19yZXRfMTE0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZtb3ZsX2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMF8xMTUpIHsKKyAgdWludDY0eDJfdCBfX3JldF8xMTU7CisgIHVpbnQzMngyX3QgX19hMV8xMTUgPSB2Z2V0X2hpZ2hfdTMyKF9fcDBfMTE1KTsKKyAgX19yZXRfMTE1ID0gKHVpbnQ2NHgyX3QpKHZzaGxsX25fdTMyKF9fYTFfMTE1LCAwKSk7CisgIHJldHVybiBfX3JldF8xMTU7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZtb3ZsX2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMF8xMTYpIHsKKyAgdWludDMyeDRfdCBfX3JldjBfMTE2OyAgX19yZXYwXzExNiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDBfMTE2LCBfX3AwXzExNiwgMywgMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXRfMTE2OworICB1aW50MzJ4Ml90IF9fYTFfMTE2ID0gX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjBfMTE2KTsKKyAgX19yZXRfMTE2ID0gKHVpbnQ2NHgyX3QpKF9fbm9zd2FwX3ZzaGxsX25fdTMyKF9fYTFfMTE2LCAwKSk7CisgIF9fcmV0XzExNiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzExNiwgX19yZXRfMTE2LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0XzExNjsKK30KK19fYWkgdWludDY0eDJfdCBfX25vc3dhcF92bW92bF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDBfMTE3KSB7CisgIHVpbnQ2NHgyX3QgX19yZXRfMTE3OworICB1aW50MzJ4Ml90IF9fYTFfMTE3ID0gX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3AwXzExNyk7CisgIF9fcmV0XzExNyA9ICh1aW50NjR4Ml90KShfX25vc3dhcF92c2hsbF9uX3UzMihfX2ExXzExNywgMCkpOworICByZXR1cm4gX19yZXRfMTE3OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtb3ZsX2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMF8xMTgpIHsKKyAgdWludDMyeDRfdCBfX3JldF8xMTg7CisgIHVpbnQxNng0X3QgX19hMV8xMTggPSB2Z2V0X2hpZ2hfdTE2KF9fcDBfMTE4KTsKKyAgX19yZXRfMTE4ID0gKHVpbnQzMng0X3QpKHZzaGxsX25fdTE2KF9fYTFfMTE4LCAwKSk7CisgIHJldHVybiBfX3JldF8xMTg7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtb3ZsX2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMF8xMTkpIHsKKyAgdWludDE2eDhfdCBfX3JldjBfMTE5OyAgX19yZXYwXzExOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDBfMTE5LCBfX3AwXzExOSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXRfMTE5OworICB1aW50MTZ4NF90IF9fYTFfMTE5ID0gX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjBfMTE5KTsKKyAgX19yZXRfMTE5ID0gKHVpbnQzMng0X3QpKF9fbm9zd2FwX3ZzaGxsX25fdTE2KF9fYTFfMTE5LCAwKSk7CisgIF9fcmV0XzExOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzExOSwgX19yZXRfMTE5LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0XzExOTsKK30KK19fYWkgdWludDMyeDRfdCBfX25vc3dhcF92bW92bF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDBfMTIwKSB7CisgIHVpbnQzMng0X3QgX19yZXRfMTIwOworICB1aW50MTZ4NF90IF9fYTFfMTIwID0gX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3AwXzEyMCk7CisgIF9fcmV0XzEyMCA9ICh1aW50MzJ4NF90KShfX25vc3dhcF92c2hsbF9uX3UxNihfX2ExXzEyMCwgMCkpOworICByZXR1cm4gX19yZXRfMTIwOworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm1vdmxfaGlnaF9zOChpbnQ4eDE2X3QgX19wMF8xMjEpIHsKKyAgaW50MTZ4OF90IF9fcmV0XzEyMTsKKyAgaW50OHg4X3QgX19hMV8xMjEgPSB2Z2V0X2hpZ2hfczgoX19wMF8xMjEpOworICBfX3JldF8xMjEgPSAoaW50MTZ4OF90KSh2c2hsbF9uX3M4KF9fYTFfMTIxLCAwKSk7CisgIHJldHVybiBfX3JldF8xMjE7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm1vdmxfaGlnaF9zOChpbnQ4eDE2X3QgX19wMF8xMjIpIHsKKyAgaW50OHgxNl90IF9fcmV2MF8xMjI7ICBfX3JldjBfMTIyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMF8xMjIsIF9fcDBfMTIyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0XzEyMjsKKyAgaW50OHg4X3QgX19hMV8xMjIgPSBfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19yZXYwXzEyMik7CisgIF9fcmV0XzEyMiA9IChpbnQxNng4X3QpKF9fbm9zd2FwX3ZzaGxsX25fczgoX19hMV8xMjIsIDApKTsKKyAgX19yZXRfMTIyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTIyLCBfX3JldF8xMjIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXRfMTIyOworfQorX19haSBpbnQxNng4X3QgX19ub3N3YXBfdm1vdmxfaGlnaF9zOChpbnQ4eDE2X3QgX19wMF8xMjMpIHsKKyAgaW50MTZ4OF90IF9fcmV0XzEyMzsKKyAgaW50OHg4X3QgX19hMV8xMjMgPSBfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19wMF8xMjMpOworICBfX3JldF8xMjMgPSAoaW50MTZ4OF90KShfX25vc3dhcF92c2hsbF9uX3M4KF9fYTFfMTIzLCAwKSk7CisgIHJldHVybiBfX3JldF8xMjM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2bW92bF9oaWdoX3MzMihpbnQzMng0X3QgX19wMF8xMjQpIHsKKyAgaW50NjR4Ml90IF9fcmV0XzEyNDsKKyAgaW50MzJ4Ml90IF9fYTFfMTI0ID0gdmdldF9oaWdoX3MzMihfX3AwXzEyNCk7CisgIF9fcmV0XzEyNCA9IChpbnQ2NHgyX3QpKHZzaGxsX25fczMyKF9fYTFfMTI0LCAwKSk7CisgIHJldHVybiBfX3JldF8xMjQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3Qgdm1vdmxfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDBfMTI1KSB7CisgIGludDMyeDRfdCBfX3JldjBfMTI1OyAgX19yZXYwXzEyNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDBfMTI1LCBfX3AwXzEyNSwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldF8xMjU7CisgIGludDMyeDJfdCBfX2ExXzEyNSA9IF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYwXzEyNSk7CisgIF9fcmV0XzEyNSA9IChpbnQ2NHgyX3QpKF9fbm9zd2FwX3ZzaGxsX25fczMyKF9fYTFfMTI1LCAwKSk7CisgIF9fcmV0XzEyNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzEyNSwgX19yZXRfMTI1LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0XzEyNTsKK30KK19fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczMyKGludDMyeDRfdCBfX3AwXzEyNikgeworICBpbnQ2NHgyX3QgX19yZXRfMTI2OworICBpbnQzMngyX3QgX19hMV8xMjYgPSBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcDBfMTI2KTsKKyAgX19yZXRfMTI2ID0gKGludDY0eDJfdCkoX19ub3N3YXBfdnNobGxfbl9zMzIoX19hMV8xMjYsIDApKTsKKyAgcmV0dXJuIF9fcmV0XzEyNjsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtb3ZsX2hpZ2hfczE2KGludDE2eDhfdCBfX3AwXzEyNykgeworICBpbnQzMng0X3QgX19yZXRfMTI3OworICBpbnQxNng0X3QgX19hMV8xMjcgPSB2Z2V0X2hpZ2hfczE2KF9fcDBfMTI3KTsKKyAgX19yZXRfMTI3ID0gKGludDMyeDRfdCkodnNobGxfbl9zMTYoX19hMV8xMjcsIDApKTsKKyAgcmV0dXJuIF9fcmV0XzEyNzsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bW92bF9oaWdoX3MxNihpbnQxNng4X3QgX19wMF8xMjgpIHsKKyAgaW50MTZ4OF90IF9fcmV2MF8xMjg7ICBfX3JldjBfMTI4ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMF8xMjgsIF9fcDBfMTI4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0XzEyODsKKyAgaW50MTZ4NF90IF9fYTFfMTI4ID0gX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjBfMTI4KTsKKyAgX19yZXRfMTI4ID0gKGludDMyeDRfdCkoX19ub3N3YXBfdnNobGxfbl9zMTYoX19hMV8xMjgsIDApKTsKKyAgX19yZXRfMTI4ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTI4LCBfX3JldF8xMjgsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXRfMTI4OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdm1vdmxfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDBfMTI5KSB7CisgIGludDMyeDRfdCBfX3JldF8xMjk7CisgIGludDE2eDRfdCBfX2ExXzEyOSA9IF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19wMF8xMjkpOworICBfX3JldF8xMjkgPSAoaW50MzJ4NF90KShfX25vc3dhcF92c2hsbF9uX3MxNihfX2ExXzEyOSwgMCkpOworICByZXR1cm4gX19yZXRfMTI5OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtb3ZuX2hpZ2hfdTMyKHVpbnQxNng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTE2KF9fcDAsIHZtb3ZuX3UzMihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1vdm5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MTYoX19yZXYwLCBfX25vc3dhcF92bW92bl91MzIoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtb3ZuX2hpZ2hfdTY0KHVpbnQzMngyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTMyKF9fcDAsIHZtb3ZuX3U2NChfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1vdm5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MzIoX19yZXYwLCBfX25vc3dhcF92bW92bl91NjQoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZtb3ZuX2hpZ2hfdTE2KHVpbnQ4eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91OChfX3AwLCB2bW92bl91MTYoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZtb3ZuX2hpZ2hfdTE2KHVpbnQ4eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3U4KF9fcmV2MCwgX19ub3N3YXBfdm1vdm5fdTE2KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtb3ZuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczE2KF9fcDAsIHZtb3ZuX3MzMihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bW92bl9oaWdoX3MzMihpbnQxNng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zMTYoX19yZXYwLCBfX25vc3dhcF92bW92bl9zMzIoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1vdm5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zMzIoX19wMCwgdm1vdm5fczY0KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtb3ZuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MzMihfX3JldjAsIF9fbm9zd2FwX3Ztb3ZuX3M2NChfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2bW92bl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczgoX19wMCwgdm1vdm5fczE2KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZtb3ZuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zOChfX3JldjAsIF9fbm9zd2FwX3Ztb3ZuX3MxNihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZtdWxxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2bXVscV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZtdWxfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZtdWxfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGRfbGFuZV9mNjQoX19wMF8xMzAsIF9fcDFfMTMwLCBfX3AyXzEzMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwXzEzMCA9IF9fcDBfMTMwOyBcCisgIGZsb2F0NjR4MV90IF9fczFfMTMwID0gX19wMV8xMzA7IFwKKyAgZmxvYXQ2NF90IF9fcmV0XzEzMDsgXAorICBfX3JldF8xMzAgPSBfX3MwXzEzMCAqIHZnZXRfbGFuZV9mNjQoX19zMV8xMzAsIF9fcDJfMTMwKTsgXAorICBfX3JldF8xMzA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsZF9sYW5lX2Y2NChfX3AwXzEzMSwgX19wMV8xMzEsIF9fcDJfMTMxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczBfMTMxID0gX19wMF8xMzE7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMV8xMzEgPSBfX3AxXzEzMTsgXAorICBmbG9hdDY0X3QgX19yZXRfMTMxOyBcCisgIF9fcmV0XzEzMSA9IF9fczBfMTMxICogX19ub3N3YXBfdmdldF9sYW5lX2Y2NChfX3MxXzEzMSwgX19wMl8xMzEpOyBcCisgIF9fcmV0XzEzMTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHNfbGFuZV9mMzIoX19wMF8xMzIsIF9fcDFfMTMyLCBfX3AyXzEzMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwXzEzMiA9IF9fcDBfMTMyOyBcCisgIGZsb2F0MzJ4Ml90IF9fczFfMTMyID0gX19wMV8xMzI7IFwKKyAgZmxvYXQzMl90IF9fcmV0XzEzMjsgXAorICBfX3JldF8xMzIgPSBfX3MwXzEzMiAqIHZnZXRfbGFuZV9mMzIoX19zMV8xMzIsIF9fcDJfMTMyKTsgXAorICBfX3JldF8xMzI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsc19sYW5lX2YzMihfX3AwXzEzMywgX19wMV8xMzMsIF9fcDJfMTMzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczBfMTMzID0gX19wMF8xMzM7IFwKKyAgZmxvYXQzMngyX3QgX19zMV8xMzMgPSBfX3AxXzEzMzsgXAorICBmbG9hdDMyeDJfdCBfX3JldjFfMTMzOyAgX19yZXYxXzEzMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTMzLCBfX3MxXzEzMywgMSwgMCk7IFwKKyAgZmxvYXQzMl90IF9fcmV0XzEzMzsgXAorICBfX3JldF8xMzMgPSBfX3MwXzEzMyAqIF9fbm9zd2FwX3ZnZXRfbGFuZV9mMzIoX19yZXYxXzEzMywgX19wMl8xMzMpOyBcCisgIF9fcmV0XzEzMzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bF9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxfbGFuZV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bF9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxfbGFuZV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVscV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVscV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxkX2xhbmVxX2Y2NChfX3AwXzEzNCwgX19wMV8xMzQsIF9fcDJfMTM0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczBfMTM0ID0gX19wMF8xMzQ7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMV8xMzQgPSBfX3AxXzEzNDsgXAorICBmbG9hdDY0X3QgX19yZXRfMTM0OyBcCisgIF9fcmV0XzEzNCA9IF9fczBfMTM0ICogdmdldHFfbGFuZV9mNjQoX19zMV8xMzQsIF9fcDJfMTM0KTsgXAorICBfX3JldF8xMzQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsZF9sYW5lcV9mNjQoX19wMF8xMzUsIF9fcDFfMTM1LCBfX3AyXzEzNSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwXzEzNSA9IF9fcDBfMTM1OyBcCisgIGZsb2F0NjR4Ml90IF9fczFfMTM1ID0gX19wMV8xMzU7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxXzEzNTsgIF9fcmV2MV8xMzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzEzNSwgX19zMV8xMzUsIDEsIDApOyBcCisgIGZsb2F0NjRfdCBfX3JldF8xMzU7IFwKKyAgX19yZXRfMTM1ID0gX19zMF8xMzUgKiBfX25vc3dhcF92Z2V0cV9sYW5lX2Y2NChfX3JldjFfMTM1LCBfX3AyXzEzNSk7IFwKKyAgX19yZXRfMTM1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsc19sYW5lcV9mMzIoX19wMF8xMzYsIF9fcDFfMTM2LCBfX3AyXzEzNikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwXzEzNiA9IF9fcDBfMTM2OyBcCisgIGZsb2F0MzJ4NF90IF9fczFfMTM2ID0gX19wMV8xMzY7IFwKKyAgZmxvYXQzMl90IF9fcmV0XzEzNjsgXAorICBfX3JldF8xMzYgPSBfX3MwXzEzNiAqIHZnZXRxX2xhbmVfZjMyKF9fczFfMTM2LCBfX3AyXzEzNik7IFwKKyAgX19yZXRfMTM2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHNfbGFuZXFfZjMyKF9fcDBfMTM3LCBfX3AxXzEzNywgX19wMl8xMzcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMF8xMzcgPSBfX3AwXzEzNzsgXAorICBmbG9hdDMyeDRfdCBfX3MxXzEzNyA9IF9fcDFfMTM3OyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MV8xMzc7ICBfX3JldjFfMTM3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xMzcsIF9fczFfMTM3LCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyX3QgX19yZXRfMTM3OyBcCisgIF9fcmV0XzEzNyA9IF9fczBfMTM3ICogX19ub3N3YXBfdmdldHFfbGFuZV9mMzIoX19yZXYxXzEzNywgX19wMl8xMzcpOyBcCisgIF9fcmV0XzEzNzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bF9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bXVsX2xhbmVxX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bF9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bXVsX2xhbmVxX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxxX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVscV9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxxX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVscV9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxxX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVscV9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxxX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVscV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHFfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxxX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bF9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bF9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZtdWxfbl9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bXVsX25fZjY0KChpbnQ4eDhfdClfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3Qgdm11bF9uX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxfbl9mNjQoKGludDh4OF90KV9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZtdWxxX25fZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiAoZmxvYXQ2NHgyX3QpIHtfX3AxLCBfX3AxfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3Qgdm11bHFfbl9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIChmbG9hdDY0eDJfdCkge19fcDEsIF9fcDF9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTEyOF90IHZtdWxsX3A2NChwb2x5NjRfdCBfX3AwLCBwb2x5NjRfdCBfX3AxKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF9wNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxMjhfdCB2bXVsbF9wNjQocG9seTY0X3QgX19wMCwgcG9seTY0X3QgX19wMSkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkgX19idWlsdGluX25lb25fdm11bGxfcDY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHBvbHkxMjhfdCBfX25vc3dhcF92bXVsbF9wNjQocG9seTY0X3QgX19wMCwgcG9seTY0X3QgX19wMSkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkgX19idWlsdGluX25lb25fdm11bGxfcDY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3Qgdm11bGxfaGlnaF9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZtdWxsX3A4KHZnZXRfaGlnaF9wOChfX3AwKSwgdmdldF9oaWdoX3A4KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2bXVsbF9oaWdoX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfcDgoX19ub3N3YXBfdmdldF9oaWdoX3A4KF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF9wOChfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm11bGxfaGlnaF91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZtdWxsX3U4KHZnZXRfaGlnaF91OChfX3AwKSwgdmdldF9oaWdoX3U4KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2bXVsbF9oaWdoX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfdTgoX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF91OChfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm11bGxfaGlnaF91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bXVsbF91MzIodmdldF9oaWdoX3UzMihfX3AwKSwgdmdldF9oaWdoX3UzMihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm11bGxfaGlnaF91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF91MzIoX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bXVsbF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtdWxsX3UxNih2Z2V0X2hpZ2hfdTE2KF9fcDApLCB2Z2V0X2hpZ2hfdTE2KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bXVsbF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3UxNihfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm11bGxfaGlnaF9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZtdWxsX3M4KHZnZXRfaGlnaF9zOChfX3AwKSwgdmdldF9oaWdoX3M4KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtdWxsX2hpZ2hfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfczgoX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2bXVsbF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtdWxsX3MzMih2Z2V0X2hpZ2hfczMyKF9fcDApLCB2Z2V0X2hpZ2hfczMyKF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtdWxsX2hpZ2hfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm11bGxfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bXVsbF9zMTYodmdldF9oaWdoX3MxNihfX3AwKSwgdmdldF9oaWdoX3MxNihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bXVsbF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTEyOF90IHZtdWxsX2hpZ2hfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSB2bXVsbF9wNjQoKHBvbHk2NF90KSh2Z2V0X2hpZ2hfcDY0KF9fcDApKSwgKHBvbHk2NF90KSh2Z2V0X2hpZ2hfcDY0KF9fcDEpKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxMjhfdCB2bXVsbF9oaWdoX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfcDY0KChwb2x5NjRfdCkoX19ub3N3YXBfdmdldF9oaWdoX3A2NChfX3JldjApKSwgKHBvbHk2NF90KShfX25vc3dhcF92Z2V0X2hpZ2hfcDY0KF9fcmV2MSkpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3UzMih2Z2V0X2hpZ2hfdTMyKF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF91MzIoX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVsbF91MTYodmdldF9oaWdoX3UxNihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfdTE2KF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfczMyKHZnZXRfaGlnaF9zMzIoX19zMCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVsbF9zMTYodmdldF9oaWdoX3MxNihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVsbF91MzIodmdldF9oaWdoX3UzMihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3UzMihfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVsbF91MTYodmdldF9oaWdoX3UxNihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3UxNihfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVsbF9zMzIodmdldF9oaWdoX3MzMihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfczE2KHZnZXRfaGlnaF9zMTYoX19zMCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm11bGxfaGlnaF9uX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bXVsbF9uX3UzMih2Z2V0X2hpZ2hfdTMyKF9fcDApLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2bXVsbF9oaWdoX25fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX25fdTMyKF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYwKSwgX19wMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtdWxsX2hpZ2hfbl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm11bGxfbl91MTYodmdldF9oaWdoX3UxNihfX3AwKSwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm11bGxfaGlnaF9uX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9uX3UxNihfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MCksIF9fcDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZtdWxsX2hpZ2hfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm11bGxfbl9zMzIodmdldF9oaWdoX3MzMihfX3AwKSwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bXVsbF9oaWdoX25fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfbl9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjApLCBfX3AxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bXVsbF9oaWdoX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtdWxsX25fczE2KHZnZXRfaGlnaF9zMTYoX19wMCksIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm11bGxfaGlnaF9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX25fczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYwKSwgX19wMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsbF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfdTMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfdTMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVsbF91MTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bGxfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF91MTYoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3MzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9zMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3MxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9zMTYoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3Qgdm11bHhxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bHhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3Qgdm11bHhxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVseHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGZsb2F0NjR4Ml90IF9fbm9zd2FwX3ZtdWx4cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3Qgdm11bHhxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm11bHhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3Qgdm11bHhxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVseHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGZsb2F0MzJ4NF90IF9fbm9zd2FwX3ZtdWx4cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3Qgdm11bHhfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bXVseF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2bXVseF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3Qgdm11bHhfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVseF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZtdWx4X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVseF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQzMngyX3QgX19ub3N3YXBfdm11bHhfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVseF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NF90IHZtdWx4ZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92bXVseGRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3Qgdm11bHhkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4ZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQ2NF90IF9fbm9zd2FwX3ZtdWx4ZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92bXVseGRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2bXVseHNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm11bHhzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZtdWx4c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bXVseHNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGZsb2F0MzJfdCBfX25vc3dhcF92bXVseHNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm11bHhzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVseGRfbGFuZV9mNjQoX19wMF8xMzgsIF9fcDFfMTM4LCBfX3AyXzEzOCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwXzEzOCA9IF9fcDBfMTM4OyBcCisgIGZsb2F0NjR4MV90IF9fczFfMTM4ID0gX19wMV8xMzg7IFwKKyAgZmxvYXQ2NF90IF9fcmV0XzEzODsgXAorICBfX3JldF8xMzggPSB2bXVseGRfZjY0KF9fczBfMTM4LCB2Z2V0X2xhbmVfZjY0KF9fczFfMTM4LCBfX3AyXzEzOCkpOyBcCisgIF9fcmV0XzEzODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWx4ZF9sYW5lX2Y2NChfX3AwXzEzOSwgX19wMV8xMzksIF9fcDJfMTM5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczBfMTM5ID0gX19wMF8xMzk7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMV8xMzkgPSBfX3AxXzEzOTsgXAorICBmbG9hdDY0X3QgX19yZXRfMTM5OyBcCisgIF9fcmV0XzEzOSA9IF9fbm9zd2FwX3ZtdWx4ZF9mNjQoX19zMF8xMzksIF9fbm9zd2FwX3ZnZXRfbGFuZV9mNjQoX19zMV8xMzksIF9fcDJfMTM5KSk7IFwKKyAgX19yZXRfMTM5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVseHNfbGFuZV9mMzIoX19wMF8xNDAsIF9fcDFfMTQwLCBfX3AyXzE0MCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwXzE0MCA9IF9fcDBfMTQwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczFfMTQwID0gX19wMV8xNDA7IFwKKyAgZmxvYXQzMl90IF9fcmV0XzE0MDsgXAorICBfX3JldF8xNDAgPSB2bXVseHNfZjMyKF9fczBfMTQwLCB2Z2V0X2xhbmVfZjMyKF9fczFfMTQwLCBfX3AyXzE0MCkpOyBcCisgIF9fcmV0XzE0MDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWx4c19sYW5lX2YzMihfX3AwXzE0MSwgX19wMV8xNDEsIF9fcDJfMTQxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczBfMTQxID0gX19wMF8xNDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMV8xNDEgPSBfX3AxXzE0MTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjFfMTQxOyAgX19yZXYxXzE0MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTQxLCBfX3MxXzE0MSwgMSwgMCk7IFwKKyAgZmxvYXQzMl90IF9fcmV0XzE0MTsgXAorICBfX3JldF8xNDEgPSBfX25vc3dhcF92bXVseHNfZjMyKF9fczBfMTQxLCBfX25vc3dhcF92Z2V0X2xhbmVfZjMyKF9fcmV2MV8xNDEsIF9fcDJfMTQxKSk7IFwKKyAgX19yZXRfMTQxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVseHFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bHhxX2Y2NChfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVseHFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bHhxX2Y2NChfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWx4cV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVseHFfZjMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWx4cV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVseHFfZjMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWx4X2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWx4X2YzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVseF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVseF9mMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHhkX2xhbmVxX2Y2NChfX3AwXzE0MiwgX19wMV8xNDIsIF9fcDJfMTQyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczBfMTQyID0gX19wMF8xNDI7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMV8xNDIgPSBfX3AxXzE0MjsgXAorICBmbG9hdDY0X3QgX19yZXRfMTQyOyBcCisgIF9fcmV0XzE0MiA9IHZtdWx4ZF9mNjQoX19zMF8xNDIsIHZnZXRxX2xhbmVfZjY0KF9fczFfMTQyLCBfX3AyXzE0MikpOyBcCisgIF9fcmV0XzE0MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWx4ZF9sYW5lcV9mNjQoX19wMF8xNDMsIF9fcDFfMTQzLCBfX3AyXzE0MykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwXzE0MyA9IF9fcDBfMTQzOyBcCisgIGZsb2F0NjR4Ml90IF9fczFfMTQzID0gX19wMV8xNDM7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxXzE0MzsgIF9fcmV2MV8xNDMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE0MywgX19zMV8xNDMsIDEsIDApOyBcCisgIGZsb2F0NjRfdCBfX3JldF8xNDM7IFwKKyAgX19yZXRfMTQzID0gX19ub3N3YXBfdm11bHhkX2Y2NChfX3MwXzE0MywgX19ub3N3YXBfdmdldHFfbGFuZV9mNjQoX19yZXYxXzE0MywgX19wMl8xNDMpKTsgXAorICBfX3JldF8xNDM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWx4c19sYW5lcV9mMzIoX19wMF8xNDQsIF9fcDFfMTQ0LCBfX3AyXzE0NCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwXzE0NCA9IF9fcDBfMTQ0OyBcCisgIGZsb2F0MzJ4NF90IF9fczFfMTQ0ID0gX19wMV8xNDQ7IFwKKyAgZmxvYXQzMl90IF9fcmV0XzE0NDsgXAorICBfX3JldF8xNDQgPSB2bXVseHNfZjMyKF9fczBfMTQ0LCB2Z2V0cV9sYW5lX2YzMihfX3MxXzE0NCwgX19wMl8xNDQpKTsgXAorICBfX3JldF8xNDQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVseHNfbGFuZXFfZjMyKF9fcDBfMTQ1LCBfX3AxXzE0NSwgX19wMl8xNDUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMF8xNDUgPSBfX3AwXzE0NTsgXAorICBmbG9hdDMyeDRfdCBfX3MxXzE0NSA9IF9fcDFfMTQ1OyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MV8xNDU7ICBfX3JldjFfMTQ1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNDUsIF9fczFfMTQ1LCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyX3QgX19yZXRfMTQ1OyBcCisgIF9fcmV0XzE0NSA9IF9fbm9zd2FwX3ZtdWx4c19mMzIoX19zMF8xNDUsIF9fbm9zd2FwX3ZnZXRxX2xhbmVfZjMyKF9fcmV2MV8xNDUsIF9fcDJfMTQ1KSk7IFwKKyAgX19yZXRfMTQ1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVseHFfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWx4cV9mNjQoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHhxX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVseHFfZjY0KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWx4cV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bHhxX2YzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVseHFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWx4cV9mMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHhfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWx4X2YzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVseF9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bHhfZjMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZuZWdxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IC1fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2bmVncV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2bmVncV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IC1fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3Qgdm5lZ3FfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IC1fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2bmVnX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IC1fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2bmVnX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IC1fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2bmVnX3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2bmVnX3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2bmVnZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZuZWdkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2bmVnZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZuZWdkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZwYWRkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZwYWRkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnBhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZwYWRkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZwYWRkcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cGFkZHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cGFkZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnBhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cGFkZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnBhZGRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnBhZGRxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnBhZGRxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZwYWRkcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZwYWRkcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnBhZGRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cGFkZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZwYWRkcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnBhZGRxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cGFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZwYWRkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2cGFkZGRfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkZF91NjQoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdnBhZGRkX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGRfdTY0KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3QgdnBhZGRkX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGRfZjY0KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2cGFkZGRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGRfZjY0KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZwYWRkZF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnBhZGRkX3M2NCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZwYWRkZF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGRfczY0KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdnBhZGRzX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHNfZjMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZwYWRkc19mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkc19mMzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cG1heHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cG1heHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZwbWF4cV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cG1heHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cG1heHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnBtYXhxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cG1heHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnBtYXhxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnBtYXhxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnBtYXhxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZwbWF4cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZwbWF4cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnBtYXhxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cG1heHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZwbWF4cV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnBtYXhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2cG1heHFkX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFkX2Y2NCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3QgdnBtYXhxZF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cWRfZjY0KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdnBtYXhzX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cG1heHNfZjMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZwbWF4c19mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4c19mMzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnBtYXhubXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heG5tcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZwbWF4bm1xX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heG5tcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnBtYXhubXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heG5tcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZwbWF4bm1xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heG5tcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnBtYXhubV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cG1heG5tX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heG5tX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3QgdnBtYXhubXFkX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heG5tcWRfZjY0KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2cG1heG5tcWRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heG5tcWRfZjY0KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdnBtYXhubXNfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1zX2YzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2cG1heG5tc19mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4bm1zX2YzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZwbWlucV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZwbWlucV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnBtaW5xX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZwbWlucV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZwbWlucV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cG1pbnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZwbWlucV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cG1pbnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cG1pbnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cG1pbnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnBtaW5xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnBtaW5xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cG1pbnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZwbWlucV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnBtaW5xX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cG1pbnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NF90IHZwbWlucWRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucWRfZjY0KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2cG1pbnFkX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnBtaW5xZF9mNjQoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2cG1pbnNfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluc19mMzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3QgdnBtaW5zX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnBtaW5zX2YzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cG1pbm5tcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlubm1xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnBtaW5ubXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlubm1xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cG1pbm5tcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlubm1xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnBtaW5ubXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlubm1xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cG1pbm5tX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtaW5ubV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZwbWlubm1fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlubm1fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2cG1pbm5tcWRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlubm1xZF9mNjQoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZwbWlubm1xZF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlubm1xZF9mNjQoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2cG1pbm5tc19mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnBtaW5ubXNfZjMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZwbWlubm1zX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnBtaW5ubXNfZjMyKChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cWFic3FfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWFic3FfdigoaW50OHgxNl90KV9fcDAsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxYWJzcV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cWFic19zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzX3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnFhYnNfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cWFic192KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4X3QgdnFhYnNiX3M4KGludDhfdCBfX3AwKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cWFic2JfczgoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDhfdCB2cWFic2JfczgoaW50OF90IF9fcDApIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzYl9zOChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZxYWJzc19zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzc19zMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdnFhYnNzX3MzMihpbnQzMl90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFhYnNzX3MzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZxYWJzZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdnFhYnNkX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFhYnNkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZxYWJzaF9zMTYoaW50MTZfdCBfX3AwKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzaF9zMTYoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdnFhYnNoX3MxNihpbnQxNl90IF9fcDApIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFhYnNoX3MxNihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OF90IHZxYWRkYl91OCh1aW50OF90IF9fcDAsIHVpbnQ4X3QgX19wMSkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGJfdTgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4X3QgdnFhZGRiX3U4KHVpbnQ4X3QgX19wMCwgdWludDhfdCBfX3AxKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkYl91OChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2cWFkZHNfdTMyKHVpbnQzMl90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHNfdTMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2cWFkZHNfdTMyKHVpbnQzMl90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHNfdTMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZxYWRkZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZxYWRkZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2X3QgdnFhZGRoX3UxNih1aW50MTZfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFhZGRoX3UxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2X3QgdnFhZGRoX3UxNih1aW50MTZfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFhZGRoX3UxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4X3QgdnFhZGRiX3M4KGludDhfdCBfX3AwLCBpbnQ4X3QgX19wMSkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFhZGRiX3M4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4X3QgdnFhZGRiX3M4KGludDhfdCBfX3AwLCBpbnQ4X3QgX19wMSkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFhZGRiX3M4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdnFhZGRzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZxYWRkc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFhZGRzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMl90IF9fbm9zd2FwX3ZxYWRkc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFhZGRzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZxYWRkZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFhZGRkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2cWFkZGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2cWFkZGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdnFhZGRoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2X3QgX19ub3N3YXBfdnFhZGRoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdnFkbWxhbHNfczMyKGludDY0X3QgX19wMCwgaW50MzJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbHNfczMyKF9fcDAsIF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZxZG1sYWxzX3MzMihpbnQ2NF90IF9fcDAsIGludDMyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxzX3MzMihfX3AwLCBfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZxZG1sYWxoX3MxNihpbnQzMl90IF9fcDAsIGludDE2X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxoX3MxNihfX3AwLCBfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2cWRtbGFsaF9zMTYoaW50MzJfdCBfX3AwLCBpbnQxNl90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsaF9zMTYoX19wMCwgX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZxZG1sYWxfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdnFkbWxhbF9zMzIoX19wMCwgdmdldF9oaWdoX3MzMihfX3AxKSwgdmdldF9oaWdoX3MzMihfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWRtbGFsX2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sYWxfczMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxZG1sYWxfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdnFkbWxhbF9zMTYoX19wMCwgdmdldF9oaWdoX3MxNihfX3AxKSwgdmdldF9oaWdoX3MxNihfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cWRtbGFsX2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sYWxfczE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxhbF9oaWdoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtbGFsX3MzMihfX3MwLCB2Z2V0X2hpZ2hfczMyKF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbGFsX2hpZ2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sYWxfczMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxhbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtbGFsX3MxNihfX3MwLCB2Z2V0X2hpZ2hfczE2KF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbGFsX2hpZ2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sYWxfczE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxhbF9oaWdoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbWxhbF9zMzIoX19zMCwgdmdldF9oaWdoX3MzMihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxhbF9oaWdoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbGFsX2hpZ2hfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtbGFsX3MxNihfX3MwLCB2Z2V0X2hpZ2hfczE2KF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbGFsX2hpZ2hfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbGFsX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cWRtbGFsX2hpZ2hfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZxZG1sYWxfbl9zMzIoX19wMCwgdmdldF9oaWdoX3MzMihfX3AxKSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWRtbGFsX2hpZ2hfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbGFsX25fczMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX3AyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtbGFsX2hpZ2hfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZxZG1sYWxfbl9zMTYoX19wMCwgdmdldF9oaWdoX3MxNihfX3AxKSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cWRtbGFsX2hpZ2hfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbGFsX25fczE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX3AyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sYWxzX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbHNfbGFuZV9zMzIoX19zMCwgX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxhbHNfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbHNfbGFuZV9zMzIoX19zMCwgX19zMSwgKGludDh4OF90KV9fcmV2MiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sYWxoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbGhfbGFuZV9zMTYoX19zMCwgX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxhbGhfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbGhfbGFuZV9zMTYoX19zMCwgX19zMSwgKGludDh4OF90KV9fcmV2MiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sYWxzX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxzX2xhbmVxX3MzMihfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxhbHNfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxzX2xhbmVxX3MzMihfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fcmV2MiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sYWxoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxoX2xhbmVxX3MxNihfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxhbGhfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxoX2xhbmVxX3MxNihfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fcmV2MiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sYWxfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtbGFsX3MzMihfX3MwLCBfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbGFsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9zMzIoX19yZXYwLCBfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbGFsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbWxhbF9zMTYoX19zMCwgX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxhbF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sYWxfczE2KF9fcmV2MCwgX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2cWRtbHNsc19zMzIoaW50NjRfdCBfX3AwLCBpbnQzMl90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsc19zMzIoX19wMCwgX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdnFkbWxzbHNfczMyKGludDY0X3QgX19wMCwgaW50MzJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbWxzbHNfczMyKF9fcDAsIF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdnFkbWxzbGhfczE2KGludDMyX3QgX19wMCwgaW50MTZfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbWxzbGhfczE2KF9fcDAsIF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZxZG1sc2xoX3MxNihpbnQzMl90IF9fcDAsIGludDE2X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xoX3MxNihfX3AwLCBfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFkbWxzbF9oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2cWRtbHNsX3MzMihfX3AwLCB2Z2V0X2hpZ2hfczMyKF9fcDEpLCB2Z2V0X2hpZ2hfczMyKF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxZG1sc2xfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxzbF9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFkbWxzbF9oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2cWRtbHNsX3MxNihfX3AwLCB2Z2V0X2hpZ2hfczE2KF9fcDEpLCB2Z2V0X2hpZ2hfczE2KF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG1sc2xfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxzbF9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbHNsX2hpZ2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sc2xfczMyKF9fczAsIHZnZXRfaGlnaF9zMzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sc2xfaGlnaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxzbF9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbHNsX2hpZ2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sc2xfczE2KF9fczAsIHZnZXRfaGlnaF9zMTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sc2xfaGlnaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxzbF9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbHNsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtbHNsX3MzMihfX3MwLCB2Z2V0X2hpZ2hfczMyKF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbHNsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sc2xfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sc2xfczE2KF9fczAsIHZnZXRfaGlnaF9zMTYoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sc2xfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sc2xfczE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZxZG1sc2xfaGlnaF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdnFkbWxzbF9uX3MzMihfX3AwLCB2Z2V0X2hpZ2hfczMyKF9fcDEpLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxZG1sc2xfaGlnaF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sc2xfbl9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fcDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxZG1sc2xfaGlnaF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdnFkbWxzbF9uX3MxNihfX3AwLCB2Z2V0X2hpZ2hfczE2KF9fcDEpLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG1sc2xfaGlnaF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sc2xfbl9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fcDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxzbHNfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsc19sYW5lX3MzMihfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbHNsc19sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsc19sYW5lX3MzMihfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19yZXYyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxzbGhfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsaF9sYW5lX3MxNihfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbHNsaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsaF9sYW5lX3MxNihfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19yZXYyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxzbHNfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbWxzbHNfbGFuZXFfczMyKF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbHNsc19sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbWxzbHNfbGFuZXFfczMyKF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19yZXYyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxzbGhfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbWxzbGhfbGFuZXFfczE2KF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbHNsaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbWxzbGhfbGFuZXFfczE2KF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19yZXYyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxzbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sc2xfczMyKF9fczAsIF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sc2xfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX3MzMihfX3JldjAsIF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sc2xfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtbHNsX3MxNihfX3MwLCBfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbHNsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxzbF9zMTYoX19yZXYwLCBfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZxZG11bGhzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdnFkbXVsaHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMl90IF9fbm9zd2FwX3ZxZG11bGhzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2cWRtdWxoaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFkbXVsaGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZxZG11bGhoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZfdCBfX25vc3dhcF92cWRtdWxoaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFkbXVsaGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGhzX2xhbmVfczMyKF9fcDBfMTQ2LCBfX3AxXzE0NiwgX19wMl8xNDYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMTQ2ID0gX19wMF8xNDY7IFwKKyAgaW50MzJ4Ml90IF9fczFfMTQ2ID0gX19wMV8xNDY7IFwKKyAgaW50MzJfdCBfX3JldF8xNDY7IFwKKyAgX19yZXRfMTQ2ID0gdnFkbXVsaHNfczMyKF9fczBfMTQ2LCB2Z2V0X2xhbmVfczMyKF9fczFfMTQ2LCBfX3AyXzE0NikpOyBcCisgIF9fcmV0XzE0NjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGhzX2xhbmVfczMyKF9fcDBfMTQ3LCBfX3AxXzE0NywgX19wMl8xNDcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMTQ3ID0gX19wMF8xNDc7IFwKKyAgaW50MzJ4Ml90IF9fczFfMTQ3ID0gX19wMV8xNDc7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MV8xNDc7ICBfX3JldjFfMTQ3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNDcsIF9fczFfMTQ3LCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0XzE0NzsgXAorICBfX3JldF8xNDcgPSBfX25vc3dhcF92cWRtdWxoc19zMzIoX19zMF8xNDcsIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMzIoX19yZXYxXzE0NywgX19wMl8xNDcpKTsgXAorICBfX3JldF8xNDc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGhoX2xhbmVfczE2KF9fcDBfMTQ4LCBfX3AxXzE0OCwgX19wMl8xNDgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMTQ4ID0gX19wMF8xNDg7IFwKKyAgaW50MTZ4NF90IF9fczFfMTQ4ID0gX19wMV8xNDg7IFwKKyAgaW50MTZfdCBfX3JldF8xNDg7IFwKKyAgX19yZXRfMTQ4ID0gdnFkbXVsaGhfczE2KF9fczBfMTQ4LCB2Z2V0X2xhbmVfczE2KF9fczFfMTQ4LCBfX3AyXzE0OCkpOyBcCisgIF9fcmV0XzE0ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGhoX2xhbmVfczE2KF9fcDBfMTQ5LCBfX3AxXzE0OSwgX19wMl8xNDkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMTQ5ID0gX19wMF8xNDk7IFwKKyAgaW50MTZ4NF90IF9fczFfMTQ5ID0gX19wMV8xNDk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MV8xNDk7ICBfX3JldjFfMTQ5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNDksIF9fczFfMTQ5LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNl90IF9fcmV0XzE0OTsgXAorICBfX3JldF8xNDkgPSBfX25vc3dhcF92cWRtdWxoaF9zMTYoX19zMF8xNDksIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMTYoX19yZXYxXzE0OSwgX19wMl8xNDkpKTsgXAorICBfX3JldF8xNDk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGhzX2xhbmVxX3MzMihfX3AwXzE1MCwgX19wMV8xNTAsIF9fcDJfMTUwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzE1MCA9IF9fcDBfMTUwOyBcCisgIGludDMyeDRfdCBfX3MxXzE1MCA9IF9fcDFfMTUwOyBcCisgIGludDMyX3QgX19yZXRfMTUwOyBcCisgIF9fcmV0XzE1MCA9IHZxZG11bGhzX3MzMihfX3MwXzE1MCwgdmdldHFfbGFuZV9zMzIoX19zMV8xNTAsIF9fcDJfMTUwKSk7IFwKKyAgX19yZXRfMTUwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsaHNfbGFuZXFfczMyKF9fcDBfMTUxLCBfX3AxXzE1MSwgX19wMl8xNTEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMTUxID0gX19wMF8xNTE7IFwKKyAgaW50MzJ4NF90IF9fczFfMTUxID0gX19wMV8xNTE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MV8xNTE7ICBfX3JldjFfMTUxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNTEsIF9fczFfMTUxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0XzE1MTsgXAorICBfX3JldF8xNTEgPSBfX25vc3dhcF92cWRtdWxoc19zMzIoX19zMF8xNTEsIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczMyKF9fcmV2MV8xNTEsIF9fcDJfMTUxKSk7IFwKKyAgX19yZXRfMTUxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxoaF9sYW5lcV9zMTYoX19wMF8xNTIsIF9fcDFfMTUyLCBfX3AyXzE1MikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8xNTIgPSBfX3AwXzE1MjsgXAorICBpbnQxNng4X3QgX19zMV8xNTIgPSBfX3AxXzE1MjsgXAorICBpbnQxNl90IF9fcmV0XzE1MjsgXAorICBfX3JldF8xNTIgPSB2cWRtdWxoaF9zMTYoX19zMF8xNTIsIHZnZXRxX2xhbmVfczE2KF9fczFfMTUyLCBfX3AyXzE1MikpOyBcCisgIF9fcmV0XzE1MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGhoX2xhbmVxX3MxNihfX3AwXzE1MywgX19wMV8xNTMsIF9fcDJfMTUzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzE1MyA9IF9fcDBfMTUzOyBcCisgIGludDE2eDhfdCBfX3MxXzE1MyA9IF9fcDFfMTUzOyBcCisgIGludDE2eDhfdCBfX3JldjFfMTUzOyAgX19yZXYxXzE1MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTUzLCBfX3MxXzE1MywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZfdCBfX3JldF8xNTM7IFwKKyAgX19yZXRfMTUzID0gX19ub3N3YXBfdnFkbXVsaGhfczE2KF9fczBfMTUzLCBfX25vc3dhcF92Z2V0cV9sYW5lX3MxNihfX3JldjFfMTUzLCBfX3AyXzE1MykpOyBcCisgIF9fcmV0XzE1MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsaHFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG11bGhxX3MzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxocV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxocV9zMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsaHFfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG11bGhxX3MxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxocV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxocV9zMTYoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsaF9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxoX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtdWxoX3MxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGhfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdnFkbXVsbHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2cWRtdWxsc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbXVsbHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0X3QgX19ub3N3YXBfdnFkbXVsbHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZxZG11bGxoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdnFkbXVsbGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMl90IF9fbm9zd2FwX3ZxZG11bGxoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZxZG11bGxfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2cWRtdWxsX3MzMih2Z2V0X2hpZ2hfczMyKF9fcDApLCB2Z2V0X2hpZ2hfczMyKF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxZG11bGxfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsbF9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxZG11bGxfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2cWRtdWxsX3MxNih2Z2V0X2hpZ2hfczE2KF9fcDApLCB2Z2V0X2hpZ2hfczE2KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG11bGxfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsbF9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsbF9oaWdoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG11bGxfczMyKHZnZXRfaGlnaF9zMzIoX19zMCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGxfaGlnaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfczMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGxfaGlnaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtdWxsX3MxNih2Z2V0X2hpZ2hfczE2KF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxsX2hpZ2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG11bGxfczMyKHZnZXRfaGlnaF9zMzIoX19zMCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGxfaGlnaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxsX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxsX2hpZ2hfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG11bGxfczE2KHZnZXRfaGlnaF9zMTYoX19zMCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGxfaGlnaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFkbXVsbF9oaWdoX25fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZxZG11bGxfbl9zMzIodmdldF9oaWdoX3MzMihfX3AwKSwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWRtdWxsX2hpZ2hfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxsX25fczMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYwKSwgX19wMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFkbXVsbF9oaWdoX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZxZG11bGxfbl9zMTYodmdldF9oaWdoX3MxNihfX3AwKSwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cWRtdWxsX2hpZ2hfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxsX25fczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYwKSwgX19wMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxsc19sYW5lX3MzMihfX3AwXzE1NCwgX19wMV8xNTQsIF9fcDJfMTU0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzE1NCA9IF9fcDBfMTU0OyBcCisgIGludDMyeDJfdCBfX3MxXzE1NCA9IF9fcDFfMTU0OyBcCisgIGludDY0X3QgX19yZXRfMTU0OyBcCisgIF9fcmV0XzE1NCA9IHZxZG11bGxzX3MzMihfX3MwXzE1NCwgdmdldF9sYW5lX3MzMihfX3MxXzE1NCwgX19wMl8xNTQpKTsgXAorICBfX3JldF8xNTQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxsc19sYW5lX3MzMihfX3AwXzE1NSwgX19wMV8xNTUsIF9fcDJfMTU1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzE1NSA9IF9fcDBfMTU1OyBcCisgIGludDMyeDJfdCBfX3MxXzE1NSA9IF9fcDFfMTU1OyBcCisgIGludDMyeDJfdCBfX3JldjFfMTU1OyAgX19yZXYxXzE1NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTU1LCBfX3MxXzE1NSwgMSwgMCk7IFwKKyAgaW50NjRfdCBfX3JldF8xNTU7IFwKKyAgX19yZXRfMTU1ID0gX19ub3N3YXBfdnFkbXVsbHNfczMyKF9fczBfMTU1LCBfX25vc3dhcF92Z2V0X2xhbmVfczMyKF9fcmV2MV8xNTUsIF9fcDJfMTU1KSk7IFwKKyAgX19yZXRfMTU1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxsaF9sYW5lX3MxNihfX3AwXzE1NiwgX19wMV8xNTYsIF9fcDJfMTU2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzE1NiA9IF9fcDBfMTU2OyBcCisgIGludDE2eDRfdCBfX3MxXzE1NiA9IF9fcDFfMTU2OyBcCisgIGludDMyX3QgX19yZXRfMTU2OyBcCisgIF9fcmV0XzE1NiA9IHZxZG11bGxoX3MxNihfX3MwXzE1NiwgdmdldF9sYW5lX3MxNihfX3MxXzE1NiwgX19wMl8xNTYpKTsgXAorICBfX3JldF8xNTY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxsaF9sYW5lX3MxNihfX3AwXzE1NywgX19wMV8xNTcsIF9fcDJfMTU3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzE1NyA9IF9fcDBfMTU3OyBcCisgIGludDE2eDRfdCBfX3MxXzE1NyA9IF9fcDFfMTU3OyBcCisgIGludDE2eDRfdCBfX3JldjFfMTU3OyAgX19yZXYxXzE1NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTU3LCBfX3MxXzE1NywgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJfdCBfX3JldF8xNTc7IFwKKyAgX19yZXRfMTU3ID0gX19ub3N3YXBfdnFkbXVsbGhfczE2KF9fczBfMTU3LCBfX25vc3dhcF92Z2V0X2xhbmVfczE2KF9fcmV2MV8xNTcsIF9fcDJfMTU3KSk7IFwKKyAgX19yZXRfMTU3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxsc19sYW5lcV9zMzIoX19wMF8xNTgsIF9fcDFfMTU4LCBfX3AyXzE1OCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8xNTggPSBfX3AwXzE1ODsgXAorICBpbnQzMng0X3QgX19zMV8xNTggPSBfX3AxXzE1ODsgXAorICBpbnQ2NF90IF9fcmV0XzE1ODsgXAorICBfX3JldF8xNTggPSB2cWRtdWxsc19zMzIoX19zMF8xNTgsIHZnZXRxX2xhbmVfczMyKF9fczFfMTU4LCBfX3AyXzE1OCkpOyBcCisgIF9fcmV0XzE1ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGxzX2xhbmVxX3MzMihfX3AwXzE1OSwgX19wMV8xNTksIF9fcDJfMTU5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzE1OSA9IF9fcDBfMTU5OyBcCisgIGludDMyeDRfdCBfX3MxXzE1OSA9IF9fcDFfMTU5OyBcCisgIGludDMyeDRfdCBfX3JldjFfMTU5OyAgX19yZXYxXzE1OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTU5LCBfX3MxXzE1OSwgMywgMiwgMSwgMCk7IFwKKyAgaW50NjRfdCBfX3JldF8xNTk7IFwKKyAgX19yZXRfMTU5ID0gX19ub3N3YXBfdnFkbXVsbHNfczMyKF9fczBfMTU5LCBfX25vc3dhcF92Z2V0cV9sYW5lX3MzMihfX3JldjFfMTU5LCBfX3AyXzE1OSkpOyBcCisgIF9fcmV0XzE1OTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsbGhfbGFuZXFfczE2KF9fcDBfMTYwLCBfX3AxXzE2MCwgX19wMl8xNjApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMTYwID0gX19wMF8xNjA7IFwKKyAgaW50MTZ4OF90IF9fczFfMTYwID0gX19wMV8xNjA7IFwKKyAgaW50MzJfdCBfX3JldF8xNjA7IFwKKyAgX19yZXRfMTYwID0gdnFkbXVsbGhfczE2KF9fczBfMTYwLCB2Z2V0cV9sYW5lX3MxNihfX3MxXzE2MCwgX19wMl8xNjApKTsgXAorICBfX3JldF8xNjA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxsaF9sYW5lcV9zMTYoX19wMF8xNjEsIF9fcDFfMTYxLCBfX3AyXzE2MSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8xNjEgPSBfX3AwXzE2MTsgXAorICBpbnQxNng4X3QgX19zMV8xNjEgPSBfX3AxXzE2MTsgXAorICBpbnQxNng4X3QgX19yZXYxXzE2MTsgIF9fcmV2MV8xNjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE2MSwgX19zMV8xNjEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXRfMTYxOyBcCisgIF9fcmV0XzE2MSA9IF9fbm9zd2FwX3ZxZG11bGxoX3MxNihfX3MwXzE2MSwgX19ub3N3YXBfdmdldHFfbGFuZV9zMTYoX19yZXYxXzE2MSwgX19wMl8xNjEpKTsgXAorICBfX3JldF8xNjE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGxfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG11bGxfczMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGxfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsbF9zMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsbF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsbF9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsbF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxsX3MxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZxbW92bnNfczMyKGludDMyX3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5zX3MzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2cW1vdm5zX3MzMihpbnQzMl90IF9fcDApIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFtb3Zuc19zMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2cW1vdm5kX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFtb3ZuZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdnFtb3ZuZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bmRfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDhfdCB2cW1vdm5oX3MxNihpbnQxNl90IF9fcDApIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bmhfczE2KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4X3QgdnFtb3ZuaF9zMTYoaW50MTZfdCBfX3AwKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5oX3MxNihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZfdCB2cW1vdm5zX3UzMih1aW50MzJfdCBfX3AwKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFtb3Zuc191MzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNl90IHZxbW92bnNfdTMyKHVpbnQzMl90IF9fcDApIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5zX3UzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2cW1vdm5kX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFtb3ZuZF91NjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZxbW92bmRfdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5kX3U2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OF90IHZxbW92bmhfdTE2KHVpbnQxNl90IF9fcDApIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuaF91MTYoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4X3QgdnFtb3ZuaF91MTYodWludDE2X3QgX19wMCkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5oX3UxNihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZxbW92bl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3UxNihfX3AwLCB2cW1vdm5fdTMyKF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cW1vdm5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MTYoX19yZXYwLCBfX25vc3dhcF92cW1vdm5fdTMyKF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cW1vdm5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91MzIoX19wMCwgdnFtb3ZuX3U2NChfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnFtb3ZuX2hpZ2hfdTY0KHVpbnQzMngyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTMyKF9fcmV2MCwgX19ub3N3YXBfdnFtb3ZuX3U2NChfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnFtb3ZuX2hpZ2hfdTE2KHVpbnQ4eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91OChfX3AwLCB2cW1vdm5fdTE2KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cW1vdm5faGlnaF91MTYodWludDh4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTgoX19yZXYwLCBfX25vc3dhcF92cW1vdm5fdTE2KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZxbW92bl9oaWdoX3MzMihpbnQxNng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3MxNihfX3AwLCB2cW1vdm5fczMyKF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZxbW92bl9oaWdoX3MzMihpbnQxNng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zMTYoX19yZXYwLCBfX25vc3dhcF92cW1vdm5fczMyKF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxbW92bl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3MzMihfX3AwLCB2cW1vdm5fczY0KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxbW92bl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zMzIoX19yZXYwLCBfX25vc3dhcF92cW1vdm5fczY0KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxbW92bl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczgoX19wMCwgdnFtb3ZuX3MxNihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cW1vdm5faGlnaF9zMTYoaW50OHg4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3M4KF9fcmV2MCwgX19ub3N3YXBfdnFtb3ZuX3MxNihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdnFtb3Z1bnNfczMyKGludDMyX3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuc19zMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdnFtb3Z1bnNfczMyKGludDMyX3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuc19zMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2cW1vdnVuZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5kX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2cW1vdnVuZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5kX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4X3QgdnFtb3Z1bmhfczE2KGludDE2X3QgX19wMCkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bmhfczE2KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4X3QgdnFtb3Z1bmhfczE2KGludDE2X3QgX19wMCkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bmhfczE2KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnFtb3Z1bl9oaWdoX3MzMihpbnQxNng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91MTYoKHVpbnQxNng0X3QpKF9fcDApLCB2cW1vdnVuX3MzMihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnFtb3Z1bl9oaWdoX3MzMihpbnQxNng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTE2KCh1aW50MTZ4NF90KShfX3JldjApLCBfX25vc3dhcF92cW1vdnVuX3MzMihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnFtb3Z1bl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91MzIoKHVpbnQzMngyX3QpKF9fcDApLCB2cW1vdnVuX3M2NChfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnFtb3Z1bl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTMyKCh1aW50MzJ4Ml90KShfX3JldjApLCBfX25vc3dhcF92cW1vdnVuX3M2NChfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnFtb3Z1bl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3U4KCh1aW50OHg4X3QpKF9fcDApLCB2cW1vdnVuX3MxNihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnFtb3Z1bl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3U4KCh1aW50OHg4X3QpKF9fcmV2MCksIF9fbm9zd2FwX3ZxbW92dW5fczE2KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZxbmVncV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVncV92KChpbnQ4eDE2X3QpX19wMCwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnFuZWdxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZxbmVnX3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFuZWdfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cW5lZ19zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnX3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDhfdCB2cW5lZ2JfczgoaW50OF90IF9fcDApIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnYl9zOChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZxbmVnYl9zOChpbnQ4X3QgX19wMCkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFuZWdiX3M4KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdnFuZWdzX3MzMihpbnQzMl90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFuZWdzX3MzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2cW5lZ3NfczMyKGludDMyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3NfczMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdnFuZWdkX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFuZWdkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2cW5lZ2RfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ2RfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdnFuZWdoX3MxNihpbnQxNl90IF9fcDApIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFuZWdoX3MxNihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2cW5lZ2hfczE2KGludDE2X3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ2hfczE2KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdnFyZG11bGhzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZxcmRtdWxoc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMl90IF9fbm9zd2FwX3ZxcmRtdWxoc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZxcmRtdWxoaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2cXJkbXVsaGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZfdCBfX25vc3dhcF92cXJkbXVsaGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG11bGhzX2xhbmVfczMyKF9fcDBfMTYyLCBfX3AxXzE2MiwgX19wMl8xNjIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMTYyID0gX19wMF8xNjI7IFwKKyAgaW50MzJ4Ml90IF9fczFfMTYyID0gX19wMV8xNjI7IFwKKyAgaW50MzJfdCBfX3JldF8xNjI7IFwKKyAgX19yZXRfMTYyID0gdnFyZG11bGhzX3MzMihfX3MwXzE2MiwgdmdldF9sYW5lX3MzMihfX3MxXzE2MiwgX19wMl8xNjIpKTsgXAorICBfX3JldF8xNjI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbXVsaHNfbGFuZV9zMzIoX19wMF8xNjMsIF9fcDFfMTYzLCBfX3AyXzE2MykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8xNjMgPSBfX3AwXzE2MzsgXAorICBpbnQzMngyX3QgX19zMV8xNjMgPSBfX3AxXzE2MzsgXAorICBpbnQzMngyX3QgX19yZXYxXzE2MzsgIF9fcmV2MV8xNjMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE2MywgX19zMV8xNjMsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXRfMTYzOyBcCisgIF9fcmV0XzE2MyA9IF9fbm9zd2FwX3ZxcmRtdWxoc19zMzIoX19zMF8xNjMsIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMzIoX19yZXYxXzE2MywgX19wMl8xNjMpKTsgXAorICBfX3JldF8xNjM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtdWxoaF9sYW5lX3MxNihfX3AwXzE2NCwgX19wMV8xNjQsIF9fcDJfMTY0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzE2NCA9IF9fcDBfMTY0OyBcCisgIGludDE2eDRfdCBfX3MxXzE2NCA9IF9fcDFfMTY0OyBcCisgIGludDE2X3QgX19yZXRfMTY0OyBcCisgIF9fcmV0XzE2NCA9IHZxcmRtdWxoaF9zMTYoX19zMF8xNjQsIHZnZXRfbGFuZV9zMTYoX19zMV8xNjQsIF9fcDJfMTY0KSk7IFwKKyAgX19yZXRfMTY0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG11bGhoX2xhbmVfczE2KF9fcDBfMTY1LCBfX3AxXzE2NSwgX19wMl8xNjUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMTY1ID0gX19wMF8xNjU7IFwKKyAgaW50MTZ4NF90IF9fczFfMTY1ID0gX19wMV8xNjU7IFwKKyAgaW50MTZ4NF90IF9fcmV2MV8xNjU7ICBfX3JldjFfMTY1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNjUsIF9fczFfMTY1LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNl90IF9fcmV0XzE2NTsgXAorICBfX3JldF8xNjUgPSBfX25vc3dhcF92cXJkbXVsaGhfczE2KF9fczBfMTY1LCBfX25vc3dhcF92Z2V0X2xhbmVfczE2KF9fcmV2MV8xNjUsIF9fcDJfMTY1KSk7IFwKKyAgX19yZXRfMTY1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbXVsaHNfbGFuZXFfczMyKF9fcDBfMTY2LCBfX3AxXzE2NiwgX19wMl8xNjYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMTY2ID0gX19wMF8xNjY7IFwKKyAgaW50MzJ4NF90IF9fczFfMTY2ID0gX19wMV8xNjY7IFwKKyAgaW50MzJfdCBfX3JldF8xNjY7IFwKKyAgX19yZXRfMTY2ID0gdnFyZG11bGhzX3MzMihfX3MwXzE2NiwgdmdldHFfbGFuZV9zMzIoX19zMV8xNjYsIF9fcDJfMTY2KSk7IFwKKyAgX19yZXRfMTY2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG11bGhzX2xhbmVxX3MzMihfX3AwXzE2NywgX19wMV8xNjcsIF9fcDJfMTY3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzE2NyA9IF9fcDBfMTY3OyBcCisgIGludDMyeDRfdCBfX3MxXzE2NyA9IF9fcDFfMTY3OyBcCisgIGludDMyeDRfdCBfX3JldjFfMTY3OyAgX19yZXYxXzE2NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTY3LCBfX3MxXzE2NywgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJfdCBfX3JldF8xNjc7IFwKKyAgX19yZXRfMTY3ID0gX19ub3N3YXBfdnFyZG11bGhzX3MzMihfX3MwXzE2NywgX19ub3N3YXBfdmdldHFfbGFuZV9zMzIoX19yZXYxXzE2NywgX19wMl8xNjcpKTsgXAorICBfX3JldF8xNjc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtdWxoaF9sYW5lcV9zMTYoX19wMF8xNjgsIF9fcDFfMTY4LCBfX3AyXzE2OCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8xNjggPSBfX3AwXzE2ODsgXAorICBpbnQxNng4X3QgX19zMV8xNjggPSBfX3AxXzE2ODsgXAorICBpbnQxNl90IF9fcmV0XzE2ODsgXAorICBfX3JldF8xNjggPSB2cXJkbXVsaGhfczE2KF9fczBfMTY4LCB2Z2V0cV9sYW5lX3MxNihfX3MxXzE2OCwgX19wMl8xNjgpKTsgXAorICBfX3JldF8xNjg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbXVsaGhfbGFuZXFfczE2KF9fcDBfMTY5LCBfX3AxXzE2OSwgX19wMl8xNjkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMTY5ID0gX19wMF8xNjk7IFwKKyAgaW50MTZ4OF90IF9fczFfMTY5ID0gX19wMV8xNjk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MV8xNjk7ICBfX3JldjFfMTY5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNjksIF9fczFfMTY5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNl90IF9fcmV0XzE2OTsgXAorICBfX3JldF8xNjkgPSBfX25vc3dhcF92cXJkbXVsaGhfczE2KF9fczBfMTY5LCBfX25vc3dhcF92Z2V0cV9sYW5lX3MxNihfX3JldjFfMTY5LCBfX3AyXzE2OSkpOyBcCisgIF9fcmV0XzE2OTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG11bGhxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cXJkbXVsaHFfczMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtdWxocV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXJkbXVsaHFfczMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtdWxocV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFyZG11bGhxX3MxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbXVsaHFfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFyZG11bGhxX3MxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbXVsaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFyZG11bGhfczMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtdWxoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxcmRtdWxoX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbXVsaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFyZG11bGhfczE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtdWxoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxcmRtdWxoX3MxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OF90IHZxcnNobGJfdTgodWludDhfdCBfX3AwLCB1aW50OF90IF9fcDEpIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFyc2hsYl91OChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDhfdCB2cXJzaGxiX3U4KHVpbnQ4X3QgX19wMCwgdWludDhfdCBfX3AxKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobGJfdTgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdnFyc2hsc191MzIodWludDMyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHNfdTMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2cXJzaGxzX3UzMih1aW50MzJfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFyc2hsc191MzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdnFyc2hsZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2cXJzaGxkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnFyc2hsZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2X3QgdnFyc2hsaF91MTYodWludDE2X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobGhfdTE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZfdCB2cXJzaGxoX3UxNih1aW50MTZfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hsaF91MTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OF90IHZxcnNobGJfczgoaW50OF90IF9fcDAsIGludDhfdCBfX3AxKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxiX3M4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4X3QgdnFyc2hsYl9zOChpbnQ4X3QgX19wMCwgaW50OF90IF9fcDEpIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobGJfczgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2cXJzaGxzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2cXJzaGxzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZxcnNobGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZxcnNobGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdnFyc2hsaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hsaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdnFyc2hsaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hsaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybl9oaWdoX25fdTMyKF9fcDBfMTcwLCBfX3AxXzE3MCwgX19wMl8xNzApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczBfMTcwID0gX19wMF8xNzA7IFwKKyAgdWludDMyeDRfdCBfX3MxXzE3MCA9IF9fcDFfMTcwOyBcCisgIHVpbnQxNng4X3QgX19yZXRfMTcwOyBcCisgIF9fcmV0XzE3MCA9ICh1aW50MTZ4OF90KSh2Y29tYmluZV91MTYoKHVpbnQxNng0X3QpKF9fczBfMTcwKSwgKHVpbnQxNng0X3QpKHZxcnNocm5fbl91MzIoX19zMV8xNzAsIF9fcDJfMTcwKSkpKTsgXAorICBfX3JldF8xNzA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl91MzIoX19wMF8xNzEsIF9fcDFfMTcxLCBfX3AyXzE3MSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMF8xNzEgPSBfX3AwXzE3MTsgXAorICB1aW50MzJ4NF90IF9fczFfMTcxID0gX19wMV8xNzE7IFwKKyAgdWludDE2eDRfdCBfX3JldjBfMTcxOyAgX19yZXYwXzE3MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTcxLCBfX3MwXzE3MSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjFfMTcxOyAgX19yZXYxXzE3MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTcxLCBfX3MxXzE3MSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldF8xNzE7IFwKKyAgX19yZXRfMTcxID0gKHVpbnQxNng4X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3UxNigodWludDE2eDRfdCkoX19yZXYwXzE3MSksICh1aW50MTZ4NF90KShfX25vc3dhcF92cXJzaHJuX25fdTMyKF9fcmV2MV8xNzEsIF9fcDJfMTcxKSkpKTsgXAorICBfX3JldF8xNzEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xNzEsIF9fcmV0XzE3MSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTcxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl91NjQoX19wMF8xNzIsIF9fcDFfMTcyLCBfX3AyXzE3MikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMF8xNzIgPSBfX3AwXzE3MjsgXAorICB1aW50NjR4Ml90IF9fczFfMTcyID0gX19wMV8xNzI7IFwKKyAgdWludDMyeDRfdCBfX3JldF8xNzI7IFwKKyAgX19yZXRfMTcyID0gKHVpbnQzMng0X3QpKHZjb21iaW5lX3UzMigodWludDMyeDJfdCkoX19zMF8xNzIpLCAodWludDMyeDJfdCkodnFyc2hybl9uX3U2NChfX3MxXzE3MiwgX19wMl8xNzIpKSkpOyBcCisgIF9fcmV0XzE3MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5faGlnaF9uX3U2NChfX3AwXzE3MywgX19wMV8xNzMsIF9fcDJfMTczKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwXzE3MyA9IF9fcDBfMTczOyBcCisgIHVpbnQ2NHgyX3QgX19zMV8xNzMgPSBfX3AxXzE3MzsgXAorICB1aW50MzJ4Ml90IF9fcmV2MF8xNzM7ICBfX3JldjBfMTczID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xNzMsIF9fczBfMTczLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV2MV8xNzM7ICBfX3JldjFfMTczID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNzMsIF9fczFfMTczLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0XzE3MzsgXAorICBfX3JldF8xNzMgPSAodWludDMyeDRfdCkoX19ub3N3YXBfdmNvbWJpbmVfdTMyKCh1aW50MzJ4Ml90KShfX3JldjBfMTczKSwgKHVpbnQzMngyX3QpKF9fbm9zd2FwX3ZxcnNocm5fbl91NjQoX19yZXYxXzE3MywgX19wMl8xNzMpKSkpOyBcCisgIF9fcmV0XzE3MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE3MywgX19yZXRfMTczLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xNzM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocm5faGlnaF9uX3UxNihfX3AwXzE3NCwgX19wMV8xNzQsIF9fcDJfMTc0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczBfMTc0ID0gX19wMF8xNzQ7IFwKKyAgdWludDE2eDhfdCBfX3MxXzE3NCA9IF9fcDFfMTc0OyBcCisgIHVpbnQ4eDE2X3QgX19yZXRfMTc0OyBcCisgIF9fcmV0XzE3NCA9ICh1aW50OHgxNl90KSh2Y29tYmluZV91OCgodWludDh4OF90KShfX3MwXzE3NCksICh1aW50OHg4X3QpKHZxcnNocm5fbl91MTYoX19zMV8xNzQsIF9fcDJfMTc0KSkpKTsgXAorICBfX3JldF8xNzQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl91MTYoX19wMF8xNzUsIF9fcDFfMTc1LCBfX3AyXzE3NSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwXzE3NSA9IF9fcDBfMTc1OyBcCisgIHVpbnQxNng4X3QgX19zMV8xNzUgPSBfX3AxXzE3NTsgXAorICB1aW50OHg4X3QgX19yZXYwXzE3NTsgIF9fcmV2MF8xNzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE3NSwgX19zMF8xNzUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxXzE3NTsgIF9fcmV2MV8xNzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE3NSwgX19zMV8xNzUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXRfMTc1OyBcCisgIF9fcmV0XzE3NSA9ICh1aW50OHgxNl90KShfX25vc3dhcF92Y29tYmluZV91OCgodWludDh4OF90KShfX3JldjBfMTc1KSwgKHVpbnQ4eDhfdCkoX19ub3N3YXBfdnFyc2hybl9uX3UxNihfX3JldjFfMTc1LCBfX3AyXzE3NSkpKSk7IFwKKyAgX19yZXRfMTc1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTc1LCBfX3JldF8xNzUsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzE3NTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybl9oaWdoX25fczMyKF9fcDBfMTc2LCBfX3AxXzE3NiwgX19wMl8xNzYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMF8xNzYgPSBfX3AwXzE3NjsgXAorICBpbnQzMng0X3QgX19zMV8xNzYgPSBfX3AxXzE3NjsgXAorICBpbnQxNng4X3QgX19yZXRfMTc2OyBcCisgIF9fcmV0XzE3NiA9IChpbnQxNng4X3QpKHZjb21iaW5lX3MxNigoaW50MTZ4NF90KShfX3MwXzE3NiksIChpbnQxNng0X3QpKHZxcnNocm5fbl9zMzIoX19zMV8xNzYsIF9fcDJfMTc2KSkpKTsgXAorICBfX3JldF8xNzY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl9zMzIoX19wMF8xNzcsIF9fcDFfMTc3LCBfX3AyXzE3NykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzE3NyA9IF9fcDBfMTc3OyBcCisgIGludDMyeDRfdCBfX3MxXzE3NyA9IF9fcDFfMTc3OyBcCisgIGludDE2eDRfdCBfX3JldjBfMTc3OyAgX19yZXYwXzE3NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTc3LCBfX3MwXzE3NywgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MV8xNzc7ICBfX3JldjFfMTc3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNzcsIF9fczFfMTc3LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXRfMTc3OyBcCisgIF9fcmV0XzE3NyA9IChpbnQxNng4X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3MxNigoaW50MTZ4NF90KShfX3JldjBfMTc3KSwgKGludDE2eDRfdCkoX19ub3N3YXBfdnFyc2hybl9uX3MzMihfX3JldjFfMTc3LCBfX3AyXzE3NykpKSk7IFwKKyAgX19yZXRfMTc3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTc3LCBfX3JldF8xNzcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzE3NzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybl9oaWdoX25fczY0KF9fcDBfMTc4LCBfX3AxXzE3OCwgX19wMl8xNzgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF8xNzggPSBfX3AwXzE3ODsgXAorICBpbnQ2NHgyX3QgX19zMV8xNzggPSBfX3AxXzE3ODsgXAorICBpbnQzMng0X3QgX19yZXRfMTc4OyBcCisgIF9fcmV0XzE3OCA9IChpbnQzMng0X3QpKHZjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3MwXzE3OCksIChpbnQzMngyX3QpKHZxcnNocm5fbl9zNjQoX19zMV8xNzgsIF9fcDJfMTc4KSkpKTsgXAorICBfX3JldF8xNzg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl9zNjQoX19wMF8xNzksIF9fcDFfMTc5LCBfX3AyXzE3OSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwXzE3OSA9IF9fcDBfMTc5OyBcCisgIGludDY0eDJfdCBfX3MxXzE3OSA9IF9fcDFfMTc5OyBcCisgIGludDMyeDJfdCBfX3JldjBfMTc5OyAgX19yZXYwXzE3OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTc5LCBfX3MwXzE3OSwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV2MV8xNzk7ICBfX3JldjFfMTc5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNzksIF9fczFfMTc5LCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXRfMTc5OyBcCisgIF9fcmV0XzE3OSA9IChpbnQzMng0X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3JldjBfMTc5KSwgKGludDMyeDJfdCkoX19ub3N3YXBfdnFyc2hybl9uX3M2NChfX3JldjFfMTc5LCBfX3AyXzE3OSkpKSk7IFwKKyAgX19yZXRfMTc5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTc5LCBfX3JldF8xNzksIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzE3OTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybl9oaWdoX25fczE2KF9fcDBfMTgwLCBfX3AxXzE4MCwgX19wMl8xODApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwXzE4MCA9IF9fcDBfMTgwOyBcCisgIGludDE2eDhfdCBfX3MxXzE4MCA9IF9fcDFfMTgwOyBcCisgIGludDh4MTZfdCBfX3JldF8xODA7IFwKKyAgX19yZXRfMTgwID0gKGludDh4MTZfdCkodmNvbWJpbmVfczgoKGludDh4OF90KShfX3MwXzE4MCksIChpbnQ4eDhfdCkodnFyc2hybl9uX3MxNihfX3MxXzE4MCwgX19wMl8xODApKSkpOyBcCisgIF9fcmV0XzE4MDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5faGlnaF9uX3MxNihfX3AwXzE4MSwgX19wMV8xODEsIF9fcDJfMTgxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF8xODEgPSBfX3AwXzE4MTsgXAorICBpbnQxNng4X3QgX19zMV8xODEgPSBfX3AxXzE4MTsgXAorICBpbnQ4eDhfdCBfX3JldjBfMTgxOyAgX19yZXYwXzE4MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTgxLCBfX3MwXzE4MSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MV8xODE7ICBfX3JldjFfMTgxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xODEsIF9fczFfMTgxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXRfMTgxOyBcCisgIF9fcmV0XzE4MSA9IChpbnQ4eDE2X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19yZXYwXzE4MSksIChpbnQ4eDhfdCkoX19ub3N3YXBfdnFyc2hybl9uX3MxNihfX3JldjFfMTgxLCBfX3AyXzE4MSkpKSk7IFwKKyAgX19yZXRfMTgxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTgxLCBfX3JldF8xODEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzE4MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybnNfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuc19uX3UzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5zX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hybnNfbl91MzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocm5kX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFyc2hybmRfbl91NjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5kX25fdTY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuaF9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuaF9uX3UxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5oX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5oX25fdTE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuc19uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5zX25fczMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybnNfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuc19uX3MzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5kX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFyc2hybmRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocm5oX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5oX25fczE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybmhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFyc2hybmhfbl9zMTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocnVuX2hpZ2hfbl9zMzIoX19wMF8xODIsIF9fcDFfMTgyLCBfX3AyXzE4MikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzE4MiA9IF9fcDBfMTgyOyBcCisgIGludDMyeDRfdCBfX3MxXzE4MiA9IF9fcDFfMTgyOyBcCisgIGludDE2eDhfdCBfX3JldF8xODI7IFwKKyAgX19yZXRfMTgyID0gKGludDE2eDhfdCkodmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fczBfMTgyKSwgKGludDE2eDRfdCkodnFyc2hydW5fbl9zMzIoX19zMV8xODIsIF9fcDJfMTgyKSkpKTsgXAorICBfX3JldF8xODI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJ1bl9oaWdoX25fczMyKF9fcDBfMTgzLCBfX3AxXzE4MywgX19wMl8xODMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMF8xODMgPSBfX3AwXzE4MzsgXAorICBpbnQzMng0X3QgX19zMV8xODMgPSBfX3AxXzE4MzsgXAorICBpbnQxNng0X3QgX19yZXYwXzE4MzsgIF9fcmV2MF8xODMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE4MywgX19zMF8xODMsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjFfMTgzOyAgX19yZXYxXzE4MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTgzLCBfX3MxXzE4MywgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzE4MzsgXAorICBfX3JldF8xODMgPSAoaW50MTZ4OF90KShfX25vc3dhcF92Y29tYmluZV9zMTYoKGludDE2eDRfdCkoX19yZXYwXzE4MyksIChpbnQxNng0X3QpKF9fbm9zd2FwX3ZxcnNocnVuX25fczMyKF9fcmV2MV8xODMsIF9fcDJfMTgzKSkpKTsgXAorICBfX3JldF8xODMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xODMsIF9fcmV0XzE4MywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTgzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJ1bl9oaWdoX25fczY0KF9fcDBfMTg0LCBfX3AxXzE4NCwgX19wMl8xODQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF8xODQgPSBfX3AwXzE4NDsgXAorICBpbnQ2NHgyX3QgX19zMV8xODQgPSBfX3AxXzE4NDsgXAorICBpbnQzMng0X3QgX19yZXRfMTg0OyBcCisgIF9fcmV0XzE4NCA9IChpbnQzMng0X3QpKHZjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3MwXzE4NCksIChpbnQzMngyX3QpKHZxcnNocnVuX25fczY0KF9fczFfMTg0LCBfX3AyXzE4NCkpKSk7IFwKKyAgX19yZXRfMTg0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hydW5faGlnaF9uX3M2NChfX3AwXzE4NSwgX19wMV8xODUsIF9fcDJfMTg1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczBfMTg1ID0gX19wMF8xODU7IFwKKyAgaW50NjR4Ml90IF9fczFfMTg1ID0gX19wMV8xODU7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MF8xODU7ICBfX3JldjBfMTg1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xODUsIF9fczBfMTg1LCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXYxXzE4NTsgIF9fcmV2MV8xODUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE4NSwgX19zMV8xODUsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldF8xODU7IFwKKyAgX19yZXRfMTg1ID0gKGludDMyeDRfdCkoX19ub3N3YXBfdmNvbWJpbmVfczMyKChpbnQzMngyX3QpKF9fcmV2MF8xODUpLCAoaW50MzJ4Ml90KShfX25vc3dhcF92cXJzaHJ1bl9uX3M2NChfX3JldjFfMTg1LCBfX3AyXzE4NSkpKSk7IFwKKyAgX19yZXRfMTg1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTg1LCBfX3JldF8xODUsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzE4NTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hydW5faGlnaF9uX3MxNihfX3AwXzE4NiwgX19wMV8xODYsIF9fcDJfMTg2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF8xODYgPSBfX3AwXzE4NjsgXAorICBpbnQxNng4X3QgX19zMV8xODYgPSBfX3AxXzE4NjsgXAorICBpbnQ4eDE2X3QgX19yZXRfMTg2OyBcCisgIF9fcmV0XzE4NiA9IChpbnQ4eDE2X3QpKHZjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19zMF8xODYpLCAoaW50OHg4X3QpKHZxcnNocnVuX25fczE2KF9fczFfMTg2LCBfX3AyXzE4NikpKSk7IFwKKyAgX19yZXRfMTg2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hydW5faGlnaF9uX3MxNihfX3AwXzE4NywgX19wMV8xODcsIF9fcDJfMTg3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF8xODcgPSBfX3AwXzE4NzsgXAorICBpbnQxNng4X3QgX19zMV8xODcgPSBfX3AxXzE4NzsgXAorICBpbnQ4eDhfdCBfX3JldjBfMTg3OyAgX19yZXYwXzE4NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTg3LCBfX3MwXzE4NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MV8xODc7ICBfX3JldjFfMTg3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xODcsIF9fczFfMTg3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXRfMTg3OyBcCisgIF9fcmV0XzE4NyA9IChpbnQ4eDE2X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19yZXYwXzE4NyksIChpbnQ4eDhfdCkoX19ub3N3YXBfdnFyc2hydW5fbl9zMTYoX19yZXYxXzE4NywgX19wMl8xODcpKSkpOyBcCisgIF9fcmV0XzE4NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE4NywgX19yZXRfMTg3LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xODc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocnVuc19uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocnVuc19uX3MzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocnVuc19uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocnVuc19uX3MzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hydW5kX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5kX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hydW5kX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5kX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJ1bmhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5oX25fczE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hydW5oX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocnVuaF9uX3MxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDhfdCB2cXNobGJfdTgodWludDhfdCBfX3AwLCB1aW50OF90IF9fcDEpIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFzaGxiX3U4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OF90IHZxc2hsYl91OCh1aW50OF90IF9fcDAsIHVpbnQ4X3QgX19wMSkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGJfdTgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdnFzaGxzX3UzMih1aW50MzJfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaGxzX3UzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdnFzaGxzX3UzMih1aW50MzJfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaGxzX3UzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2cXNobGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2cXNobGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNl90IHZxc2hsaF91MTYodWludDE2X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsaF91MTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNl90IHZxc2hsaF91MTYodWludDE2X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsaF91MTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OF90IHZxc2hsYl9zOChpbnQ4X3QgX19wMCwgaW50OF90IF9fcDEpIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsYl9zOChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZxc2hsYl9zOChpbnQ4X3QgX19wMCwgaW50OF90IF9fcDEpIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsYl9zOChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZxc2hsc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaGxzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2cXNobHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2cXNobGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdnFzaGxkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdnFzaGxoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZxc2hsaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobGJfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsYl9uX3U4KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxiX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGJfbl91OChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxzX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaGxzX25fdTMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxzX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaGxzX25fdTMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobGRfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGRfbl91NjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobGRfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGRfbl91NjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsaF9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsaF9uX3UxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsaF9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsaF9uX3UxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxiX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGJfbl9zOChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsYl9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzaGxiX25fczgoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsc19uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsc19uX3MzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsc19uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsc19uX3MzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxkX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFzaGxkX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxkX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFzaGxkX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobGhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobGhfbl9zMTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobGhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobGhfbl9zMTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsdWJfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OF90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdWJfbl9zOChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsdWJfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OF90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdWJfbl9zOChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGx1c19uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdXNfbl9zMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHVzX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaGx1c19uX3MzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGx1ZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdWRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHVkX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFzaGx1ZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGx1aF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdWhfbl9zMTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHVoX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaGx1aF9uX3MxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJuX2hpZ2hfbl91MzIoX19wMF8xODgsIF9fcDFfMTg4LCBfX3AyXzE4OCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMF8xODggPSBfX3AwXzE4ODsgXAorICB1aW50MzJ4NF90IF9fczFfMTg4ID0gX19wMV8xODg7IFwKKyAgdWludDE2eDhfdCBfX3JldF8xODg7IFwKKyAgX19yZXRfMTg4ID0gKHVpbnQxNng4X3QpKHZjb21iaW5lX3UxNigodWludDE2eDRfdCkoX19zMF8xODgpLCAodWludDE2eDRfdCkodnFzaHJuX25fdTMyKF9fczFfMTg4LCBfX3AyXzE4OCkpKSk7IFwKKyAgX19yZXRfMTg4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuX2hpZ2hfbl91MzIoX19wMF8xODksIF9fcDFfMTg5LCBfX3AyXzE4OSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMF8xODkgPSBfX3AwXzE4OTsgXAorICB1aW50MzJ4NF90IF9fczFfMTg5ID0gX19wMV8xODk7IFwKKyAgdWludDE2eDRfdCBfX3JldjBfMTg5OyAgX19yZXYwXzE4OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTg5LCBfX3MwXzE4OSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjFfMTg5OyAgX19yZXYxXzE4OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTg5LCBfX3MxXzE4OSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldF8xODk7IFwKKyAgX19yZXRfMTg5ID0gKHVpbnQxNng4X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3UxNigodWludDE2eDRfdCkoX19yZXYwXzE4OSksICh1aW50MTZ4NF90KShfX25vc3dhcF92cXNocm5fbl91MzIoX19yZXYxXzE4OSwgX19wMl8xODkpKSkpOyBcCisgIF9fcmV0XzE4OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE4OSwgX19yZXRfMTg5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xODk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybl9oaWdoX25fdTY0KF9fcDBfMTkwLCBfX3AxXzE5MCwgX19wMl8xOTApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczBfMTkwID0gX19wMF8xOTA7IFwKKyAgdWludDY0eDJfdCBfX3MxXzE5MCA9IF9fcDFfMTkwOyBcCisgIHVpbnQzMng0X3QgX19yZXRfMTkwOyBcCisgIF9fcmV0XzE5MCA9ICh1aW50MzJ4NF90KSh2Y29tYmluZV91MzIoKHVpbnQzMngyX3QpKF9fczBfMTkwKSwgKHVpbnQzMngyX3QpKHZxc2hybl9uX3U2NChfX3MxXzE5MCwgX19wMl8xOTApKSkpOyBcCisgIF9fcmV0XzE5MDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybl9oaWdoX25fdTY0KF9fcDBfMTkxLCBfX3AxXzE5MSwgX19wMl8xOTEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczBfMTkxID0gX19wMF8xOTE7IFwKKyAgdWludDY0eDJfdCBfX3MxXzE5MSA9IF9fcDFfMTkxOyBcCisgIHVpbnQzMngyX3QgX19yZXYwXzE5MTsgIF9fcmV2MF8xOTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE5MSwgX19zMF8xOTEsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYxXzE5MTsgIF9fcmV2MV8xOTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE5MSwgX19zMV8xOTEsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXRfMTkxOyBcCisgIF9fcmV0XzE5MSA9ICh1aW50MzJ4NF90KShfX25vc3dhcF92Y29tYmluZV91MzIoKHVpbnQzMngyX3QpKF9fcmV2MF8xOTEpLCAodWludDMyeDJfdCkoX19ub3N3YXBfdnFzaHJuX25fdTY0KF9fcmV2MV8xOTEsIF9fcDJfMTkxKSkpKTsgXAorICBfX3JldF8xOTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xOTEsIF9fcmV0XzE5MSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTkxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5faGlnaF9uX3UxNihfX3AwXzE5MiwgX19wMV8xOTIsIF9fcDJfMTkyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczBfMTkyID0gX19wMF8xOTI7IFwKKyAgdWludDE2eDhfdCBfX3MxXzE5MiA9IF9fcDFfMTkyOyBcCisgIHVpbnQ4eDE2X3QgX19yZXRfMTkyOyBcCisgIF9fcmV0XzE5MiA9ICh1aW50OHgxNl90KSh2Y29tYmluZV91OCgodWludDh4OF90KShfX3MwXzE5MiksICh1aW50OHg4X3QpKHZxc2hybl9uX3UxNihfX3MxXzE5MiwgX19wMl8xOTIpKSkpOyBcCisgIF9fcmV0XzE5MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybl9oaWdoX25fdTE2KF9fcDBfMTkzLCBfX3AxXzE5MywgX19wMl8xOTMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMF8xOTMgPSBfX3AwXzE5MzsgXAorICB1aW50MTZ4OF90IF9fczFfMTkzID0gX19wMV8xOTM7IFwKKyAgdWludDh4OF90IF9fcmV2MF8xOTM7ICBfX3JldjBfMTkzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xOTMsIF9fczBfMTkzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MV8xOTM7ICBfX3JldjFfMTkzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xOTMsIF9fczFfMTkzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV0XzE5MzsgXAorICBfX3JldF8xOTMgPSAodWludDh4MTZfdCkoX19ub3N3YXBfdmNvbWJpbmVfdTgoKHVpbnQ4eDhfdCkoX19yZXYwXzE5MyksICh1aW50OHg4X3QpKF9fbm9zd2FwX3Zxc2hybl9uX3UxNihfX3JldjFfMTkzLCBfX3AyXzE5MykpKSk7IFwKKyAgX19yZXRfMTkzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTkzLCBfX3JldF8xOTMsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzE5MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJuX2hpZ2hfbl9zMzIoX19wMF8xOTQsIF9fcDFfMTk0LCBfX3AyXzE5NCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzE5NCA9IF9fcDBfMTk0OyBcCisgIGludDMyeDRfdCBfX3MxXzE5NCA9IF9fcDFfMTk0OyBcCisgIGludDE2eDhfdCBfX3JldF8xOTQ7IFwKKyAgX19yZXRfMTk0ID0gKGludDE2eDhfdCkodmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fczBfMTk0KSwgKGludDE2eDRfdCkodnFzaHJuX25fczMyKF9fczFfMTk0LCBfX3AyXzE5NCkpKSk7IFwKKyAgX19yZXRfMTk0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuX2hpZ2hfbl9zMzIoX19wMF8xOTUsIF9fcDFfMTk1LCBfX3AyXzE5NSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzE5NSA9IF9fcDBfMTk1OyBcCisgIGludDMyeDRfdCBfX3MxXzE5NSA9IF9fcDFfMTk1OyBcCisgIGludDE2eDRfdCBfX3JldjBfMTk1OyAgX19yZXYwXzE5NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTk1LCBfX3MwXzE5NSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MV8xOTU7ICBfX3JldjFfMTk1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xOTUsIF9fczFfMTk1LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXRfMTk1OyBcCisgIF9fcmV0XzE5NSA9IChpbnQxNng4X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3MxNigoaW50MTZ4NF90KShfX3JldjBfMTk1KSwgKGludDE2eDRfdCkoX19ub3N3YXBfdnFzaHJuX25fczMyKF9fcmV2MV8xOTUsIF9fcDJfMTk1KSkpKTsgXAorICBfX3JldF8xOTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xOTUsIF9fcmV0XzE5NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTk1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5faGlnaF9uX3M2NChfX3AwXzE5NiwgX19wMV8xOTYsIF9fcDJfMTk2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczBfMTk2ID0gX19wMF8xOTY7IFwKKyAgaW50NjR4Ml90IF9fczFfMTk2ID0gX19wMV8xOTY7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzE5NjsgXAorICBfX3JldF8xOTYgPSAoaW50MzJ4NF90KSh2Y29tYmluZV9zMzIoKGludDMyeDJfdCkoX19zMF8xOTYpLCAoaW50MzJ4Ml90KSh2cXNocm5fbl9zNjQoX19zMV8xOTYsIF9fcDJfMTk2KSkpKTsgXAorICBfX3JldF8xOTY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5faGlnaF9uX3M2NChfX3AwXzE5NywgX19wMV8xOTcsIF9fcDJfMTk3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczBfMTk3ID0gX19wMF8xOTc7IFwKKyAgaW50NjR4Ml90IF9fczFfMTk3ID0gX19wMV8xOTc7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MF8xOTc7ICBfX3JldjBfMTk3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xOTcsIF9fczBfMTk3LCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXYxXzE5NzsgIF9fcmV2MV8xOTcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE5NywgX19zMV8xOTcsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldF8xOTc7IFwKKyAgX19yZXRfMTk3ID0gKGludDMyeDRfdCkoX19ub3N3YXBfdmNvbWJpbmVfczMyKChpbnQzMngyX3QpKF9fcmV2MF8xOTcpLCAoaW50MzJ4Ml90KShfX25vc3dhcF92cXNocm5fbl9zNjQoX19yZXYxXzE5NywgX19wMl8xOTcpKSkpOyBcCisgIF9fcmV0XzE5NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE5NywgX19yZXRfMTk3LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xOTc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybl9oaWdoX25fczE2KF9fcDBfMTk4LCBfX3AxXzE5OCwgX19wMl8xOTgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwXzE5OCA9IF9fcDBfMTk4OyBcCisgIGludDE2eDhfdCBfX3MxXzE5OCA9IF9fcDFfMTk4OyBcCisgIGludDh4MTZfdCBfX3JldF8xOTg7IFwKKyAgX19yZXRfMTk4ID0gKGludDh4MTZfdCkodmNvbWJpbmVfczgoKGludDh4OF90KShfX3MwXzE5OCksIChpbnQ4eDhfdCkodnFzaHJuX25fczE2KF9fczFfMTk4LCBfX3AyXzE5OCkpKSk7IFwKKyAgX19yZXRfMTk4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuX2hpZ2hfbl9zMTYoX19wMF8xOTksIF9fcDFfMTk5LCBfX3AyXzE5OSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczBfMTk5ID0gX19wMF8xOTk7IFwKKyAgaW50MTZ4OF90IF9fczFfMTk5ID0gX19wMV8xOTk7IFwKKyAgaW50OHg4X3QgX19yZXYwXzE5OTsgIF9fcmV2MF8xOTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE5OSwgX19zMF8xOTksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjFfMTk5OyAgX19yZXYxXzE5OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTk5LCBfX3MxXzE5OSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0XzE5OTsgXAorICBfX3JldF8xOTkgPSAoaW50OHgxNl90KShfX25vc3dhcF92Y29tYmluZV9zOCgoaW50OHg4X3QpKF9fcmV2MF8xOTkpLCAoaW50OHg4X3QpKF9fbm9zd2FwX3Zxc2hybl9uX3MxNihfX3JldjFfMTk5LCBfX3AyXzE5OSkpKSk7IFwKKyAgX19yZXRfMTk5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTk5LCBfX3JldF8xOTksIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzE5OTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJuc19uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybnNfbl91MzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5zX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaHJuc19uX3UzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJuZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybmRfbl91NjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5kX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaHJuZF9uX3U2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJuaF9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5oX25fdTE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuaF9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5oX25fdTE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5zX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaHJuc19uX3MzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybnNfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5zX25fczMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5kX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaHJuZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5kX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5oX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybmhfbl9zMTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5oX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybmhfbl9zMTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hydW5faGlnaF9uX3MzMihfX3AwXzIwMCwgX19wMV8yMDAsIF9fcDJfMjAwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczBfMjAwID0gX19wMF8yMDA7IFwKKyAgaW50MzJ4NF90IF9fczFfMjAwID0gX19wMV8yMDA7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzIwMDsgXAorICBfX3JldF8yMDAgPSAoaW50MTZ4OF90KSh2Y29tYmluZV9zMTYoKGludDE2eDRfdCkoX19zMF8yMDApLCAoaW50MTZ4NF90KSh2cXNocnVuX25fczMyKF9fczFfMjAwLCBfX3AyXzIwMCkpKSk7IFwKKyAgX19yZXRfMjAwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJ1bl9oaWdoX25fczMyKF9fcDBfMjAxLCBfX3AxXzIwMSwgX19wMl8yMDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMF8yMDEgPSBfX3AwXzIwMTsgXAorICBpbnQzMng0X3QgX19zMV8yMDEgPSBfX3AxXzIwMTsgXAorICBpbnQxNng0X3QgX19yZXYwXzIwMTsgIF9fcmV2MF8yMDEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIwMSwgX19zMF8yMDEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjFfMjAxOyAgX19yZXYxXzIwMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjAxLCBfX3MxXzIwMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzIwMTsgXAorICBfX3JldF8yMDEgPSAoaW50MTZ4OF90KShfX25vc3dhcF92Y29tYmluZV9zMTYoKGludDE2eDRfdCkoX19yZXYwXzIwMSksIChpbnQxNng0X3QpKF9fbm9zd2FwX3Zxc2hydW5fbl9zMzIoX19yZXYxXzIwMSwgX19wMl8yMDEpKSkpOyBcCisgIF9fcmV0XzIwMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIwMSwgX19yZXRfMjAxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMDE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hydW5faGlnaF9uX3M2NChfX3AwXzIwMiwgX19wMV8yMDIsIF9fcDJfMjAyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczBfMjAyID0gX19wMF8yMDI7IFwKKyAgaW50NjR4Ml90IF9fczFfMjAyID0gX19wMV8yMDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzIwMjsgXAorICBfX3JldF8yMDIgPSAoaW50MzJ4NF90KSh2Y29tYmluZV9zMzIoKGludDMyeDJfdCkoX19zMF8yMDIpLCAoaW50MzJ4Ml90KSh2cXNocnVuX25fczY0KF9fczFfMjAyLCBfX3AyXzIwMikpKSk7IFwKKyAgX19yZXRfMjAyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJ1bl9oaWdoX25fczY0KF9fcDBfMjAzLCBfX3AxXzIwMywgX19wMl8yMDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF8yMDMgPSBfX3AwXzIwMzsgXAorICBpbnQ2NHgyX3QgX19zMV8yMDMgPSBfX3AxXzIwMzsgXAorICBpbnQzMngyX3QgX19yZXYwXzIwMzsgIF9fcmV2MF8yMDMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIwMywgX19zMF8yMDMsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldjFfMjAzOyAgX19yZXYxXzIwMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjAzLCBfX3MxXzIwMywgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzIwMzsgXAorICBfX3JldF8yMDMgPSAoaW50MzJ4NF90KShfX25vc3dhcF92Y29tYmluZV9zMzIoKGludDMyeDJfdCkoX19yZXYwXzIwMyksIChpbnQzMngyX3QpKF9fbm9zd2FwX3Zxc2hydW5fbl9zNjQoX19yZXYxXzIwMywgX19wMl8yMDMpKSkpOyBcCisgIF9fcmV0XzIwMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIwMywgX19yZXRfMjAzLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMDM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hydW5faGlnaF9uX3MxNihfX3AwXzIwNCwgX19wMV8yMDQsIF9fcDJfMjA0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF8yMDQgPSBfX3AwXzIwNDsgXAorICBpbnQxNng4X3QgX19zMV8yMDQgPSBfX3AxXzIwNDsgXAorICBpbnQ4eDE2X3QgX19yZXRfMjA0OyBcCisgIF9fcmV0XzIwNCA9IChpbnQ4eDE2X3QpKHZjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19zMF8yMDQpLCAoaW50OHg4X3QpKHZxc2hydW5fbl9zMTYoX19zMV8yMDQsIF9fcDJfMjA0KSkpKTsgXAorICBfX3JldF8yMDQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocnVuX2hpZ2hfbl9zMTYoX19wMF8yMDUsIF9fcDFfMjA1LCBfX3AyXzIwNSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczBfMjA1ID0gX19wMF8yMDU7IFwKKyAgaW50MTZ4OF90IF9fczFfMjA1ID0gX19wMV8yMDU7IFwKKyAgaW50OHg4X3QgX19yZXYwXzIwNTsgIF9fcmV2MF8yMDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIwNSwgX19zMF8yMDUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjFfMjA1OyAgX19yZXYxXzIwNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjA1LCBfX3MxXzIwNSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0XzIwNTsgXAorICBfX3JldF8yMDUgPSAoaW50OHgxNl90KShfX25vc3dhcF92Y29tYmluZV9zOCgoaW50OHg4X3QpKF9fcmV2MF8yMDUpLCAoaW50OHg4X3QpKF9fbm9zd2FwX3Zxc2hydW5fbl9zMTYoX19yZXYxXzIwNSwgX19wMl8yMDUpKSkpOyBcCisgIF9fcmV0XzIwNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIwNSwgX19yZXRfMjA1LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMDU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hydW5zX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bnNfbl9zMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocnVuc19uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5zX25fczMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocnVuZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5kX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJ1bmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJ1bmhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bmhfbl9zMTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocnVuaF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuaF9uX3MxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDhfdCB2cXN1YmJfdTgodWludDhfdCBfX3AwLCB1aW50OF90IF9fcDEpIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFzdWJiX3U4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OF90IHZxc3ViYl91OCh1aW50OF90IF9fcDAsIHVpbnQ4X3QgX19wMSkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YmJfdTgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdnFzdWJzX3UzMih1aW50MzJfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFzdWJzX3UzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdnFzdWJzX3UzMih1aW50MzJfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFzdWJzX3UzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2cXN1YmRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YmRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2cXN1YmRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YmRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNl90IHZxc3ViaF91MTYodWludDE2X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViaF91MTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNl90IHZxc3ViaF91MTYodWludDE2X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViaF91MTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OF90IHZxc3ViYl9zOChpbnQ4X3QgX19wMCwgaW50OF90IF9fcDEpIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViYl9zOChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZxc3ViYl9zOChpbnQ4X3QgX19wMCwgaW50OF90IF9fcDEpIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViYl9zOChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZxc3Vic19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzdWJzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2cXN1YnNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3Vic19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJfdCBfX25vc3dhcF92cXN1YnNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3Vic19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2cXN1YmRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdnFzdWJkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YmRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdnFzdWJoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YmhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZxc3ViaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFzdWJoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNl90IF9fbm9zd2FwX3Zxc3ViaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFzdWJoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnF0YmwxX3A4KHBvbHk4eDE2X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnF0YmwxX3A4KHBvbHk4eDE2X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cXRibDFxX3A4KHBvbHk4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZxdGJsMXFfcDgocG9seTh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwxcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cXRibDFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZxdGJsMXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwxcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxdGJsMXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZxdGJsMXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwxcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZxdGJsMV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cXRibDFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnF0YmwxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZxdGJsMV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cXRibDJfcDgocG9seTh4MTZ4Ml90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cXRibDJfcDgocG9seTh4MTZ4Ml90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDE2eDJfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwyX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cXRibDJxX3A4KHBvbHk4eDE2eDJfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwycV92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMSwgMzYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZxdGJsMnFfcDgocG9seTh4MTZ4Ml90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNngyX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMnFfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEsIDM2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnF0YmwycV91OCh1aW50OHgxNngyX3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMnFfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cXRibDJxX3U4KHVpbnQ4eDE2eDJfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZ4Ml90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJxX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnF0YmwycV9zOChpbnQ4eDE2eDJfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwycV92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnF0YmwycV9zOChpbnQ4eDE2eDJfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2eDJfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwycV92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZxdGJsMl91OCh1aW50OHgxNngyX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMl92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cXRibDJfdTgodWludDh4MTZ4Ml90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDE2eDJfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwyX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxdGJsMl9zOChpbnQ4eDE2eDJfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwyX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cXRibDJfczgoaW50OHgxNngyX3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDE2eDJfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwyX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZxdGJsM19wOChwb2x5OHgxNngzX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsM192KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMC52YWxbMl0sIChpbnQ4eDhfdClfX3AxLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZxdGJsM19wOChwb2x5OHgxNngzX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4MTZ4M190IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwzX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MSwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZxdGJsM3FfcDgocG9seTh4MTZ4M190IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNxX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AwLnZhbFsyXSwgKGludDh4MTZfdClfX3AxLCAzNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnF0YmwzcV9wOChwb2x5OHgxNngzX3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2eDNfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsM3FfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MSwgMzYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cXRibDNxX3U4KHVpbnQ4eDE2eDNfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwzcV92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMC52YWxbMl0sIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZxdGJsM3FfdTgodWludDh4MTZ4M190IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNngzX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNxX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cXRibDNxX3M4KGludDh4MTZ4M190IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNxX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AwLnZhbFsyXSwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cXRibDNxX3M4KGludDh4MTZ4M190IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZ4M190IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwzcV92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnF0YmwzX3U4KHVpbnQ4eDE2eDNfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwzX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AwLnZhbFsyXSwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZxdGJsM191OCh1aW50OHgxNngzX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4MTZ4M190IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwzX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnF0YmwzX3M4KGludDh4MTZ4M190IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZxdGJsM19zOChpbnQ4eDE2eDNfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4MTZ4M190IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwzX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnF0Ymw0X3A4KHBvbHk4eDE2eDRfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0Ymw0X3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AwLnZhbFsyXSwgKGludDh4MTZfdClfX3AwLnZhbFszXSwgKGludDh4OF90KV9fcDEsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnF0Ymw0X3A4KHBvbHk4eDE2eDRfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICBwb2x5OHgxNng0X3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbM10sIF9fcDAudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0Ymw0X3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjAudmFsWzNdLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnF0Ymw0cV9wOChwb2x5OHgxNng0X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsNHFfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHgxNl90KV9fcDAudmFsWzNdLCAoaW50OHgxNl90KV9fcDEsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cXRibDRxX3A4KHBvbHk4eDE2eDRfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZ4NF90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzNdLCBfX3AwLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsNHFfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbM10sIChpbnQ4eDE2X3QpX19yZXYxLCAzNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZxdGJsNHFfdTgodWludDh4MTZ4NF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRxX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AwLnZhbFsyXSwgKGludDh4MTZfdClfX3AwLnZhbFszXSwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnF0Ymw0cV91OCh1aW50OHgxNng0X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2eDRfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFszXSwgX19wMC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRxX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjAudmFsWzNdLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxdGJsNHFfczgoaW50OHgxNng0X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsNHFfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHgxNl90KV9fcDAudmFsWzNdLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZxdGJsNHFfczgoaW50OHgxNng0X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNng0X3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbM10sIF9fcDAudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Ymw0cV92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFszXSwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cXRibDRfdTgodWludDh4MTZ4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHgxNl90KV9fcDAudmFsWzNdLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnF0Ymw0X3U4KHVpbnQ4eDE2eDRfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHgxNng0X3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbM10sIF9fcDAudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0Ymw0X3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjAudmFsWzNdLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cXRibDRfczgoaW50OHgxNng0X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsNF92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMC52YWxbMl0sIChpbnQ4eDE2X3QpX19wMC52YWxbM10sIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnF0Ymw0X3M4KGludDh4MTZ4NF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHgxNng0X3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbM10sIF9fcDAudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0Ymw0X3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjAudmFsWzNdLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cXRieDFfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZxdGJ4MV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnF0YngxcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCAzNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnF0YngxcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCAzNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZxdGJ4MXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDFxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZxdGJ4MXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDFxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxdGJ4MXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngxcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZxdGJ4MXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngxcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cXRieDFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cXRieDFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDFfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnF0YngxX3M4KGludDh4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngxX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cXRieDFfczgoaW50OHg4X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngxX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZxdGJ4Ml9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4MTZ4Ml90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJfdigoaW50OHg4X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDIsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnF0YngyX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHgxNngyX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNngyX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4Ml92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYyLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnF0YngycV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2eDJfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngycV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AyLCAzNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnF0YngycV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2eDJfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZ4Ml90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MiwgMzYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cXRieDJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZ4Ml90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDIsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cXRieDJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZ4Ml90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNngyX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYyLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnF0YngycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNngyX3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMiwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnF0YngycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNngyX3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2eDJfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngycV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjIsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cXRieDJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDE2eDJfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngyX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDhfdClfX3AyLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cXRieDJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDE2eDJfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2eDJfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngyX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjIsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxdGJ4Ml9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDE2eDJfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngyX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDhfdClfX3AyLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnF0YngyX3M4KGludDh4OF90IF9fcDAsIGludDh4MTZ4Ml90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZ4Ml90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MiwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnF0YngzX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHgxNngzX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M192KChpbnQ4eDhfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDEudmFsWzJdLCAoaW50OHg4X3QpX19wMiwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cXRieDNfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDE2eDNfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2eDNfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M192KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjIsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cXRieDNxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZ4M190IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDNxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDEudmFsWzJdLCAoaW50OHgxNl90KV9fcDIsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cXRieDNxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZ4M190IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNngzX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDNxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYyLCAzNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZxdGJ4M3FfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNngzX3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M3FfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDE2X3QpX19wMiwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZxdGJ4M3FfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNngzX3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2eDNfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M3FfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjIsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cXRieDNxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2eDNfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngzcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLnZhbFsyXSwgKGludDh4MTZfdClfX3AyLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cXRieDNxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2eDNfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZ4M190IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngzcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MiwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZxdGJ4M191OCh1aW50OHg4X3QgX19wMCwgdWludDh4MTZ4M190IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDNfdigoaW50OHg4X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLnZhbFsyXSwgKGludDh4OF90KV9fcDIsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZxdGJ4M191OCh1aW50OHg4X3QgX19wMCwgdWludDh4MTZ4M190IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZ4M190IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngzX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MiwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnF0YngzX3M4KGludDh4OF90IF9fcDAsIGludDh4MTZ4M190IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDNfdigoaW50OHg4X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLnZhbFsyXSwgKGludDh4OF90KV9fcDIsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cXRieDNfczgoaW50OHg4X3QgX19wMCwgaW50OHgxNngzX3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNngzX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDNfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYyLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cXRieDRfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDE2eDRfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0Yng0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDE2X3QpX19wMS52YWxbM10sIChpbnQ4eDhfdClfX3AyLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZxdGJ4NF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4MTZ4NF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZ4NF90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzNdLCBfX3AxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4NF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgKGludDh4OF90KV9fcmV2MiwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZxdGJ4NHFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNng0X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4NHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDE2X3QpX19wMS52YWxbM10sIChpbnQ4eDE2X3QpX19wMiwgMzYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZxdGJ4NHFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNng0X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2eDRfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFszXSwgX19wMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgKGludDh4MTZfdClfX3JldjIsIDM2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnF0Yng0cV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2eDRfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Yng0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLnZhbFsyXSwgKGludDh4MTZfdClfX3AxLnZhbFszXSwgKGludDh4MTZfdClfX3AyLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnF0Yng0cV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2eDRfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZ4NF90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzNdLCBfX3AxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4NHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAoaW50OHgxNl90KV9fcmV2MiwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxdGJ4NHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZ4NF90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDEudmFsWzJdLCAoaW50OHgxNl90KV9fcDEudmFsWzNdLCAoaW50OHgxNl90KV9fcDIsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZxdGJ4NHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZ4NF90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNng0X3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbM10sIF9fcDEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Yng0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIChpbnQ4eDE2X3QpX19yZXYyLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnF0Yng0X3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHgxNng0X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4NF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDEudmFsWzJdLCAoaW50OHgxNl90KV9fcDEudmFsWzNdLCAoaW50OHg4X3QpX19wMiwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnF0Yng0X3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHgxNng0X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNng0X3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbM10sIF9fcDEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0Yng0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAoaW50OHg4X3QpX19yZXYyLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cXRieDRfczgoaW50OHg4X3QgX19wMCwgaW50OHgxNng0X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4NF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDEudmFsWzJdLCAoaW50OHgxNl90KV9fcDEudmFsWzNdLCAoaW50OHg4X3QpX19wMiwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZxdGJ4NF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDE2eDRfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2eDRfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFszXSwgX19wMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIChpbnQ4eDhfdClfX3JldjIsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmFkZGhuX2hpZ2hfdTMyKHVpbnQxNng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91MTYoX19wMCwgdnJhZGRobl91MzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyYWRkaG5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UxNihfX3JldjAsIF9fbm9zd2FwX3ZyYWRkaG5fdTMyKF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyYWRkaG5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEsIHVpbnQ2NHgyX3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3UzMihfX3AwLCB2cmFkZGhuX3U2NChfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJhZGRobl9oaWdoX3U2NCh1aW50MzJ4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSwgdWludDY0eDJfdCBfX3AyKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTMyKF9fcmV2MCwgX19ub3N3YXBfdnJhZGRobl91NjQoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJhZGRobl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91OChfX3AwLCB2cmFkZGhuX3UxNihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJhZGRobl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3U4KF9fcmV2MCwgX19ub3N3YXBfdnJhZGRobl91MTYoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmFkZGhuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3MxNihfX3AwLCB2cmFkZGhuX3MzMihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmFkZGhuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZyYWRkaG5fczMyKF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJhZGRobl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEsIGludDY0eDJfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zMzIoX19wMCwgdnJhZGRobl9zNjQoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJhZGRobl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEsIGludDY0eDJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zMzIoX19yZXYwLCBfX25vc3dhcF92cmFkZGhuX3M2NChfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyYWRkaG5faGlnaF9zMTYoaW50OHg4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zOChfX3AwLCB2cmFkZGhuX3MxNihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmFkZGhuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zOChfX3JldjAsIF9fbm9zd2FwX3ZyYWRkaG5fczE2KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJiaXRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYml0X3YoKGludDh4OF90KV9fcDAsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJiaXRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnJiaXRfdigoaW50OHg4X3QpX19yZXYwLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJiaXRxX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cmJpdHFfdigoaW50OHgxNl90KV9fcDAsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmJpdHFfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYml0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAzNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyYml0cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJiaXRxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJiaXRxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cmJpdHFfdigoaW50OHgxNl90KV9fcmV2MCwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyYml0cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJiaXRxX3YoKGludDh4MTZfdClfX3AwLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmJpdHFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJiaXRxX3YoKGludDh4MTZfdClfX3JldjAsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmJpdF91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJiaXRfdigoaW50OHg4X3QpX19wMCwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJiaXRfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJiaXRfdigoaW50OHg4X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmJpdF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJiaXRfdigoaW50OHg4X3QpX19wMCwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyYml0X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJiaXRfdigoaW50OHg4X3QpX19yZXYwLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyZWNwZXFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVxX3YoKGludDh4MTZfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyZWNwZXFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJlY3BlcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cmVjcGVfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cmVjcGVfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2cmVjcGVkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnJlY3BlZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2cmVjcGVkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnJlY3BlZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZyZWNwZXNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVzX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZyZWNwZXNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVzX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cmVjcHNxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJlY3BzcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyZWNwc3FfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwc3FfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyZWNwc19mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwc192KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cmVjcHNfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHNfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3QgdnJlY3BzZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHNkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZyZWNwc2RfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnJlY3BzZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZyZWNwc3NfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnJlY3Bzc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2cmVjcHNzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwc3NfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2cmVjcHhkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnJlY3B4ZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2cmVjcHhkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnJlY3B4ZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZyZWNweHNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHhzX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZyZWNweHNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHhzX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2cnNobGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2cnNobGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdnJzaGxkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZyc2hsZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnJzaGxkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocmRfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocmRfbl91NjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocmRfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocmRfbl91NjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hyZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hyZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJuX2hpZ2hfbl91MzIoX19wMF8yMDYsIF9fcDFfMjA2LCBfX3AyXzIwNikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMF8yMDYgPSBfX3AwXzIwNjsgXAorICB1aW50MzJ4NF90IF9fczFfMjA2ID0gX19wMV8yMDY7IFwKKyAgdWludDE2eDhfdCBfX3JldF8yMDY7IFwKKyAgX19yZXRfMjA2ID0gKHVpbnQxNng4X3QpKHZjb21iaW5lX3UxNigodWludDE2eDRfdCkoX19zMF8yMDYpLCAodWludDE2eDRfdCkodnJzaHJuX25fdTMyKF9fczFfMjA2LCBfX3AyXzIwNikpKSk7IFwKKyAgX19yZXRfMjA2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJuX2hpZ2hfbl91MzIoX19wMF8yMDcsIF9fcDFfMjA3LCBfX3AyXzIwNykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMF8yMDcgPSBfX3AwXzIwNzsgXAorICB1aW50MzJ4NF90IF9fczFfMjA3ID0gX19wMV8yMDc7IFwKKyAgdWludDE2eDRfdCBfX3JldjBfMjA3OyAgX19yZXYwXzIwNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjA3LCBfX3MwXzIwNywgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjFfMjA3OyAgX19yZXYxXzIwNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjA3LCBfX3MxXzIwNywgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldF8yMDc7IFwKKyAgX19yZXRfMjA3ID0gKHVpbnQxNng4X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3UxNigodWludDE2eDRfdCkoX19yZXYwXzIwNyksICh1aW50MTZ4NF90KShfX25vc3dhcF92cnNocm5fbl91MzIoX19yZXYxXzIwNywgX19wMl8yMDcpKSkpOyBcCisgIF9fcmV0XzIwNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIwNywgX19yZXRfMjA3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMDc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hybl9oaWdoX25fdTY0KF9fcDBfMjA4LCBfX3AxXzIwOCwgX19wMl8yMDgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczBfMjA4ID0gX19wMF8yMDg7IFwKKyAgdWludDY0eDJfdCBfX3MxXzIwOCA9IF9fcDFfMjA4OyBcCisgIHVpbnQzMng0X3QgX19yZXRfMjA4OyBcCisgIF9fcmV0XzIwOCA9ICh1aW50MzJ4NF90KSh2Y29tYmluZV91MzIoKHVpbnQzMngyX3QpKF9fczBfMjA4KSwgKHVpbnQzMngyX3QpKHZyc2hybl9uX3U2NChfX3MxXzIwOCwgX19wMl8yMDgpKSkpOyBcCisgIF9fcmV0XzIwODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hybl9oaWdoX25fdTY0KF9fcDBfMjA5LCBfX3AxXzIwOSwgX19wMl8yMDkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczBfMjA5ID0gX19wMF8yMDk7IFwKKyAgdWludDY0eDJfdCBfX3MxXzIwOSA9IF9fcDFfMjA5OyBcCisgIHVpbnQzMngyX3QgX19yZXYwXzIwOTsgIF9fcmV2MF8yMDkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIwOSwgX19zMF8yMDksIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYxXzIwOTsgIF9fcmV2MV8yMDkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIwOSwgX19zMV8yMDksIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXRfMjA5OyBcCisgIF9fcmV0XzIwOSA9ICh1aW50MzJ4NF90KShfX25vc3dhcF92Y29tYmluZV91MzIoKHVpbnQzMngyX3QpKF9fcmV2MF8yMDkpLCAodWludDMyeDJfdCkoX19ub3N3YXBfdnJzaHJuX25fdTY0KF9fcmV2MV8yMDksIF9fcDJfMjA5KSkpKTsgXAorICBfX3JldF8yMDkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMDksIF9fcmV0XzIwOSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjA5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocm5faGlnaF9uX3UxNihfX3AwXzIxMCwgX19wMV8yMTAsIF9fcDJfMjEwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczBfMjEwID0gX19wMF8yMTA7IFwKKyAgdWludDE2eDhfdCBfX3MxXzIxMCA9IF9fcDFfMjEwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXRfMjEwOyBcCisgIF9fcmV0XzIxMCA9ICh1aW50OHgxNl90KSh2Y29tYmluZV91OCgodWludDh4OF90KShfX3MwXzIxMCksICh1aW50OHg4X3QpKHZyc2hybl9uX3UxNihfX3MxXzIxMCwgX19wMl8yMTApKSkpOyBcCisgIF9fcmV0XzIxMDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hybl9oaWdoX25fdTE2KF9fcDBfMjExLCBfX3AxXzIxMSwgX19wMl8yMTEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMF8yMTEgPSBfX3AwXzIxMTsgXAorICB1aW50MTZ4OF90IF9fczFfMjExID0gX19wMV8yMTE7IFwKKyAgdWludDh4OF90IF9fcmV2MF8yMTE7ICBfX3JldjBfMjExID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMTEsIF9fczBfMjExLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MV8yMTE7ICBfX3JldjFfMjExID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMTEsIF9fczFfMjExLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV0XzIxMTsgXAorICBfX3JldF8yMTEgPSAodWludDh4MTZfdCkoX19ub3N3YXBfdmNvbWJpbmVfdTgoKHVpbnQ4eDhfdCkoX19yZXYwXzIxMSksICh1aW50OHg4X3QpKF9fbm9zd2FwX3Zyc2hybl9uX3UxNihfX3JldjFfMjExLCBfX3AyXzIxMSkpKSk7IFwKKyAgX19yZXRfMjExID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjExLCBfX3JldF8yMTEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIxMTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJuX2hpZ2hfbl9zMzIoX19wMF8yMTIsIF9fcDFfMjEyLCBfX3AyXzIxMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzIxMiA9IF9fcDBfMjEyOyBcCisgIGludDMyeDRfdCBfX3MxXzIxMiA9IF9fcDFfMjEyOyBcCisgIGludDE2eDhfdCBfX3JldF8yMTI7IFwKKyAgX19yZXRfMjEyID0gKGludDE2eDhfdCkodmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fczBfMjEyKSwgKGludDE2eDRfdCkodnJzaHJuX25fczMyKF9fczFfMjEyLCBfX3AyXzIxMikpKSk7IFwKKyAgX19yZXRfMjEyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJuX2hpZ2hfbl9zMzIoX19wMF8yMTMsIF9fcDFfMjEzLCBfX3AyXzIxMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzIxMyA9IF9fcDBfMjEzOyBcCisgIGludDMyeDRfdCBfX3MxXzIxMyA9IF9fcDFfMjEzOyBcCisgIGludDE2eDRfdCBfX3JldjBfMjEzOyAgX19yZXYwXzIxMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjEzLCBfX3MwXzIxMywgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MV8yMTM7ICBfX3JldjFfMjEzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMTMsIF9fczFfMjEzLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXRfMjEzOyBcCisgIF9fcmV0XzIxMyA9IChpbnQxNng4X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3MxNigoaW50MTZ4NF90KShfX3JldjBfMjEzKSwgKGludDE2eDRfdCkoX19ub3N3YXBfdnJzaHJuX25fczMyKF9fcmV2MV8yMTMsIF9fcDJfMjEzKSkpKTsgXAorICBfX3JldF8yMTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMTMsIF9fcmV0XzIxMywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjEzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocm5faGlnaF9uX3M2NChfX3AwXzIxNCwgX19wMV8yMTQsIF9fcDJfMjE0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczBfMjE0ID0gX19wMF8yMTQ7IFwKKyAgaW50NjR4Ml90IF9fczFfMjE0ID0gX19wMV8yMTQ7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzIxNDsgXAorICBfX3JldF8yMTQgPSAoaW50MzJ4NF90KSh2Y29tYmluZV9zMzIoKGludDMyeDJfdCkoX19zMF8yMTQpLCAoaW50MzJ4Ml90KSh2cnNocm5fbl9zNjQoX19zMV8yMTQsIF9fcDJfMjE0KSkpKTsgXAorICBfX3JldF8yMTQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocm5faGlnaF9uX3M2NChfX3AwXzIxNSwgX19wMV8yMTUsIF9fcDJfMjE1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczBfMjE1ID0gX19wMF8yMTU7IFwKKyAgaW50NjR4Ml90IF9fczFfMjE1ID0gX19wMV8yMTU7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MF8yMTU7ICBfX3JldjBfMjE1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMTUsIF9fczBfMjE1LCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXYxXzIxNTsgIF9fcmV2MV8yMTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIxNSwgX19zMV8yMTUsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldF8yMTU7IFwKKyAgX19yZXRfMjE1ID0gKGludDMyeDRfdCkoX19ub3N3YXBfdmNvbWJpbmVfczMyKChpbnQzMngyX3QpKF9fcmV2MF8yMTUpLCAoaW50MzJ4Ml90KShfX25vc3dhcF92cnNocm5fbl9zNjQoX19yZXYxXzIxNSwgX19wMl8yMTUpKSkpOyBcCisgIF9fcmV0XzIxNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIxNSwgX19yZXRfMjE1LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMTU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hybl9oaWdoX25fczE2KF9fcDBfMjE2LCBfX3AxXzIxNiwgX19wMl8yMTYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwXzIxNiA9IF9fcDBfMjE2OyBcCisgIGludDE2eDhfdCBfX3MxXzIxNiA9IF9fcDFfMjE2OyBcCisgIGludDh4MTZfdCBfX3JldF8yMTY7IFwKKyAgX19yZXRfMjE2ID0gKGludDh4MTZfdCkodmNvbWJpbmVfczgoKGludDh4OF90KShfX3MwXzIxNiksIChpbnQ4eDhfdCkodnJzaHJuX25fczE2KF9fczFfMjE2LCBfX3AyXzIxNikpKSk7IFwKKyAgX19yZXRfMjE2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJuX2hpZ2hfbl9zMTYoX19wMF8yMTcsIF9fcDFfMjE3LCBfX3AyXzIxNykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczBfMjE3ID0gX19wMF8yMTc7IFwKKyAgaW50MTZ4OF90IF9fczFfMjE3ID0gX19wMV8yMTc7IFwKKyAgaW50OHg4X3QgX19yZXYwXzIxNzsgIF9fcmV2MF8yMTcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIxNywgX19zMF8yMTcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjFfMjE3OyAgX19yZXYxXzIxNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjE3LCBfX3MxXzIxNywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0XzIxNzsgXAorICBfX3JldF8yMTcgPSAoaW50OHgxNl90KShfX25vc3dhcF92Y29tYmluZV9zOCgoaW50OHg4X3QpKF9fcmV2MF8yMTcpLCAoaW50OHg4X3QpKF9fbm9zd2FwX3Zyc2hybl9uX3MxNihfX3JldjFfMjE3LCBfX3AyXzIxNykpKSk7IFwKKyAgX19yZXRfMjE3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjE3LCBfX3JldF8yMTcsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIxNzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJzcXJ0ZXFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlcV92KChpbnQ4eDE2X3QpX19wMCwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cnNxcnRlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cnNxcnRlX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZV92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyc3FydGVfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3QgdnJzcXJ0ZWRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2cnNxcnRlZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVkX2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdnJzcXJ0ZXNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlc19mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2cnNxcnRlc19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVzX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cnNxcnRzcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydHNxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJzcXJ0c3FfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydHNxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cnNxcnRzX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c192KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cnNxcnRzX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c192KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2cnNxcnRzZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRzZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2cnNxcnRzZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRzZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZyc3FydHNzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydHNzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZyc3FydHNzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydHNzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYWRfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYWRfbl91NjQoX19zMCwgX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNyYWRfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYWRfbl91NjQoX19zMCwgX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhZF9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnJzcmFkX25fczY0KF9fczAsIF9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFkX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYWRfbl9zNjQoX19zMCwgX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJzdWJobl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTE2KF9fcDAsIHZyc3ViaG5fdTMyKF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cnN1YmhuX2hpZ2hfdTMyKHVpbnQxNng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MTYoX19yZXYwLCBfX25vc3dhcF92cnN1YmhuX3UzMihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cnN1YmhuX2hpZ2hfdTY0KHVpbnQzMngyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxLCB1aW50NjR4Ml90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91MzIoX19wMCwgdnJzdWJobl91NjQoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyc3ViaG5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEsIHVpbnQ2NHgyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UzMihfX3JldjAsIF9fbm9zd2FwX3Zyc3ViaG5fdTY0KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyc3ViaG5faGlnaF91MTYodWludDh4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTgoX19wMCwgdnJzdWJobl91MTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyc3ViaG5faGlnaF91MTYodWludDh4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91OChfX3JldjAsIF9fbm9zd2FwX3Zyc3ViaG5fdTE2KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJzdWJobl9oaWdoX3MzMihpbnQxNng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zMTYoX19wMCwgdnJzdWJobl9zMzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJzdWJobl9oaWdoX3MzMihpbnQxNng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zMTYoX19yZXYwLCBfX25vc3dhcF92cnN1YmhuX3MzMihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyc3ViaG5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxLCBpbnQ2NHgyX3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczMyKF9fcDAsIHZyc3ViaG5fczY0KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyc3ViaG5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxLCBpbnQ2NHgyX3QgX19wMikgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczMyKF9fcmV2MCwgX19ub3N3YXBfdnJzdWJobl9zNjQoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cnN1YmhuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczgoX19wMCwgdnJzdWJobl9zMTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJzdWJobl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczgoX19yZXYwLCBfX25vc3dhcF92cnN1YmhuX3MxNihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldF9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDFfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pNjQoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldF9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDFfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pNjQoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k2NChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pNjQoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k2NChfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTY0KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfZjY0KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0cV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2Y2NChfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2Y2NChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0X2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9mNjQoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldF9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfZjY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldF9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfZjY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdnNobGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZzaGxkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNobGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdnNobGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2c2hsZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNobGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxkX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNobGRfbl91NjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxkX25fdTY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxkX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobGRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobGxfaGlnaF9uX3U4KF9fcDBfMjE4LCBfX3AxXzIxOCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMF8yMTggPSBfX3AwXzIxODsgXAorICB1aW50MTZ4OF90IF9fcmV0XzIxODsgXAorICBfX3JldF8yMTggPSAodWludDE2eDhfdCkodnNobGxfbl91OCh2Z2V0X2hpZ2hfdTgoX19zMF8yMTgpLCBfX3AxXzIxOCkpOyBcCisgIF9fcmV0XzIxODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxsX2hpZ2hfbl91OChfX3AwXzIxOSwgX19wMV8yMTkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczBfMjE5ID0gX19wMF8yMTk7IFwKKyAgdWludDh4MTZfdCBfX3JldjBfMjE5OyAgX19yZXYwXzIxOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjE5LCBfX3MwXzIxOSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldF8yMTk7IFwKKyAgX19yZXRfMjE5ID0gKHVpbnQxNng4X3QpKF9fbm9zd2FwX3ZzaGxsX25fdTgoX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcmV2MF8yMTkpLCBfX3AxXzIxOSkpOyBcCisgIF9fcmV0XzIxOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIxOSwgX19yZXRfMjE5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMTk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxsX2hpZ2hfbl91MzIoX19wMF8yMjAsIF9fcDFfMjIwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwXzIyMCA9IF9fcDBfMjIwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXRfMjIwOyBcCisgIF9fcmV0XzIyMCA9ICh1aW50NjR4Ml90KSh2c2hsbF9uX3UzMih2Z2V0X2hpZ2hfdTMyKF9fczBfMjIwKSwgX19wMV8yMjApKTsgXAorICBfX3JldF8yMjA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsbF9oaWdoX25fdTMyKF9fcDBfMjIxLCBfX3AxXzIyMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMF8yMjEgPSBfX3AwXzIyMTsgXAorICB1aW50MzJ4NF90IF9fcmV2MF8yMjE7ICBfX3JldjBfMjIxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMjEsIF9fczBfMjIxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0XzIyMTsgXAorICBfX3JldF8yMjEgPSAodWludDY0eDJfdCkoX19ub3N3YXBfdnNobGxfbl91MzIoX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjBfMjIxKSwgX19wMV8yMjEpKTsgXAorICBfX3JldF8yMjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMjEsIF9fcmV0XzIyMSwgMSwgMCk7IFwKKyAgX19yZXRfMjIxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsbF9oaWdoX25fdTE2KF9fcDBfMjIyLCBfX3AxXzIyMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMF8yMjIgPSBfX3AwXzIyMjsgXAorICB1aW50MzJ4NF90IF9fcmV0XzIyMjsgXAorICBfX3JldF8yMjIgPSAodWludDMyeDRfdCkodnNobGxfbl91MTYodmdldF9oaWdoX3UxNihfX3MwXzIyMiksIF9fcDFfMjIyKSk7IFwKKyAgX19yZXRfMjIyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobGxfaGlnaF9uX3UxNihfX3AwXzIyMywgX19wMV8yMjMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczBfMjIzID0gX19wMF8yMjM7IFwKKyAgdWludDE2eDhfdCBfX3JldjBfMjIzOyAgX19yZXYwXzIyMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjIzLCBfX3MwXzIyMywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldF8yMjM7IFwKKyAgX19yZXRfMjIzID0gKHVpbnQzMng0X3QpKF9fbm9zd2FwX3ZzaGxsX25fdTE2KF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYwXzIyMyksIF9fcDFfMjIzKSk7IFwKKyAgX19yZXRfMjIzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjIzLCBfX3JldF8yMjMsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIyMzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobGxfaGlnaF9uX3M4KF9fcDBfMjI0LCBfX3AxXzIyNCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwXzIyNCA9IF9fcDBfMjI0OyBcCisgIGludDE2eDhfdCBfX3JldF8yMjQ7IFwKKyAgX19yZXRfMjI0ID0gKGludDE2eDhfdCkodnNobGxfbl9zOCh2Z2V0X2hpZ2hfczgoX19zMF8yMjQpLCBfX3AxXzIyNCkpOyBcCisgIF9fcmV0XzIyNDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxsX2hpZ2hfbl9zOChfX3AwXzIyNSwgX19wMV8yMjUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMF8yMjUgPSBfX3AwXzIyNTsgXAorICBpbnQ4eDE2X3QgX19yZXYwXzIyNTsgIF9fcmV2MF8yMjUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIyNSwgX19zMF8yMjUsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldF8yMjU7IFwKKyAgX19yZXRfMjI1ID0gKGludDE2eDhfdCkoX19ub3N3YXBfdnNobGxfbl9zOChfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19yZXYwXzIyNSksIF9fcDFfMjI1KSk7IFwKKyAgX19yZXRfMjI1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjI1LCBfX3JldF8yMjUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIyNTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobGxfaGlnaF9uX3MzMihfX3AwXzIyNiwgX19wMV8yMjYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMF8yMjYgPSBfX3AwXzIyNjsgXAorICBpbnQ2NHgyX3QgX19yZXRfMjI2OyBcCisgIF9fcmV0XzIyNiA9IChpbnQ2NHgyX3QpKHZzaGxsX25fczMyKHZnZXRfaGlnaF9zMzIoX19zMF8yMjYpLCBfX3AxXzIyNikpOyBcCisgIF9fcmV0XzIyNjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxsX2hpZ2hfbl9zMzIoX19wMF8yMjcsIF9fcDFfMjI3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczBfMjI3ID0gX19wMF8yMjc7IFwKKyAgaW50MzJ4NF90IF9fcmV2MF8yMjc7ICBfX3JldjBfMjI3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMjcsIF9fczBfMjI3LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXRfMjI3OyBcCisgIF9fcmV0XzIyNyA9IChpbnQ2NHgyX3QpKF9fbm9zd2FwX3ZzaGxsX25fczMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYwXzIyNyksIF9fcDFfMjI3KSk7IFwKKyAgX19yZXRfMjI3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjI3LCBfX3JldF8yMjcsIDEsIDApOyBcCisgIF9fcmV0XzIyNzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobGxfaGlnaF9uX3MxNihfX3AwXzIyOCwgX19wMV8yMjgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMF8yMjggPSBfX3AwXzIyODsgXAorICBpbnQzMng0X3QgX19yZXRfMjI4OyBcCisgIF9fcmV0XzIyOCA9IChpbnQzMng0X3QpKHZzaGxsX25fczE2KHZnZXRfaGlnaF9zMTYoX19zMF8yMjgpLCBfX3AxXzIyOCkpOyBcCisgIF9fcmV0XzIyODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxsX2hpZ2hfbl9zMTYoX19wMF8yMjksIF9fcDFfMjI5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczBfMjI5ID0gX19wMF8yMjk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MF8yMjk7ICBfX3JldjBfMjI5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMjksIF9fczBfMjI5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXRfMjI5OyBcCisgIF9fcmV0XzIyOSA9IChpbnQzMng0X3QpKF9fbm9zd2FwX3ZzaGxsX25fczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYwXzIyOSksIF9fcDFfMjI5KSk7IFwKKyAgX19yZXRfMjI5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjI5LCBfX3JldF8yMjksIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIyOTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocmRfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hyZF9uX3U2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJkX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNocmRfbl91NjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJkX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNocmRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hyZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJkX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hybl9oaWdoX25fdTMyKF9fcDBfMjMwLCBfX3AxXzIzMCwgX19wMl8yMzApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczBfMjMwID0gX19wMF8yMzA7IFwKKyAgdWludDMyeDRfdCBfX3MxXzIzMCA9IF9fcDFfMjMwOyBcCisgIHVpbnQxNng4X3QgX19yZXRfMjMwOyBcCisgIF9fcmV0XzIzMCA9ICh1aW50MTZ4OF90KSh2Y29tYmluZV91MTYoKHVpbnQxNng0X3QpKF9fczBfMjMwKSwgKHVpbnQxNng0X3QpKHZzaHJuX25fdTMyKF9fczFfMjMwLCBfX3AyXzIzMCkpKSk7IFwKKyAgX19yZXRfMjMwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocm5faGlnaF9uX3UzMihfX3AwXzIzMSwgX19wMV8yMzEsIF9fcDJfMjMxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwXzIzMSA9IF9fcDBfMjMxOyBcCisgIHVpbnQzMng0X3QgX19zMV8yMzEgPSBfX3AxXzIzMTsgXAorICB1aW50MTZ4NF90IF9fcmV2MF8yMzE7ICBfX3JldjBfMjMxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMzEsIF9fczBfMjMxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MV8yMzE7ICBfX3JldjFfMjMxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMzEsIF9fczFfMjMxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0XzIzMTsgXAorICBfX3JldF8yMzEgPSAodWludDE2eDhfdCkoX19ub3N3YXBfdmNvbWJpbmVfdTE2KCh1aW50MTZ4NF90KShfX3JldjBfMjMxKSwgKHVpbnQxNng0X3QpKF9fbm9zd2FwX3ZzaHJuX25fdTMyKF9fcmV2MV8yMzEsIF9fcDJfMjMxKSkpKTsgXAorICBfX3JldF8yMzEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMzEsIF9fcmV0XzIzMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjMxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hybl9oaWdoX25fdTY0KF9fcDBfMjMyLCBfX3AxXzIzMiwgX19wMl8yMzIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczBfMjMyID0gX19wMF8yMzI7IFwKKyAgdWludDY0eDJfdCBfX3MxXzIzMiA9IF9fcDFfMjMyOyBcCisgIHVpbnQzMng0X3QgX19yZXRfMjMyOyBcCisgIF9fcmV0XzIzMiA9ICh1aW50MzJ4NF90KSh2Y29tYmluZV91MzIoKHVpbnQzMngyX3QpKF9fczBfMjMyKSwgKHVpbnQzMngyX3QpKHZzaHJuX25fdTY0KF9fczFfMjMyLCBfX3AyXzIzMikpKSk7IFwKKyAgX19yZXRfMjMyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocm5faGlnaF9uX3U2NChfX3AwXzIzMywgX19wMV8yMzMsIF9fcDJfMjMzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwXzIzMyA9IF9fcDBfMjMzOyBcCisgIHVpbnQ2NHgyX3QgX19zMV8yMzMgPSBfX3AxXzIzMzsgXAorICB1aW50MzJ4Ml90IF9fcmV2MF8yMzM7ICBfX3JldjBfMjMzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMzMsIF9fczBfMjMzLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV2MV8yMzM7ICBfX3JldjFfMjMzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMzMsIF9fczFfMjMzLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0XzIzMzsgXAorICBfX3JldF8yMzMgPSAodWludDMyeDRfdCkoX19ub3N3YXBfdmNvbWJpbmVfdTMyKCh1aW50MzJ4Ml90KShfX3JldjBfMjMzKSwgKHVpbnQzMngyX3QpKF9fbm9zd2FwX3ZzaHJuX25fdTY0KF9fcmV2MV8yMzMsIF9fcDJfMjMzKSkpKTsgXAorICBfX3JldF8yMzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMzMsIF9fcmV0XzIzMywgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjMzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hybl9oaWdoX25fdTE2KF9fcDBfMjM0LCBfX3AxXzIzNCwgX19wMl8yMzQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMF8yMzQgPSBfX3AwXzIzNDsgXAorICB1aW50MTZ4OF90IF9fczFfMjM0ID0gX19wMV8yMzQ7IFwKKyAgdWludDh4MTZfdCBfX3JldF8yMzQ7IFwKKyAgX19yZXRfMjM0ID0gKHVpbnQ4eDE2X3QpKHZjb21iaW5lX3U4KCh1aW50OHg4X3QpKF9fczBfMjM0KSwgKHVpbnQ4eDhfdCkodnNocm5fbl91MTYoX19zMV8yMzQsIF9fcDJfMjM0KSkpKTsgXAorICBfX3JldF8yMzQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hybl9oaWdoX25fdTE2KF9fcDBfMjM1LCBfX3AxXzIzNSwgX19wMl8yMzUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMF8yMzUgPSBfX3AwXzIzNTsgXAorICB1aW50MTZ4OF90IF9fczFfMjM1ID0gX19wMV8yMzU7IFwKKyAgdWludDh4OF90IF9fcmV2MF8yMzU7ICBfX3JldjBfMjM1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMzUsIF9fczBfMjM1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MV8yMzU7ICBfX3JldjFfMjM1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMzUsIF9fczFfMjM1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV0XzIzNTsgXAorICBfX3JldF8yMzUgPSAodWludDh4MTZfdCkoX19ub3N3YXBfdmNvbWJpbmVfdTgoKHVpbnQ4eDhfdCkoX19yZXYwXzIzNSksICh1aW50OHg4X3QpKF9fbm9zd2FwX3ZzaHJuX25fdTE2KF9fcmV2MV8yMzUsIF9fcDJfMjM1KSkpKTsgXAorICBfX3JldF8yMzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMzUsIF9fcmV0XzIzNSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjM1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hybl9oaWdoX25fczMyKF9fcDBfMjM2LCBfX3AxXzIzNiwgX19wMl8yMzYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMF8yMzYgPSBfX3AwXzIzNjsgXAorICBpbnQzMng0X3QgX19zMV8yMzYgPSBfX3AxXzIzNjsgXAorICBpbnQxNng4X3QgX19yZXRfMjM2OyBcCisgIF9fcmV0XzIzNiA9IChpbnQxNng4X3QpKHZjb21iaW5lX3MxNigoaW50MTZ4NF90KShfX3MwXzIzNiksIChpbnQxNng0X3QpKHZzaHJuX25fczMyKF9fczFfMjM2LCBfX3AyXzIzNikpKSk7IFwKKyAgX19yZXRfMjM2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocm5faGlnaF9uX3MzMihfX3AwXzIzNywgX19wMV8yMzcsIF9fcDJfMjM3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczBfMjM3ID0gX19wMF8yMzc7IFwKKyAgaW50MzJ4NF90IF9fczFfMjM3ID0gX19wMV8yMzc7IFwKKyAgaW50MTZ4NF90IF9fcmV2MF8yMzc7ICBfX3JldjBfMjM3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMzcsIF9fczBfMjM3LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxXzIzNzsgIF9fcmV2MV8yMzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIzNywgX19zMV8yMzcsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldF8yMzc7IFwKKyAgX19yZXRfMjM3ID0gKGludDE2eDhfdCkoX19ub3N3YXBfdmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fcmV2MF8yMzcpLCAoaW50MTZ4NF90KShfX25vc3dhcF92c2hybl9uX3MzMihfX3JldjFfMjM3LCBfX3AyXzIzNykpKSk7IFwKKyAgX19yZXRfMjM3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjM3LCBfX3JldF8yMzcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIzNzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocm5faGlnaF9uX3M2NChfX3AwXzIzOCwgX19wMV8yMzgsIF9fcDJfMjM4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczBfMjM4ID0gX19wMF8yMzg7IFwKKyAgaW50NjR4Ml90IF9fczFfMjM4ID0gX19wMV8yMzg7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzIzODsgXAorICBfX3JldF8yMzggPSAoaW50MzJ4NF90KSh2Y29tYmluZV9zMzIoKGludDMyeDJfdCkoX19zMF8yMzgpLCAoaW50MzJ4Ml90KSh2c2hybl9uX3M2NChfX3MxXzIzOCwgX19wMl8yMzgpKSkpOyBcCisgIF9fcmV0XzIzODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJuX2hpZ2hfbl9zNjQoX19wMF8yMzksIF9fcDFfMjM5LCBfX3AyXzIzOSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwXzIzOSA9IF9fcDBfMjM5OyBcCisgIGludDY0eDJfdCBfX3MxXzIzOSA9IF9fcDFfMjM5OyBcCisgIGludDMyeDJfdCBfX3JldjBfMjM5OyAgX19yZXYwXzIzOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjM5LCBfX3MwXzIzOSwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV2MV8yMzk7ICBfX3JldjFfMjM5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMzksIF9fczFfMjM5LCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXRfMjM5OyBcCisgIF9fcmV0XzIzOSA9IChpbnQzMng0X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3JldjBfMjM5KSwgKGludDMyeDJfdCkoX19ub3N3YXBfdnNocm5fbl9zNjQoX19yZXYxXzIzOSwgX19wMl8yMzkpKSkpOyBcCisgIF9fcmV0XzIzOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIzOSwgX19yZXRfMjM5LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMzk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJuX2hpZ2hfbl9zMTYoX19wMF8yNDAsIF9fcDFfMjQwLCBfX3AyXzI0MCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczBfMjQwID0gX19wMF8yNDA7IFwKKyAgaW50MTZ4OF90IF9fczFfMjQwID0gX19wMV8yNDA7IFwKKyAgaW50OHgxNl90IF9fcmV0XzI0MDsgXAorICBfX3JldF8yNDAgPSAoaW50OHgxNl90KSh2Y29tYmluZV9zOCgoaW50OHg4X3QpKF9fczBfMjQwKSwgKGludDh4OF90KSh2c2hybl9uX3MxNihfX3MxXzI0MCwgX19wMl8yNDApKSkpOyBcCisgIF9fcmV0XzI0MDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJuX2hpZ2hfbl9zMTYoX19wMF8yNDEsIF9fcDFfMjQxLCBfX3AyXzI0MSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczBfMjQxID0gX19wMF8yNDE7IFwKKyAgaW50MTZ4OF90IF9fczFfMjQxID0gX19wMV8yNDE7IFwKKyAgaW50OHg4X3QgX19yZXYwXzI0MTsgIF9fcmV2MF8yNDEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzI0MSwgX19zMF8yNDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjFfMjQxOyAgX19yZXYxXzI0MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjQxLCBfX3MxXzI0MSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0XzI0MTsgXAorICBfX3JldF8yNDEgPSAoaW50OHgxNl90KShfX25vc3dhcF92Y29tYmluZV9zOCgoaW50OHg4X3QpKF9fcmV2MF8yNDEpLCAoaW50OHg4X3QpKF9fbm9zd2FwX3ZzaHJuX25fczE2KF9fcmV2MV8yNDEsIF9fcDJfMjQxKSkpKTsgXAorICBfX3JldF8yNDEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yNDEsIF9fcmV0XzI0MSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjQxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpZF9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlkX25fdTY0KF9fczAsIF9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaWRfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpZF9uX3U2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaWRfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlkX25fczY0KF9fczAsIF9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaWRfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlkX25fczY0KF9fczAsIF9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpX25fcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaV9uX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaXFfbl9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaXFfbl9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OF90IHZzcWFkZGJfdTgodWludDhfdCBfX3AwLCB1aW50OF90IF9fcDEpIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnNxYWRkYl91OChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDhfdCB2c3FhZGRiX3U4KHVpbnQ4X3QgX19wMCwgdWludDhfdCBfX3AxKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZGJfdTgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdnNxYWRkc191MzIodWludDMyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZHNfdTMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2c3FhZGRzX3UzMih1aW50MzJfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnNxYWRkc191MzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdnNxYWRkZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2c3FhZGRkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNxYWRkZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2X3QgdnNxYWRkaF91MTYodWludDE2X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZGhfdTE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZfdCB2c3FhZGRoX3UxNih1aW50MTZfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnNxYWRkaF91MTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2c3FhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZzcWFkZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c3FhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2c3FhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZzcWFkZHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZzcWFkZHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnNxYWRkcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnNxYWRkcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZzcWFkZF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnNxYWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnNxYWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2c3FhZGRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnNxYWRkX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2c3FhZGRfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnNxYWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2c3FhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZzcXJ0cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcXJ0cV92KChpbnQ4eDE2X3QpX19wMCwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2c3FydHFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnNxcnRxX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZzcXJ0cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcXJ0cV92KChpbnQ4eDE2X3QpX19wMCwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2c3FydHFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnNxcnRxX3YoKGludDh4MTZfdClfX3JldjAsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZzcXJ0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnNxcnRfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2c3FydF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcXJ0X3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2c3FydF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcXJ0X3YoKGludDh4OF90KV9fcDAsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2c3FydF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3FydF92KChpbnQ4eDhfdClfX3JldjAsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYWRfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhZF9uX3U2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFkX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNyYWRfbl91NjQoX19zMCwgX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmFkX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhZF9uX3M2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFkX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhZF9uX3M2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaWRfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpZF9uX3U2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlkX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNyaWRfbl91NjQoX19zMCwgX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlkX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpZF9uX3M2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlkX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpZF9uX3M2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaV9uX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlfbl9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDFfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlxX25fcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlxX25fcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCA2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgMzgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgMzgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCA0Mik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIDQyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgMTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgMTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9wOF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCA0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfcDhfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCA0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9wNjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9wNjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3AxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3AxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3A4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAzNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9wOF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgMzYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9wNjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDM4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3A2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgMzgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9wMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDM3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3AxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgMzcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91OF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgNDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdThfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDQ4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfdTMyX3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCA1MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV91MzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDUwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfdTY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCA1MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV91NjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDUxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfdTE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCA0OSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV91MTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDQ5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfczhfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgMzIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfczhfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAzMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2Y2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgNDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfZjY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgNDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9mMzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDQxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2YzMl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDQxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfZjE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCA0MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9mMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCA0MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3MzMl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDM0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3MzMl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMzQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9zNjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAzNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9zNjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDM1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfczE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMzMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfczE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCAzMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfdThfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgMTYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV91OF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDE2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV91MzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDE4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdTMyX3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAxOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfdTY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAxOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3U2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgMTkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3UxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgMTcpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV91MTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDE3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zOF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9zOF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9mNjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9mNjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2YzMl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCA5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfZjMyX3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCA5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9mMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2YxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfczMyX3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczMyX3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3M2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3M2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfczE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3A4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3A4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIDQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3A2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCA2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfcDY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3AxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCA1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfcDE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3A4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAzNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9wOF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAzNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3A2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgMzgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfcDY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDM4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfcDE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAzNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9wMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgMzcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91OF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgNDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdThfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgNDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91MzJfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDUwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3UzMl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCA1MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3U2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgNTEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdTY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDUxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfdTE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCA0OSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV91MTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgNDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9zOF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAzMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9zOF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgMzIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9mNjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCA0Mik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9mNjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCA0Mik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2YzMl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDQxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2YzMl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDQxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfZjE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgNDApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfZjE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgNDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9zMzJfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMzQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfczMyX3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCAzNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3M2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAzNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9zNjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDM1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfczE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDMzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3MxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgMzMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3U4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgMTYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV91OF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAxNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfdTMyX3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDE4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdTMyX3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgMTgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3U2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAxOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3U2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAxOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfdTE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDE3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdTE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgMTcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3M4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczhfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2Y2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9mNjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDEwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9mMzJfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9mMzJfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2YxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2YxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfczMyX3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3MzMl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCAyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zNjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfczE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3MxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCAxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9wOF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3A4X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCA0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9wNjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCA2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfcDY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfcDE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3AxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCA1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfcDhfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDM2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3A4X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgMzYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9wNjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDM4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3A2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDM4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfcDE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCAzNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9wMTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAzNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3U4X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCA0OCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV91OF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDQ4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfdTMyX3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCA1MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV91MzJfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCA1MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3U2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgNTEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdTY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgNTEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91MTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDQ5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3UxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDQ5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfczhfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgMzIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfczhfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgMzIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9mNjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgNDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfZjY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgNDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9mMzJfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgNDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfZjMyX3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgNDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9mMTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgNDApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfZjE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgNDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9zMzJfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDM0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3MzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgMzQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9zNjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDM1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3M2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgMzUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9zMTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDMzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3MxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgMzMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3U4X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCAxNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3U4X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCAxNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfdTMyX3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgMTgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV91MzJfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgMTgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3U2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDE5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdTY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgMTkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3UxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDE3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdTE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDE3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zOF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCAwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczhfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCAwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9mNjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAxMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2Y2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDEwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9mMzJfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCA5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfZjMyX3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCA5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9mMTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCA4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfZjE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCA4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zMzJfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3MzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCAyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zNjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3M2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zMTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3MxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCAxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDM4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgMzgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDUxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgNTEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDQyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDQyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMzUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCAzNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDEwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDEwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCA2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgX19wMiwgNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgMzYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCAzNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDM4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDM4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCA0OCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDQ4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgNTEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNTEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgMzIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMzIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCA0Mik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgNDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMzUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgMzUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDE5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgX19wMiwgMTkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDEwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgMzgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDM4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCA1MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgNTEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCA0Mik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCA0Mik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAzNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDM1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDEwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAxMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCA2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCA2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCAzNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMzYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCAzOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDM4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCA0OCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCA1MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDUxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDMyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMzIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgNDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDQyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAzNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCAzNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgMTkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDEwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCA2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCAzOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAzOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgNTEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgNTEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgNDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgNDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDM1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgMzUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDEwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCA2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDM2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDM2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgMzgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDM4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCA0OCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCA0OCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDUxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCA1MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCAzMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMzIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDQyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCA0Mik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDM1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDM1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgMTkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgMTkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAxMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAxMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0cnFfcDEyOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTEyOF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdHJxX3AxMjgoX19wMCwgX19zMSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3RycV9wMTI4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTI4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0cnFfcDEyOChfX3AwLCBfX3MxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdnN1YmRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZzdWJkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnN1YmRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdnN1YmRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2c3ViZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnN1YmRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZzdWJxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2c3VicV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZzdWJfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZzdWJfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2c3ViaG5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3UxNihfX3AwLCB2c3ViaG5fdTMyKF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2c3ViaG5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UxNihfX3JldjAsIF9fbm9zd2FwX3ZzdWJobl91MzIoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnN1YmhuX2hpZ2hfdTY0KHVpbnQzMngyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxLCB1aW50NjR4Ml90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91MzIoX19wMCwgdnN1YmhuX3U2NChfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnN1YmhuX2hpZ2hfdTY0KHVpbnQzMngyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxLCB1aW50NjR4Ml90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MzIoX19yZXYwLCBfX25vc3dhcF92c3ViaG5fdTY0KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZzdWJobl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91OChfX3AwLCB2c3ViaG5fdTE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2c3ViaG5faGlnaF91MTYodWludDh4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91OChfX3JldjAsIF9fbm9zd2FwX3ZzdWJobl91MTYoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2c3ViaG5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczE2KF9fcDAsIHZzdWJobl9zMzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnN1YmhuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZzdWJobl9zMzIoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2c3ViaG5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxLCBpbnQ2NHgyX3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczMyKF9fcDAsIHZzdWJobl9zNjQoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnN1YmhuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSwgaW50NjR4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZzdWJobl9zNjQoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2c3ViaG5faGlnaF9zMTYoaW50OHg4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zOChfX3AwLCB2c3ViaG5fczE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZzdWJobl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczgoX19yZXYwLCBfX25vc3dhcF92c3ViaG5fczE2KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZzdWJsX2hpZ2hfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9oaWdoX3U4KF9fcDApIC0gdm1vdmxfaGlnaF91OChfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2c3VibF9oaWdoX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfaGlnaF91OChfX3JldjApIC0gX19ub3N3YXBfdm1vdmxfaGlnaF91OChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2c3VibF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX2hpZ2hfdTMyKF9fcDApIC0gdm1vdmxfaGlnaF91MzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnN1YmxfaGlnaF91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3UzMihfX3JldjApIC0gX19ub3N3YXBfdm1vdmxfaGlnaF91MzIoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnN1YmxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9oaWdoX3UxNihfX3AwKSAtIHZtb3ZsX2hpZ2hfdTE2KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzdWJsX2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfaGlnaF91MTYoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTE2KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnN1YmxfaGlnaF9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX2hpZ2hfczgoX19wMCkgLSB2bW92bF9oaWdoX3M4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnN1YmxfaGlnaF9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3M4KF9fcmV2MCkgLSBfX25vc3dhcF92bW92bF9oaWdoX3M4KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnN1YmxfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9oaWdoX3MzMihfX3AwKSAtIHZtb3ZsX2hpZ2hfczMyKF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnN1YmxfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfaGlnaF9zMzIoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnN1YmxfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9oaWdoX3MxNihfX3AwKSAtIHZtb3ZsX2hpZ2hfczE2KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnN1YmxfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfaGlnaF9zMTYoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczE2KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZzdWJ3X2hpZ2hfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm1vdmxfaGlnaF91OChfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2c3Vid19oaWdoX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfaGlnaF91OChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2c3Vid19oaWdoX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bW92bF9oaWdoX3UzMihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2c3Vid19oaWdoX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzdWJ3X2hpZ2hfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtb3ZsX2hpZ2hfdTE2KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzdWJ3X2hpZ2hfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfaGlnaF91MTYoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2c3Vid19oaWdoX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtb3ZsX2hpZ2hfczgoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2c3Vid19oaWdoX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczgoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2c3Vid19oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bW92bF9oaWdoX3MzMihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZzdWJ3X2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnN1YndfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm1vdmxfaGlnaF9zMTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2c3Vid19oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bW92bF9oaWdoX3MxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZ0cm4xX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgOCwgMiwgMTAsIDQsIDEyLCA2LCAxNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2dHJuMV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMiwgMTAsIDQsIDEyLCA2LCAxNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZ0cm4xX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDQsIDIsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZ0cm4xX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgeworICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA0LCAyLCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnRybjFxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMTYsIDIsIDE4LCA0LCAyMCwgNiwgMjIsIDgsIDI0LCAxMCwgMjYsIDEyLCAyOCwgMTQsIDMwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2dHJuMXFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMTYsIDIsIDE4LCA0LCAyMCwgNiwgMjIsIDgsIDI0LCAxMCwgMjYsIDEyLCAyOCwgMTQsIDMwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnRybjFxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZ0cm4xcV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZ0cm4xcV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA4LCAyLCAxMCwgNCwgMTIsIDYsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2dHJuMXFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2dHJuMXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxNiwgMiwgMTgsIDQsIDIwLCA2LCAyMiwgOCwgMjQsIDEwLCAyNiwgMTIsIDI4LCAxNCwgMzApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZ0cm4xcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxNiwgMiwgMTgsIDQsIDIwLCA2LCAyMiwgOCwgMjQsIDEwLCAyNiwgMTIsIDI4LCAxNCwgMzApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2dHJuMXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgNCwgMiwgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnRybjFxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA0LCAyLCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnRybjFxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZ0cm4xcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZ0cm4xcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA4LCAyLCAxMCwgNCwgMTIsIDYsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2dHJuMXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZ0cm4xcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDE2LCAyLCAxOCwgNCwgMjAsIDYsIDIyLCA4LCAyNCwgMTAsIDI2LCAxMiwgMjgsIDE0LCAzMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2dHJuMXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDE2LCAyLCAxOCwgNCwgMjAsIDYsIDIyLCA4LCAyNCwgMTAsIDI2LCAxMiwgMjgsIDE0LCAzMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2dHJuMXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZ0cm4xcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZ0cm4xcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAyLCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnRybjFxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDIsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZ0cm4xcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAyLCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZ0cm4xcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDIsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZ0cm4xcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZ0cm4xcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZ0cm4xcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA4LCAyLCAxMCwgNCwgMTIsIDYsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZ0cm4xcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZ0cm4xX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgOCwgMiwgMTAsIDQsIDEyLCA2LCAxNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2dHJuMV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMiwgMTAsIDQsIDEyLCA2LCAxNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZ0cm4xX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZ0cm4xX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnRybjFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgNCwgMiwgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnRybjFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDIsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnRybjFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA4LCAyLCAxMCwgNCwgMTIsIDYsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnRybjFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA4LCAyLCAxMCwgNCwgMTIsIDYsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZ0cm4xX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2dHJuMV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2dHJuMV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZ0cm4xX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnRybjFfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgNCwgMiwgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2dHJuMV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDIsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZ0cm4yX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgOSwgMywgMTEsIDUsIDEzLCA3LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2dHJuMl9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgOSwgMywgMTEsIDUsIDEzLCA3LCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZ0cm4yX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDUsIDMsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZ0cm4yX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgeworICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCA1LCAzLCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnRybjJxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMTcsIDMsIDE5LCA1LCAyMSwgNywgMjMsIDksIDI1LCAxMSwgMjcsIDEzLCAyOSwgMTUsIDMxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2dHJuMnFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMTcsIDMsIDE5LCA1LCAyMSwgNywgMjMsIDksIDI1LCAxMSwgMjcsIDEzLCAyOSwgMTUsIDMxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnRybjJxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZ0cm4ycV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZ0cm4ycV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA5LCAzLCAxMSwgNSwgMTMsIDcsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2dHJuMnFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2dHJuMnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAxNywgMywgMTksIDUsIDIxLCA3LCAyMywgOSwgMjUsIDExLCAyNywgMTMsIDI5LCAxNSwgMzEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZ0cm4ycV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAxNywgMywgMTksIDUsIDIxLCA3LCAyMywgOSwgMjUsIDExLCAyNywgMTMsIDI5LCAxNSwgMzEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2dHJuMnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgNSwgMywgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnRybjJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCA1LCAzLCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnRybjJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZ0cm4ycV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZ0cm4ycV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA5LCAzLCAxMSwgNSwgMTMsIDcsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2dHJuMnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZ0cm4ycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDE3LCAzLCAxOSwgNSwgMjEsIDcsIDIzLCA5LCAyNSwgMTEsIDI3LCAxMywgMjksIDE1LCAzMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2dHJuMnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDE3LCAzLCAxOSwgNSwgMjEsIDcsIDIzLCA5LCAyNSwgMTEsIDI3LCAxMywgMjksIDE1LCAzMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2dHJuMnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZ0cm4ycV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZ0cm4ycV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA1LCAzLCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnRybjJxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDUsIDMsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZ0cm4ycV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA1LCAzLCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZ0cm4ycV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDUsIDMsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZ0cm4ycV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZ0cm4ycV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZ0cm4ycV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA5LCAzLCAxMSwgNSwgMTMsIDcsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZ0cm4ycV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZ0cm4yX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgOSwgMywgMTEsIDUsIDEzLCA3LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2dHJuMl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgOSwgMywgMTEsIDUsIDEzLCA3LCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZ0cm4yX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZ0cm4yX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnRybjJfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgNSwgMywgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnRybjJfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDUsIDMsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnRybjJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA5LCAzLCAxMSwgNSwgMTMsIDcsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnRybjJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCA5LCAzLCAxMSwgNSwgMTMsIDcsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZ0cm4yX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2dHJuMl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2dHJuMl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZ0cm4yX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnRybjJfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgNSwgMywgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2dHJuMl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDUsIDMsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2dHN0X3A2NChwb2x5NjR4MV90IF9fcDAsIHBvbHk2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnRzdF9wNjQocG9seTY0eDFfdCBfX3AwLCBwb2x5NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnRzdHFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2dHN0cV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnRzdHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2dHN0cV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnRzdHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnRzdHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnRzdF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZ0c3RfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZ0c3RfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnRzdF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2dHN0ZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdnRzdGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0ZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2dHN0ZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnRzdGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZ0c3RkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0ZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OF90IHZ1cWFkZGJfczgoaW50OF90IF9fcDAsIGludDhfdCBfX3AxKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRiX3M4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4X3QgdnVxYWRkYl9zOChpbnQ4X3QgX19wMCwgaW50OF90IF9fcDEpIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZGJfczgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2dXFhZGRzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2dXFhZGRzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZ1cWFkZGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZ1cWFkZGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdnVxYWRkaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnVxYWRkaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdnVxYWRkaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnVxYWRkaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZ1cWFkZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZ1cWFkZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnVxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZ1cWFkZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnVxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2dXFhZGRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnVxYWRkcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZ1cWFkZHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2dXFhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnVxYWRkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnVxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnVxYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2dXFhZGRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnVxYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnVxYWRkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2dXFhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZ1cWFkZF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnVxYWRkX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZ1cWFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnVxYWRkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2dXpwMV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnV6cDFfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2dXpwMV9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2dXpwMV9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZ1enAxcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQsIDE2LCAxOCwgMjAsIDIyLCAyNCwgMjYsIDI4LCAzMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnV6cDFxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQsIDE2LCAxOCwgMjAsIDIyLCAyNCwgMjYsIDI4LCAzMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZ1enAxcV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2dXpwMXFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2dXpwMXFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnV6cDFxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnV6cDFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjIsIDI0LCAyNiwgMjgsIDMwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2dXpwMXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjIsIDI0LCAyNiwgMjgsIDMwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnV6cDFxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZ1enAxcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZ1enAxcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2dXpwMXFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2dXpwMXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnV6cDFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2dXpwMXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAxNiwgMTgsIDIwLCAyMiwgMjQsIDI2LCAyOCwgMzApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnV6cDFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAxNiwgMTgsIDIwLCAyMiwgMjQsIDI2LCAyOCwgMzApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnV6cDFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2dXpwMXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2dXpwMXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZ1enAxcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2dXpwMXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2dXpwMXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2dXpwMXFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2dXpwMXFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2dXpwMXFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2dXpwMXFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dXpwMV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnV6cDFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2dXpwMV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2dXpwMV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZ1enAxX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZ1enAxX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZ1enAxX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZ1enAxX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2dXpwMV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnV6cDFfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnV6cDFfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2dXpwMV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZ1enAxX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnV6cDFfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2dXpwMl9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnV6cDJfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2dXpwMl9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2dXpwMl9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZ1enAycV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUsIDE3LCAxOSwgMjEsIDIzLCAyNSwgMjcsIDI5LCAzMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnV6cDJxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUsIDE3LCAxOSwgMjEsIDIzLCAyNSwgMjcsIDI5LCAzMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZ1enAycV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2dXpwMnFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2dXpwMnFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnV6cDJxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnV6cDJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwgMTcsIDE5LCAyMSwgMjMsIDI1LCAyNywgMjksIDMxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2dXpwMnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwgMTcsIDE5LCAyMSwgMjMsIDI1LCAyNywgMjksIDMxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnV6cDJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZ1enAycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZ1enAycV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2dXpwMnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2dXpwMnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnV6cDJxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2dXpwMnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1LCAxNywgMTksIDIxLCAyMywgMjUsIDI3LCAyOSwgMzEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnV6cDJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1LCAxNywgMTksIDIxLCAyMywgMjUsIDI3LCAyOSwgMzEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnV6cDJxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2dXpwMnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2dXpwMnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZ1enAycV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2dXpwMnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2dXpwMnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2dXpwMnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2dXpwMnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2dXpwMnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2dXpwMnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dXpwMl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnV6cDJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2dXpwMl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2dXpwMl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZ1enAyX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZ1enAyX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZ1enAyX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZ1enAyX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2dXpwMl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnV6cDJfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnV6cDJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2dXpwMl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZ1enAyX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnV6cDJfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2emlwMV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2emlwMV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnppcDFfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgNCwgMSwgNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnppcDFfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDEsIDUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2emlwMXFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxNiwgMSwgMTcsIDIsIDE4LCAzLCAxOSwgNCwgMjAsIDUsIDIxLCA2LCAyMiwgNywgMjMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZ6aXAxcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxNiwgMSwgMTcsIDIsIDE4LCAzLCAxOSwgNCwgMjAsIDUsIDIxLCA2LCAyMiwgNywgMjMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2emlwMXFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnppcDFxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnppcDFxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnppcDFxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA4LCAxLCA5LCAyLCAxMCwgMywgMTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2emlwMXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxNiwgMSwgMTcsIDIsIDE4LCAzLCAxOSwgNCwgMjAsIDUsIDIxLCA2LCAyMiwgNywgMjMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZ6aXAxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxNiwgMSwgMTcsIDIsIDE4LCAzLCAxOSwgNCwgMjAsIDUsIDIxLCA2LCAyMiwgNywgMjMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2emlwMXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgNCwgMSwgNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnppcDFxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA0LCAxLCA1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnppcDFxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZ6aXAxcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZ6aXAxcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA4LCAxLCA5LCAyLCAxMCwgMywgMTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZ6aXAxcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2emlwMXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxNiwgMSwgMTcsIDIsIDE4LCAzLCAxOSwgNCwgMjAsIDUsIDIxLCA2LCAyMiwgNywgMjMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnppcDFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxNiwgMSwgMTcsIDIsIDE4LCAzLCAxOSwgNCwgMjAsIDUsIDIxLCA2LCAyMiwgNywgMjMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnppcDFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2emlwMXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2emlwMXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgNCwgMSwgNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZ6aXAxcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA0LCAxLCA1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2emlwMXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgNCwgMSwgNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2emlwMXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA0LCAxLCA1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2emlwMXFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2emlwMXFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2emlwMXFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZ6aXAxcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnppcDFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA4LCAxLCA5LCAyLCAxMCwgMywgMTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnppcDFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZ6aXAxX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZ6aXAxX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnppcDFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgNCwgMSwgNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnppcDFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDQsIDEsIDUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnppcDFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA4LCAxLCA5LCAyLCAxMCwgMywgMTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2emlwMV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2emlwMV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnppcDFfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnppcDFfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2emlwMV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZ6aXAxX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDQsIDEsIDUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnppcDFfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA0LCAxLCA1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2emlwMl9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDQsIDEyLCA1LCAxMywgNiwgMTQsIDcsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZ6aXAyX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCA0LCAxMiwgNSwgMTMsIDYsIDE0LCA3LCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZ6aXAyX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDIsIDYsIDMsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZ6aXAyX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgeworICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAyLCA2LCAzLCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnppcDJxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgOCwgMjQsIDksIDI1LCAxMCwgMjYsIDExLCAyNywgMTIsIDI4LCAxMywgMjksIDE0LCAzMCwgMTUsIDMxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2emlwMnFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgOCwgMjQsIDksIDI1LCAxMCwgMjYsIDExLCAyNywgMTIsIDI4LCAxMywgMjksIDE0LCAzMCwgMTUsIDMxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnppcDJxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZ6aXAycV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZ6aXAycV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCA0LCAxMiwgNSwgMTMsIDYsIDE0LCA3LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnppcDJxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCA0LCAxMiwgNSwgMTMsIDYsIDE0LCA3LCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZ6aXAycV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDgsIDI0LCA5LCAyNSwgMTAsIDI2LCAxMSwgMjcsIDEyLCAyOCwgMTMsIDI5LCAxNCwgMzAsIDE1LCAzMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnppcDJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDgsIDI0LCA5LCAyNSwgMTAsIDI2LCAxMSwgMjcsIDEyLCAyOCwgMTMsIDI5LCAxNCwgMzAsIDE1LCAzMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZ6aXAycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAyLCA2LCAzLCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2emlwMnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDIsIDYsIDMsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2emlwMnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnppcDJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnppcDJxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDQsIDEyLCA1LCAxMywgNiwgMTQsIDcsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2emlwMnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDQsIDEyLCA1LCAxMywgNiwgMTQsIDcsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2emlwMnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCA4LCAyNCwgOSwgMjUsIDEwLCAyNiwgMTEsIDI3LCAxMiwgMjgsIDEzLCAyOSwgMTQsIDMwLCAxNSwgMzEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnppcDJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCA4LCAyNCwgOSwgMjUsIDEwLCAyNiwgMTEsIDI3LCAxMiwgMjgsIDEzLCAyOSwgMTQsIDMwLCAxNSwgMzEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnppcDJxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2emlwMnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2emlwMnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMiwgNiwgMywgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZ6aXAycV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAyLCA2LCAzLCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2emlwMnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMiwgNiwgMywgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2emlwMnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAyLCA2LCAzLCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2emlwMnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2emlwMnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2emlwMnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnppcDJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZ6aXAyX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnppcDJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDQsIDEyLCA1LCAxMywgNiwgMTQsIDcsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnppcDJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnppcDJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2emlwMl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAyLCA2LCAzLCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2emlwMl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMiwgNiwgMywgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2emlwMl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDQsIDEyLCA1LCAxMywgNiwgMTQsIDcsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnppcDJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCA0LCAxMiwgNSwgMTMsIDYsIDE0LCA3LCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2emlwMl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnppcDJfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnppcDJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2emlwMl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZ6aXAyX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDIsIDYsIDMsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnppcDJfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAyLCA2LCAzLCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2VuZGlmCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2YWJhcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRxX3U4KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZhYmFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkcV91OChfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZhYmFxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRxX3UzMihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2YWJhcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRxX3UzMihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZhYmFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRxX3UxNihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2YWJhcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRxX3UxNihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmFiYXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRxX3M4KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdmFiYXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZHFfczgoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZhYmFxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZHFfczMyKF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmFiYXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRxX3MzMihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmFiYXFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkcV9zMTYoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YWJhcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZHFfczE2KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2YWJhX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkX3U4KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmFiYV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkX3U4KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmFiYV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkX3UzMihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2YWJhX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZF91MzIoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2YWJhX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRfdTE2KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZhYmFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkX3UxNihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2YWJhX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRfczgoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZhYmFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkX3M4KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2YWJhX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZF9zMzIoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2YWJhX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkX3MzMihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdmFiYV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRfczE2KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmFiYV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZF9zMTYoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2YWJkbF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkodm1vdmxfdTgoKHVpbnQ4eDhfdCkodmFiZF91OChfX3AwLCBfX3AxKSkpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2YWJkbF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fbm9zd2FwX3Ztb3ZsX3U4KCh1aW50OHg4X3QpKF9fbm9zd2FwX3ZhYmRfdTgoX19yZXYwLCBfX3JldjEpKSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDE2eDhfdCBfX25vc3dhcF92YWJkbF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19ub3N3YXBfdm1vdmxfdTgoKHVpbnQ4eDhfdCkoX19ub3N3YXBfdmFiZF91OChfX3AwLCBfX3AxKSkpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZhYmRsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSh2bW92bF91MzIoKHVpbnQzMngyX3QpKHZhYmRfdTMyKF9fcDAsIF9fcDEpKSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZhYmRsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX25vc3dhcF92bW92bF91MzIoKHVpbnQzMngyX3QpKF9fbm9zd2FwX3ZhYmRfdTMyKF9fcmV2MCwgX19yZXYxKSkpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ2NHgyX3QgX19ub3N3YXBfdmFiZGxfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fbm9zd2FwX3Ztb3ZsX3UzMigodWludDMyeDJfdCkoX19ub3N3YXBfdmFiZF91MzIoX19wMCwgX19wMSkpKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2YWJkbF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkodm1vdmxfdTE2KCh1aW50MTZ4NF90KSh2YWJkX3UxNihfX3AwLCBfX3AxKSkpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2YWJkbF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19ub3N3YXBfdm1vdmxfdTE2KCh1aW50MTZ4NF90KShfX25vc3dhcF92YWJkX3UxNihfX3JldjAsIF9fcmV2MSkpKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4NF90IF9fbm9zd2FwX3ZhYmRsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX25vc3dhcF92bW92bF91MTYoKHVpbnQxNng0X3QpKF9fbm9zd2FwX3ZhYmRfdTE2KF9fcDAsIF9fcDEpKSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2YWJkbF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSh2bW92bF91OCgodWludDh4OF90KSh2YWJkX3M4KF9fcDAsIF9fcDEpKSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmFiZGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX25vc3dhcF92bW92bF91OCgodWludDh4OF90KShfX25vc3dhcF92YWJkX3M4KF9fcmV2MCwgX19yZXYxKSkpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDhfdCBfX25vc3dhcF92YWJkbF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX25vc3dhcF92bW92bF91OCgodWludDh4OF90KShfX25vc3dhcF92YWJkX3M4KF9fcDAsIF9fcDEpKSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2YWJkbF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSh2bW92bF91MzIoKHVpbnQzMngyX3QpKHZhYmRfczMyKF9fcDAsIF9fcDEpKSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmFiZGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fbm9zd2FwX3Ztb3ZsX3UzMigodWludDMyeDJfdCkoX19ub3N3YXBfdmFiZF9zMzIoX19yZXYwLCBfX3JldjEpKSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3ZhYmRsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fbm9zd2FwX3Ztb3ZsX3UzMigodWludDMyeDJfdCkoX19ub3N3YXBfdmFiZF9zMzIoX19wMCwgX19wMSkpKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZhYmRsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKHZtb3ZsX3UxNigodWludDE2eDRfdCkodmFiZF9zMTYoX19wMCwgX19wMSkpKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2YWJkbF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19ub3N3YXBfdm1vdmxfdTE2KCh1aW50MTZ4NF90KShfX25vc3dhcF92YWJkX3MxNihfX3JldjAsIF9fcmV2MSkpKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdmFiZGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19ub3N3YXBfdm1vdmxfdTE2KCh1aW50MTZ4NF90KShfX25vc3dhcF92YWJkX3MxNihfX3AwLCBfX3AxKSkpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZhZGRsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX3U4KF9fcDApICsgdm1vdmxfdTgoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmFkZGxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX3U4KF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF91OChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2YWRkbF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF91MzIoX19wMCkgKyB2bW92bF91MzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmFkZGxfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfdTMyKF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF91MzIoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmFkZGxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfdTE2KF9fcDApICsgdm1vdmxfdTE2KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZhZGRsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX3UxNihfX3JldjApICsgX19ub3N3YXBfdm1vdmxfdTE2KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmFkZGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfczgoX19wMCkgKyB2bW92bF9zOChfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZhZGRsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfczgoX19yZXYwKSArIF9fbm9zd2FwX3Ztb3ZsX3M4KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmFkZGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfczMyKF9fcDApICsgdm1vdmxfczMyKF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmFkZGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX3MzMihfX3JldjApICsgX19ub3N3YXBfdm1vdmxfczMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmFkZGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfczE2KF9fcDApICsgdm1vdmxfczE2KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmFkZGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX3MxNihfX3JldjApICsgX19ub3N3YXBfdm1vdmxfczE2KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZhZGR3X3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm1vdmxfdTgoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmFkZHdfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfdTgoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmFkZHdfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtb3ZsX3UzMihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2YWRkd191MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bW92bF91MzIoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmFkZHdfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtb3ZsX3UxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2YWRkd191MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bW92bF91MTYoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2YWRkd19zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtb3ZsX3M4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmFkZHdfczgoaW50MTZ4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3Ztb3ZsX3M4KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmFkZHdfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtb3ZsX3MzMihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZhZGR3X3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bW92bF9zMzIoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2YWRkd19zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm1vdmxfczE2KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmFkZHdfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3Ztb3ZsX3MxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX2YxNihfX3AwXzI0MiwgX19wMV8yNDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3MwXzI0MiA9IF9fcDBfMjQyOyBcCisgIGZsb2F0MTZfdCBfX3JldF8yNDI7IFwKK2Zsb2F0MTZ4NF90IF9fcmVpbnRfMjQyID0gX19zMF8yNDI7IFwKK2ludDE2X3QgX19yZWludDFfMjQyID0gdmdldF9sYW5lX3MxNigqKGludDE2eDRfdCAqKSAmX19yZWludF8yNDIsIF9fcDFfMjQyKTsgXAorICBfX3JldF8yNDIgPSAqKGZsb2F0MTZfdCAqKSAmX19yZWludDFfMjQyOyBcCisgIF9fcmV0XzI0MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRfbGFuZV9mMTYoX19wMF8yNDMsIF9fcDFfMjQzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0X3QgX19zMF8yNDMgPSBfX3AwXzI0MzsgXAorICBmbG9hdDE2eDRfdCBfX3JldjBfMjQzOyAgX19yZXYwXzI0MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjQzLCBfX3MwXzI0MywgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNl90IF9fcmV0XzI0MzsgXAorZmxvYXQxNng0X3QgX19yZWludF8yNDMgPSBfX3JldjBfMjQzOyBcCitpbnQxNl90IF9fcmVpbnQxXzI0MyA9IF9fbm9zd2FwX3ZnZXRfbGFuZV9zMTYoKihpbnQxNng0X3QgKikgJl9fcmVpbnRfMjQzLCBfX3AxXzI0Myk7IFwKKyAgX19yZXRfMjQzID0gKihmbG9hdDE2X3QgKikgJl9fcmVpbnQxXzI0MzsgXAorICBfX3JldF8yNDM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRxX2xhbmVfZjE2KF9fcDBfMjQ0LCBfX3AxXzI0NCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OF90IF9fczBfMjQ0ID0gX19wMF8yNDQ7IFwKKyAgZmxvYXQxNl90IF9fcmV0XzI0NDsgXAorZmxvYXQxNng4X3QgX19yZWludF8yNDQgPSBfX3MwXzI0NDsgXAoraW50MTZfdCBfX3JlaW50MV8yNDQgPSB2Z2V0cV9sYW5lX3MxNigqKGludDE2eDhfdCAqKSAmX19yZWludF8yNDQsIF9fcDFfMjQ0KTsgXAorICBfX3JldF8yNDQgPSAqKGZsb2F0MTZfdCAqKSAmX19yZWludDFfMjQ0OyBcCisgIF9fcmV0XzI0NDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRxX2xhbmVfZjE2KF9fcDBfMjQ1LCBfX3AxXzI0NSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OF90IF9fczBfMjQ1ID0gX19wMF8yNDU7IFwKKyAgZmxvYXQxNng4X3QgX19yZXYwXzI0NTsgIF9fcmV2MF8yNDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzI0NSwgX19zMF8yNDUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MTZfdCBfX3JldF8yNDU7IFwKK2Zsb2F0MTZ4OF90IF9fcmVpbnRfMjQ1ID0gX19yZXYwXzI0NTsgXAoraW50MTZfdCBfX3JlaW50MV8yNDUgPSBfX25vc3dhcF92Z2V0cV9sYW5lX3MxNigqKGludDE2eDhfdCAqKSAmX19yZWludF8yNDUsIF9fcDFfMjQ1KTsgXAorICBfX3JldF8yNDUgPSAqKGZsb2F0MTZfdCAqKSAmX19yZWludDFfMjQ1OyBcCisgIF9fcmV0XzI0NTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bWxhbF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bXVsbF91OChfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2bWxhbF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91OChfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MTZ4OF90IF9fbm9zd2FwX3ZtbGFsX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZtdWxsX3U4KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm1sYWxfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm11bGxfdTMyKF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZtbGFsX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfdTMyKF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ2NHgyX3QgX19ub3N3YXBfdm1sYWxfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdm11bGxfdTMyKF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1sYWxfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm11bGxfdTE2KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtbGFsX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfdTE2KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdm1sYWxfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdm11bGxfdTE2KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bWxhbF9zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtdWxsX3M4KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm1sYWxfczgoaW50MTZ4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zOChfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng4X3QgX19ub3N3YXBfdm1sYWxfczgoaW50MTZ4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92bXVsbF9zOChfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm1sYWxfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bXVsbF9zMzIoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bWxhbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfczMyKF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92bWxhbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZtdWxsX3MzMihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1sYWxfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bXVsbF9zMTYoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bWxhbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfczE2KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92bWxhbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZtdWxsX3MxNihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhbF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyB2bXVsbF91MzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYWxfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYWxfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgdm11bGxfdTE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFsX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfdTE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgdm11bGxfczMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYWxfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyB2bXVsbF9zMTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYWxfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZtbGFsX25fdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtdWxsX3UzMihfX3AxLCAodWludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2bWxhbF9uX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3JldjEsICh1aW50MzJ4Ml90KSB7X19wMiwgX19wMn0pOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDY0eDJfdCBfX25vc3dhcF92bWxhbF9uX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92bXVsbF91MzIoX19wMSwgKHVpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bWxhbF9uX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bXVsbF91MTYoX19wMSwgKHVpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1sYWxfbl91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MTYoX19yZXYxLCAodWludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdm1sYWxfbl91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdm11bGxfdTE2KF9fcDEsICh1aW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2bWxhbF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtdWxsX3MzMihfX3AxLCAoaW50MzJ4Ml90KSB7X19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3Qgdm1sYWxfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zMzIoX19yZXYxLCAoaW50MzJ4Ml90KSB7X19wMiwgX19wMn0pOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3ZtbGFsX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdm11bGxfczMyKF9fcDEsIChpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtbGFsX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm11bGxfczE2KF9fcDEsIChpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bWxhbF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MxNihfX3JldjEsIChpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdm1sYWxfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92bXVsbF9zMTYoX19wMSwgKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtbHNsX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtdWxsX3U4KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtbHNsX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3U4KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng4X3QgX19ub3N3YXBfdm1sc2xfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19ub3N3YXBfdm11bGxfdTgoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2bWxzbF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bXVsbF91MzIoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm1sc2xfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF91MzIoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDY0eDJfdCBfX25vc3dhcF92bWxzbF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX25vc3dhcF92bXVsbF91MzIoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bWxzbF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bXVsbF91MTYoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1sc2xfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF91MTYoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDRfdCBfX25vc3dhcF92bWxzbF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX25vc3dhcF92bXVsbF91MTYoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtbHNsX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm11bGxfczgoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bWxzbF9zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3M4KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDhfdCBfX25vc3dhcF92bWxzbF9zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fbm9zd2FwX3ZtdWxsX3M4KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2bWxzbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtdWxsX3MzMihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtbHNsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zMzIoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3ZtbHNsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19ub3N3YXBfdm11bGxfczMyKF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bWxzbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtdWxsX3MxNihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtbHNsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zMTYoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZtbHNsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19ub3N3YXBfdm11bGxfczE2KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNsX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIHZtdWxsX3UzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzbF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzbF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSB2bXVsbF91MTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc2xfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF91MTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc2xfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSB2bXVsbF9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc2xfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MzMihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIHZtdWxsX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm1sc2xfbl91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm11bGxfdTMyKF9fcDEsICh1aW50MzJ4Ml90KSB7X19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZtbHNsX25fdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTMyKF9fcmV2MSwgKHVpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50NjR4Ml90IF9fbm9zd2FwX3ZtbHNsX25fdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3AxLCAodWludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtbHNsX25fdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtdWxsX3UxNihfX3AxLCAodWludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bWxzbF9uX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3JldjEsICh1aW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDRfdCBfX25vc3dhcF92bWxzbF9uX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX25vc3dhcF92bXVsbF91MTYoX19wMSwgKHVpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZtbHNsX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm11bGxfczMyKF9fcDEsIChpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bWxzbF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MzMihfX3JldjEsIChpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdm1sc2xfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX25vc3dhcF92bXVsbF9zMzIoX19wMSwgKGludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1sc2xfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bXVsbF9zMTYoX19wMSwgKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtbHNsX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczE2KF9fcmV2MSwgKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92bWxzbF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fbm9zd2FwX3ZtdWxsX3MxNihfX3AxLCAoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRfbGFuZV9mMTYoX19wMF8yNDYsIF9fcDFfMjQ2LCBfX3AyXzI0NikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZfdCBfX3MwXzI0NiA9IF9fcDBfMjQ2OyBcCisgIGZsb2F0MTZ4NF90IF9fczFfMjQ2ID0gX19wMV8yNDY7IFwKKyAgZmxvYXQxNng0X3QgX19yZXRfMjQ2OyBcCitmbG9hdDE2X3QgX19yZWludF8yNDYgPSBfX3MwXzI0NjsgXAorZmxvYXQxNng0X3QgX19yZWludDFfMjQ2ID0gX19zMV8yNDY7IFwKK2ludDE2eDRfdCBfX3JlaW50Ml8yNDYgPSB2c2V0X2xhbmVfczE2KCooaW50MTZfdCAqKSAmX19yZWludF8yNDYsICooaW50MTZ4NF90ICopICZfX3JlaW50MV8yNDYsIF9fcDJfMjQ2KTsgXAorICBfX3JldF8yNDYgPSAqKGZsb2F0MTZ4NF90ICopICZfX3JlaW50Ml8yNDY7IFwKKyAgX19yZXRfMjQ2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldF9sYW5lX2YxNihfX3AwXzI0NywgX19wMV8yNDcsIF9fcDJfMjQ3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNl90IF9fczBfMjQ3ID0gX19wMF8yNDc7IFwKKyAgZmxvYXQxNng0X3QgX19zMV8yNDcgPSBfX3AxXzI0NzsgXAorICBmbG9hdDE2eDRfdCBfX3JldjFfMjQ3OyAgX19yZXYxXzI0NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjQ3LCBfX3MxXzI0NywgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNng0X3QgX19yZXRfMjQ3OyBcCitmbG9hdDE2X3QgX19yZWludF8yNDcgPSBfX3MwXzI0NzsgXAorZmxvYXQxNng0X3QgX19yZWludDFfMjQ3ID0gX19yZXYxXzI0NzsgXAoraW50MTZ4NF90IF9fcmVpbnQyXzI0NyA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9zMTYoKihpbnQxNl90ICopICZfX3JlaW50XzI0NywgKihpbnQxNng0X3QgKikgJl9fcmVpbnQxXzI0NywgX19wMl8yNDcpOyBcCisgIF9fcmV0XzI0NyA9ICooZmxvYXQxNng0X3QgKikgJl9fcmVpbnQyXzI0NzsgXAorICBfX3JldF8yNDcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yNDcsIF9fcmV0XzI0NywgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjQ3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0cV9sYW5lX2YxNihfX3AwXzI0OCwgX19wMV8yNDgsIF9fcDJfMjQ4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNl90IF9fczBfMjQ4ID0gX19wMF8yNDg7IFwKKyAgZmxvYXQxNng4X3QgX19zMV8yNDggPSBfX3AxXzI0ODsgXAorICBmbG9hdDE2eDhfdCBfX3JldF8yNDg7IFwKK2Zsb2F0MTZfdCBfX3JlaW50XzI0OCA9IF9fczBfMjQ4OyBcCitmbG9hdDE2eDhfdCBfX3JlaW50MV8yNDggPSBfX3MxXzI0ODsgXAoraW50MTZ4OF90IF9fcmVpbnQyXzI0OCA9IHZzZXRxX2xhbmVfczE2KCooaW50MTZfdCAqKSAmX19yZWludF8yNDgsICooaW50MTZ4OF90ICopICZfX3JlaW50MV8yNDgsIF9fcDJfMjQ4KTsgXAorICBfX3JldF8yNDggPSAqKGZsb2F0MTZ4OF90ICopICZfX3JlaW50Ml8yNDg7IFwKKyAgX19yZXRfMjQ4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldHFfbGFuZV9mMTYoX19wMF8yNDksIF9fcDFfMjQ5LCBfX3AyXzI0OSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZfdCBfX3MwXzI0OSA9IF9fcDBfMjQ5OyBcCisgIGZsb2F0MTZ4OF90IF9fczFfMjQ5ID0gX19wMV8yNDk7IFwKKyAgZmxvYXQxNng4X3QgX19yZXYxXzI0OTsgIF9fcmV2MV8yNDkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzI0OSwgX19zMV8yNDksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0XzI0OTsgXAorZmxvYXQxNl90IF9fcmVpbnRfMjQ5ID0gX19zMF8yNDk7IFwKK2Zsb2F0MTZ4OF90IF9fcmVpbnQxXzI0OSA9IF9fcmV2MV8yNDk7IFwKK2ludDE2eDhfdCBfX3JlaW50Ml8yNDkgPSBfX25vc3dhcF92c2V0cV9sYW5lX3MxNigqKGludDE2X3QgKikgJl9fcmVpbnRfMjQ5LCAqKGludDE2eDhfdCAqKSAmX19yZWludDFfMjQ5LCBfX3AyXzI0OSk7IFwKKyAgX19yZXRfMjQ5ID0gKihmbG9hdDE2eDhfdCAqKSAmX19yZWludDJfMjQ5OyBcCisgIF9fcmV0XzI0OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzI0OSwgX19yZXRfMjQ5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yNDk7IFwKK30pCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19BUk1fRkVBVFVSRV9RUkRNWCkgJiYgZGVmaW5lZChfX2FhcmNoNjRfXykKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZxcmRtbGFoc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IHZxYWRkc19zMzIoX19wMCwgdnFyZG11bGhzX3MzMihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdnFyZG1sYWhzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRzX3MzMihfX3AwLCBfX25vc3dhcF92cXJkbXVsaHNfczMyKF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZxcmRtbGFoaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IHZxYWRkaF9zMTYoX19wMCwgdnFyZG11bGhoX3MxNihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdnFyZG1sYWhoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRoX3MxNihfX3AwLCBfX25vc3dhcF92cXJkbXVsaGhfczE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxhaHNfbGFuZV9zMzIoX19wMF8yNTAsIF9fcDFfMjUwLCBfX3AyXzI1MCwgX19wM18yNTApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMjUwID0gX19wMF8yNTA7IFwKKyAgaW50MzJfdCBfX3MxXzI1MCA9IF9fcDFfMjUwOyBcCisgIGludDMyeDJfdCBfX3MyXzI1MCA9IF9fcDJfMjUwOyBcCisgIGludDMyX3QgX19yZXRfMjUwOyBcCisgIF9fcmV0XzI1MCA9IHZxYWRkc19zMzIoX19zMF8yNTAsIHZxcmRtdWxoc19zMzIoX19zMV8yNTAsIHZnZXRfbGFuZV9zMzIoX19zMl8yNTAsIF9fcDNfMjUwKSkpOyBcCisgIF9fcmV0XzI1MDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbGFoc19sYW5lX3MzMihfX3AwXzI1MSwgX19wMV8yNTEsIF9fcDJfMjUxLCBfX3AzXzI1MSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8yNTEgPSBfX3AwXzI1MTsgXAorICBpbnQzMl90IF9fczFfMjUxID0gX19wMV8yNTE7IFwKKyAgaW50MzJ4Ml90IF9fczJfMjUxID0gX19wMl8yNTE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2Ml8yNTE7ICBfX3JldjJfMjUxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNTEsIF9fczJfMjUxLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0XzI1MTsgXAorICBfX3JldF8yNTEgPSBfX25vc3dhcF92cWFkZHNfczMyKF9fczBfMjUxLCBfX25vc3dhcF92cXJkbXVsaHNfczMyKF9fczFfMjUxLCBfX25vc3dhcF92Z2V0X2xhbmVfczMyKF9fcmV2Ml8yNTEsIF9fcDNfMjUxKSkpOyBcCisgIF9fcmV0XzI1MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG1sYWhoX2xhbmVfczE2KF9fcDBfMjUyLCBfX3AxXzI1MiwgX19wMl8yNTIsIF9fcDNfMjUyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzI1MiA9IF9fcDBfMjUyOyBcCisgIGludDE2X3QgX19zMV8yNTIgPSBfX3AxXzI1MjsgXAorICBpbnQxNng0X3QgX19zMl8yNTIgPSBfX3AyXzI1MjsgXAorICBpbnQxNl90IF9fcmV0XzI1MjsgXAorICBfX3JldF8yNTIgPSB2cWFkZGhfczE2KF9fczBfMjUyLCB2cXJkbXVsaGhfczE2KF9fczFfMjUyLCB2Z2V0X2xhbmVfczE2KF9fczJfMjUyLCBfX3AzXzI1MikpKTsgXAorICBfX3JldF8yNTI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxhaGhfbGFuZV9zMTYoX19wMF8yNTMsIF9fcDFfMjUzLCBfX3AyXzI1MywgX19wM18yNTMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMjUzID0gX19wMF8yNTM7IFwKKyAgaW50MTZfdCBfX3MxXzI1MyA9IF9fcDFfMjUzOyBcCisgIGludDE2eDRfdCBfX3MyXzI1MyA9IF9fcDJfMjUzOyBcCisgIGludDE2eDRfdCBfX3JldjJfMjUzOyAgX19yZXYyXzI1MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjUzLCBfX3MyXzI1MywgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZfdCBfX3JldF8yNTM7IFwKKyAgX19yZXRfMjUzID0gX19ub3N3YXBfdnFhZGRoX3MxNihfX3MwXzI1MywgX19ub3N3YXBfdnFyZG11bGhoX3MxNihfX3MxXzI1MywgX19ub3N3YXBfdmdldF9sYW5lX3MxNihfX3JldjJfMjUzLCBfX3AzXzI1MykpKTsgXAorICBfX3JldF8yNTM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFoc19sYW5lcV9zMzIoX19wMF8yNTQsIF9fcDFfMjU0LCBfX3AyXzI1NCwgX19wM18yNTQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMjU0ID0gX19wMF8yNTQ7IFwKKyAgaW50MzJfdCBfX3MxXzI1NCA9IF9fcDFfMjU0OyBcCisgIGludDMyeDRfdCBfX3MyXzI1NCA9IF9fcDJfMjU0OyBcCisgIGludDMyX3QgX19yZXRfMjU0OyBcCisgIF9fcmV0XzI1NCA9IHZxYWRkc19zMzIoX19zMF8yNTQsIHZxcmRtdWxoc19zMzIoX19zMV8yNTQsIHZnZXRxX2xhbmVfczMyKF9fczJfMjU0LCBfX3AzXzI1NCkpKTsgXAorICBfX3JldF8yNTQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxhaHNfbGFuZXFfczMyKF9fcDBfMjU1LCBfX3AxXzI1NSwgX19wMl8yNTUsIF9fcDNfMjU1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzI1NSA9IF9fcDBfMjU1OyBcCisgIGludDMyX3QgX19zMV8yNTUgPSBfX3AxXzI1NTsgXAorICBpbnQzMng0X3QgX19zMl8yNTUgPSBfX3AyXzI1NTsgXAorICBpbnQzMng0X3QgX19yZXYyXzI1NTsgIF9fcmV2Ml8yNTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzI1NSwgX19zMl8yNTUsIDMsIDIsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXRfMjU1OyBcCisgIF9fcmV0XzI1NSA9IF9fbm9zd2FwX3ZxYWRkc19zMzIoX19zMF8yNTUsIF9fbm9zd2FwX3ZxcmRtdWxoc19zMzIoX19zMV8yNTUsIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczMyKF9fcmV2Ml8yNTUsIF9fcDNfMjU1KSkpOyBcCisgIF9fcmV0XzI1NTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG1sYWhoX2xhbmVxX3MxNihfX3AwXzI1NiwgX19wMV8yNTYsIF9fcDJfMjU2LCBfX3AzXzI1NikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8yNTYgPSBfX3AwXzI1NjsgXAorICBpbnQxNl90IF9fczFfMjU2ID0gX19wMV8yNTY7IFwKKyAgaW50MTZ4OF90IF9fczJfMjU2ID0gX19wMl8yNTY7IFwKKyAgaW50MTZfdCBfX3JldF8yNTY7IFwKKyAgX19yZXRfMjU2ID0gdnFhZGRoX3MxNihfX3MwXzI1NiwgdnFyZG11bGhoX3MxNihfX3MxXzI1NiwgdmdldHFfbGFuZV9zMTYoX19zMl8yNTYsIF9fcDNfMjU2KSkpOyBcCisgIF9fcmV0XzI1NjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbGFoaF9sYW5lcV9zMTYoX19wMF8yNTcsIF9fcDFfMjU3LCBfX3AyXzI1NywgX19wM18yNTcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMjU3ID0gX19wMF8yNTc7IFwKKyAgaW50MTZfdCBfX3MxXzI1NyA9IF9fcDFfMjU3OyBcCisgIGludDE2eDhfdCBfX3MyXzI1NyA9IF9fcDJfMjU3OyBcCisgIGludDE2eDhfdCBfX3JldjJfMjU3OyAgX19yZXYyXzI1NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjU3LCBfX3MyXzI1NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZfdCBfX3JldF8yNTc7IFwKKyAgX19yZXRfMjU3ID0gX19ub3N3YXBfdnFhZGRoX3MxNihfX3MwXzI1NywgX19ub3N3YXBfdnFyZG11bGhoX3MxNihfX3MxXzI1NywgX19ub3N3YXBfdmdldHFfbGFuZV9zMTYoX19yZXYyXzI1NywgX19wM18yNTcpKSk7IFwKKyAgX19yZXRfMjU3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZxcmRtbHNoc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IHZxc3Vic19zMzIoX19wMCwgdnFyZG11bGhzX3MzMihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdnFyZG1sc2hzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJzX3MzMihfX3AwLCBfX25vc3dhcF92cXJkbXVsaHNfczMyKF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZxcmRtbHNoaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IHZxc3ViaF9zMTYoX19wMCwgdnFyZG11bGhoX3MxNihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdnFyZG1sc2hoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJoX3MxNihfX3AwLCBfX25vc3dhcF92cXJkbXVsaGhfczE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxzaHNfbGFuZV9zMzIoX19wMF8yNTgsIF9fcDFfMjU4LCBfX3AyXzI1OCwgX19wM18yNTgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMjU4ID0gX19wMF8yNTg7IFwKKyAgaW50MzJfdCBfX3MxXzI1OCA9IF9fcDFfMjU4OyBcCisgIGludDMyeDJfdCBfX3MyXzI1OCA9IF9fcDJfMjU4OyBcCisgIGludDMyX3QgX19yZXRfMjU4OyBcCisgIF9fcmV0XzI1OCA9IHZxc3Vic19zMzIoX19zMF8yNTgsIHZxcmRtdWxoc19zMzIoX19zMV8yNTgsIHZnZXRfbGFuZV9zMzIoX19zMl8yNTgsIF9fcDNfMjU4KSkpOyBcCisgIF9fcmV0XzI1ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbHNoc19sYW5lX3MzMihfX3AwXzI1OSwgX19wMV8yNTksIF9fcDJfMjU5LCBfX3AzXzI1OSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8yNTkgPSBfX3AwXzI1OTsgXAorICBpbnQzMl90IF9fczFfMjU5ID0gX19wMV8yNTk7IFwKKyAgaW50MzJ4Ml90IF9fczJfMjU5ID0gX19wMl8yNTk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2Ml8yNTk7ICBfX3JldjJfMjU5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNTksIF9fczJfMjU5LCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0XzI1OTsgXAorICBfX3JldF8yNTkgPSBfX25vc3dhcF92cXN1YnNfczMyKF9fczBfMjU5LCBfX25vc3dhcF92cXJkbXVsaHNfczMyKF9fczFfMjU5LCBfX25vc3dhcF92Z2V0X2xhbmVfczMyKF9fcmV2Ml8yNTksIF9fcDNfMjU5KSkpOyBcCisgIF9fcmV0XzI1OTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG1sc2hoX2xhbmVfczE2KF9fcDBfMjYwLCBfX3AxXzI2MCwgX19wMl8yNjAsIF9fcDNfMjYwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzI2MCA9IF9fcDBfMjYwOyBcCisgIGludDE2X3QgX19zMV8yNjAgPSBfX3AxXzI2MDsgXAorICBpbnQxNng0X3QgX19zMl8yNjAgPSBfX3AyXzI2MDsgXAorICBpbnQxNl90IF9fcmV0XzI2MDsgXAorICBfX3JldF8yNjAgPSB2cXN1YmhfczE2KF9fczBfMjYwLCB2cXJkbXVsaGhfczE2KF9fczFfMjYwLCB2Z2V0X2xhbmVfczE2KF9fczJfMjYwLCBfX3AzXzI2MCkpKTsgXAorICBfX3JldF8yNjA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxzaGhfbGFuZV9zMTYoX19wMF8yNjEsIF9fcDFfMjYxLCBfX3AyXzI2MSwgX19wM18yNjEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMjYxID0gX19wMF8yNjE7IFwKKyAgaW50MTZfdCBfX3MxXzI2MSA9IF9fcDFfMjYxOyBcCisgIGludDE2eDRfdCBfX3MyXzI2MSA9IF9fcDJfMjYxOyBcCisgIGludDE2eDRfdCBfX3JldjJfMjYxOyAgX19yZXYyXzI2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjYxLCBfX3MyXzI2MSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZfdCBfX3JldF8yNjE7IFwKKyAgX19yZXRfMjYxID0gX19ub3N3YXBfdnFzdWJoX3MxNihfX3MwXzI2MSwgX19ub3N3YXBfdnFyZG11bGhoX3MxNihfX3MxXzI2MSwgX19ub3N3YXBfdmdldF9sYW5lX3MxNihfX3JldjJfMjYxLCBfX3AzXzI2MSkpKTsgXAorICBfX3JldF8yNjE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbHNoc19sYW5lcV9zMzIoX19wMF8yNjIsIF9fcDFfMjYyLCBfX3AyXzI2MiwgX19wM18yNjIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMjYyID0gX19wMF8yNjI7IFwKKyAgaW50MzJfdCBfX3MxXzI2MiA9IF9fcDFfMjYyOyBcCisgIGludDMyeDRfdCBfX3MyXzI2MiA9IF9fcDJfMjYyOyBcCisgIGludDMyX3QgX19yZXRfMjYyOyBcCisgIF9fcmV0XzI2MiA9IHZxc3Vic19zMzIoX19zMF8yNjIsIHZxcmRtdWxoc19zMzIoX19zMV8yNjIsIHZnZXRxX2xhbmVfczMyKF9fczJfMjYyLCBfX3AzXzI2MikpKTsgXAorICBfX3JldF8yNjI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxzaHNfbGFuZXFfczMyKF9fcDBfMjYzLCBfX3AxXzI2MywgX19wMl8yNjMsIF9fcDNfMjYzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzI2MyA9IF9fcDBfMjYzOyBcCisgIGludDMyX3QgX19zMV8yNjMgPSBfX3AxXzI2MzsgXAorICBpbnQzMng0X3QgX19zMl8yNjMgPSBfX3AyXzI2MzsgXAorICBpbnQzMng0X3QgX19yZXYyXzI2MzsgIF9fcmV2Ml8yNjMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzI2MywgX19zMl8yNjMsIDMsIDIsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXRfMjYzOyBcCisgIF9fcmV0XzI2MyA9IF9fbm9zd2FwX3Zxc3Vic19zMzIoX19zMF8yNjMsIF9fbm9zd2FwX3ZxcmRtdWxoc19zMzIoX19zMV8yNjMsIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczMyKF9fcmV2Ml8yNjMsIF9fcDNfMjYzKSkpOyBcCisgIF9fcmV0XzI2MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG1sc2hoX2xhbmVxX3MxNihfX3AwXzI2NCwgX19wMV8yNjQsIF9fcDJfMjY0LCBfX3AzXzI2NCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8yNjQgPSBfX3AwXzI2NDsgXAorICBpbnQxNl90IF9fczFfMjY0ID0gX19wMV8yNjQ7IFwKKyAgaW50MTZ4OF90IF9fczJfMjY0ID0gX19wMl8yNjQ7IFwKKyAgaW50MTZfdCBfX3JldF8yNjQ7IFwKKyAgX19yZXRfMjY0ID0gdnFzdWJoX3MxNihfX3MwXzI2NCwgdnFyZG11bGhoX3MxNihfX3MxXzI2NCwgdmdldHFfbGFuZV9zMTYoX19zMl8yNjQsIF9fcDNfMjY0KSkpOyBcCisgIF9fcmV0XzI2NDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbHNoaF9sYW5lcV9zMTYoX19wMF8yNjUsIF9fcDFfMjY1LCBfX3AyXzI2NSwgX19wM18yNjUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMjY1ID0gX19wMF8yNjU7IFwKKyAgaW50MTZfdCBfX3MxXzI2NSA9IF9fcDFfMjY1OyBcCisgIGludDE2eDhfdCBfX3MyXzI2NSA9IF9fcDJfMjY1OyBcCisgIGludDE2eDhfdCBfX3JldjJfMjY1OyAgX19yZXYyXzI2NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjY1LCBfX3MyXzI2NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZfdCBfX3JldF8yNjU7IFwKKyAgX19yZXRfMjY1ID0gX19ub3N3YXBfdnFzdWJoX3MxNihfX3MwXzI2NSwgX19ub3N3YXBfdnFyZG11bGhoX3MxNihfX3MxXzI2NSwgX19ub3N3YXBfdmdldHFfbGFuZV9zMTYoX19yZXYyXzI2NSwgX19wM18yNjUpKSk7IFwKKyAgX19yZXRfMjY1OyBcCit9KQorI2VuZGlmCisKKyNlbmRpZgorI2lmIGRlZmluZWQoX19hYXJjaDY0X18pCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2YWJkbF9oaWdoX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmFiZGxfdTgodmdldF9oaWdoX3U4KF9fcDApLCB2Z2V0X2hpZ2hfdTgoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZhYmRsX2hpZ2hfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92YWJkbF91OChfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2YWJkbF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZhYmRsX3UzMih2Z2V0X2hpZ2hfdTMyKF9fcDApLCB2Z2V0X2hpZ2hfdTMyKF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2YWJkbF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZhYmRsX3UzMihfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZhYmRsX2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmFiZGxfdTE2KHZnZXRfaGlnaF91MTYoX19wMCksIHZnZXRfaGlnaF91MTYoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZhYmRsX2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmFiZGxfdTE2KF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2YWJkbF9oaWdoX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmFiZGxfczgodmdldF9oaWdoX3M4KF9fcDApLCB2Z2V0X2hpZ2hfczgoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmFiZGxfaGlnaF9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92YWJkbF9zOChfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZhYmRsX2hpZ2hfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdmFiZGxfczMyKHZnZXRfaGlnaF9zMzIoX19wMCksIHZnZXRfaGlnaF9zMzIoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmFiZGxfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmFiZGxfczMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2YWJkbF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZhYmRsX3MxNih2Z2V0X2hpZ2hfczE2KF9fcDApLCB2Z2V0X2hpZ2hfczE2KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZhYmRsX2hpZ2hfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZhYmRsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZhZGRsX2hpZ2hfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9oaWdoX3U4KF9fcDApICsgdm1vdmxfaGlnaF91OChfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2YWRkbF9oaWdoX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfaGlnaF91OChfX3JldjApICsgX19ub3N3YXBfdm1vdmxfaGlnaF91OChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2YWRkbF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX2hpZ2hfdTMyKF9fcDApICsgdm1vdmxfaGlnaF91MzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmFkZGxfaGlnaF91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3UzMihfX3JldjApICsgX19ub3N3YXBfdm1vdmxfaGlnaF91MzIoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmFkZGxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9oaWdoX3UxNihfX3AwKSArIHZtb3ZsX2hpZ2hfdTE2KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZhZGRsX2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfaGlnaF91MTYoX19yZXYwKSArIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTE2KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmFkZGxfaGlnaF9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX2hpZ2hfczgoX19wMCkgKyB2bW92bF9oaWdoX3M4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmFkZGxfaGlnaF9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9oaWdoX3M4KF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF9oaWdoX3M4KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmFkZGxfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9oaWdoX3MzMihfX3AwKSArIHZtb3ZsX2hpZ2hfczMyKF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmFkZGxfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfaGlnaF9zMzIoX19yZXYwKSArIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmFkZGxfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9oaWdoX3MxNihfX3AwKSArIHZtb3ZsX2hpZ2hfczE2KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmFkZGxfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfaGlnaF9zMTYoX19yZXYwKSArIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczE2KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZhZGR3X2hpZ2hfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm1vdmxfaGlnaF91OChfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2YWRkd19oaWdoX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfaGlnaF91OChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2YWRkd19oaWdoX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bW92bF9oaWdoX3UzMihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2YWRkd19oaWdoX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZhZGR3X2hpZ2hfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtb3ZsX2hpZ2hfdTE2KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZhZGR3X2hpZ2hfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfaGlnaF91MTYoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2YWRkd19oaWdoX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtb3ZsX2hpZ2hfczgoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YWRkd19oaWdoX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczgoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2YWRkd19oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bW92bF9oaWdoX3MzMihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZhZGR3X2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmFkZHdfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm1vdmxfaGlnaF9zMTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2YWRkd19oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bW92bF9oaWdoX3MxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfcDY0KF9fcDBfMjY2LCBfX3AxXzI2NiwgX19wMl8yNjYsIF9fcDNfMjY2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwXzI2NiA9IF9fcDBfMjY2OyBcCisgIHBvbHk2NHgxX3QgX19zMl8yNjYgPSBfX3AyXzI2NjsgXAorICBwb2x5NjR4Ml90IF9fcmV0XzI2NjsgXAorICBfX3JldF8yNjYgPSB2c2V0cV9sYW5lX3A2NCh2Z2V0X2xhbmVfcDY0KF9fczJfMjY2LCBfX3AzXzI2NiksIF9fczBfMjY2LCBfX3AxXzI2Nik7IFwKKyAgX19yZXRfMjY2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfcDY0KF9fcDBfMjY3LCBfX3AxXzI2NywgX19wMl8yNjcsIF9fcDNfMjY3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwXzI2NyA9IF9fcDBfMjY3OyBcCisgIHBvbHk2NHgxX3QgX19zMl8yNjcgPSBfX3AyXzI2NzsgXAorICBwb2x5NjR4Ml90IF9fcmV2MF8yNjc7ICBfX3JldjBfMjY3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yNjcsIF9fczBfMjY3LCAxLCAwKTsgXAorICBwb2x5NjR4Ml90IF9fcmV0XzI2NzsgXAorICBfX3JldF8yNjcgPSBfX25vc3dhcF92c2V0cV9sYW5lX3A2NChfX25vc3dhcF92Z2V0X2xhbmVfcDY0KF9fczJfMjY3LCBfX3AzXzI2NyksIF9fcmV2MF8yNjcsIF9fcDFfMjY3KTsgXAorICBfX3JldF8yNjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yNjcsIF9fcmV0XzI2NywgMSwgMCk7IFwKKyAgX19yZXRfMjY3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZV9mNjQoX19wMF8yNjgsIF9fcDFfMjY4LCBfX3AyXzI2OCwgX19wM18yNjgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwXzI2OCA9IF9fcDBfMjY4OyBcCisgIGZsb2F0NjR4MV90IF9fczJfMjY4ID0gX19wMl8yNjg7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXRfMjY4OyBcCisgIF9fcmV0XzI2OCA9IHZzZXRxX2xhbmVfZjY0KHZnZXRfbGFuZV9mNjQoX19zMl8yNjgsIF9fcDNfMjY4KSwgX19zMF8yNjgsIF9fcDFfMjY4KTsgXAorICBfX3JldF8yNjg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weXFfbGFuZV9mNjQoX19wMF8yNjksIF9fcDFfMjY5LCBfX3AyXzI2OSwgX19wM18yNjkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwXzI2OSA9IF9fcDBfMjY5OyBcCisgIGZsb2F0NjR4MV90IF9fczJfMjY5ID0gX19wMl8yNjk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwXzI2OTsgIF9fcmV2MF8yNjkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzI2OSwgX19zMF8yNjksIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0XzI2OTsgXAorICBfX3JldF8yNjkgPSBfX25vc3dhcF92c2V0cV9sYW5lX2Y2NChfX25vc3dhcF92Z2V0X2xhbmVfZjY0KF9fczJfMjY5LCBfX3AzXzI2OSksIF9fcmV2MF8yNjksIF9fcDFfMjY5KTsgXAorICBfX3JldF8yNjkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yNjksIF9fcmV0XzI2OSwgMSwgMCk7IFwKKyAgX19yZXRfMjY5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lX3A2NChfX3AwXzI3MCwgX19wMV8yNzAsIF9fcDJfMjcwLCBfX3AzXzI3MCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMF8yNzAgPSBfX3AwXzI3MDsgXAorICBwb2x5NjR4MV90IF9fczJfMjcwID0gX19wMl8yNzA7IFwKKyAgcG9seTY0eDFfdCBfX3JldF8yNzA7IFwKKyAgX19yZXRfMjcwID0gdnNldF9sYW5lX3A2NCh2Z2V0X2xhbmVfcDY0KF9fczJfMjcwLCBfX3AzXzI3MCksIF9fczBfMjcwLCBfX3AxXzI3MCk7IFwKKyAgX19yZXRfMjcwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZV9wNjQoX19wMF8yNzEsIF9fcDFfMjcxLCBfX3AyXzI3MSwgX19wM18yNzEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczBfMjcxID0gX19wMF8yNzE7IFwKKyAgcG9seTY0eDFfdCBfX3MyXzI3MSA9IF9fcDJfMjcxOyBcCisgIHBvbHk2NHgxX3QgX19yZXRfMjcxOyBcCisgIF9fcmV0XzI3MSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9wNjQoX19ub3N3YXBfdmdldF9sYW5lX3A2NChfX3MyXzI3MSwgX19wM18yNzEpLCBfX3MwXzI3MSwgX19wMV8yNzEpOyBcCisgIF9fcmV0XzI3MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZV9mNjQoX19wMF8yNzIsIF9fcDFfMjcyLCBfX3AyXzI3MiwgX19wM18yNzIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwXzI3MiA9IF9fcDBfMjcyOyBcCisgIGZsb2F0NjR4MV90IF9fczJfMjcyID0gX19wMl8yNzI7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXRfMjcyOyBcCisgIF9fcmV0XzI3MiA9IHZzZXRfbGFuZV9mNjQodmdldF9sYW5lX2Y2NChfX3MyXzI3MiwgX19wM18yNzIpLCBfX3MwXzI3MiwgX19wMV8yNzIpOyBcCisgIF9fcmV0XzI3MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVfZjY0KF9fcDBfMjczLCBfX3AxXzI3MywgX19wMl8yNzMsIF9fcDNfMjczKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMF8yNzMgPSBfX3AwXzI3MzsgXAorICBmbG9hdDY0eDFfdCBfX3MyXzI3MyA9IF9fcDJfMjczOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0XzI3MzsgXAorICBfX3JldF8yNzMgPSBfX25vc3dhcF92c2V0X2xhbmVfZjY0KF9fbm9zd2FwX3ZnZXRfbGFuZV9mNjQoX19zMl8yNzMsIF9fcDNfMjczKSwgX19zMF8yNzMsIF9fcDFfMjczKTsgXAorICBfX3JldF8yNzM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9wNjQoX19wMF8yNzQsIF9fcDFfMjc0LCBfX3AyXzI3NCwgX19wM18yNzQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczBfMjc0ID0gX19wMF8yNzQ7IFwKKyAgcG9seTY0eDJfdCBfX3MyXzI3NCA9IF9fcDJfMjc0OyBcCisgIHBvbHk2NHgyX3QgX19yZXRfMjc0OyBcCisgIF9fcmV0XzI3NCA9IHZzZXRxX2xhbmVfcDY0KHZnZXRxX2xhbmVfcDY0KF9fczJfMjc0LCBfX3AzXzI3NCksIF9fczBfMjc0LCBfX3AxXzI3NCk7IFwKKyAgX19yZXRfMjc0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3A2NChfX3AwXzI3NSwgX19wMV8yNzUsIF9fcDJfMjc1LCBfX3AzXzI3NSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMF8yNzUgPSBfX3AwXzI3NTsgXAorICBwb2x5NjR4Ml90IF9fczJfMjc1ID0gX19wMl8yNzU7IFwKKyAgcG9seTY0eDJfdCBfX3JldjBfMjc1OyAgX19yZXYwXzI3NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjc1LCBfX3MwXzI3NSwgMSwgMCk7IFwKKyAgcG9seTY0eDJfdCBfX3JldjJfMjc1OyAgX19yZXYyXzI3NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjc1LCBfX3MyXzI3NSwgMSwgMCk7IFwKKyAgcG9seTY0eDJfdCBfX3JldF8yNzU7IFwKKyAgX19yZXRfMjc1ID0gX19ub3N3YXBfdnNldHFfbGFuZV9wNjQoX19ub3N3YXBfdmdldHFfbGFuZV9wNjQoX19yZXYyXzI3NSwgX19wM18yNzUpLCBfX3JldjBfMjc1LCBfX3AxXzI3NSk7IFwKKyAgX19yZXRfMjc1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjc1LCBfX3JldF8yNzUsIDEsIDApOyBcCisgIF9fcmV0XzI3NTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVxX2Y2NChfX3AwXzI3NiwgX19wMV8yNzYsIF9fcDJfMjc2LCBfX3AzXzI3NikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczBfMjc2ID0gX19wMF8yNzY7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMl8yNzYgPSBfX3AyXzI3NjsgXAorICBmbG9hdDY0eDJfdCBfX3JldF8yNzY7IFwKKyAgX19yZXRfMjc2ID0gdnNldHFfbGFuZV9mNjQodmdldHFfbGFuZV9mNjQoX19zMl8yNzYsIF9fcDNfMjc2KSwgX19zMF8yNzYsIF9fcDFfMjc2KTsgXAorICBfX3JldF8yNzY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weXFfbGFuZXFfZjY0KF9fcDBfMjc3LCBfX3AxXzI3NywgX19wMl8yNzcsIF9fcDNfMjc3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMF8yNzcgPSBfX3AwXzI3NzsgXAorICBmbG9hdDY0eDJfdCBfX3MyXzI3NyA9IF9fcDJfMjc3OyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MF8yNzc7ICBfX3JldjBfMjc3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yNzcsIF9fczBfMjc3LCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjJfMjc3OyAgX19yZXYyXzI3NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjc3LCBfX3MyXzI3NywgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXRfMjc3OyBcCisgIF9fcmV0XzI3NyA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfZjY0KF9fbm9zd2FwX3ZnZXRxX2xhbmVfZjY0KF9fcmV2Ml8yNzcsIF9fcDNfMjc3KSwgX19yZXYwXzI3NywgX19wMV8yNzcpOyBcCisgIF9fcmV0XzI3NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzI3NywgX19yZXRfMjc3LCAxLCAwKTsgXAorICBfX3JldF8yNzc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVxX3A2NChfX3AwXzI3OCwgX19wMV8yNzgsIF9fcDJfMjc4LCBfX3AzXzI3OCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMF8yNzggPSBfX3AwXzI3ODsgXAorICBwb2x5NjR4Ml90IF9fczJfMjc4ID0gX19wMl8yNzg7IFwKKyAgcG9seTY0eDFfdCBfX3JldF8yNzg7IFwKKyAgX19yZXRfMjc4ID0gdnNldF9sYW5lX3A2NCh2Z2V0cV9sYW5lX3A2NChfX3MyXzI3OCwgX19wM18yNzgpLCBfX3MwXzI3OCwgX19wMV8yNzgpOyBcCisgIF9fcmV0XzI3ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVxX3A2NChfX3AwXzI3OSwgX19wMV8yNzksIF9fcDJfMjc5LCBfX3AzXzI3OSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMF8yNzkgPSBfX3AwXzI3OTsgXAorICBwb2x5NjR4Ml90IF9fczJfMjc5ID0gX19wMl8yNzk7IFwKKyAgcG9seTY0eDJfdCBfX3JldjJfMjc5OyAgX19yZXYyXzI3OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjc5LCBfX3MyXzI3OSwgMSwgMCk7IFwKKyAgcG9seTY0eDFfdCBfX3JldF8yNzk7IFwKKyAgX19yZXRfMjc5ID0gX19ub3N3YXBfdnNldF9sYW5lX3A2NChfX25vc3dhcF92Z2V0cV9sYW5lX3A2NChfX3JldjJfMjc5LCBfX3AzXzI3OSksIF9fczBfMjc5LCBfX3AxXzI3OSk7IFwKKyAgX19yZXRfMjc5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lcV9mNjQoX19wMF8yODAsIF9fcDFfMjgwLCBfX3AyXzI4MCwgX19wM18yODApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwXzI4MCA9IF9fcDBfMjgwOyBcCisgIGZsb2F0NjR4Ml90IF9fczJfMjgwID0gX19wMl8yODA7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXRfMjgwOyBcCisgIF9fcmV0XzI4MCA9IHZzZXRfbGFuZV9mNjQodmdldHFfbGFuZV9mNjQoX19zMl8yODAsIF9fcDNfMjgwKSwgX19zMF8yODAsIF9fcDFfMjgwKTsgXAorICBfX3JldF8yODA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lcV9mNjQoX19wMF8yODEsIF9fcDFfMjgxLCBfX3AyXzI4MSwgX19wM18yODEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwXzI4MSA9IF9fcDBfMjgxOyBcCisgIGZsb2F0NjR4Ml90IF9fczJfMjgxID0gX19wMl8yODE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYyXzI4MTsgIF9fcmV2Ml8yODEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzI4MSwgX19zMl8yODEsIDEsIDApOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0XzI4MTsgXAorICBfX3JldF8yODEgPSBfX25vc3dhcF92c2V0X2xhbmVfZjY0KF9fbm9zd2FwX3ZnZXRxX2xhbmVfZjY0KF9fcmV2Ml8yODEsIF9fcDNfMjgxKSwgX19zMF8yODEsIF9fcDFfMjgxKTsgXAorICBfX3JldF8yODE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm1sYWxfaGlnaF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sYWxfdTgoX19wMCwgdmdldF9oaWdoX3U4KF9fcDEpLCB2Z2V0X2hpZ2hfdTgoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtbGFsX2hpZ2hfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbGFsX3U4KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF91OChfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm1sYWxfaGlnaF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtbGFsX3UzMihfX3AwLCB2Z2V0X2hpZ2hfdTMyKF9fcDEpLCB2Z2V0X2hpZ2hfdTMyKF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2bWxhbF9oaWdoX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sYWxfdTMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bWxhbF9oaWdoX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sYWxfdTE2KF9fcDAsIHZnZXRfaGlnaF91MTYoX19wMSksIHZnZXRfaGlnaF91MTYoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtbGFsX2hpZ2hfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxhbF91MTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm1sYWxfaGlnaF9zOChpbnQxNng4X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxhbF9zOChfX3AwLCB2Z2V0X2hpZ2hfczgoX19wMSksIHZnZXRfaGlnaF9zOChfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bWxhbF9oaWdoX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbGFsX3M4KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2bWxhbF9oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxhbF9zMzIoX19wMCwgdmdldF9oaWdoX3MzMihfX3AxKSwgdmdldF9oaWdoX3MzMihfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bWxhbF9oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxhbF9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1sYWxfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sYWxfczE2KF9fcDAsIHZnZXRfaGlnaF9zMTYoX19wMSksIHZnZXRfaGlnaF9zMTYoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1sYWxfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sYWxfczE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2bWxhbF9oaWdoX25fdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sYWxfbl91MzIoX19wMCwgdmdldF9oaWdoX3UzMihfX3AxKSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm1sYWxfaGlnaF9uX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbGFsX25fdTMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpLCBfX3AyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1sYWxfaGlnaF9uX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtbGFsX25fdTE2KF9fcDAsIHZnZXRfaGlnaF91MTYoX19wMSksIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtbGFsX2hpZ2hfbl91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxhbF9uX3UxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYxKSwgX19wMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm1sYWxfaGlnaF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sYWxfbl9zMzIoX19wMCwgdmdldF9oaWdoX3MzMihfX3AxKSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bWxhbF9oaWdoX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sYWxfbl9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fcDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtbGFsX2hpZ2hfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtbGFsX25fczE2KF9fcDAsIHZnZXRfaGlnaF9zMTYoX19wMSksIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1sYWxfaGlnaF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbGFsX25fczE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX3AyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm1sc2xfaGlnaF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sc2xfdTgoX19wMCwgdmdldF9oaWdoX3U4KF9fcDEpLCB2Z2V0X2hpZ2hfdTgoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtbHNsX2hpZ2hfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbHNsX3U4KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF91OChfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm1sc2xfaGlnaF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtbHNsX3UzMihfX3AwLCB2Z2V0X2hpZ2hfdTMyKF9fcDEpLCB2Z2V0X2hpZ2hfdTMyKF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2bWxzbF9oaWdoX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sc2xfdTMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bWxzbF9oaWdoX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sc2xfdTE2KF9fcDAsIHZnZXRfaGlnaF91MTYoX19wMSksIHZnZXRfaGlnaF91MTYoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtbHNsX2hpZ2hfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxzbF91MTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm1sc2xfaGlnaF9zOChpbnQxNng4X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxzbF9zOChfX3AwLCB2Z2V0X2hpZ2hfczgoX19wMSksIHZnZXRfaGlnaF9zOChfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bWxzbF9oaWdoX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbHNsX3M4KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2bWxzbF9oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxzbF9zMzIoX19wMCwgdmdldF9oaWdoX3MzMihfX3AxKSwgdmdldF9oaWdoX3MzMihfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bWxzbF9oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxzbF9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1sc2xfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sc2xfczE2KF9fcDAsIHZnZXRfaGlnaF9zMTYoX19wMSksIHZnZXRfaGlnaF9zMTYoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1sc2xfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sc2xfczE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2bWxzbF9oaWdoX25fdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sc2xfbl91MzIoX19wMCwgdmdldF9oaWdoX3UzMihfX3AxKSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm1sc2xfaGlnaF9uX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbHNsX25fdTMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpLCBfX3AyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1sc2xfaGlnaF9uX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtbHNsX25fdTE2KF9fcDAsIHZnZXRfaGlnaF91MTYoX19wMSksIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtbHNsX2hpZ2hfbl91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxzbF9uX3UxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYxKSwgX19wMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm1sc2xfaGlnaF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sc2xfbl9zMzIoX19wMCwgdmdldF9oaWdoX3MzMihfX3AxKSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bWxzbF9oaWdoX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sc2xfbl9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fcDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtbHNsX2hpZ2hfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtbHNsX25fczE2KF9fcDAsIHZnZXRfaGlnaF9zMTYoX19wMSksIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1sc2xfaGlnaF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbHNsX25fczE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX3AyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWx4X2xhbmVfZjY0KF9fcDBfMjgyLCBfX3AxXzI4MiwgX19wMl8yODIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwXzI4MiA9IF9fcDBfMjgyOyBcCisgIGZsb2F0NjR4MV90IF9fczFfMjgyID0gX19wMV8yODI7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXRfMjgyOyBcCisgIGZsb2F0NjRfdCBfX3hfMjgyID0gdmdldF9sYW5lX2Y2NChfX3MwXzI4MiwgMCk7IFwKKyAgZmxvYXQ2NF90IF9feV8yODIgPSB2Z2V0X2xhbmVfZjY0KF9fczFfMjgyLCBfX3AyXzI4Mik7IFwKKyAgZmxvYXQ2NF90IF9fel8yODIgPSB2bXVseGRfZjY0KF9feF8yODIsIF9feV8yODIpOyBcCisgIF9fcmV0XzI4MiA9IHZzZXRfbGFuZV9mNjQoX196XzI4MiwgX19zMF8yODIsIF9fcDJfMjgyKTsgXAorICBfX3JldF8yODI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVseF9sYW5lX2Y2NChfX3AwXzI4MywgX19wMV8yODMsIF9fcDJfMjgzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMF8yODMgPSBfX3AwXzI4MzsgXAorICBmbG9hdDY0eDFfdCBfX3MxXzI4MyA9IF9fcDFfMjgzOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0XzI4MzsgXAorICBmbG9hdDY0X3QgX194XzI4MyA9IF9fbm9zd2FwX3ZnZXRfbGFuZV9mNjQoX19zMF8yODMsIDApOyBcCisgIGZsb2F0NjRfdCBfX3lfMjgzID0gX19ub3N3YXBfdmdldF9sYW5lX2Y2NChfX3MxXzI4MywgX19wMl8yODMpOyBcCisgIGZsb2F0NjRfdCBfX3pfMjgzID0gX19ub3N3YXBfdm11bHhkX2Y2NChfX3hfMjgzLCBfX3lfMjgzKTsgXAorICBfX3JldF8yODMgPSBfX25vc3dhcF92c2V0X2xhbmVfZjY0KF9fel8yODMsIF9fczBfMjgzLCBfX3AyXzI4Myk7IFwKKyAgX19yZXRfMjgzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVseF9sYW5lcV9mNjQoX19wMF8yODQsIF9fcDFfMjg0LCBfX3AyXzI4NCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczBfMjg0ID0gX19wMF8yODQ7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMV8yODQgPSBfX3AxXzI4NDsgXAorICBmbG9hdDY0eDFfdCBfX3JldF8yODQ7IFwKKyAgZmxvYXQ2NF90IF9feF8yODQgPSB2Z2V0X2xhbmVfZjY0KF9fczBfMjg0LCAwKTsgXAorICBmbG9hdDY0X3QgX195XzI4NCA9IHZnZXRxX2xhbmVfZjY0KF9fczFfMjg0LCBfX3AyXzI4NCk7IFwKKyAgZmxvYXQ2NF90IF9fel8yODQgPSB2bXVseGRfZjY0KF9feF8yODQsIF9feV8yODQpOyBcCisgIF9fcmV0XzI4NCA9IHZzZXRfbGFuZV9mNjQoX196XzI4NCwgX19zMF8yODQsIDApOyBcCisgIF9fcmV0XzI4NDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWx4X2xhbmVxX2Y2NChfX3AwXzI4NSwgX19wMV8yODUsIF9fcDJfMjg1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMF8yODUgPSBfX3AwXzI4NTsgXAorICBmbG9hdDY0eDJfdCBfX3MxXzI4NSA9IF9fcDFfMjg1OyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MV8yODU7ICBfX3JldjFfMjg1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yODUsIF9fczFfMjg1LCAxLCAwKTsgXAorICBmbG9hdDY0eDFfdCBfX3JldF8yODU7IFwKKyAgZmxvYXQ2NF90IF9feF8yODUgPSBfX25vc3dhcF92Z2V0X2xhbmVfZjY0KF9fczBfMjg1LCAwKTsgXAorICBmbG9hdDY0X3QgX195XzI4NSA9IF9fbm9zd2FwX3ZnZXRxX2xhbmVfZjY0KF9fcmV2MV8yODUsIF9fcDJfMjg1KTsgXAorICBmbG9hdDY0X3QgX196XzI4NSA9IF9fbm9zd2FwX3ZtdWx4ZF9mNjQoX194XzI4NSwgX195XzI4NSk7IFwKKyAgX19yZXRfMjg1ID0gX19ub3N3YXBfdnNldF9sYW5lX2Y2NChfX3pfMjg1LCBfX3MwXzI4NSwgMCk7IFwKKyAgX19yZXRfMjg1OyBcCit9KQorI2VuZGlmCisKKyNlbmRpZgorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmFiYWxfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZGxfdTgoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmFiYWxfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZGxfdTgoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDE2eDhfdCBfX25vc3dhcF92YWJhbF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92YWJkbF91OChfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZhYmFsX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRsX3UzMihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2YWJhbF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRsX3UzMihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50NjR4Ml90IF9fbm9zd2FwX3ZhYmFsX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZhYmRsX3UzMihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZhYmFsX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRsX3UxNihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2YWJhbF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRsX3UxNihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4NF90IF9fbm9zd2FwX3ZhYmFsX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZhYmRsX3UxNihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmFiYWxfczgoaW50MTZ4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkbF9zOChfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZhYmFsX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZGxfczgoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3ZhYmFsX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdmFiZGxfczgoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZhYmFsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZGxfczMyKF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmFiYWxfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRsX3MzMihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdmFiYWxfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92YWJkbF9zMzIoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZhYmFsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZGxfczE2KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmFiYWxfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRsX3MxNihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdmFiYWxfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92YWJkbF9zMTYoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2FhcmNoNjRfXykKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZhYmFsX2hpZ2hfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZhYmFsX3U4KF9fcDAsIHZnZXRfaGlnaF91OChfX3AxKSwgdmdldF9oaWdoX3U4KF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2YWJhbF9oaWdoX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92YWJhbF91OChfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF91OChfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZhYmFsX2hpZ2hfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2YWJhbF91MzIoX19wMCwgdmdldF9oaWdoX3UzMihfX3AxKSwgdmdldF9oaWdoX3UzMihfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmFiYWxfaGlnaF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZhYmFsX3UzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmFiYWxfaGlnaF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZhYmFsX3UxNihfX3AwLCB2Z2V0X2hpZ2hfdTE2KF9fcDEpLCB2Z2V0X2hpZ2hfdTE2KF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2YWJhbF9oaWdoX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmFiYWxfdTE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZhYmFsX2hpZ2hfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmFiYWxfczgoX19wMCwgdmdldF9oaWdoX3M4KF9fcDEpLCB2Z2V0X2hpZ2hfczgoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmFiYWxfaGlnaF9zOChpbnQxNng4X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92YWJhbF9zOChfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmFiYWxfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdmFiYWxfczMyKF9fcDAsIHZnZXRfaGlnaF9zMzIoX19wMSksIHZnZXRfaGlnaF9zMzIoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmFiYWxfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmFiYWxfczMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZhYmFsX2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZhYmFsX3MxNihfX3AwLCB2Z2V0X2hpZ2hfczE2KF9fcDEpLCB2Z2V0X2hpZ2hfczE2KF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZhYmFsX2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZhYmFsX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2VuZGlmCisKKyN1bmRlZiBfX2FpCisKKyNlbmRpZiAvKiBfX0FSTV9ORU9OX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXJtaW50ci5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hcm1pbnRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzYWZjYgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXJtaW50ci5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qPT09LS0tLSBhcm1pbnRyLmggLSBBUk0gV2luZG93cyBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKy8qIE9ubHkgaW5jbHVkZSB0aGlzIGlmIHdlJ3JlIGNvbXBpbGluZyBmb3IgdGhlIHdpbmRvd3MgcGxhdGZvcm0uICovCisjaWZuZGVmIF9NU0NfVkVSCisjaW5jbHVkZV9uZXh0IDxhcm1pbnRyLmg+CisjZWxzZQorCisjaWZuZGVmIF9fQVJNSU5UUl9ICisjZGVmaW5lIF9fQVJNSU5UUl9ICisKK3R5cGVkZWYgZW51bQoreworICBfQVJNX0JBUlJJRVJfU1kgICAgPSAweEYsCisgIF9BUk1fQkFSUklFUl9TVCAgICA9IDB4RSwKKyAgX0FSTV9CQVJSSUVSX0lTSCAgID0gMHhCLAorICBfQVJNX0JBUlJJRVJfSVNIU1QgPSAweEEsCisgIF9BUk1fQkFSUklFUl9OU0ggICA9IDB4NywKKyAgX0FSTV9CQVJSSUVSX05TSFNUID0gMHg2LAorICBfQVJNX0JBUlJJRVJfT1NIICAgPSAweDMsCisgIF9BUk1fQkFSUklFUl9PU0hTVCA9IDB4MgorfSBfQVJNSU5UUl9CQVJSSUVSX1RZUEU7CisKKyNlbmRpZiAvKiBfX0FSTUlOVFJfSCAqLworI2VuZGlmIC8qIF9NU0NfVkVSICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eDJpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4MmludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYmNiZWYKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eDJpbnRyaW4uaApAQCAtMCwwICsxLDEyOTkgQEAKKy8qPT09LS0tLSBhdngyaW50cmluLmggLSBBVlgyIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGF2eDJpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQVZYMklOVFJJTl9ICisjZGVmaW5lIF9fQVZYMklOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4MiIpKSkKKworLyogU1NFNCBNdWx0aXBsZSBQYWNrZWQgU3VtcyBvZiBBYnNvbHV0ZSBEaWZmZXJlbmNlLiAgKi8KKyNkZWZpbmUgX21tMjU2X21wc2FkYndfZXB1OChYLCBZLCBNKSBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX21wc2FkYncyNTYoKF9fdjMycWkpKF9fbTI1NmkpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpKF9fbTI1NmkpKFkpLCAoaW50KShNKSkKKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hYnNfZXBpOChfX20yNTZpIF9fYSkKK3sKKyAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGFic2IyNTYoKF9fdjMycWkpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hYnNfZXBpMTYoX19tMjU2aSBfX2EpCit7CisgICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhYnN3MjU2KChfX3YxNmhpKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWJzX2VwaTMyKF9fbTI1NmkgX19hKQoreworICAgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWJzZDI1NigoX192OHNpKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGFja3NfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGFja3Nzd2IyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3BhY2tzX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhY2tzc2R3MjU2KChfX3Y4c2kpX19hLCAoX192OHNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGFja3VzX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhY2t1c3diMjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9wYWNrdXNfZXBpMzIoX19tMjU2aSBfX1YxLCBfX20yNTZpIF9fVjIpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFja3VzZHcyNTYoKF9fdjhzaSlfX1YxLCAoX192OHNpKV9fVjIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FkZF9lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192MzJxdSlfX2EgKyAoX192MzJxdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FkZF9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoKF9fdjE2aHUpX19hICsgKF9fdjE2aHUpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hZGRfZXBpMzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3Y4c3UpX19hICsgKF9fdjhzdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FkZF9lcGk2NChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoKF9fdjRkdSlfX2EgKyAoX192NGR1KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWRkc19lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhZGRzYjI1NigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWRkc19lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWRkc3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FkZHNfZXB1OChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWRkdXNiMjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hZGRzX2VwdTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhZGR1c3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCisjZGVmaW5lIF9tbTI1Nl9hbGlnbnJfZXBpOChhLCBiLCBuKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhbGlnbnIyNTYoKF9fdjMycWkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpKF9fbTI1NmkpKGIpLCAobikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FuZF9zaTI1NihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoKF9fdjRkdSlfX2EgJiAoX192NGR1KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYW5kbm90X3NpMjU2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSh+KF9fdjRkdSlfX2EgJiAoX192NGR1KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYXZnX2VwdTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGF2Z2IyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2F2Z19lcHUxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYXZndzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYmxlbmR2X2VwaTgoX19tMjU2aSBfX1YxLCBfX20yNTZpIF9fVjIsIF9fbTI1NmkgX19NKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGJsZW5kdmIyNTYoKF9fdjMycWkpX19WMSwgKF9fdjMycWkpX19WMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfX00pOworfQorCisjZGVmaW5lIF9tbTI1Nl9ibGVuZF9lcGkxNihWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgXAorICAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZoaSkoX19tMjU2aSkoVjEpLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpKF9fbTI1NmkpKFYyKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMSkgPyAxNiA6IDApLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDIpID8gMTcgOiAxKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA0KSA/IDE4IDogMiksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwOCkgPyAxOSA6IDMpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MTApID8gMjAgOiA0KSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDIwKSA/IDIxIDogNSksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHg0MCkgPyAyMiA6IDYpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4ODApID8gMjMgOiA3KSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAxKSA/IDI0IDogOCksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMikgPyAyNSA6IDkpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDQpID8gMjYgOiAxMCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA4KSA/IDI3IDogMTEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgxMCkgPyAyOCA6IDEyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MjApID8gMjkgOiAxMyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDQwKSA/IDMwIDogMTQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHg4MCkgPyAzMSA6IDE1KSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZXFfZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoKF9fdjMycWkpX19hID09IChfX3YzMnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZXFfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3YxNmhpKV9fYSA9PSAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGVxX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192OHNpKV9fYSA9PSAoX192OHNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZXFfZXBpNjQoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3Y0ZGkpX19hID09IChfX3Y0ZGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBndF9lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgLyogVGhpcyBmdW5jdGlvbiBhbHdheXMgcGVyZm9ybXMgYSBzaWduZWQgY29tcGFyaXNvbiwgYnV0IF9fdjMycWkgaXMgYSBjaGFyCisgICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YzMnFzLiAqLworICByZXR1cm4gKF9fbTI1NmkpKChfX3YzMnFzKV9fYSA+IChfX3YzMnFzKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ3RfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3YxNmhpKV9fYSA+IChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ3RfZXBpMzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3Y4c2kpX19hID4gKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGd0X2VwaTY0KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192NGRpKV9fYSA+IChfX3Y0ZGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9oYWRkX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGhhZGR3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9oYWRkX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGhhZGRkMjU2KChfX3Y4c2kpX19hLCAoX192OHNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfaGFkZHNfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICAgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9waGFkZHN3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9oc3ViX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGhzdWJ3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9oc3ViX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGhzdWJkMjU2KChfX3Y4c2kpX19hLCAoX192OHNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfaHN1YnNfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICAgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9waHN1YnN3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYWRkdWJzX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1hZGR1YnN3MjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYWRkX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtYWRkd2QyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21heF9lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtYXhzYjI1NigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWF4X2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtYXhzdzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWF4X2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtYXhzZDI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21heF9lcHU4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtYXh1YjI1NigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWF4X2VwdTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtYXh1dzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWF4X2VwdTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtYXh1ZDI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21pbl9lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtaW5zYjI1NigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWluX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtaW5zdzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWluX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtaW5zZDI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21pbl9lcHU4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtaW51YjI1NigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWluX2VwdTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtaW51dzI1NiAoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21pbl9lcHUzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWludWQyNTYoKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21vdmVtYXNrX2VwaTgoX19tMjU2aSBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wbW92bXNrYjI1NigoX192MzJxaSlfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwaThfZXBpMTYoX19tMTI4aSBfX1YpCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGV4dGVuc2lvbiwgYnV0IF9fdjE2cWkgaXMgYSBjaGFyCisgICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YxNnFzLiAqLworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoKF9fdjE2cXMpX19WLCBfX3YxNmhpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGk4X2VwaTMyKF9fbTEyOGkgX19WKQoreworICAvKiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBwZXJmb3JtcyBhIHNpZ25lZCBleHRlbnNpb24sIGJ1dCBfX3YxNnFpIGlzIGEgY2hhcgorICAgICB3aGljaCBtYXkgYmUgc2lnbmVkIG9yIHVuc2lnbmVkLCBzbyB1c2UgX192MTZxcy4gKi8KKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnFzKV9fViwgKF9fdjE2cXMpX19WLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KSwgX192OHNpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGk4X2VwaTY0KF9fbTEyOGkgX19WKQoreworICAvKiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBwZXJmb3JtcyBhIHNpZ25lZCBleHRlbnNpb24sIGJ1dCBfX3YxNnFpIGlzIGEgY2hhcgorICAgICB3aGljaCBtYXkgYmUgc2lnbmVkIG9yIHVuc2lnbmVkLCBzbyB1c2UgX192MTZxcy4gKi8KKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnFzKV9fViwgKF9fdjE2cXMpX19WLCAwLCAxLCAyLCAzKSwgX192NGRpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGkxNl9lcGkzMihfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKChfX3Y4aGkpX19WLCBfX3Y4c2kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwaTE2X2VwaTY0KF9fbTEyOGkgX19WKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSlfX1YsIChfX3Y4aGkpX19WLCAwLCAxLCAyLCAzKSwgX192NGRpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGkzMl9lcGk2NChfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKChfX3Y0c2kpX19WLCBfX3Y0ZGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwdThfZXBpMTYoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcigoX192MTZxdSlfX1YsIF9fdjE2aGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwdThfZXBpMzIoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZxdSlfX1YsIChfX3YxNnF1KV9fViwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyksIF9fdjhzaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXB1OF9lcGk2NChfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnF1KV9fViwgKF9fdjE2cXUpX19WLCAwLCAxLCAyLCAzKSwgX192NGRpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcHUxNl9lcGkzMihfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKChfX3Y4aHUpX19WLCBfX3Y4c2kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwdTE2X2VwaTY0KF9fbTEyOGkgX19WKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhodSlfX1YsIChfX3Y4aHUpX19WLCAwLCAxLCAyLCAzKSwgX192NGRpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcHUzMl9lcGk2NChfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKChfX3Y0c3UpX19WLCBfX3Y0ZGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyAgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tdWxfZXBpMzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG11bGRxMjU2KChfX3Y4c2kpX19hLCAoX192OHNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbXVsaHJzX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtdWxocnN3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tdWxoaV9lcHUxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbXVsaHV3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tdWxoaV9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbXVsaHcyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X211bGxvX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192MTZodSlfX2EgKiAoX192MTZodSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyAgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tdWxsb19lcGkzMiAoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3Y4c3UpX19hICogKF9fdjhzdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X211bF9lcHUzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wbXVsdWRxMjU2KChfX3Y4c2kpX19hLCAoX192OHNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfb3Jfc2kyNTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3Y0ZHUpX19hIHwgKF9fdjRkdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NhZF9lcHU4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzYWRidzI1NigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2h1ZmZsZV9lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzaHVmYjI1NigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYik7Cit9CisKKyNkZWZpbmUgX21tMjU2X3NodWZmbGVfZXBpMzIoYSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhzaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfdW5kZWZpbmVkX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKGltbSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChpbW0pID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgoaW1tKSA+PiA0KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKGltbSkgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChpbW0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoaW1tKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKGltbSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChpbW0pID4+IDYpICYgMHgzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3NodWZmbGVoaV9lcGkxNihhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZoaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3VuZGVmaW5lZF9zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgKyAoKChpbW0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICArICgoKGltbSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoaW1tKSA+PiA0KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgKyAoKChpbW0pID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCA5LCAxMCwgMTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIgKyAoKChpbW0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKGltbSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoaW1tKSA+PiA0KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIgKyAoKChpbW0pID4+IDYpICYgMHgzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3NodWZmbGVsb19lcGkxNihhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZoaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3VuZGVmaW5lZF9zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChpbW0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgoaW1tKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKGltbSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChpbW0pID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCA1LCA2LCA3LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggKyAoKChpbW0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICsgKCgoaW1tKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCArICgoKGltbSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggKyAoKChpbW0pID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiwgMTMsIDE0LCAxNSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2lnbl9lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNpZ25iMjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zaWduX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNpZ253MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zaWduX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNpZ25kMjU2KChfX3Y4c2kpX19hLCAoX192OHNpKV9fYik7Cit9CisKKyNkZWZpbmUgX21tMjU2X3NsbGlfc2kyNTYoYSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoX192MzJxaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChfX3YzMnFpKShfX20yNTZpKShhKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDAgOiAoKGNoYXIpKGltbSk+MHgwID8gMTYgOiAzMikgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgMSA6ICgoY2hhcikoaW1tKT4weDEgPyAxNyA6IDMzKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICAyIDogKChjaGFyKShpbW0pPjB4MiA/IDE4IDogMzQpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDMgOiAoKGNoYXIpKGltbSk+MHgzID8gMTkgOiAzNSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNCA6ICgoY2hhcikoaW1tKT4weDQgPyAyMCA6IDM2KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA1IDogKChjaGFyKShpbW0pPjB4NSA/IDIxIDogMzcpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDYgOiAoKGNoYXIpKGltbSk+MHg2ID8gMjIgOiAzOCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNyA6ICgoY2hhcikoaW1tKT4weDcgPyAyMyA6IDM5KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA4IDogKChjaGFyKShpbW0pPjB4OCA/IDI0IDogNDApIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDkgOiAoKGNoYXIpKGltbSk+MHg5ID8gMjUgOiA0MSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMCA6ICgoY2hhcikoaW1tKT4weEEgPyAyNiA6IDQyKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDExIDogKChjaGFyKShpbW0pPjB4QiA/IDI3IDogNDMpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTIgOiAoKGNoYXIpKGltbSk+MHhDID8gMjggOiA0NCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMyA6ICgoY2hhcikoaW1tKT4weEQgPyAyOSA6IDQ1KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDE0IDogKChjaGFyKShpbW0pPjB4RSA/IDMwIDogNDYpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTUgOiAoKGNoYXIpKGltbSk+MHhGID8gMzEgOiA0NykgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxNiA6ICgoY2hhcikoaW1tKT4weDAgPyAzMiA6IDQ4KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDE3IDogKChjaGFyKShpbW0pPjB4MSA/IDMzIDogNDkpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTggOiAoKGNoYXIpKGltbSk+MHgyID8gMzQgOiA1MCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxOSA6ICgoY2hhcikoaW1tKT4weDMgPyAzNSA6IDUxKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDIwIDogKChjaGFyKShpbW0pPjB4NCA/IDM2IDogNTIpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjEgOiAoKGNoYXIpKGltbSk+MHg1ID8gMzcgOiA1MykgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyMiA6ICgoY2hhcikoaW1tKT4weDYgPyAzOCA6IDU0KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDIzIDogKChjaGFyKShpbW0pPjB4NyA/IDM5IDogNTUpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjQgOiAoKGNoYXIpKGltbSk+MHg4ID8gNDAgOiA1NikgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyNSA6ICgoY2hhcikoaW1tKT4weDkgPyA0MSA6IDU3KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDI2IDogKChjaGFyKShpbW0pPjB4QSA/IDQyIDogNTgpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjcgOiAoKGNoYXIpKGltbSk+MHhCID8gNDMgOiA1OSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyOCA6ICgoY2hhcikoaW1tKT4weEMgPyA0NCA6IDYwKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDI5IDogKChjaGFyKShpbW0pPjB4RCA/IDQ1IDogNjEpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMzAgOiAoKGNoYXIpKGltbSk+MHhFID8gNDYgOiA2MikgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAzMSA6ICgoY2hhcikoaW1tKT4weEYgPyA0NyA6IDYzKSAtIChjaGFyKShpbW0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfYnNsbGlfZXBpMTI4KGEsIGNvdW50KSBfbW0yNTZfc2xsaV9zaTI1NigoYSksIChjb3VudCkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2xsaV9lcGkxNihfX20yNTZpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc2xsd2kyNTYoKF9fdjE2aGkpX19hLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zbGxfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzbGx3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjhoaSlfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zbGxpX2VwaTMyKF9fbTI1NmkgX19hLCBpbnQgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzbGxkaTI1NigoX192OHNpKV9fYSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2xsX2VwaTMyKF9fbTI1NmkgX19hLCBfX20xMjhpIF9fY291bnQpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc2xsZDI1NigoX192OHNpKV9fYSwgKF9fdjRzaSlfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zbGxpX2VwaTY0KF9fbTI1NmkgX19hLCBpbnQgX19jb3VudCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzbGxxaTI1NigoX192NGRpKV9fYSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2xsX2VwaTY0KF9fbTI1NmkgX19hLCBfX20xMjhpIF9fY291bnQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc2xscTI1NigoX192NGRpKV9fYSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3JhaV9lcGkxNihfX20yNTZpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3Jhd2kyNTYoKF9fdjE2aGkpX19hLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zcmFfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzcmF3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjhoaSlfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zcmFpX2VwaTMyKF9fbTI1NmkgX19hLCBpbnQgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzcmFkaTI1NigoX192OHNpKV9fYSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3JhX2VwaTMyKF9fbTI1NmkgX19hLCBfX20xMjhpIF9fY291bnQpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JhZDI1NigoX192OHNpKV9fYSwgKF9fdjRzaSlfX2NvdW50KTsKK30KKworI2RlZmluZSBfbW0yNTZfc3JsaV9zaTI1NihhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoX192MzJxaSkoX19tMjU2aSkoYSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMzIgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEYgPyAxNiA6IDApLCAgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAzMyA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4RSA/IDE3IDogMSksICBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDM0IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhEID8gMTggOiAyKSwgIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMzUgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEMgPyAxOSA6IDMpLCAgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAzNiA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4QiA/IDIwIDogNCksICBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDM3IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhBID8gMjEgOiA1KSwgIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMzggOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDkgPyAyMiA6IDYpLCAgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAzOSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4OCA/IDIzIDogNyksICBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDQwIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg3ID8gMjQgOiA4KSwgIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNDEgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDYgPyAyNSA6IDkpLCAgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA0MiA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4NSA/IDI2IDogMTApLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDQzIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg0ID8gMjcgOiAxMSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNDQgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDMgPyAyOCA6IDEyKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA0NSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4MiA/IDI5IDogMTMpLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDQ2IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHgxID8gMzAgOiAxNCksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNDcgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDAgPyAzMSA6IDE1KSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA0OCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4RiA/IDMyIDogMTYpLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDQ5IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhFID8gMzMgOiAxNyksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNTAgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEQgPyAzNCA6IDE4KSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA1MSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4QyA/IDM1IDogMTkpLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDUyIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhCID8gMzYgOiAyMCksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNTMgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEEgPyAzNyA6IDIxKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA1NCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4OSA/IDM4IDogMjIpLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDU1IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg4ID8gMzkgOiAyMyksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNTYgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDcgPyA0MCA6IDI0KSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA1NyA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4NiA/IDQxIDogMjUpLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDU4IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg1ID8gNDIgOiAyNiksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNTkgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDQgPyA0MyA6IDI3KSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA2MCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4MyA/IDQ0IDogMjgpLCBcCisgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDYxIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHgyID8gNDUgOiAyOSksIFwKKyAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNjIgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDEgPyA0NiA6IDMwKSwgXAorICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA2MyA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4MCA/IDQ3IDogMzEpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfYnNybGlfZXBpMTI4KGEsIGNvdW50KSBfbW0yNTZfc3JsaV9zaTI1NigoYSksIChjb3VudCkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3JsaV9lcGkxNihfX20yNTZpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3Jsd2kyNTYoKF9fdjE2aGkpX19hLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zcmxfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Bzcmx3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjhoaSlfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zcmxpX2VwaTMyKF9fbTI1NmkgX19hLCBpbnQgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzcmxkaTI1NigoX192OHNpKV9fYSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3JsX2VwaTMyKF9fbTI1NmkgX19hLCBfX20xMjhpIF9fY291bnQpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JsZDI1NigoX192OHNpKV9fYSwgKF9fdjRzaSlfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zcmxpX2VwaTY0KF9fbTI1NmkgX19hLCBpbnQgX19jb3VudCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzcmxxaTI1NigoX192NGRpKV9fYSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3JsX2VwaTY0KF9fbTI1NmkgX19hLCBfX20xMjhpIF9fY291bnQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc3JscTI1NigoX192NGRpKV9fYSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3ViX2VwaTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3YzMnF1KV9fYSAtIChfX3YzMnF1KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3ViX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192MTZodSlfX2EgLSAoX192MTZodSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N1Yl9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoKF9fdjhzdSlfX2EgLSAoX192OHN1KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3ViX2VwaTY0KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192NGR1KV9fYSAtIChfX3Y0ZHUpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdWJzX2VwaTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHN1YnNiMjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdWJzX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzdWJzdzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3Vic19lcHU4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzdWJ1c2IyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N1YnNfZXB1MTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHN1YnVzdzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdW5wYWNraGlfZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgOCwgMzIrOCwgOSwgMzIrOSwgMTAsIDMyKzEwLCAxMSwgMzIrMTEsIDEyLCAzMisxMiwgMTMsIDMyKzEzLCAxNCwgMzIrMTQsIDE1LCAzMisxNSwgMjQsIDMyKzI0LCAyNSwgMzIrMjUsIDI2LCAzMisyNiwgMjcsIDMyKzI3LCAyOCwgMzIrMjgsIDI5LCAzMisyOSwgMzAsIDMyKzMwLCAzMSwgMzIrMzEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3VucGFja2hpX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCA0LCAxNis0LCA1LCAxNis1LCA2LCAxNis2LCA3LCAxNis3LCAxMiwgMTYrMTIsIDEzLCAxNisxMywgMTQsIDE2KzE0LCAxNSwgMTYrMTUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3VucGFja2hpX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgMiwgOCsyLCAzLCA4KzMsIDYsIDgrNiwgNywgOCs3KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bnBhY2toaV9lcGk2NChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDEsIDQrMSwgMywgNCszKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bnBhY2tsb19lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCAwLCAzMiswLCAxLCAzMisxLCAyLCAzMisyLCAzLCAzMiszLCA0LCAzMis0LCA1LCAzMis1LCA2LCAzMis2LCA3LCAzMis3LCAxNiwgMzIrMTYsIDE3LCAzMisxNywgMTgsIDMyKzE4LCAxOSwgMzIrMTksIDIwLCAzMisyMCwgMjEsIDMyKzIxLCAyMiwgMzIrMjIsIDIzLCAzMisyMyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdW5wYWNrbG9fZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDAsIDE2KzAsIDEsIDE2KzEsIDIsIDE2KzIsIDMsIDE2KzMsIDgsIDE2KzgsIDksIDE2KzksIDEwLCAxNisxMCwgMTEsIDE2KzExKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bnBhY2tsb19lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDAsIDgrMCwgMSwgOCsxLCA0LCA4KzQsIDUsIDgrNSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdW5wYWNrbG9fZXBpNjQoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAwLCA0KzAsIDIsIDQrMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfeG9yX3NpMjU2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192NGR1KV9fYSBeIChfX3Y0ZHUpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdHJlYW1fbG9hZF9zaTI1NihfX20yNTZpIGNvbnN0ICpfX1YpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9tb3ZudGRxYTI1NigoY29uc3QgX192NGRpICopX19WKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Jyb2FkY2FzdHNzX3BzKF9fbTEyOCBfX1gpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2YpX19YLCAoX192NHNmKV9fWCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYnJvYWRjYXN0c2RfcGQoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRmKV9fYSwgKF9fdjJkZilfX2EsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0c3NfcHMoX19tMTI4IF9fWCkKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX1gsIChfX3Y0c2YpX19YLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9icm9hZGNhc3RzZF9wZChfX20xMjhkIF9fWCkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YyZGYpX19YLCAoX192MmRmKV9fWCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0c2kxMjhfc2kyNTYoX19tMTI4aSBfX1gpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRpKV9fWCwgKF9fdjJkaSlfX1gsIDAsIDEsIDAsIDEpOworfQorCisjZGVmaW5lIF9tbV9ibGVuZF9lcGkzMihWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNpKShfX20xMjhpKShWMSksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKFYyKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAxKSA/IDQgOiAwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDIpID8gNSA6IDEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwNCkgPyA2IDogMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA4KSA/IDcgOiAzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2JsZW5kX2VwaTMyKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2kpKF9fbTI1NmkpKFYxKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKFYyKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMSkgPyAgOCA6IDApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMikgPyAgOSA6IDEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwNCkgPyAxMCA6IDIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwOCkgPyAxMSA6IDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgxMCkgPyAxMiA6IDQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgyMCkgPyAxMyA6IDUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHg0MCkgPyAxNCA6IDYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHg4MCkgPyAxNSA6IDcpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9icm9hZGNhc3RiX2VwaTgoX19tMTI4aSBfX1gpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZxaSlfX1gsIChfX3YxNnFpKV9fWCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0d19lcGkxNihfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4aGkpX19YLCAoX192OGhpKV9fWCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0ZF9lcGkzMihfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2kpX19YLCAoX192NHNpKV9fWCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0cV9lcGk2NChfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YyZGkpX19YLCAoX192MmRpKV9fWCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYnJvYWRjYXN0Yl9lcGk4KF9fbTEyOGkgX19YKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cWkpX19YLCAoX192MTZxaSlfX1gsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Jyb2FkY2FzdHdfZXBpMTYoX19tMTI4aSBfX1gpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGhpKV9fWCwgKF9fdjhoaSlfX1gsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYnJvYWRjYXN0ZF9lcGkzMihfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2kpX19YLCAoX192NHNpKV9fWCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYnJvYWRjYXN0cV9lcGk2NChfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YyZGkpX19YLCAoX192MmRpKV9fWCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGVybXV0ZXZhcjh4MzJfZXBpMzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGVybXZhcnNpMjU2KChfX3Y4c2kpX19hLCAoX192OHNpKV9fYik7Cit9CisKKyNkZWZpbmUgX21tMjU2X3Blcm11dGU0eDY0X3BkKFYsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRmKShfX20yNTZkKShWKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl91bmRlZmluZWRfcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE0pID4+IDApICYgMHgzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTSkgPj4gMikgJiAweDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNKSA+PiA0KSAmIDB4MywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE0pID4+IDYpICYgMHgzKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Blcm11dGV2YXI4eDMyX3BzKF9fbTI1NiBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9wZXJtdmFyc2YyNTYoKF9fdjhzZilfX2EsIChfX3Y4c2kpX19iKTsKK30KKworI2RlZmluZSBfbW0yNTZfcGVybXV0ZTR4NjRfZXBpNjQoViwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0ZGkpKF9fbTI1NmkpKFYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3VuZGVmaW5lZF9zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTSkgPj4gMCkgJiAweDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNKSA+PiAyKSAmIDB4MywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE0pID4+IDQpICYgMHgzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTSkgPj4gNikgJiAweDMpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9wZXJtdXRlMngxMjhfc2kyNTYoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGVybXRpMjU2KChfX20yNTZpKShWMSksIChfX20yNTZpKShWMiksIChNKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2V4dHJhY3RpMTI4X3NpMjU2KFYsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRpKShfX20yNTZpKShWKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDEpID8gMiA6IDApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMSkgPyAzIDogMSkgKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaW5zZXJ0aTEyOF9zaTI1NihWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRpKShfX20yNTZpKShWMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfY2FzdHNpMTI4X3NpMjU2KChfX20xMjhpKShWMikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMSkgPyAwIDogNCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAxKSA/IDEgOiA1KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDEpID8gNCA6IDIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMSkgPyA1IDogMykgKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrbG9hZF9lcGkzMihpbnQgY29uc3QgKl9fWCwgX19tMjU2aSBfX00pCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9tYXNrbG9hZGQyNTYoKGNvbnN0IF9fdjhzaSAqKV9fWCwgKF9fdjhzaSlfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tsb2FkX2VwaTY0KGxvbmcgbG9uZyBjb25zdCAqX19YLCBfX20yNTZpIF9fTSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX21hc2tsb2FkcTI1NigoY29uc3QgX192NGRpICopX19YLCAoX192NGRpKV9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza2xvYWRfZXBpMzIoaW50IGNvbnN0ICpfX1gsIF9fbTEyOGkgX19NKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfbWFza2xvYWRkKChjb25zdCBfX3Y0c2kgKilfX1gsIChfX3Y0c2kpX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrbG9hZF9lcGk2NChsb25nIGxvbmcgY29uc3QgKl9fWCwgX19tMTI4aSBfX00pCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9tYXNrbG9hZHEoKGNvbnN0IF9fdjJkaSAqKV9fWCwgKF9fdjJkaSlfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tzdG9yZV9lcGkzMihpbnQgKl9fWCwgX19tMjU2aSBfX00sIF9fbTI1NmkgX19ZKQoreworICBfX2J1aWx0aW5faWEzMl9tYXNrc3RvcmVkMjU2KChfX3Y4c2kgKilfX1gsIChfX3Y4c2kpX19NLCAoX192OHNpKV9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3N0b3JlX2VwaTY0KGxvbmcgbG9uZyAqX19YLCBfX20yNTZpIF9fTSwgX19tMjU2aSBfX1kpCit7CisgIF9fYnVpbHRpbl9pYTMyX21hc2tzdG9yZXEyNTYoKF9fdjRkaSAqKV9fWCwgKF9fdjRkaSlfX00sIChfX3Y0ZGkpX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrc3RvcmVfZXBpMzIoaW50ICpfX1gsIF9fbTEyOGkgX19NLCBfX20xMjhpIF9fWSkKK3sKKyAgX19idWlsdGluX2lhMzJfbWFza3N0b3JlZCgoX192NHNpICopX19YLCAoX192NHNpKV9fTSwgKF9fdjRzaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tzdG9yZV9lcGk2NChsb25nIGxvbmcgKl9fWCwgX19tMTI4aSBfX00sIF9fbTEyOGkgX19ZKQoreworICBfX2J1aWx0aW5faWEzMl9tYXNrc3RvcmVxKCggX192MmRpICopX19YLCAoX192MmRpKV9fTSwgKF9fdjJkaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NsbHZfZXBpMzIoX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNsbHY4c2koKF9fdjhzaSlfX1gsIChfX3Y4c2kpX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zbGx2X2VwaTMyKF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzbGx2NHNpKChfX3Y0c2kpX19YLCAoX192NHNpKV9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2xsdl9lcGk2NChfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc2xsdjRkaSgoX192NGRpKV9fWCwgKF9fdjRkaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NsbHZfZXBpNjQoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNsbHYyZGkoKF9fdjJkaSlfX1gsIChfX3YyZGkpX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zcmF2X2VwaTMyKF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzcmF2OHNpKChfX3Y4c2kpX19YLCAoX192OHNpKV9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3Jhdl9lcGkzMihfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JhdjRzaSgoX192NHNpKV9fWCwgKF9fdjRzaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NybHZfZXBpMzIoX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNybHY4c2koKF9fdjhzaSlfX1gsIChfX3Y4c2kpX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmx2X2VwaTMyKF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Bzcmx2NHNpKChfX3Y0c2kpX19YLCAoX192NHNpKV9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3Jsdl9lcGk2NChfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JsdjRkaSgoX192NGRpKV9fWCwgKF9fdjRkaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NybHZfZXBpNjQoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNybHYyZGkoKF9fdjJkaSlfX1gsIChfX3YyZGkpX19ZKTsKK30KKworI2RlZmluZSBfbW1fbWFza19pMzJnYXRoZXJfcGQoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfcGQoKF9fdjJkZikoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShtYXNrKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pMzJnYXRoZXJfcGQoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfcGQyNTYoKF9fdjRkZikoX19tMjU2ZCkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShtYXNrKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pNjRnYXRoZXJfcGQoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcGQoKF9fdjJkZikoX19tMTI4ZCkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShtYXNrKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pNjRnYXRoZXJfcGQoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcGQyNTYoKF9fdjRkZikoX19tMjU2ZCkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShtYXNrKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pMzJnYXRoZXJfcHMoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9wcygoX192NHNmKShfX20xMjgpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKG1hc2spLCAocykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2kzMmdhdGhlcl9wcyhhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9nYXRoZXJkX3BzMjU2KChfX3Y4c2YpKF9fbTI1NikoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikobWFzayksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfaTY0Z2F0aGVyX3BzKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcHMoKF9fdjRzZikoX19tMTI4KShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0IGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShtYXNrKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pNjRnYXRoZXJfcHMoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZ2F0aGVycV9wczI1NigoX192NHNmKShfX20xMjgpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKG1hc2spLCAocykpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2kzMmdhdGhlcl9lcGkzMihhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9kKChfX3Y0c2kpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkobWFzayksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTMyZ2F0aGVyX2VwaTMyKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJkX2QyNTYoKF9fdjhzaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShtYXNrKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pNjRnYXRoZXJfZXBpMzIoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfZCgoX192NHNpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKG1hc2spLCAocykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2k2NGdhdGhlcl9lcGkzMihhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZ2F0aGVycV9kMjU2KChfX3Y0c2kpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkobWFzayksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfaTMyZ2F0aGVyX2VwaTY0KGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJkX3EoKF9fdjJkaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShtYXNrKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pMzJnYXRoZXJfZXBpNjQoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfcTI1NigoX192NGRpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKG1hc2spLCAocykpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2k2NGdhdGhlcl9lcGk2NChhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZ2F0aGVycV9xKChfX3YyZGkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkobWFzayksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTY0Z2F0aGVyX2VwaTY0KGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJxX3EyNTYoKF9fdjRkaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShtYXNrKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW1faTMyZ2F0aGVyX3BkKG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nYXRoZXJkX3BkKChfX3YyZGYpX21tX3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fY21wZXFfcGQoX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkKCkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaTMyZ2F0aGVyX3BkKG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9nYXRoZXJkX3BkMjU2KChfX3Y0ZGYpX21tMjU2X3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfY21wX3BkKF9tbTI1Nl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ01QX0VRX09RKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzKSk7IH0pCisKKyNkZWZpbmUgX21tX2k2NGdhdGhlcl9wZChtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZ2F0aGVycV9wZCgoX192MmRmKV9tbV91bmRlZmluZWRfcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX2NtcGVxX3BkKF9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCgpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2k2NGdhdGhlcl9wZChtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfZ2F0aGVycV9wZDI1NigoX192NGRmKV9tbTI1Nl91bmRlZmluZWRfcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X2NtcF9wZChfbW0yNTZfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NNUF9FUV9PUSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocykpOyB9KQorCisjZGVmaW5lIF9tbV9pMzJnYXRoZXJfcHMobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9wcygoX192NHNmKV9tbV91bmRlZmluZWRfcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0IGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fY21wZXFfcHMoX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMoKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2kzMmdhdGhlcl9wcyhtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9nYXRoZXJkX3BzMjU2KChfX3Y4c2YpX21tMjU2X3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9jbXBfcHMoX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ01QX0VRX09RKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMpKTsgfSkKKworI2RlZmluZSBfbW1faTY0Z2F0aGVyX3BzKG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcHMoKF9fdjRzZilfbW1fdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX2NtcGVxX3BzKF9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzKCkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pNjRnYXRoZXJfcHMobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZ2F0aGVycV9wczI1NigoX192NHNmKV9tbV91bmRlZmluZWRfcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0IGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fY21wZXFfcHMoX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMoKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzKSk7IH0pCisKKyNkZWZpbmUgX21tX2kzMmdhdGhlcl9lcGkzMihtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9kKChfX3Y0c2kpX21tX3VuZGVmaW5lZF9zaTEyOCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKG0pLCAoX192NHNpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2V0MV9lcGkzMigtMSksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2kzMmdhdGhlcl9lcGkzMihtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9kMjU2KChfX3Y4c2kpX21tMjU2X3VuZGVmaW5lZF9zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKG0pLCAoX192OHNpKShfX20yNTZpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0MV9lcGkzMigtMSksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tX2k2NGdhdGhlcl9lcGkzMihtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZ2F0aGVycV9kKChfX3Y0c2kpX21tX3VuZGVmaW5lZF9zaTEyOCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKG0pLCAoX192MmRpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2V0MV9lcGkzMigtMSksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2k2NGdhdGhlcl9lcGkzMihtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZ2F0aGVycV9kMjU2KChfX3Y0c2kpX21tX3VuZGVmaW5lZF9zaTEyOCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKG0pLCAoX192NGRpKShfX20yNTZpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2V0MV9lcGkzMigtMSksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tX2kzMmdhdGhlcl9lcGk2NChtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9xKChfX3YyZGkpX21tX3VuZGVmaW5lZF9zaTEyOCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0MV9lcGk2NHgoLTEpLCAocykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pMzJnYXRoZXJfZXBpNjQobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfcTI1NigoX192NGRpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldDFfZXBpNjR4KC0xKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW1faTY0Z2F0aGVyX2VwaTY0KG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJxX3EoKF9fdjJkaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXQxX2VwaTY0eCgtMSksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2k2NGdhdGhlcl9lcGk2NChtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfZ2F0aGVycV9xMjU2KChfX3Y0ZGkpX21tMjU2X3VuZGVmaW5lZF9zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0MV9lcGk2NHgoLTEpLCAocykpOyB9KQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX0FWWDJJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hdng1MTJid2ludHJpbi5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hdng1MTJid2ludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMWQ0MTIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eDUxMmJ3aW50cmluLmgKQEAgLTAsMCArMSwyMzk0IEBACisvKj09PS0tLS0tLS0tLS0tLS0gYXZ4NTEyYndpbnRyaW4uaCAtIEFWWDUxMkJXIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGF2eDUxMmJ3aW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0FWWDUxMkJXSU5UUklOX0gKKyNkZWZpbmUgX19BVlg1MTJCV0lOVFJJTl9ICisKK3R5cGVkZWYgdW5zaWduZWQgaW50IF9fbW1hc2szMjsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fbW1hc2s2NDsKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhdng1MTJidyIpKSkKKworc3RhdGljICBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NldHplcm9fcWkodm9pZCkgeworICByZXR1cm4gKF9fbTUxMmkpKF9fdjY0cWkpeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07Cit9CisKK3N0YXRpYyAgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zZXR6ZXJvX2hpKHZvaWQpIHsKKyAgcmV0dXJuIChfX201MTJpKShfX3YzMmhpKXsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworfQorCisvKiBJbnRlZ2VyIGNvbXBhcmUgKi8KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGVxX2VwaThfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfcGNtcGVxYjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGVxX2VwaThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfcGNtcGVxYjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGVxX2VwdThfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazY0KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZXFfZXB1OF9tYXNrKF9fbW1hc2s2NCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s2NClfX2J1aWx0aW5faWEzMl91Y21wYjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBlcV9lcGkxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9wY21wZXF3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZXFfZXBpMTZfbWFzayhfX21tYXNrMzIgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfcGNtcGVxdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGVxX2VwdTE2X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGVxX2VwdTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGdlX2VwaThfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfY21wYjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGdlX2VwaThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfY21wYjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGdlX2VwdThfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazY0KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZ2VfZXB1OF9tYXNrKF9fbW1hc2s2NCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s2NClfX2J1aWx0aW5faWEzMl91Y21wYjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBnZV9lcGkxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZ2VfZXBpMTZfbWFzayhfX21tYXNrMzIgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGdlX2VwdTE2X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGdlX2VwdTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGd0X2VwaThfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfcGNtcGd0YjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGd0X2VwaThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfcGNtcGd0YjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGd0X2VwdThfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazY0KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZ3RfZXB1OF9tYXNrKF9fbW1hc2s2NCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s2NClfX2J1aWx0aW5faWEzMl91Y21wYjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBndF9lcGkxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9wY21wZ3R3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZ3RfZXBpMTZfbWFzayhfX21tYXNrMzIgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfcGNtcGd0dzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGd0X2VwdTE2X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGd0X2VwdTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGxlX2VwaThfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfY21wYjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGxlX2VwaThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfY21wYjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGxlX2VwdThfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazY0KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbGVfZXB1OF9tYXNrKF9fbW1hc2s2NCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s2NClfX2J1aWx0aW5faWEzMl91Y21wYjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsZV9lcGkxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbGVfZXBpMTZfbWFzayhfX21tYXNrMzIgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGxlX2VwdTE2X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGxlX2VwdTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGx0X2VwaThfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfY21wYjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGx0X2VwaThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfY21wYjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGx0X2VwdThfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazY0KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbHRfZXB1OF9tYXNrKF9fbW1hc2s2NCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s2NClfX2J1aWx0aW5faWEzMl91Y21wYjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsdF9lcGkxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbHRfZXBpMTZfbWFzayhfX21tYXNrMzIgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGx0X2VwdTE2X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGx0X2VwdTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcG5lcV9lcGk4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBuZXFfZXBpOF9tYXNrKF9fbW1hc2s2NCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s2NClfX2J1aWx0aW5faWEzMl9jbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbmVxX2VwdThfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazY0KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbmVxX2VwdThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbmVxX2VwaTE2X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBuZXFfZXBpMTZfbWFzayhfX21tYXNrMzIgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcG5lcV9lcHUxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBuZXFfZXB1MTZfbWFzayhfX21tYXNrMzIgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FkZF9lcGk4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSAoKF9fdjY0cXUpIF9fQSArIChfX3Y2NHF1KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYWRkX2VwaTgoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl81MTIoKF9fbW1hc2s2NClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSlfbW01MTJfYWRkX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hZGRfZXBpOChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfNTEyKChfX21tYXNrNjQpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpX21tNTEyX2FkZF9lcGk4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKV9tbTUxMl9zZXR6ZXJvX3FpKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N1Yl9lcGk4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSAoKF9fdjY0cXUpIF9fQSAtIChfX3Y2NHF1KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3ViX2VwaTgoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl81MTIoKF9fbW1hc2s2NClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSlfbW01MTJfc3ViX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zdWJfZXBpOChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfNTEyKChfX21tYXNrNjQpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpX21tNTEyX3N1Yl9lcGk4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKV9tbTUxMl9zZXR6ZXJvX3FpKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FkZF9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgKChfX3YzMmh1KSBfX0EgKyAoX192MzJodSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FkZF9lcGkxNihfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzUxMigoX19tbWFzazMyKV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl9hZGRfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hZGRfZXBpMTYoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzUxMigoX19tbWFzazMyKV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl9hZGRfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3NldHplcm9faGkoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3ViX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSAoKF9fdjMyaHUpIF9fQSAtIChfX3YzMmh1KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3ViX2VwaTE2KF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfNTEyKChfX21tYXNrMzIpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3N1Yl9lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3N1Yl9lcGkxNihfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfNTEyKChfX21tYXNrMzIpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3N1Yl9lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfc2V0emVyb19oaSgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tdWxsb19lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgKChfX3YzMmh1KSBfX0EgKiAoX192MzJodSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX211bGxvX2VwaTE2KF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfNTEyKChfX21tYXNrMzIpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX211bGxvX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbXVsbG9fZXBpMTYoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzUxMigoX19tbWFzazMyKV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl9tdWxsb19lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfc2V0emVyb19oaSgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2JsZW5kX2VwaTggKF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fVykKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzUxMiAoKF9fbW1hc2s2NCkgX19VLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2JsZW5kX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX1cpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfc2VsZWN0d181MTIgKChfX21tYXNrMzIpIF9fVSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYWJzX2VwaTggKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhYnNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hYnNfZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhYnNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYWJzX2VwaTggKF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhYnNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Fic19lcGkxNiAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFic3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Fic19lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhYnN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYWJzX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWJzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9wYWNrc19lcGkzMiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc2R3NTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcGFja3NfZXBpMzIgKF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWNrc3NkdzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3BhY2tzX2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsCisgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3NzZHc1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9wYWNrc19lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc3diNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19wYWNrc19lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLAorICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc3diNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcGFja3NfZXBpMTYgKF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWNrc3N3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9wYWNrdXNfZXBpMzIgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWNrdXNkdzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3BhY2t1c19lcGkzMiAoX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c2R3NTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcGFja3VzX2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsCisgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c2R3NTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcGFja3VzX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3Vzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3BhY2t1c19lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLAorICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWNrdXN3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3BhY2t1c19lcGkxNiAoX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c3diNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FkZHNfZXBpOCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYWRkc19lcGk4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2FkZHNfZXBpOCAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hZGRzX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZHN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hZGRzX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCisgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkc3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hZGRzX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZHN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FkZHNfZXB1OCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FkZHNfZXB1OCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYWRkc19lcHU4IChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZHVzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hZGRzX2VwdTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZHVzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYWRkc19lcHUxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZHVzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2FkZHNfZXB1MTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2F2Z19lcHU4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGF2Z2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2F2Z19lcHU4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGF2Z2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hdmdfZXB1OCAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhdmdiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2F2Z19lcHUxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bhdmd3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hdmdfZXB1MTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKKyAgICAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGF2Z3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hdmdfZXB1MTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYXZndzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXhfZXBpOCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21heF9lcGk4IChfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWF4X2VwaTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwKKyAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXhfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4c3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tYXhfZXBpMTYgKF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4c3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tYXhfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwKKyAgICAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWF4X2VwdTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4dWI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tYXhfZXB1OCAoX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1YjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21heF9lcHU4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHViNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWF4X2VwdTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHV3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWF4X2VwdTE2IChfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHV3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWF4X2VwdTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1dzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21pbl9lcGk4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWluX2VwaTggKF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWluc2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19taW5fZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLAorICAgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21pbl9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21pbl9lcGkxNiAoX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21pbl9lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BLAorICAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWluc3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9taW5fZXB1OCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51YjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21pbl9lcHU4IChfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnViNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWluX2VwdTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwKKyAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWludWI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9taW5fZXB1MTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWludXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9taW5fZXB1MTYgKF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWludXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19taW5fZXB1MTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwKKyAgICAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnV3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2h1ZmZsZV9lcGk4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNodWZiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zaHVmZmxlX2VwaTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwKKyAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNodWZiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc2h1ZmZsZV9lcGk4IChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNodWZiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N1YnNfZXBpOCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3Vic19lcGk4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3N1YnNfZXBpOCAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zdWJzX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdWJzX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCisgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3Vic3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zdWJzX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N1YnNfZXB1OCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N1YnNfZXB1OCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VidXNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3Vic19lcHU4IChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnVzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zdWJzX2VwdTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnVzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3Vic19lcHUxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnVzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3N1YnNfZXB1MTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VidXN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2syX3Blcm11dGV4MnZhcl9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19JLAorICAgICAgICAgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcmhpNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0kgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9wZXJtdXRleDJ2YXJfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fSSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmhpNTEyX21hc2sgKChfX3YzMmhpKSBfX0kgLyogaWR4ICovLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19wZXJtdXRleDJ2YXJfZXBpMTYgKF9fbTUxMmkgX19BLCBfX21tYXNrMzIgX19VLAorICAgICAgICBfX201MTJpIF9fSSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmhpNTEyX21hc2sgKChfX3YzMmhpKSBfX0kgLyogaWR4ICovLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3Blcm11dGV4MnZhcl9lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCisgICAgICAgICBfX201MTJpIF9fSSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmhpNTEyX21hc2t6ICgoX192MzJoaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbXVsaHJzX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGhyc3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX211bGhyc19lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHJzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X211bGhyc19lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxocnN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX211bGhpX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGh3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tdWxoaV9lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X211bGhpX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGh3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX211bGhpX2VwdTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGh1dzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbXVsaGlfZXB1MTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKKyAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHV3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbXVsaGlfZXB1MTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHV3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hZGR1YnNfZXBpMTYgKF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkdWJzdzUxMl9tYXNrICgoX192NjRxaSkgX19YLAorICAgICAgICAgICAgICAgICAoX192NjRxaSkgX19ZLAorICAgICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWFkZHVic19lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19YLAorICAgICAgICAgX19tNTEyaSBfX1kpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWFkZHVic3c1MTJfbWFzayAoKF9fdjY0cWkpIF9fWCwKKyAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fWSwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tYWRkdWJzX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWFkZHVic3c1MTJfbWFzayAoKF9fdjY0cWkpIF9fWCwKKyAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fWSwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFkZF9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1hZGR3ZDUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWFkZF9lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWFkZHdkNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWFkZF9lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1hZGR3ZDUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRzZXBpMTZfZXBpOCAoX19tNTEyaSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92c3diNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0c2VwaTE2X2VwaTggKF9fbTI1NmkgX19PLCBfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Zzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKV9fTywKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0c2VwaTE2X2VwaTggKF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnN3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHVzZXBpMTZfZXBpOCAoX19tNTEyaSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92dXN3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHVzZXBpMTZfZXBpOCAoX19tMjU2aSBfX08sIF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnVzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MzJxaSkgX19PLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0dXNlcGkxNl9lcGk4IChfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3diNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcGkxNl9lcGk4IChfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpMTZfZXBpOCAoX19tMjU2aSBfX08sIF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdndiNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMnFpKSBfX08sCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0ZXBpMTZfZXBpOCAoX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92d2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcGkxNl9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Z3YjUxMm1lbV9tYXNrICgoX192MzJxaSAqKSBfX1AsIChfX3YzMmhpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRzZXBpMTZfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92c3diNTEybWVtX21hc2sgKChfX3YzMnFpICopIF9fUCwgKF9fdjMyaGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHVzZXBpMTZfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92dXN3YjUxMm1lbV9tYXNrICgoX192MzJxaSAqKSBfX1AsIChfX3YzMmhpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5wYWNraGlfZXBpOChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y2NHFpKV9fQSwgKF9fdjY0cWkpX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgIDY0KzgsICAgOSwgNjQrOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLCA2NCsxMCwgMTEsIDY0KzExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIsIDY0KzEyLCAxMywgNjQrMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNCwgNjQrMTQsIDE1LCA2NCsxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0LCA2NCsyNCwgMjUsIDY0KzI1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYsIDY0KzI2LCAyNywgNjQrMjcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCwgNjQrMjgsIDI5LCA2NCsyOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwLCA2NCszMCwgMzEsIDY0KzMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDAsIDY0KzQwLCA0MSwgNjQrNDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MiwgNjQrNDIsIDQzLCA2NCs0MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0LCA2NCs0NCwgNDUsIDY0KzQ1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDYsIDY0KzQ2LCA0NywgNjQrNDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NiwgNjQrNTYsIDU3LCA2NCs1NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU4LCA2NCs1OCwgNTksIDY0KzU5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjAsIDY0KzYwLCA2MSwgNjQrNjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MiwgNjQrNjIsIDYzLCA2NCs2Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza191bnBhY2toaV9lcGk4KF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfNTEyKChfX21tYXNrNjQpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKV9tbTUxMl91bnBhY2toaV9lcGk4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3VucGFja2hpX2VwaTgoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzUxMigoX19tbWFzazY0KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSlfbW01MTJfdW5wYWNraGlfZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpX21tNTEyX3NldHplcm9fcWkoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5wYWNraGlfZXBpMTYoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MzJoaSlfX0EsIChfX3YzMmhpKV9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsICAzMis0LCAgIDUsIDMyKzUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2LCAgMzIrNiwgICA3LCAzMis3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIsIDMyKzEyLCAxMywgMzIrMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNCwgMzIrMTQsIDE1LCAzMisxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwLCAzMisyMCwgMjEsIDMyKzIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIsIDMyKzIyLCAyMywgMzIrMjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCwgMzIrMjgsIDI5LCAzMisyOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwLCAzMiszMCwgMzEsIDMyKzMxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3VucGFja2hpX2VwaTE2KF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfNTEyKChfX21tYXNrMzIpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3VucGFja2hpX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfdW5wYWNraGlfZXBpMTYoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzUxMigoX19tbWFzazMyKV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl91bnBhY2toaV9lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfc2V0emVyb19oaSgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl91bnBhY2tsb19lcGk4KF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjY0cWkpX19BLCAoX192NjRxaSlfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgNjQrMCwgICAxLCA2NCsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgIDY0KzIsICAgMywgNjQrMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsICA2NCs0LCAgIDUsIDY0KzUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2LCAgNjQrNiwgICA3LCA2NCs3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsIDY0KzE2LCAxNywgNjQrMTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOCwgNjQrMTgsIDE5LCA2NCsxOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwLCA2NCsyMCwgMjEsIDY0KzIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIsIDY0KzIyLCAyMywgNjQrMjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiwgNjQrMzIsIDMzLCA2NCszMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0LCA2NCszNCwgMzUsIDY0KzM1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYsIDY0KzM2LCAzNywgNjQrMzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOCwgNjQrMzgsIDM5LCA2NCszOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4LCA2NCs0OCwgNDksIDY0KzQ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAsIDY0KzUwLCA1MSwgNjQrNTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MiwgNjQrNTIsIDUzLCA2NCs1MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU0LCA2NCs1NCwgNTUsIDY0KzU1KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3VucGFja2xvX2VwaTgoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl81MTIoKF9fbW1hc2s2NClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpX21tNTEyX3VucGFja2xvX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfdW5wYWNrbG9fZXBpOChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfNTEyKChfX21tYXNrNjQpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKV9tbTUxMl91bnBhY2tsb19lcGk4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSlfbW01MTJfc2V0emVyb19xaSgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl91bnBhY2tsb19lcGkxNihfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YzMmhpKV9fQSwgKF9fdjMyaGkpX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgIDMyKzAsICAgMSwgMzIrMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsICAzMisyLCAgIDMsIDMyKzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCAgMzIrOCwgICA5LCAzMis5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAsIDMyKzEwLCAxMSwgMzIrMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiwgMzIrMTYsIDE3LCAzMisxNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4LCAzMisxOCwgMTksIDMyKzE5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQsIDMyKzI0LCAyNSwgMzIrMjUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNiwgMzIrMjYsIDI3LCAzMisyNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza191bnBhY2tsb19lcGkxNihfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzUxMigoX19tbWFzazMyKV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl91bnBhY2tsb19lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3VucGFja2xvX2VwaTE2KF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0d181MTIoKF9fbW1hc2szMilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfdW5wYWNrbG9fZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3NldHplcm9faGkoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXBpOF9lcGkxNihfX20yNTZpIF9fQSkKK3sKKyAgLyogVGhpcyBmdW5jdGlvbiBhbHdheXMgcGVyZm9ybXMgYSBzaWduZWQgZXh0ZW5zaW9uLCBidXQgX192MzJxaSBpcyBhIGNoYXIKKyAgICAgd2hpY2ggbWF5IGJlIHNpZ25lZCBvciB1bnNpZ25lZCwgc28gdXNlIF9fdjMycXMuICovCisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5fY29udmVydHZlY3RvcigoX192MzJxcylfX0EsIF9fdjMyaGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpOF9lcGkxNihfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzUxMigoX19tbWFzazMyKV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl9jdnRlcGk4X2VwaTE2KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwaThfZXBpMTYoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzUxMigoX19tbWFzazMyKV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl9jdnRlcGk4X2VwaTE2KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfc2V0emVyb19oaSgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcHU4X2VwaTE2KF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoKF9fdjMycXUpX19BLCBfX3YzMmhpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwdThfZXBpMTYoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0d181MTIoKF9fbW1hc2szMilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfY3Z0ZXB1OF9lcGkxNihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcHU4X2VwaTE2KF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0d181MTIoKF9fbW1hc2szMilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfY3Z0ZXB1OF9lcGkxNihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3NldHplcm9faGkoKSk7Cit9CisKKworI2RlZmluZSBfbW01MTJfY21wX2VwaThfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s2NClfX2J1aWx0aW5faWEzMl9jbXBiNTEyX21hc2soKF9fdjY0cWkpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKShfX201MTJpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY21wX2VwaThfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s2NClfX2J1aWx0aW5faWEzMl9jbXBiNTEyX21hc2soKF9fdjY0cWkpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKShfX201MTJpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCkobSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9jbXBfZXB1OF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSkoX19tNTEyaSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazY0KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jbXBfZXB1OF9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSkoX19tNTEyaSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazY0KShtKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2NtcF9lcGkxNl9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcHc1MTJfbWFzaygoX192MzJoaSkoX19tNTEyaSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpKF9fbTUxMmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jbXBfZXBpMTZfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXB3NTEyX21hc2soKF9fdjMyaGkpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKShfX201MTJpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikobSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9jbXBfZXB1MTZfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpKF9fbTUxMmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY21wX2VwdTE2X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcHc1MTJfbWFzaygoX192MzJoaSkoX19tNTEyaSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKShfX201MTJpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpKG0pKTsgfSkKKworI2RlZmluZSBfbW01MTJfc2h1ZmZsZWhpX2VwaTE2KEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YzMmhpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfdW5kZWZpbmVkX2VwaTMyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICArICgoKGltbSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoaW1tKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgKyAoKChpbW0pID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICArICgoKGltbSkgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsIDksIDEwLCAxMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKGltbSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoaW1tKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIgKyAoKChpbW0pID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKGltbSkgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCAxNywgMTgsIDE5LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwICsgKCgoaW1tKSA+PiAwKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAgKyAoKChpbW0pID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCArICgoKGltbSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwICsgKCgoaW1tKSA+PiA2KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQsIDI1LCAyNiwgMjcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggKyAoKChpbW0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCArICgoKGltbSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4ICsgKCgoaW1tKSA+PiA0KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggKyAoKChpbW0pID4+IDYpICYgMHgzKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc2h1ZmZsZWhpX2VwaTE2KFcsIFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfNTEyKChfX21tYXNrMzIpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl9zaHVmZmxlaGlfZXBpMTYoKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltbSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKShfX201MTJpKShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3NodWZmbGVoaV9lcGkxNihVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzUxMigoX19tbWFzazMyKShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfc2h1ZmZsZWhpX2VwaTE2KChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfc2V0emVyb19oaSgpKTsgfSkKKworI2RlZmluZSBfbW01MTJfc2h1ZmZsZWxvX2VwaTE2KEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YzMmhpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfdW5kZWZpbmVkX2VwaTMyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKGltbSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChpbW0pID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgoaW1tKSA+PiA0KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKGltbSkgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDUsIDYsIDcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCArICgoKGltbSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggKyAoKChpbW0pID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICsgKCgoaW1tKSA+PiA0KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCArICgoKGltbSkgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyLCAxMywgMTQsIDE1LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICsgKCgoaW1tKSA+PiAwKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYgKyAoKChpbW0pID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiArICgoKGltbSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICsgKCgoaW1tKSA+PiA2KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAsIDIxLCAyMiwgMjMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgKyAoKChpbW0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCArICgoKGltbSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0ICsgKCgoaW1tKSA+PiA0KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQgKyAoKChpbW0pID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCwgMjksIDMwLCAzMSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza19zaHVmZmxlbG9fZXBpMTYoVywgVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0d181MTIoKF9fbW1hc2szMikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3NodWZmbGVsb19lcGkxNigoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpKF9fbTUxMmkpKFcpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9zaHVmZmxlbG9fZXBpMTYoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0d181MTIoKF9fbW1hc2szMikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3NodWZmbGVsb19lcGkxNigoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3NldHplcm9faGkoKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2xsdl9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzbGx2MzJoaV9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9faGkgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NsbHZfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKKyAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzbGx2MzJoaV9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NsbHZfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjMyaGlfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX2hpICgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NsbF9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzbGx3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3YzMmhpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX2hpICgpLAorICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NsbF9lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2xsdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc2xsX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNsbHc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjMyaGkpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9faGkgKCksCisgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworI2RlZmluZSBfbW01MTJfc2xsaV9lcGkxNihBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNsbHdpNTEyX21hc2soKF9fdjMyaGkpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfc2V0emVyb19oaSgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3NsbGlfZXBpMTYoVywgVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BzbGx3aTUxMl9tYXNrKChfX3YzMmhpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfc2xsaV9lcGkxNihVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNsbHdpNTEyX21hc2soKF9fdjMyaGkpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfc2V0emVyb19oaSgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfYnNsbGlfZXBpMTI4KGEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAoX192NjRxaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIChfX3Y2NHFpKShfX201MTJpKShhKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDAgOiAoKGNoYXIpKGltbSk+MHgwID8gMTYgOiAgNjQpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgMSA6ICgoY2hhcikoaW1tKT4weDEgPyAxNyA6ICA2NSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICAyIDogKChjaGFyKShpbW0pPjB4MiA/IDE4IDogIDY2KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDMgOiAoKGNoYXIpKGltbSk+MHgzID8gMTkgOiAgNjcpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNCA6ICgoY2hhcikoaW1tKT4weDQgPyAyMCA6ICA2OCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA1IDogKChjaGFyKShpbW0pPjB4NSA/IDIxIDogIDY5KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDYgOiAoKGNoYXIpKGltbSk+MHg2ID8gMjIgOiAgNzApIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNyA6ICgoY2hhcikoaW1tKT4weDcgPyAyMyA6ICA3MSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA4IDogKChjaGFyKShpbW0pPjB4OCA/IDI0IDogIDcyKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDkgOiAoKGNoYXIpKGltbSk+MHg5ID8gMjUgOiAgNzMpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMCA6ICgoY2hhcikoaW1tKT4weEEgPyAyNiA6ICA3NCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDExIDogKChjaGFyKShpbW0pPjB4QiA/IDI3IDogIDc1KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTIgOiAoKGNoYXIpKGltbSk+MHhDID8gMjggOiAgNzYpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMyA6ICgoY2hhcikoaW1tKT4weEQgPyAyOSA6ICA3NykgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDE0IDogKChjaGFyKShpbW0pPjB4RSA/IDMwIDogIDc4KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTUgOiAoKGNoYXIpKGltbSk+MHhGID8gMzEgOiAgNzkpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxNiA6ICgoY2hhcikoaW1tKT4weDAgPyAzMiA6ICA4MCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDE3IDogKChjaGFyKShpbW0pPjB4MSA/IDMzIDogIDgxKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTggOiAoKGNoYXIpKGltbSk+MHgyID8gMzQgOiAgODIpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxOSA6ICgoY2hhcikoaW1tKT4weDMgPyAzNSA6ICA4MykgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDIwIDogKChjaGFyKShpbW0pPjB4NCA/IDM2IDogIDg0KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjEgOiAoKGNoYXIpKGltbSk+MHg1ID8gMzcgOiAgODUpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyMiA6ICgoY2hhcikoaW1tKT4weDYgPyAzOCA6ICA4NikgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDIzIDogKChjaGFyKShpbW0pPjB4NyA/IDM5IDogIDg3KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjQgOiAoKGNoYXIpKGltbSk+MHg4ID8gNDAgOiAgODgpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyNSA6ICgoY2hhcikoaW1tKT4weDkgPyA0MSA6ICA4OSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDI2IDogKChjaGFyKShpbW0pPjB4QSA/IDQyIDogIDkwKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjcgOiAoKGNoYXIpKGltbSk+MHhCID8gNDMgOiAgOTEpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyOCA6ICgoY2hhcikoaW1tKT4weEMgPyA0NCA6ICA5MikgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDI5IDogKChjaGFyKShpbW0pPjB4RCA/IDQ1IDogIDkzKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMzAgOiAoKGNoYXIpKGltbSk+MHhFID8gNDYgOiAgOTQpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAzMSA6ICgoY2hhcikoaW1tKT4weEYgPyA0NyA6ICA5NSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDMyIDogKChjaGFyKShpbW0pPjB4MCA/IDQ4IDogIDk2KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMzMgOiAoKGNoYXIpKGltbSk+MHgxID8gNDkgOiAgOTcpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAzNCA6ICgoY2hhcikoaW1tKT4weDIgPyA1MCA6ICA5OCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDM1IDogKChjaGFyKShpbW0pPjB4MyA/IDUxIDogIDk5KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMzYgOiAoKGNoYXIpKGltbSk+MHg0ID8gNTIgOiAxMDApIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAzNyA6ICgoY2hhcikoaW1tKT4weDUgPyA1MyA6IDEwMSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDM4IDogKChjaGFyKShpbW0pPjB4NiA/IDU0IDogMTAyKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMzkgOiAoKGNoYXIpKGltbSk+MHg3ID8gNTUgOiAxMDMpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA0MCA6ICgoY2hhcikoaW1tKT4weDggPyA1NiA6IDEwNCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDQxIDogKChjaGFyKShpbW0pPjB4OSA/IDU3IDogMTA1KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNDIgOiAoKGNoYXIpKGltbSk+MHhBID8gNTggOiAxMDYpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA0MyA6ICgoY2hhcikoaW1tKT4weEIgPyA1OSA6IDEwNykgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDQ0IDogKChjaGFyKShpbW0pPjB4QyA/IDYwIDogMTA4KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNDUgOiAoKGNoYXIpKGltbSk+MHhEID8gNjEgOiAxMDkpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA0NiA6ICgoY2hhcikoaW1tKT4weEUgPyA2MiA6IDExMCkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDQ3IDogKChjaGFyKShpbW0pPjB4RiA/IDYzIDogMTExKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNDggOiAoKGNoYXIpKGltbSk+MHgwID8gNjQgOiAxMTIpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA0OSA6ICgoY2hhcikoaW1tKT4weDEgPyA2NSA6IDExMykgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDUwIDogKChjaGFyKShpbW0pPjB4MiA/IDY2IDogMTE0KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNTEgOiAoKGNoYXIpKGltbSk+MHgzID8gNjcgOiAxMTUpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA1MiA6ICgoY2hhcikoaW1tKT4weDQgPyA2OCA6IDExNikgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDUzIDogKChjaGFyKShpbW0pPjB4NSA/IDY5IDogMTE3KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNTQgOiAoKGNoYXIpKGltbSk+MHg2ID8gNzAgOiAxMTgpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA1NSA6ICgoY2hhcikoaW1tKT4weDcgPyA3MSA6IDExOSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDU2IDogKChjaGFyKShpbW0pPjB4OCA/IDcyIDogMTIwKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNTcgOiAoKGNoYXIpKGltbSk+MHg5ID8gNzMgOiAxMjEpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA1OCA6ICgoY2hhcikoaW1tKT4weEEgPyA3NCA6IDEyMikgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDU5IDogKChjaGFyKShpbW0pPjB4QiA/IDc1IDogMTIzKSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNjAgOiAoKGNoYXIpKGltbSk+MHhDID8gNzYgOiAxMjQpIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyA2MSA6ICgoY2hhcikoaW1tKT4weEQgPyA3NyA6IDEyNSkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDYyIDogKChjaGFyKShpbW0pPjB4RSA/IDc4IDogMTI2KSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gNjMgOiAoKGNoYXIpKGltbSk+MHhGID8gNzkgOiAxMjcpIC0gKGNoYXIpKGltbSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NybHZfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JsdjMyaGlfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX2hpICgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zcmx2X2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCisgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JsdjMyaGlfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zcmx2X2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNybHYzMmhpX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19oaSAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zcmF2X2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNyYXYzMmhpX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19oaSAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3Jhdl9lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNyYXYzMmhpX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3Jhdl9lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzcmF2MzJoaV9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9faGkgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3JhX2VwaTE2IChfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JhdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MzJoaSkKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19oaSAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zcmFfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKKyAgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNyYXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3JhX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNyYXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjMyaGkpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9faGkgKCksCisgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCisjZGVmaW5lIF9tbTUxMl9zcmFpX2VwaTE2KEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wc3Jhd2k1MTJfbWFzaygoX192MzJoaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl9zZXR6ZXJvX2hpKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc3JhaV9lcGkxNihXLCBVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNyYXdpNTEyX21hc2soKF9fdjMyaGkpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9zcmFpX2VwaTE2KFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wc3Jhd2k1MTJfbWFzaygoX192MzJoaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl9zZXR6ZXJvX2hpKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikoVSkpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3JsX2VwaTE2IChfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNybHc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjMyaGkpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9faGkgKCksCisgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3JsX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bzcmx3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zcmxfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JsdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MzJoaSkKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19oaSAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCisjZGVmaW5lIF9tbTUxMl9zcmxpX2VwaTE2KEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3Bzcmx3aTUxMl9tYXNrKChfX3YzMmhpKShfX201MTJpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSlfbW01MTJfc2V0emVyb19oaSgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3NybGlfZXBpMTYoVywgVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNybHdpNTEyX21hc2soKF9fdjMyaGkpKF9fbTUxMmkpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3NybGlfZXBpMTYoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNybHdpNTEyX21hc2soKF9fdjMyaGkpKF9fbTUxMmkpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl9zZXR6ZXJvX2hpKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9ic3JsaV9lcGkxMjgoYSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKF9fdjY0cWkpKF9fbTUxMmkpKGEpLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAoX192NjRxaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCAgICAgICAgICAgIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA2NCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4RiA/ICA0OCA6IDApLCAgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDY1IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhFID8gIDQ5IDogMSksICBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNjYgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEQgPyAgNTAgOiAyKSwgIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA2NyA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4QyA/ICA1MSA6IDMpLCAgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDY4IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhCID8gIDUyIDogNCksICBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNjkgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEEgPyAgNTMgOiA1KSwgIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA3MCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4OSA/ICA1NCA6IDYpLCAgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDcxIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg4ID8gIDU1IDogNyksICBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNzIgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDcgPyAgNTYgOiA4KSwgIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA3MyA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4NiA/ICA1NyA6IDkpLCAgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDc0IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg1ID8gIDU4IDogMTApLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNzUgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDQgPyAgNTkgOiAxMSksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA3NiA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4MyA/ICA2MCA6IDEyKSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDc3IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHgyID8gIDYxIDogMTMpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNzggOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDEgPyAgNjIgOiAxNCksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA3OSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4MCA/ICA2MyA6IDE1KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDgwIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhGID8gIDY0IDogMTYpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgODEgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEUgPyAgNjUgOiAxNyksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA4MiA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4RCA/ICA2NiA6IDE4KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDgzIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhDID8gIDY3IDogMTkpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgODQgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEIgPyAgNjggOiAyMCksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA4NSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4QSA/ICA2OSA6IDIxKSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDg2IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg5ID8gIDcwIDogMjIpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgODcgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDggPyAgNzEgOiAyMyksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA4OCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4NyA/ICA3MiA6IDI0KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDg5IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg2ID8gIDczIDogMjUpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgOTAgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDUgPyAgNzQgOiAyNiksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA5MSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4NCA/ICA3NSA6IDI3KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDkyIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHgzID8gIDc2IDogMjgpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgOTMgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDIgPyAgNzcgOiAyOSksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA5NCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4MSA/ICA3OCA6IDMwKSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDk1IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHgwID8gIDc5IDogMzEpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgOTYgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEYgPyAgODAgOiAzMiksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA5NyA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4RSA/ICA4MSA6IDMzKSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDk4IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhEID8gIDgyIDogMzQpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgOTkgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEMgPyAgODMgOiAzNSksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEwMCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4QiA/ICA4NCA6IDM2KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTAxIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhBID8gIDg1IDogMzcpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMDIgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDkgPyAgODYgOiAzOCksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEwMyA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4OCA/ICA4NyA6IDM5KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTA0IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg3ID8gIDg4IDogNDApLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMDUgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDYgPyAgODkgOiA0MSksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEwNiA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4NSA/ICA5MCA6IDQyKSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTA3IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg0ID8gIDkxIDogNDMpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMDggOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDMgPyAgOTIgOiA0NCksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEwOSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4MiA/ICA5MyA6IDQ1KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTEwIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHgxID8gIDk0IDogNDYpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMTEgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDAgPyAgOTUgOiA0NyksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDExMiA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4RiA/ICA5NiA6IDQ4KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTEzIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhFID8gIDk3IDogNDkpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMTQgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEQgPyAgOTggOiA1MCksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDExNSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4QyA/ICA5OSA6IDUxKSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTE2IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHhCID8gMTAwIDogNTIpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMTcgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weEEgPyAxMDEgOiA1MyksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDExOCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4OSA/IDEwMiA6IDU0KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTE5IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg4ID8gMTAzIDogNTUpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMjAgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDcgPyAxMDQgOiA1NiksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEyMSA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4NiA/IDEwNSA6IDU3KSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTIyIDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHg1ID8gMTA2IDogNTgpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMjMgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDQgPyAxMDcgOiA1OSksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEyNCA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4MyA/IDEwOCA6IDYwKSwgXAorICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTI1IDogKGNoYXIpKGltbSkgKyAoKGNoYXIpKGltbSk+MHgyID8gMTA5IDogNjEpLCBcCisgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMjYgOiAoY2hhcikoaW1tKSArICgoY2hhcikoaW1tKT4weDEgPyAxMTAgOiA2MiksIFwKKyAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEyNyA6IChjaGFyKShpbW0pICsgKChjaGFyKShpbW0pPjB4MCA/IDExMSA6IDYzKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tb3ZfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzUxMiAoKF9fbW1hc2szMikgX19VLAorICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbW92X2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzUxMiAoKF9fbW1hc2szMikgX19VLAorICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpICgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21vdl9lcGk4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfc2VsZWN0Yl81MTIgKChfX21tYXNrNjQpIF9fVSwKKyAgICAgICAgICAgICAgICAoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21vdl9lcGk4IChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzUxMiAoKF9fbW1hc2s2NCkgX19VLAorICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX2hpICgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NldDFfZXBpOCAoX19tNTEyaSBfX08sIF9fbW1hc2s2NCBfX00sIGNoYXIgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3RiNTEyX2dwcl9tYXNrIChfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX08sCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc2V0MV9lcGk4IChfX21tYXNrNjQgX19NLCBjaGFyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0YjUxMl9ncHJfbWFzayAoX19BLAorICAgICAgICAgICAgICAgICAoX192NjRxaSkKKyAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2t1bnBhY2tkIChfX21tYXNrNjQgX19BLCBfX21tYXNrNjQgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s2NCkgX19idWlsdGluX2lhMzJfa3VucGNrZGkgKChfX21tYXNrNjQpIF9fQSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfa3VucGFja3cgKF9fbW1hc2szMiBfX0EsIF9fbW1hc2szMiBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazMyKSBfX2J1aWx0aW5faWEzMl9rdW5wY2tzaSAoKF9fbW1hc2szMikgX19BLAorICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19sb2FkdV9lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1aGk1MTJfbWFzayAoKF9fdjMyaGkgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2xvYWR1X2VwaTE2IChfX21tYXNrMzIgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfbG9hZGRxdWhpNTEyX21hc2sgKChfX3YzMmhpICopIF9fUCwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpCisgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX2hpICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbG9hZHVfZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1cWk1MTJfbWFzayAoKF9fdjY0cWkgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2xvYWR1X2VwaTggKF9fbW1hc2s2NCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1cWk1MTJfbWFzayAoKF9fdjY0cWkgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192NjRxaSkKKyAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9faGkgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3RvcmV1X2VwaTE2ICh2b2lkICpfX1AsIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZWRxdWhpNTEyX21hc2sgKChfX3YzMmhpICopIF9fUCwKKyAgICAgICAgICAgICAoX192MzJoaSkgX19BLAorICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdG9yZXVfZXBpOCAodm9pZCAqX19QLCBfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVkcXVxaTUxMl9tYXNrICgoX192NjRxaSAqKSBfX1AsCisgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdGVzdF9lcGk4X21hc2sgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrNjQpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bWI1MTIgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza190ZXN0X2VwaThfbWFzayAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s2NCkgX19idWlsdGluX2lhMzJfcHRlc3RtYjUxMiAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl90ZXN0X2VwaTE2X21hc2sgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMzIpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bXc1MTIgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza190ZXN0X2VwaTE2X21hc2sgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMzIpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bXc1MTIgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAoX192MzJoaSkgX19CLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdGVzdG5fZXBpOF9tYXNrIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazY0KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tYjUxMiAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfdGVzdG5fZXBpOF9tYXNrIChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazY0KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tYjUxMiAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAoX192NjRxaSkgX19CLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdGVzdG5fZXBpMTZfbWFzayAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2szMikgX19idWlsdGluX2lhMzJfcHRlc3RubXc1MTIgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3Rlc3RuX2VwaTE2X21hc2sgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMzIpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bm13NTEyICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tb3ZlcGk4X21hc2sgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbW1hc2s2NCkgX19idWlsdGluX2lhMzJfY3Z0YjJtYXNrNTEyICgoX192NjRxaSkgX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21vdmVwaTE2X21hc2sgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbW1hc2szMikgX19idWlsdGluX2lhMzJfY3Z0dzJtYXNrNTEyICgoX192MzJoaSkgX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tb3ZtX2VwaTggKF9fbW1hc2s2NCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0bWFzazJiNTEyIChfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21vdm1fZXBpMTYgKF9fbW1hc2szMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0bWFzazJ3NTEyIChfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Jyb2FkY2FzdGJfZXBpOCAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19icm9hZGNhc3RiX2VwaTggKF9fbTUxMmkgX19PLCBfX21tYXNrNjQgX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfNTEyKF9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfYnJvYWRjYXN0Yl9lcGk4KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSkgX19PKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9icm9hZGNhc3RiX2VwaTggKF9fbW1hc2s2NCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl81MTIoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9icm9hZGNhc3RiX2VwaTgoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19zaTUxMigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NldDFfZXBpMTYgKF9fbTUxMmkgX19PLCBfX21tYXNrMzIgX19NLCBzaG9ydCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdHc1MTJfZ3ByX21hc2sgKF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fTywKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zZXQxX2VwaTE2IChfX21tYXNrMzIgX19NLCBzaG9ydCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdHc1MTJfZ3ByX21hc2sgKF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYnJvYWRjYXN0d19lcGkxNiAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Jyb2FkY2FzdHdfZXBpMTYgKF9fbTUxMmkgX19PLCBfX21tYXNrMzIgX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfNTEyKF9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfYnJvYWRjYXN0d19lcGkxNihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fTyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYnJvYWRjYXN0d19lcGkxNiAoX19tbWFzazMyIF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzUxMihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX2Jyb2FkY2FzdHdfZXBpMTYoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19zaTUxMigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9wZXJtdXRleHZhcl9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJoaTUxMl9tYXNrICgoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3VuZGVmaW5lZF9lcGkzMiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3Blcm11dGV4dmFyX2VwaTE2IChfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwKKyAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGVybXZhcmhpNTEyX21hc2sgKChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcGVybXV0ZXh2YXJfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwKKyAgICAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyaGk1MTJfbWFzayAoKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworI2RlZmluZSBfbW01MTJfYWxpZ25yX2VwaTgoQSwgQiwgTikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcGFsaWducjUxMl9tYXNrKChfX3Y2NHFpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpKF9fbTUxMmkpKEIpLCAoaW50KShOKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpX21tNTEyX3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazY0KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19hbGlnbnJfZXBpOChXLCBVLCBBLCBCLCBOKSBfX2V4dGVuc2lvbl9fKHtcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BhbGlnbnI1MTJfbWFzaygoX192NjRxaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKShfX201MTJpKShCKSwgKGludCkoTiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9hbGlnbnJfZXBpOChVLCBBLCBCLCBOKSBfX2V4dGVuc2lvbl9fKHtcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BhbGlnbnI1MTJfbWFzaygoX192NjRxaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKShfX201MTJpKShCKSwgKGludCkoTiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfZGJzYWRfZXB1OChBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2RicHNhZGJ3NTEyX21hc2soKF9fdjY0cWkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpKF9fbTUxMmkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpX21tNTEyX3VuZGVmaW5lZF9lcGkzMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZGJzYWRfZXB1OChXLCBVLCBBLCBCLCBpbW0pICh7XAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9kYnBzYWRidzUxMl9tYXNrKChfX3Y2NHFpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKShfX201MTJpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZGJzYWRfZXB1OChVLCBBLCBCLCBpbW0pICh7XAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9kYnBzYWRidzUxMl9tYXNrKChfX3Y2NHFpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y2NHFpKShfX201MTJpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKV9tbTUxMl9zZXR6ZXJvX2hpKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKShVKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2FkX2VwdTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzYWRidzUxMiAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IpOworfQorCisKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEyY2RpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEyY2RpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2M0MjM1Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hdng1MTJjZGludHJpbi5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKj09PS0tLS0tLS0tLS0tLS0gYXZ4NTEyY2RpbnRyaW4uaCAtIEFWWDUxMkNEIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGF2eDUxMmNkaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0FWWDUxMkNESU5UUklOX0gKKyNkZWZpbmUgX19BVlg1MTJDRElOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEyY2QiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY29uZmxpY3RfZXBpNjQgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RkaV81MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jb25mbGljdF9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBjb25mbGljdGRpXzUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY29uZmxpY3RfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBjb25mbGljdGRpXzUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY29uZmxpY3RfZXBpMzIgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RzaV81MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jb25mbGljdF9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RzaV81MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2NvbmZsaWN0X2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0c2lfNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9semNudF9lcGkzMiAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBsemNudGRfNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2c2kpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2x6Y250X2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBsemNudGRfNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbHpjbnRfZXBpMzIgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRkXzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2x6Y250X2VwaTY0IChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGx6Y250cV81MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbHpjbnRfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRxXzUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2x6Y250X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRxXzUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Jyb2FkY2FzdG1iX2VwaTY0IChfX21tYXNrOCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0bWI1MTIgKF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYnJvYWRjYXN0bXdfZXBpMzIgKF9fbW1hc2sxNiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0bXc1MTIgKF9fQSk7Cit9CisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eDUxMmRxaW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eDUxMmRxaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0NGI5OAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEyZHFpbnRyaW4uaApAQCAtMCwwICsxLDEzMzIgQEAKKy8qPT09LS0tLSBhdng1MTJkcWludHJpbi5oIC0gQVZYNTEyRFEgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGF2eDUxMmRxaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0FWWDUxMkRRSU5UUklOX0gKKyNkZWZpbmUgX19BVlg1MTJEUUlOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEyZHEiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbXVsbG9fZXBpNjQgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpICgoX192OGR1KSBfX0EgKiAoX192OGR1KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbXVsbG9fZXBpNjQoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfbXVsbG9fZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X211bGxvX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfbXVsbG9fZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl94b3JfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkoKF9fdjhkdSlfX0EgXiAoX192OGR1KV9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza194b3JfcGQoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF81MTIoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl94b3JfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel94b3JfcGQoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3hvcl9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3hvcl9wcyAoX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikoKF9fdjE2c3UpX19BIF4gKF9fdjE2c3UpX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfeG9yX3BzKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfNTEyKChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3hvcl9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfeG9yX3BzKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfNTEyKChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3hvcl9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9vcl9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJkKSgoX192OGR1KV9fQSB8IChfX3Y4ZHUpX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX29yX3BkKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfb3JfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9vcl9wZChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfb3JfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9vcl9wcyhfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKSgoX192MTZzdSlfX0EgfCAoX192MTZzdSlfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19vcl9wcyhfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9vcl9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfb3JfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc181MTIoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfb3JfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYW5kX3BkKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpKChfX3Y4ZHUpX19BICYgKF9fdjhkdSlfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYW5kX3BkKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfYW5kX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYW5kX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF81MTIoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9hbmRfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hbmRfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikoKF9fdjE2c3UpX19BICYgKF9fdjE2c3UpX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYW5kX3BzKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfNTEyKChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX2FuZF9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYW5kX3BzKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfNTEyKChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX2FuZF9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hbmRub3RfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkofihfX3Y4ZHUpX19BICYgKF9fdjhkdSlfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYW5kbm90X3BkKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfYW5kbm90X3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYW5kbm90X3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF81MTIoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9hbmRub3RfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hbmRub3RfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikofihfX3YxNnN1KV9fQSAmIChfX3YxNnN1KV9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FuZG5vdF9wcyhfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9hbmRub3RfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2FuZG5vdF9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9hbmRub3RfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0cGRfZXBpNjQgKF9fbTUxMmQgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cGQycXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0cGRfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cGQycXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHBkX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cGQycXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kcGRfZXBpNjQoQSwgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnRwZDJxcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kcGRfZXBpNjQoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHBkMnFxNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kcGRfZXBpNjQoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyAgIFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0cGQycXE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRwZF9lcHU2NCAoX19tNTEyZCBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0cGRfZXB1NjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cGQydXFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRwZF9lcHU2NCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwZF9lcHU2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kcGRfZXB1NjQoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kcGRfZXB1NjQoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyAgICAgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHBzX2VwaTY0IChfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cHMycXE1MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0cHNfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0cHNfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZHBzX2VwaTY0KEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnRwczJxcTUxMl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRwc19lcGk2NChXLCBVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0cHMycXE1MTJfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dF9yb3VuZHBzX2VwaTY0KFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxNTEyX21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRwc19lcHU2NCAoX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRwc19lcHU2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0cHNfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwc19lcHU2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTUxMl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dF9yb3VuZHBzX2VwdTY0KFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnRwczJ1cXE1MTJfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kcHNfZXB1NjQoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyAgIFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0cHMydXFxNTEyX21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXBpNjRfcGQgKF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpNjRfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwaTY0X3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kZXBpNjRfcGQoQSwgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2N2dHFxMnBkNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRlcGk2NF9wZChXLCBVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfY3Z0cXEycGQ1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9jdnRfcm91bmRlcGk2NF9wZChVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfY3Z0cXEycGQ1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwaTY0X3BzIChfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3NldHplcm9fcHMoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcGk2NF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0ZXBpNjRfcHMgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZGVwaTY0X3BzKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgIFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9jdnRxcTJwczUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dF9yb3VuZGVwaTY0X3BzKFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoVyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kZXBpNjRfcHMoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfY3Z0cXEycHM1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR0cGRfZXBpNjQgKF9fbTUxMmQgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHRwZF9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQycXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHRwZF9lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnR0X3JvdW5kcGRfZXBpNjQoQSwgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnR0X3JvdW5kcGRfZXBpNjQoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0dF9yb3VuZHBkX2VwaTY0KFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnR0cGQycXE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHRwZF9lcHU2NCAoX19tNTEyZCBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydXFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHRwZF9lcHU2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydXFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnR0cGRfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydXFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dHRfcm91bmRwZF9lcHU2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnR0X3JvdW5kcGRfZXB1NjQoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0dF9yb3VuZHBkX2VwdTY0KFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0dHBzX2VwaTY0IChfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHRwc19lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0dHBzX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMycXE1MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0dF9yb3VuZHBzX2VwaTY0KEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTUxMl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dHRfcm91bmRwc19lcGk2NChXLCBVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxNTEyX21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dHRfcm91bmRwc19lcGk2NChVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7ICBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTUxMl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR0cHNfZXB1NjQgKF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydXFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHRwc19lcHU2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1cXE1MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHRwc19lcHU2NCAoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnR0X3JvdW5kcHNfZXB1NjQoQSwgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgIFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTUxMl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0dF9yb3VuZHBzX2VwdTY0KFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnR0cHMydXFxNTEyX21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0dF9yb3VuZHBzX2VwdTY0KFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgIFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTUxMl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwdTY0X3BkIChfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwZDUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcHU2NF9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwdTY0X3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZGVwdTY0X3BkKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQ1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kZXB1NjRfcGQoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwZDUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9jdnRfcm91bmRlcHU2NF9wZChVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXB1NjRfcHMgKF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcHU2NF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwdTY0X3BzIChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kZXB1NjRfcHMoQSwgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgIFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9jdnR1cXEycHM1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dF9yb3VuZGVwdTY0X3BzKFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwczUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kZXB1NjRfcHMoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JhbmdlX3BkKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JhbmdlcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIChpbnQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19yYW5nZV9wZChXLCBVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yYW5nZXBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoVyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JhbmdlX3BkKFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgIFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcmFuZ2VwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfcmFuZ2Vfcm91bmRfcGQoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yYW5nZXBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19yYW5nZV9yb3VuZF9wZChXLCBVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcmFuZ2VwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JhbmdlX3JvdW5kX3BkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yYW5nZXBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JhbmdlX3BzKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9yYW5nZXBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIChpbnQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JhbmdlX3BzKFcsIFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcmFuZ2VwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShXKSwgKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcmFuZ2VfcHMoVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyAgICAgIFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9yYW5nZXBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIChpbnQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfcmFuZ2Vfcm91bmRfcHMoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgIFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9yYW5nZXBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIChpbnQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JhbmdlX3JvdW5kX3BzKFcsIFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JhbmdlcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVyksIChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcmFuZ2Vfcm91bmRfcHMoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcmFuZ2VwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX3JhbmdlX3JvdW5kX3NzKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgIFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yYW5nZXNzMTI4X3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLCAoaW50KShDKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fcmFuZ2Vfc3MoQSAsQiAsIEMpIF9tbV9yYW5nZV9yb3VuZF9zcyhBLCBCLCBDICxfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2tfcmFuZ2Vfcm91bmRfc3MoVywgVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcmFuZ2VzczEyOF9yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoQyksXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcmFuZ2Vfc3MoVyAsIFUsIEEsIEIsIEMpIF9tbV9tYXNrX3JhbmdlX3JvdW5kX3NzKFcsIFUsIEEsIEIsIEMgLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2t6X3JhbmdlX3JvdW5kX3NzKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3Jhbmdlc3MxMjhfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKEMpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9yYW5nZV9zcyhVLCBBICxCICwgQykgX21tX21hc2t6X3JhbmdlX3JvdW5kX3NzKFUsIEEsIEIsIEMgLF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fcmFuZ2Vfcm91bmRfc2QoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yYW5nZXNkMTI4X3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsIChpbnQpKEMpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fcmFuZ2Vfc2QoQSAsQiAsIEMpIF9tbV9yYW5nZV9yb3VuZF9zZChBLCBCLCBDICxfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2tfcmFuZ2Vfcm91bmRfc2QoVywgVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3Jhbmdlc2QxMjhfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKEMpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19yYW5nZV9zZChXLCBVLCBBLCBCLCBDKSBfbW1fbWFza19yYW5nZV9yb3VuZF9zZChXLCBVLCBBLCBCLCBDICxfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2t6X3JhbmdlX3JvdW5kX3NkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yYW5nZXNkMTI4X3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKEMpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcmFuZ2Vfc2QoVSwgQSwgQiwgQykgX21tX21hc2t6X3JhbmdlX3JvdW5kX3NkKFUsIEEsIEIsIEMgLF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfcmVkdWNlX3BkKEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcmVkdWNlX3BkKFcsIFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JlZHVjZV9wZChVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7ICBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JlZHVjZV9wcyhBLCBCKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcmVkdWNlcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcmVkdWNlX3BzKFcsIFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgICBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcmVkdWNlcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcmVkdWNlX3BzKFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfcmVkdWNlX3JvdW5kX3BkKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcmVkdWNlX3JvdW5kX3BkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JlZHVjZV9yb3VuZF9wZChVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfcmVkdWNlX3JvdW5kX3BzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcmVkdWNlcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19yZWR1Y2Vfcm91bmRfcHMoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9yZWR1Y2VwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JlZHVjZV9yb3VuZF9wcyhVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9yZWR1Y2Vfc3MoQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JlZHVjZXNzX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKEMpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3JlZHVjZV9zcyhXLCBVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JlZHVjZXNzX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoQyksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JlZHVjZV9zcyhVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgIFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yZWR1Y2Vzc19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX3JlZHVjZV9yb3VuZF9zcyhBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcmVkdWNlc3NfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoQyksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19yZWR1Y2Vfcm91bmRfc3MoVywgVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyAgIFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yZWR1Y2Vzc19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoVyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKEMpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JlZHVjZV9yb3VuZF9zcyhVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgIFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yZWR1Y2Vzc19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoQyksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fcmVkdWNlX3NkKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgIFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcmVkdWNlc2RfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcmVkdWNlX3NkKFcsIFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXNkX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoQyksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JlZHVjZV9zZChVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgIFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcmVkdWNlc2RfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9yZWR1Y2Vfcm91bmRfc2QoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yZWR1Y2VzZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKEMpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcmVkdWNlX3JvdW5kX3NkKFcsIFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXNkX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoQyksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcmVkdWNlX3JvdW5kX3NkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yZWR1Y2VzZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShDKSwgKGludCkoUikpOyB9KQorICAgICAgICAgICAgICAgICAgICAgCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbW92ZXBpMzJfbWFzayAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tbWFzazE2KSBfX2J1aWx0aW5faWEzMl9jdnRkMm1hc2s1MTIgKChfX3YxNnNpKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21vdm1fZXBpMzIgKF9fbW1hc2sxNiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0bWFzazJkNTEyIChfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21vdm1fZXBpNjQgKF9fbW1hc2s4IF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRtYXNrMnE1MTIgKF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21vdmVwaTY0X21hc2sgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9jdnRxMm1hc2s1MTIgKChfX3Y4ZGkpIF9fQSk7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Jyb2FkY2FzdF9mMzJ4MiAoX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGYzMngyXzUxMl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3VuZGVmaW5lZF9wcygpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYnJvYWRjYXN0X2YzMngyIChfX201MTIgX19PLCBfX21tYXNrMTYgX19NLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjMyeDJfNTEyX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgICAgICBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9icm9hZGNhc3RfZjMyeDIgKF9fbW1hc2sxNiBfX00sIF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RmMzJ4Ml81MTJfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RfZjMyeDggKF9fbTI1NiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RmMzJ4OF81MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgIF9tbTUxMl91bmRlZmluZWRfcHMoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Jyb2FkY2FzdF9mMzJ4OCAoX19tNTEyIF9fTywgX19tbWFzazE2IF9fTSwgX19tMjU2IF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGYzMng4XzUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpX19PLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9icm9hZGNhc3RfZjMyeDggKF9fbW1hc2sxNiBfX00sIF9fbTI1NiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RmMzJ4OF81MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYnJvYWRjYXN0X2Y2NHgyIChfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RmNjR4Ml81MTJfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl91bmRlZmluZWRfcGQoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19icm9hZGNhc3RfZjY0eDIgKF9fbTUxMmQgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGY2NHgyXzUxMl9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgICAgIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9icm9hZGNhc3RfZjY0eDIgKF9fbW1hc2s4IF9fTSwgX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjY0eDJfNTEyX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RfaTMyeDIgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGkzMngyXzUxMl9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Jyb2FkY2FzdF9pMzJ4MiAoX19tNTEyaSBfX08sIF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGkzMngyXzUxMl9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICAgICBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYnJvYWRjYXN0X2kzMngyIChfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RpMzJ4Ml81MTJfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RfaTMyeDggKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGkzMng4XzUxMl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Jyb2FkY2FzdF9pMzJ4OCAoX19tNTEyaSBfX08sIF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGkzMng4XzUxMl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9fTywKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9icm9hZGNhc3RfaTMyeDggKF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGkzMng4XzUxMl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RfaTY0eDIgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGk2NHgyXzUxMl9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19icm9hZGNhc3RfaTY0eDIgKF9fbTUxMmkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGk2NHgyXzUxMl9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgICAgIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9icm9hZGNhc3RfaTY0eDIgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTY0eDJfNTEyX21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworI2RlZmluZSBfbW01MTJfZXh0cmFjdGYzMng4X3BzKEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2c2YpKF9fbTUxMikoQSksICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMSkgPyAgOCA6IDAsICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMSkgPyAgOSA6IDEsICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMSkgPyAxMCA6IDIsICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMSkgPyAxMSA6IDMsICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMSkgPyAxMiA6IDQsICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMSkgPyAxMyA6IDUsICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMSkgPyAxNCA6IDYsICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMSkgPyAxNSA6IDcpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2V4dHJhY3RmMzJ4OF9wcyhXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tNTEyX2V4dHJhY3RmMzJ4OF9wcygoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2V4dHJhY3RmMzJ4OF9wcyhVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tNTEyX2V4dHJhY3RmMzJ4OF9wcygoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9leHRyYWN0ZjY0eDJfcGQoQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhkZikoX19tNTEyZCkoQSksICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoaW1tKSAmIDB4MykgKiAyLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSArICgoaW1tKSAmIDB4MykgKiAyKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19leHRyYWN0ZjY0eDJfcGQoVywgVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMTI4KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW01MTJfZXh0cmFjdGY2NHgyX3BkKChBKSwgKGltbSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKFcpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZXh0cmFjdGY2NHgyX3BkKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCgoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tNTEyX2V4dHJhY3RmNjR4Ml9wZCgoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9leHRyYWN0aTMyeDhfZXBpMzIoQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl91bmRlZmluZWRfZXBpMzIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAxKSA/ICA4IDogMCwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMSkgPyAgOSA6IDEsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDEpID8gMTAgOiAyLCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAxKSA/IDExIDogMywgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMSkgPyAxMiA6IDQsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDEpID8gMTMgOiA1LCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAxKSA/IDE0IDogNiwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMSkgPyAxNSA6IDcpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2V4dHJhY3RpMzJ4OF9lcGkzMihXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tNTEyX2V4dHJhY3RpMzJ4OF9lcGkzMigoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2V4dHJhY3RpMzJ4OF9lcGkzMihVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tNTEyX2V4dHJhY3RpMzJ4OF9lcGkzMigoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9leHRyYWN0aTY0eDJfZXBpNjQoQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhkaSkoX19tNTEyaSkoQSksICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfdW5kZWZpbmVkX2VwaTMyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoaW1tKSAmIDB4MykgKiAyLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICsgKChpbW0pICYgMHgzKSAqIDIpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2V4dHJhY3RpNjR4Ml9lcGk2NChXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tNTEyX2V4dHJhY3RpNjR4Ml9lcGk2NCgoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2V4dHJhY3RpNjR4Ml9lcGk2NChVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tNTEyX2V4dHJhY3RpNjR4Ml9lcGk2NCgoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXR6ZXJvX2RpKCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9pbnNlcnRmMzJ4OChBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX2Nhc3RwczI1Nl9wczUxMigoX19tMjU2KShCKSksXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAgMCA6IDE2LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/ICAxIDogMTcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gIDIgOiAxOCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAgMyA6IDE5LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/ICA0IDogMjAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gIDUgOiAyMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAgNiA6IDIyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/ICA3IDogMjMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gMTYgOiAgOCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAxNyA6ICA5LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/IDE4IDogMTAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gMTkgOiAxMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAyMCA6IDEyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/IDIxIDogMTMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gMjIgOiAxNCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAyMyA6IDE1KTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pbnNlcnRmMzJ4OChXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX2luc2VydGYzMng4KChBKSwgKEIpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2luc2VydGYzMng4KFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfNTEyKChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfaW5zZXJ0ZjMyeDgoKEEpLCAoQiksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2luc2VydGY2NHgyKEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfY2FzdHBkMTI4X3BkNTEyKChfX20xMjhkKShCKSksXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGltbSkgJiAweDMpID09IDApID8gOCA6IDAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbW0pICYgMHgzKSA9PSAwKSA/IDkgOiAxLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMSkgPyA4IDogMiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGltbSkgJiAweDMpID09IDEpID8gOSA6IDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbW0pICYgMHgzKSA9PSAyKSA/IDggOiA0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMikgPyA5IDogNSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGltbSkgJiAweDMpID09IDMpID8gOCA6IDYsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbW0pICYgMHgzKSA9PSAzKSA/IDkgOiA3KTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pbnNlcnRmNjR4MihXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF81MTIoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX2luc2VydGY2NHgyKChBKSwgKEIpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2luc2VydGY2NHgyKFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfaW5zZXJ0ZjY0eDIoKEEpLCAoQiksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2luc2VydGkzMng4KEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnNpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX2Nhc3RzaTI1Nl9zaTUxMigoX19tMjU2aSkoQikpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAgMCA6IDE2LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gIDEgOiAxNywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/ICAyIDogMTgsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAgMyA6IDE5LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gIDQgOiAyMCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/ICA1IDogMjEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAgNiA6IDIyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gIDcgOiAyMywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/IDE2IDogIDgsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAxNyA6ICA5LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gMTggOiAxMCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/IDE5IDogMTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAyMCA6IDEyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gMjEgOiAxMywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/IDIyIDogMTQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAyMyA6IDE1KTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pbnNlcnRpMzJ4OChXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX2luc2VydGkzMng4KChBKSwgKEIpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2luc2VydGkzMng4KFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfNTEyKChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfaW5zZXJ0aTMyeDgoKEEpLCAoQiksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2luc2VydGk2NHgyKEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfY2FzdHNpMTI4X3NpNTEyKChfX20xMjhpKShCKSksXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGltbSkgJiAweDMpID09IDApID8gOCA6IDAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbW0pICYgMHgzKSA9PSAwKSA/IDkgOiAxLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMSkgPyA4IDogMiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGltbSkgJiAweDMpID09IDEpID8gOSA6IDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbW0pICYgMHgzKSA9PSAyKSA/IDggOiA0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMikgPyA5IDogNSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGltbSkgJiAweDMpID09IDMpID8gOCA6IDYsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbW0pICYgMHgzKSA9PSAzKSA/IDkgOiA3KTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pbnNlcnRpNjR4MihXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfaW5zZXJ0aTY0eDIoKEEpLCAoQiksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKFcpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfaW5zZXJ0aTY0eDIoVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX2luc2VydGk2NHgyKChBKSwgKEIpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2ZwY2xhc3NfcHNfbWFzayhVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2ZwY2xhc3NwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9mcGNsYXNzX3BzX21hc2soQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9mcGNsYXNzcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIChfX21tYXNrMTYpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2ZwY2xhc3NfcGRfbWFzayhVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfZnBjbGFzc3BkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9mcGNsYXNzX3BkX21hc2soQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2ZwY2xhc3NwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9mcGNsYXNzX3NkX21hc2soQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2ZwY2xhc3NzZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2ZwY2xhc3Nfc2RfbWFzayhVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfZnBjbGFzc3NkX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9mcGNsYXNzX3NzX21hc2soQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2ZwY2xhc3Nzc19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfZnBjbGFzc19zc19tYXNrKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9mcGNsYXNzc3NfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEyZXJpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEyZXJpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmYyMTJjCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hdng1MTJlcmludHJpbi5oCkBAIC0wLDAgKzEsMjg1IEBACisvKj09PS0tLS0gYXZ4NTEyZXJpbnRyaW4uaCAtIEFWWDUxMkVSIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEyZXJpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQVZYNTEyRVJJTlRSSU5fSAorI2RlZmluZSBfX0FWWDUxMkVSSU5UUklOX0gKKworLy8gZXhwMmEyMworI2RlZmluZSBfbW01MTJfZXhwMmEyM19yb3VuZF9wZChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZXhwMnBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2V4cDJhMjNfcm91bmRfcGQoUywgTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2V4cDJwZF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFMpLCAoX19tbWFzazgpKE0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZXhwMmEyM19yb3VuZF9wZChNLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZXhwMnBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfZXhwMmEyM19wZChBKSBcCisgIF9tbTUxMl9leHAyYTIzX3JvdW5kX3BkKChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2V4cDJhMjNfcGQoUywgTSwgQSkgXAorICBfbW01MTJfbWFza19leHAyYTIzX3JvdW5kX3BkKChTKSwgKE0pLCAoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfbWFza3pfZXhwMmEyM19wZChNLCBBKSBcCisgIF9tbTUxMl9tYXNrel9leHAyYTIzX3JvdW5kX3BkKChNKSwgKEEpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tNTEyX2V4cDJhMjNfcm91bmRfcHMoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZXhwMnBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2V4cDJhMjNfcm91bmRfcHMoUywgTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZXhwMnBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShTKSwgKF9fbW1hc2sxNikoTSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2V4cDJhMjNfcm91bmRfcHMoTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZXhwMnBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoTSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfZXhwMmEyM19wcyhBKSBcCisgIF9tbTUxMl9leHAyYTIzX3JvdW5kX3BzKChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2V4cDJhMjNfcHMoUywgTSwgQSkgXAorICBfbW01MTJfbWFza19leHAyYTIzX3JvdW5kX3BzKChTKSwgKE0pLCAoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfbWFza3pfZXhwMmEyM19wcyhNLCBBKSBcCisgIF9tbTUxMl9tYXNrel9leHAyYTIzX3JvdW5kX3BzKChNKSwgKEEpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKy8vIHJzcXJ0MjgKKyNkZWZpbmUgX21tNTEyX3JzcXJ0Mjhfcm91bmRfcGQoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JzcXJ0MjhwZF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19yc3FydDI4X3JvdW5kX3BkKFMsIE0sIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yc3FydDI4cGRfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShTKSwgKF9fbW1hc2s4KShNKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JzcXJ0Mjhfcm91bmRfcGQoTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JzcXJ0MjhwZF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JzcXJ0MjhfcGQoQSkgXAorICBfbW01MTJfcnNxcnQyOF9yb3VuZF9wZCgoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfbWFza19yc3FydDI4X3BkKFMsIE0sIEEpIFwKKyAgX21tNTEyX21hc2tfcnNxcnQyOF9yb3VuZF9wZCgoUyksIChNKSwgKEEpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JzcXJ0MjhfcGQoTSwgQSkgXAorICBfbW01MTJfbWFza3pfcnNxcnQyOF9yb3VuZF9wZCgoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9yc3FydDI4X3JvdW5kX3BzKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JzcXJ0Mjhwc19tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19yc3FydDI4X3JvdW5kX3BzKFMsIE0sIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JzcXJ0Mjhwc19tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoUyksIChfX21tYXNrMTYpKE0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yc3FydDI4X3JvdW5kX3BzKE0sIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JzcXJ0Mjhwc19tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKE0pLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JzcXJ0MjhfcHMoQSkgXAorICBfbW01MTJfcnNxcnQyOF9yb3VuZF9wcygoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfbWFza19yc3FydDI4X3BzKFMsIE0sIEEpIFwKKyAgX21tNTEyX21hc2tfcnNxcnQyOF9yb3VuZF9wcygoUyksIChNKSwgQSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yc3FydDI4X3BzKE0sIEEpIFwKKyAgX21tNTEyX21hc2t6X3JzcXJ0Mjhfcm91bmRfcHMoKE0pLCAoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fcnNxcnQyOF9yb3VuZF9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yc3FydDI4c3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3JzcXJ0Mjhfcm91bmRfc3MoUywgTSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcnNxcnQyOHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9yc3FydDI4X3JvdW5kX3NzKE0sIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JzcXJ0Mjhzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9yc3FydDI4X3NzKEEsIEIpIFwKKyAgX21tX3JzcXJ0Mjhfcm91bmRfc3MoKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fbWFza19yc3FydDI4X3NzKFMsIE0sIEEsIEIpIFwKKyAgX21tX21hc2tfcnNxcnQyOF9yb3VuZF9zcygoUyksIChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fbWFza3pfcnNxcnQyOF9zcyhNLCBBLCBCKSBcCisgIF9tbV9tYXNrel9yc3FydDI4X3JvdW5kX3NzKChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fcnNxcnQyOF9yb3VuZF9zZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcnNxcnQyOHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3JzcXJ0Mjhfcm91bmRfc2QoUywgTSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JzcXJ0MjhzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcnNxcnQyOF9yb3VuZF9zZChNLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcnNxcnQyOHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fcnNxcnQyOF9zZChBLCBCKSBcCisgIF9tbV9yc3FydDI4X3JvdW5kX3NkKChBKSwgKEIpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2tfcnNxcnQyOF9zZChTLCBNLCBBLCBCKSBcCisgIF9tbV9tYXNrX3JzcXJ0Mjhfcm91bmRfc2QoKFMpLCAoTSksIChBKSwgKEIpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2t6X3JzcXJ0Mjhfc2QoTSwgQSwgQikgXAorICBfbW1fbWFza3pfcnNxcnQyOF9yb3VuZF9zZCgoTSksIChBKSwgKEIpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKy8vIHJjcDI4CisjZGVmaW5lIF9tbTUxMl9yY3AyOF9yb3VuZF9wZChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcmNwMjhwZF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JjcDI4X3JvdW5kX3BkKFMsIE0sIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yY3AyOHBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFMpLCAoX19tbWFzazgpKE0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JjcDI4X3JvdW5kX3BkKE0sIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yY3AyOHBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9yY3AyOF9wZChBKSBcCisgIF9tbTUxMl9yY3AyOF9yb3VuZF9wZCgoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfbWFza19yY3AyOF9wZChTLCBNLCBBKSBcCisgIF9tbTUxMl9tYXNrX3JjcDI4X3JvdW5kX3BkKChTKSwgKE0pLCAoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfbWFza3pfcmNwMjhfcGQoTSwgQSkgXAorICBfbW01MTJfbWFza3pfcmNwMjhfcm91bmRfcGQoKE0pLCAoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfcmNwMjhfcm91bmRfcHMoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcmNwMjhwc19tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JjcDI4X3JvdW5kX3BzKFMsIE0sIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JjcDI4cHNfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShTKSwgKF9fbW1hc2sxNikoTSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yY3AyOF9yb3VuZF9wcyhNLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9yY3AyOHBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShNKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9yY3AyOF9wcyhBKSBcCisgIF9tbTUxMl9yY3AyOF9yb3VuZF9wcygoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfbWFza19yY3AyOF9wcyhTLCBNLCBBKSBcCisgIF9tbTUxMl9tYXNrX3JjcDI4X3JvdW5kX3BzKChTKSwgKE0pLCAoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfbWFza3pfcmNwMjhfcHMoTSwgQSkgXAorICBfbW01MTJfbWFza3pfcmNwMjhfcm91bmRfcHMoKE0pLCAoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fcmNwMjhfcm91bmRfc3MoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcmNwMjhzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcmNwMjhfcm91bmRfc3MoUywgTSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcmNwMjhzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcmNwMjhfcm91bmRfc3MoTSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcmNwMjhzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9yY3AyOF9zcyhBLCBCKSBcCisgIF9tbV9yY3AyOF9yb3VuZF9zcygoQSksIChCKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbV9tYXNrX3JjcDI4X3NzKFMsIE0sIEEsIEIpIFwKKyAgX21tX21hc2tfcmNwMjhfcm91bmRfc3MoKFMpLCAoTSksIChBKSwgKEIpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2t6X3JjcDI4X3NzKE0sIEEsIEIpIFwKKyAgX21tX21hc2t6X3JjcDI4X3JvdW5kX3NzKChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fcmNwMjhfcm91bmRfc2QoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JjcDI4c2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcmNwMjhfcm91bmRfc2QoUywgTSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JjcDI4c2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JjcDI4X3JvdW5kX3NkKE0sIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yY3AyOHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fcmNwMjhfc2QoQSwgQikgXAorICBfbW1fcmNwMjhfcm91bmRfc2QoKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fbWFza19yY3AyOF9zZChTLCBNLCBBLCBCKSBcCisgIF9tbV9tYXNrX3JjcDI4X3JvdW5kX3NkKChTKSwgKE0pLCAoQSksIChCKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbV9tYXNrel9yY3AyOF9zZChNLCBBLCBCKSBcCisgIF9tbV9tYXNrel9yY3AyOF9yb3VuZF9zZCgoTSksIChBKSwgKEIpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNlbmRpZiAvLyBfX0FWWDUxMkVSSU5UUklOX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEyZmludHJpbi5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hdng1MTJmaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJlMTA5YwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEyZmludHJpbi5oCkBAIC0wLDAgKzEsMTAyMzQgQEAKKy8qPT09LS0tLSBhdng1MTJmaW50cmluLmggLSBBVlg1MTJGIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxhdng1MTJmaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0FWWDUxMkZJTlRSSU5fSAorI2RlZmluZSBfX0FWWDUxMkZJTlRSSU5fSAorCit0eXBlZGVmIGNoYXIgX192NjRxaSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNjQpKSk7Cit0eXBlZGVmIHNob3J0IF9fdjMyaGkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDY0KSkpOwordHlwZWRlZiBkb3VibGUgX192OGRmIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg2NCkpKTsKK3R5cGVkZWYgZmxvYXQgX192MTZzZiBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNjQpKSk7Cit0eXBlZGVmIGxvbmcgbG9uZyBfX3Y4ZGkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDY0KSkpOwordHlwZWRlZiBpbnQgX192MTZzaSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNjQpKSk7CisKKy8qIFVuc2lnbmVkIHR5cGVzICovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX192NjRxdSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNjQpKSk7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdjMyaHUgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDY0KSkpOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX192OGR1IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg2NCkpKTsKK3R5cGVkZWYgdW5zaWduZWQgaW50IF9fdjE2c3UgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDY0KSkpOworCit0eXBlZGVmIGZsb2F0IF9fbTUxMiBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNjQpKSk7Cit0eXBlZGVmIGRvdWJsZSBfX201MTJkIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg2NCkpKTsKK3R5cGVkZWYgbG9uZyBsb25nIF9fbTUxMmkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDY0KSkpOworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX19tbWFzazg7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fbW1hc2sxNjsKKworLyogUm91bmRpbmcgbW9kZSBtYWNyb3MuICAqLworI2RlZmluZSBfTU1fRlJPVU5EX1RPX05FQVJFU1RfSU5UICAgMHgwMAorI2RlZmluZSBfTU1fRlJPVU5EX1RPX05FR19JTkYgICAgICAgMHgwMQorI2RlZmluZSBfTU1fRlJPVU5EX1RPX1BPU19JTkYgICAgICAgMHgwMgorI2RlZmluZSBfTU1fRlJPVU5EX1RPX1pFUk8gICAgICAgICAgMHgwMworI2RlZmluZSBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04gICAgMHgwNAorCisvKiBDb25zdGFudHMgZm9yIGludGVnZXIgY29tcGFyaXNvbiBwcmVkaWNhdGVzICovCit0eXBlZGVmIGVudW0geworICAgIF9NTV9DTVBJTlRfRVEsICAgICAgLyogRXF1YWwgKi8KKyAgICBfTU1fQ01QSU5UX0xULCAgICAgIC8qIExlc3MgdGhhbiAqLworICAgIF9NTV9DTVBJTlRfTEUsICAgICAgLyogTGVzcyB0aGFuIG9yIEVxdWFsICovCisgICAgX01NX0NNUElOVF9VTlVTRUQsCisgICAgX01NX0NNUElOVF9ORSwgICAgICAvKiBOb3QgRXF1YWwgKi8KKyAgICBfTU1fQ01QSU5UX05MVCwgICAgIC8qIE5vdCBMZXNzIHRoYW4gKi8KKyNkZWZpbmUgX01NX0NNUElOVF9HRSAgIF9NTV9DTVBJTlRfTkxUICAvKiBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgKi8KKyAgICBfTU1fQ01QSU5UX05MRSAgICAgIC8qIE5vdCBMZXNzIHRoYW4gb3IgRXF1YWwgKi8KKyNkZWZpbmUgX01NX0NNUElOVF9HVCAgIF9NTV9DTVBJTlRfTkxFICAvKiBHcmVhdGVyIHRoYW4gKi8KK30gX01NX0NNUElOVF9FTlVNOworCit0eXBlZGVmIGVudW0KK3sKKyAgX01NX1BFUk1fQUFBQSA9IDB4MDAsIF9NTV9QRVJNX0FBQUIgPSAweDAxLCBfTU1fUEVSTV9BQUFDID0gMHgwMiwKKyAgX01NX1BFUk1fQUFBRCA9IDB4MDMsIF9NTV9QRVJNX0FBQkEgPSAweDA0LCBfTU1fUEVSTV9BQUJCID0gMHgwNSwKKyAgX01NX1BFUk1fQUFCQyA9IDB4MDYsIF9NTV9QRVJNX0FBQkQgPSAweDA3LCBfTU1fUEVSTV9BQUNBID0gMHgwOCwKKyAgX01NX1BFUk1fQUFDQiA9IDB4MDksIF9NTV9QRVJNX0FBQ0MgPSAweDBBLCBfTU1fUEVSTV9BQUNEID0gMHgwQiwKKyAgX01NX1BFUk1fQUFEQSA9IDB4MEMsIF9NTV9QRVJNX0FBREIgPSAweDBELCBfTU1fUEVSTV9BQURDID0gMHgwRSwKKyAgX01NX1BFUk1fQUFERCA9IDB4MEYsIF9NTV9QRVJNX0FCQUEgPSAweDEwLCBfTU1fUEVSTV9BQkFCID0gMHgxMSwKKyAgX01NX1BFUk1fQUJBQyA9IDB4MTIsIF9NTV9QRVJNX0FCQUQgPSAweDEzLCBfTU1fUEVSTV9BQkJBID0gMHgxNCwKKyAgX01NX1BFUk1fQUJCQiA9IDB4MTUsIF9NTV9QRVJNX0FCQkMgPSAweDE2LCBfTU1fUEVSTV9BQkJEID0gMHgxNywKKyAgX01NX1BFUk1fQUJDQSA9IDB4MTgsIF9NTV9QRVJNX0FCQ0IgPSAweDE5LCBfTU1fUEVSTV9BQkNDID0gMHgxQSwKKyAgX01NX1BFUk1fQUJDRCA9IDB4MUIsIF9NTV9QRVJNX0FCREEgPSAweDFDLCBfTU1fUEVSTV9BQkRCID0gMHgxRCwKKyAgX01NX1BFUk1fQUJEQyA9IDB4MUUsIF9NTV9QRVJNX0FCREQgPSAweDFGLCBfTU1fUEVSTV9BQ0FBID0gMHgyMCwKKyAgX01NX1BFUk1fQUNBQiA9IDB4MjEsIF9NTV9QRVJNX0FDQUMgPSAweDIyLCBfTU1fUEVSTV9BQ0FEID0gMHgyMywKKyAgX01NX1BFUk1fQUNCQSA9IDB4MjQsIF9NTV9QRVJNX0FDQkIgPSAweDI1LCBfTU1fUEVSTV9BQ0JDID0gMHgyNiwKKyAgX01NX1BFUk1fQUNCRCA9IDB4MjcsIF9NTV9QRVJNX0FDQ0EgPSAweDI4LCBfTU1fUEVSTV9BQ0NCID0gMHgyOSwKKyAgX01NX1BFUk1fQUNDQyA9IDB4MkEsIF9NTV9QRVJNX0FDQ0QgPSAweDJCLCBfTU1fUEVSTV9BQ0RBID0gMHgyQywKKyAgX01NX1BFUk1fQUNEQiA9IDB4MkQsIF9NTV9QRVJNX0FDREMgPSAweDJFLCBfTU1fUEVSTV9BQ0REID0gMHgyRiwKKyAgX01NX1BFUk1fQURBQSA9IDB4MzAsIF9NTV9QRVJNX0FEQUIgPSAweDMxLCBfTU1fUEVSTV9BREFDID0gMHgzMiwKKyAgX01NX1BFUk1fQURBRCA9IDB4MzMsIF9NTV9QRVJNX0FEQkEgPSAweDM0LCBfTU1fUEVSTV9BREJCID0gMHgzNSwKKyAgX01NX1BFUk1fQURCQyA9IDB4MzYsIF9NTV9QRVJNX0FEQkQgPSAweDM3LCBfTU1fUEVSTV9BRENBID0gMHgzOCwKKyAgX01NX1BFUk1fQURDQiA9IDB4MzksIF9NTV9QRVJNX0FEQ0MgPSAweDNBLCBfTU1fUEVSTV9BRENEID0gMHgzQiwKKyAgX01NX1BFUk1fQUREQSA9IDB4M0MsIF9NTV9QRVJNX0FEREIgPSAweDNELCBfTU1fUEVSTV9BRERDID0gMHgzRSwKKyAgX01NX1BFUk1fQURERCA9IDB4M0YsIF9NTV9QRVJNX0JBQUEgPSAweDQwLCBfTU1fUEVSTV9CQUFCID0gMHg0MSwKKyAgX01NX1BFUk1fQkFBQyA9IDB4NDIsIF9NTV9QRVJNX0JBQUQgPSAweDQzLCBfTU1fUEVSTV9CQUJBID0gMHg0NCwKKyAgX01NX1BFUk1fQkFCQiA9IDB4NDUsIF9NTV9QRVJNX0JBQkMgPSAweDQ2LCBfTU1fUEVSTV9CQUJEID0gMHg0NywKKyAgX01NX1BFUk1fQkFDQSA9IDB4NDgsIF9NTV9QRVJNX0JBQ0IgPSAweDQ5LCBfTU1fUEVSTV9CQUNDID0gMHg0QSwKKyAgX01NX1BFUk1fQkFDRCA9IDB4NEIsIF9NTV9QRVJNX0JBREEgPSAweDRDLCBfTU1fUEVSTV9CQURCID0gMHg0RCwKKyAgX01NX1BFUk1fQkFEQyA9IDB4NEUsIF9NTV9QRVJNX0JBREQgPSAweDRGLCBfTU1fUEVSTV9CQkFBID0gMHg1MCwKKyAgX01NX1BFUk1fQkJBQiA9IDB4NTEsIF9NTV9QRVJNX0JCQUMgPSAweDUyLCBfTU1fUEVSTV9CQkFEID0gMHg1MywKKyAgX01NX1BFUk1fQkJCQSA9IDB4NTQsIF9NTV9QRVJNX0JCQkIgPSAweDU1LCBfTU1fUEVSTV9CQkJDID0gMHg1NiwKKyAgX01NX1BFUk1fQkJCRCA9IDB4NTcsIF9NTV9QRVJNX0JCQ0EgPSAweDU4LCBfTU1fUEVSTV9CQkNCID0gMHg1OSwKKyAgX01NX1BFUk1fQkJDQyA9IDB4NUEsIF9NTV9QRVJNX0JCQ0QgPSAweDVCLCBfTU1fUEVSTV9CQkRBID0gMHg1QywKKyAgX01NX1BFUk1fQkJEQiA9IDB4NUQsIF9NTV9QRVJNX0JCREMgPSAweDVFLCBfTU1fUEVSTV9CQkREID0gMHg1RiwKKyAgX01NX1BFUk1fQkNBQSA9IDB4NjAsIF9NTV9QRVJNX0JDQUIgPSAweDYxLCBfTU1fUEVSTV9CQ0FDID0gMHg2MiwKKyAgX01NX1BFUk1fQkNBRCA9IDB4NjMsIF9NTV9QRVJNX0JDQkEgPSAweDY0LCBfTU1fUEVSTV9CQ0JCID0gMHg2NSwKKyAgX01NX1BFUk1fQkNCQyA9IDB4NjYsIF9NTV9QRVJNX0JDQkQgPSAweDY3LCBfTU1fUEVSTV9CQ0NBID0gMHg2OCwKKyAgX01NX1BFUk1fQkNDQiA9IDB4NjksIF9NTV9QRVJNX0JDQ0MgPSAweDZBLCBfTU1fUEVSTV9CQ0NEID0gMHg2QiwKKyAgX01NX1BFUk1fQkNEQSA9IDB4NkMsIF9NTV9QRVJNX0JDREIgPSAweDZELCBfTU1fUEVSTV9CQ0RDID0gMHg2RSwKKyAgX01NX1BFUk1fQkNERCA9IDB4NkYsIF9NTV9QRVJNX0JEQUEgPSAweDcwLCBfTU1fUEVSTV9CREFCID0gMHg3MSwKKyAgX01NX1BFUk1fQkRBQyA9IDB4NzIsIF9NTV9QRVJNX0JEQUQgPSAweDczLCBfTU1fUEVSTV9CREJBID0gMHg3NCwKKyAgX01NX1BFUk1fQkRCQiA9IDB4NzUsIF9NTV9QRVJNX0JEQkMgPSAweDc2LCBfTU1fUEVSTV9CREJEID0gMHg3NywKKyAgX01NX1BFUk1fQkRDQSA9IDB4NzgsIF9NTV9QRVJNX0JEQ0IgPSAweDc5LCBfTU1fUEVSTV9CRENDID0gMHg3QSwKKyAgX01NX1BFUk1fQkRDRCA9IDB4N0IsIF9NTV9QRVJNX0JEREEgPSAweDdDLCBfTU1fUEVSTV9CRERCID0gMHg3RCwKKyAgX01NX1BFUk1fQkREQyA9IDB4N0UsIF9NTV9QRVJNX0JEREQgPSAweDdGLCBfTU1fUEVSTV9DQUFBID0gMHg4MCwKKyAgX01NX1BFUk1fQ0FBQiA9IDB4ODEsIF9NTV9QRVJNX0NBQUMgPSAweDgyLCBfTU1fUEVSTV9DQUFEID0gMHg4MywKKyAgX01NX1BFUk1fQ0FCQSA9IDB4ODQsIF9NTV9QRVJNX0NBQkIgPSAweDg1LCBfTU1fUEVSTV9DQUJDID0gMHg4NiwKKyAgX01NX1BFUk1fQ0FCRCA9IDB4ODcsIF9NTV9QRVJNX0NBQ0EgPSAweDg4LCBfTU1fUEVSTV9DQUNCID0gMHg4OSwKKyAgX01NX1BFUk1fQ0FDQyA9IDB4OEEsIF9NTV9QRVJNX0NBQ0QgPSAweDhCLCBfTU1fUEVSTV9DQURBID0gMHg4QywKKyAgX01NX1BFUk1fQ0FEQiA9IDB4OEQsIF9NTV9QRVJNX0NBREMgPSAweDhFLCBfTU1fUEVSTV9DQUREID0gMHg4RiwKKyAgX01NX1BFUk1fQ0JBQSA9IDB4OTAsIF9NTV9QRVJNX0NCQUIgPSAweDkxLCBfTU1fUEVSTV9DQkFDID0gMHg5MiwKKyAgX01NX1BFUk1fQ0JBRCA9IDB4OTMsIF9NTV9QRVJNX0NCQkEgPSAweDk0LCBfTU1fUEVSTV9DQkJCID0gMHg5NSwKKyAgX01NX1BFUk1fQ0JCQyA9IDB4OTYsIF9NTV9QRVJNX0NCQkQgPSAweDk3LCBfTU1fUEVSTV9DQkNBID0gMHg5OCwKKyAgX01NX1BFUk1fQ0JDQiA9IDB4OTksIF9NTV9QRVJNX0NCQ0MgPSAweDlBLCBfTU1fUEVSTV9DQkNEID0gMHg5QiwKKyAgX01NX1BFUk1fQ0JEQSA9IDB4OUMsIF9NTV9QRVJNX0NCREIgPSAweDlELCBfTU1fUEVSTV9DQkRDID0gMHg5RSwKKyAgX01NX1BFUk1fQ0JERCA9IDB4OUYsIF9NTV9QRVJNX0NDQUEgPSAweEEwLCBfTU1fUEVSTV9DQ0FCID0gMHhBMSwKKyAgX01NX1BFUk1fQ0NBQyA9IDB4QTIsIF9NTV9QRVJNX0NDQUQgPSAweEEzLCBfTU1fUEVSTV9DQ0JBID0gMHhBNCwKKyAgX01NX1BFUk1fQ0NCQiA9IDB4QTUsIF9NTV9QRVJNX0NDQkMgPSAweEE2LCBfTU1fUEVSTV9DQ0JEID0gMHhBNywKKyAgX01NX1BFUk1fQ0NDQSA9IDB4QTgsIF9NTV9QRVJNX0NDQ0IgPSAweEE5LCBfTU1fUEVSTV9DQ0NDID0gMHhBQSwKKyAgX01NX1BFUk1fQ0NDRCA9IDB4QUIsIF9NTV9QRVJNX0NDREEgPSAweEFDLCBfTU1fUEVSTV9DQ0RCID0gMHhBRCwKKyAgX01NX1BFUk1fQ0NEQyA9IDB4QUUsIF9NTV9QRVJNX0NDREQgPSAweEFGLCBfTU1fUEVSTV9DREFBID0gMHhCMCwKKyAgX01NX1BFUk1fQ0RBQiA9IDB4QjEsIF9NTV9QRVJNX0NEQUMgPSAweEIyLCBfTU1fUEVSTV9DREFEID0gMHhCMywKKyAgX01NX1BFUk1fQ0RCQSA9IDB4QjQsIF9NTV9QRVJNX0NEQkIgPSAweEI1LCBfTU1fUEVSTV9DREJDID0gMHhCNiwKKyAgX01NX1BFUk1fQ0RCRCA9IDB4QjcsIF9NTV9QRVJNX0NEQ0EgPSAweEI4LCBfTU1fUEVSTV9DRENCID0gMHhCOSwKKyAgX01NX1BFUk1fQ0RDQyA9IDB4QkEsIF9NTV9QRVJNX0NEQ0QgPSAweEJCLCBfTU1fUEVSTV9DRERBID0gMHhCQywKKyAgX01NX1BFUk1fQ0REQiA9IDB4QkQsIF9NTV9QRVJNX0NEREMgPSAweEJFLCBfTU1fUEVSTV9DREREID0gMHhCRiwKKyAgX01NX1BFUk1fREFBQSA9IDB4QzAsIF9NTV9QRVJNX0RBQUIgPSAweEMxLCBfTU1fUEVSTV9EQUFDID0gMHhDMiwKKyAgX01NX1BFUk1fREFBRCA9IDB4QzMsIF9NTV9QRVJNX0RBQkEgPSAweEM0LCBfTU1fUEVSTV9EQUJCID0gMHhDNSwKKyAgX01NX1BFUk1fREFCQyA9IDB4QzYsIF9NTV9QRVJNX0RBQkQgPSAweEM3LCBfTU1fUEVSTV9EQUNBID0gMHhDOCwKKyAgX01NX1BFUk1fREFDQiA9IDB4QzksIF9NTV9QRVJNX0RBQ0MgPSAweENBLCBfTU1fUEVSTV9EQUNEID0gMHhDQiwKKyAgX01NX1BFUk1fREFEQSA9IDB4Q0MsIF9NTV9QRVJNX0RBREIgPSAweENELCBfTU1fUEVSTV9EQURDID0gMHhDRSwKKyAgX01NX1BFUk1fREFERCA9IDB4Q0YsIF9NTV9QRVJNX0RCQUEgPSAweEQwLCBfTU1fUEVSTV9EQkFCID0gMHhEMSwKKyAgX01NX1BFUk1fREJBQyA9IDB4RDIsIF9NTV9QRVJNX0RCQUQgPSAweEQzLCBfTU1fUEVSTV9EQkJBID0gMHhENCwKKyAgX01NX1BFUk1fREJCQiA9IDB4RDUsIF9NTV9QRVJNX0RCQkMgPSAweEQ2LCBfTU1fUEVSTV9EQkJEID0gMHhENywKKyAgX01NX1BFUk1fREJDQSA9IDB4RDgsIF9NTV9QRVJNX0RCQ0IgPSAweEQ5LCBfTU1fUEVSTV9EQkNDID0gMHhEQSwKKyAgX01NX1BFUk1fREJDRCA9IDB4REIsIF9NTV9QRVJNX0RCREEgPSAweERDLCBfTU1fUEVSTV9EQkRCID0gMHhERCwKKyAgX01NX1BFUk1fREJEQyA9IDB4REUsIF9NTV9QRVJNX0RCREQgPSAweERGLCBfTU1fUEVSTV9EQ0FBID0gMHhFMCwKKyAgX01NX1BFUk1fRENBQiA9IDB4RTEsIF9NTV9QRVJNX0RDQUMgPSAweEUyLCBfTU1fUEVSTV9EQ0FEID0gMHhFMywKKyAgX01NX1BFUk1fRENCQSA9IDB4RTQsIF9NTV9QRVJNX0RDQkIgPSAweEU1LCBfTU1fUEVSTV9EQ0JDID0gMHhFNiwKKyAgX01NX1BFUk1fRENCRCA9IDB4RTcsIF9NTV9QRVJNX0RDQ0EgPSAweEU4LCBfTU1fUEVSTV9EQ0NCID0gMHhFOSwKKyAgX01NX1BFUk1fRENDQyA9IDB4RUEsIF9NTV9QRVJNX0RDQ0QgPSAweEVCLCBfTU1fUEVSTV9EQ0RBID0gMHhFQywKKyAgX01NX1BFUk1fRENEQiA9IDB4RUQsIF9NTV9QRVJNX0RDREMgPSAweEVFLCBfTU1fUEVSTV9EQ0REID0gMHhFRiwKKyAgX01NX1BFUk1fRERBQSA9IDB4RjAsIF9NTV9QRVJNX0REQUIgPSAweEYxLCBfTU1fUEVSTV9EREFDID0gMHhGMiwKKyAgX01NX1BFUk1fRERBRCA9IDB4RjMsIF9NTV9QRVJNX0REQkEgPSAweEY0LCBfTU1fUEVSTV9EREJCID0gMHhGNSwKKyAgX01NX1BFUk1fRERCQyA9IDB4RjYsIF9NTV9QRVJNX0REQkQgPSAweEY3LCBfTU1fUEVSTV9ERENBID0gMHhGOCwKKyAgX01NX1BFUk1fRERDQiA9IDB4RjksIF9NTV9QRVJNX0REQ0MgPSAweEZBLCBfTU1fUEVSTV9ERENEID0gMHhGQiwKKyAgX01NX1BFUk1fREREQSA9IDB4RkMsIF9NTV9QRVJNX0REREIgPSAweEZELCBfTU1fUEVSTV9ERERDID0gMHhGRSwKKyAgX01NX1BFUk1fRERERCA9IDB4RkYKK30gX01NX1BFUk1fRU5VTTsKKwordHlwZWRlZiBlbnVtCit7CisgIF9NTV9NQU5UX05PUk1fMV8yLCAgICAvKiBpbnRlcnZhbCBbMSwgMikgICAgICAqLworICBfTU1fTUFOVF9OT1JNX3A1XzIsICAgLyogaW50ZXJ2YWwgWzAuNSwgMikgICAgKi8KKyAgX01NX01BTlRfTk9STV9wNV8xLCAgIC8qIGludGVydmFsIFswLjUsIDEpICAgICovCisgIF9NTV9NQU5UX05PUk1fcDc1XzFwNSAgIC8qIGludGVydmFsIFswLjc1LCAxLjUpICovCit9IF9NTV9NQU5USVNTQV9OT1JNX0VOVU07CisKK3R5cGVkZWYgZW51bQoreworICBfTU1fTUFOVF9TSUdOX3NyYywgICAgLyogc2lnbiA9IHNpZ24oU1JDKSAgICAgKi8KKyAgX01NX01BTlRfU0lHTl96ZXJvLCAgIC8qIHNpZ24gPSAwICAgICAgICAgICAgICovCisgIF9NTV9NQU5UX1NJR05fbmFuICAgLyogREVTVCA9IE5hTiBpZiBzaWduKFNSQykgPSAxICovCit9IF9NTV9NQU5USVNTQV9TSUdOX0VOVU07CisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEyZiIpKSkKKworLyogQ3JlYXRlIHZlY3RvcnMgd2l0aCByZXBlYXRlZCBlbGVtZW50cyAqLworCitzdGF0aWMgIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0emVyb19zaTUxMih2b2lkKQoreworICByZXR1cm4gKF9fbTUxMmkpKF9fdjhkaSl7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKK30KKworI2RlZmluZSBfbW01MTJfc2V0emVyb19lcGkzMiBfbW01MTJfc2V0emVyb19zaTUxMgorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3VuZGVmaW5lZF9wZCh2b2lkKQoreworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdW5kZWY1MTIoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3VuZGVmaW5lZCh2b2lkKQoreworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5faWEzMl91bmRlZjUxMigpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5kZWZpbmVkX3BzKHZvaWQpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3VuZGVmNTEyKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5kZWZpbmVkX2VwaTMyKHZvaWQpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl91bmRlZjUxMigpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Jyb2FkY2FzdGRfZXBpMzIgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Jyb2FkY2FzdGRfZXBpMzIgKF9fbTUxMmkgX19PLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfNTEyKF9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfYnJvYWRjYXN0ZF9lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fTyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYnJvYWRjYXN0ZF9lcGkzMiAoX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX2Jyb2FkY2FzdGRfZXBpMzIoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfc2V0emVyb19zaTUxMigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RxX2VwaTY0IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYnJvYWRjYXN0cV9lcGk2NCAoX19tNTEyaSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfYnJvYWRjYXN0cV9lcGk2NChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19PKTsKKworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2Jyb2FkY2FzdHFfZXBpNjQgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfYnJvYWRjYXN0cV9lcGk2NChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NldDFfZXBpMzIoX19tbWFzazE2IF9fTSwgaW50IF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0ZDUxMl9ncHJfbWFzayAoX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NldDFfZXBpNjQoX19tbWFzazggX19NLCBsb25nIGxvbmcgX19BKQoreworI2lmZGVmIF9feDg2XzY0X18KKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0cTUxMl9ncHJfbWFzayAoX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKKyNlbHNlCisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdHE1MTJfbWVtX21hc2sgKF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgIF9fTSk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zZXR6ZXJvX3BzKHZvaWQpCit7CisgIHJldHVybiAoX19tNTEyKXsgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsCisgICAgICAgICAgICAgICAgICAgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAgfTsKK30KKworI2RlZmluZSBfbW01MTJfc2V0emVybyBfbW01MTJfc2V0emVyb19wcworCitzdGF0aWMgIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0emVyb19wZCh2b2lkKQoreworICByZXR1cm4gKF9fbTUxMmQpeyAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NldDFfcHMoZmxvYXQgX193KQoreworICByZXR1cm4gKF9fbTUxMil7IF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LAorICAgICAgICAgICAgICAgICAgIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193ICB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zZXQxX3BkKGRvdWJsZSBfX3cpCit7CisgIHJldHVybiAoX19tNTEyZCl7IF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193IH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NldDFfZXBpOChjaGFyIF9fdykKK3sKKyAgcmV0dXJuIChfX201MTJpKShfX3Y2NHFpKXsgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193ICB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zZXQxX2VwaTE2KHNob3J0IF9fdykKK3sKKyAgcmV0dXJuIChfX201MTJpKShfX3YzMmhpKXsgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3cgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0MV9lcGkzMihpbnQgX19zKQoreworICByZXR1cm4gKF9fbTUxMmkpKF9fdjE2c2kpeyBfX3MsIF9fcywgX19zLCBfX3MsIF9fcywgX19zLCBfX3MsIF9fcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3MsIF9fcywgX19zLCBfX3MsIF9fcywgX19zLCBfX3MgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0MV9lcGk2NChsb25nIGxvbmcgX19kKQoreworICByZXR1cm4gKF9fbTUxMmkpKF9fdjhkaSl7IF9fZCwgX19kLCBfX2QsIF9fZCwgX19kLCBfX2QsIF9fZCwgX19kIH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3Rzc19wcyhfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3VuZGVmaW5lZF9wcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0NF9lcGkzMiAoaW50IF9fQSwgaW50IF9fQiwgaW50IF9fQywgaW50IF9fRCkKK3sKKyAgcmV0dXJuICAoX19tNTEyaSkoX192MTZzaSkKKyAgIHsgX19ELCBfX0MsIF9fQiwgX19BLCBfX0QsIF9fQywgX19CLCBfX0EsCisgICAgIF9fRCwgX19DLCBfX0IsIF9fQSwgX19ELCBfX0MsIF9fQiwgX19BIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NldDRfZXBpNjQgKGxvbmcgbG9uZyBfX0EsIGxvbmcgbG9uZyBfX0IsIGxvbmcgbG9uZyBfX0MsCisgICAgICAgbG9uZyBsb25nIF9fRCkKK3sKKyAgcmV0dXJuICAoX19tNTEyaSkgKF9fdjhkaSkKKyAgIHsgX19ELCBfX0MsIF9fQiwgX19BLCBfX0QsIF9fQywgX19CLCBfX0EgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0NF9wZCAoZG91YmxlIF9fQSwgZG91YmxlIF9fQiwgZG91YmxlIF9fQywgZG91YmxlIF9fRCkKK3sKKyAgcmV0dXJuICAoX19tNTEyZCkKKyAgIHsgX19ELCBfX0MsIF9fQiwgX19BLCBfX0QsIF9fQywgX19CLCBfX0EgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zZXQ0X3BzIChmbG9hdCBfX0EsIGZsb2F0IF9fQiwgZmxvYXQgX19DLCBmbG9hdCBfX0QpCit7CisgIHJldHVybiAgKF9fbTUxMikKKyAgIHsgX19ELCBfX0MsIF9fQiwgX19BLCBfX0QsIF9fQywgX19CLCBfX0EsCisgICAgIF9fRCwgX19DLCBfX0IsIF9fQSwgX19ELCBfX0MsIF9fQiwgX19BIH07Cit9CisKKyNkZWZpbmUgX21tNTEyX3NldHI0X2VwaTMyKGUwLGUxLGUyLGUzKSAgICAgICAgICAgICAgIFwKKyAgX21tNTEyX3NldDRfZXBpMzIoKGUzKSwoZTIpLChlMSksKGUwKSkKKworI2RlZmluZSBfbW01MTJfc2V0cjRfZXBpNjQoZTAsZTEsZTIsZTMpICAgICAgICAgICAgICAgXAorICBfbW01MTJfc2V0NF9lcGk2NCgoZTMpLChlMiksKGUxKSwoZTApKQorCisjZGVmaW5lIF9tbTUxMl9zZXRyNF9wZChlMCxlMSxlMixlMykgICAgICAgICAgICAgICAgXAorICBfbW01MTJfc2V0NF9wZCgoZTMpLChlMiksKGUxKSwoZTApKQorCisjZGVmaW5lIF9tbTUxMl9zZXRyNF9wcyhlMCxlMSxlMixlMykgICAgICAgICAgICAgICAgXAorICBfbW01MTJfc2V0NF9wcygoZTMpLChlMiksKGUxKSwoZTApKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Jyb2FkY2FzdHNkX3BkKF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX21tX3VuZGVmaW5lZF9wZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7Cit9CisKKy8qIENhc3QgYmV0d2VlbiB2ZWN0b3IgdHlwZXMgKi8KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY2FzdHBkMjU2X3BkNTEyKF9fbTI1NmQgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDAsIDEsIDIsIDMsIC0xLCAtMSwgLTEsIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jYXN0cHMyNTZfcHM1MTIoX19tMjU2IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAwLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Nhc3RwZDUxMl9wZDEyOChfX201MTJkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAwLCAxKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY2FzdHBkNTEyX3BkMjU2IChfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fQSwgX19BLCAwLCAxLCAyLCAzKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jYXN0cHM1MTJfcHMxMjgoX19tNTEyIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAwLCAxLCAyLCAzKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jYXN0cHM1MTJfcHMyNTYgKF9fbTUxMiBfX0EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX0EsIF9fQSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY2FzdHBkX3BzIChfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIChfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jYXN0cGRfc2k1MTIgKF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIChfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Nhc3RwZDEyOF9wZDUxMiAoX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggX19BLCBfX0EsIDAsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jYXN0cHNfcGQgKF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgKF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Nhc3Rwc19zaTUxMiAoX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSAoX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Nhc3RwczEyOF9wczUxMiAoX19tMTI4IF9fQSkKK3sKKyAgICByZXR1cm4gIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCBfX0EsIF9fQSwgMCwgMSwgMiwgMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY2FzdHNpMTI4X3NpNTEyIChfX20xMjhpIF9fQSkKK3sKKyAgIHJldHVybiAgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoIF9fQSwgX19BLCAwLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jYXN0c2kyNTZfc2k1MTIgKF9fbTI1NmkgX19BKQoreworICAgcmV0dXJuICBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggX19BLCBfX0EsIDAsIDEsIDIsIDMsIC0xLCAtMSwgLTEsIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jYXN0c2k1MTJfcHMgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgKF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Nhc3RzaTUxMl9wZCAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgKF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Nhc3RzaTUxMl9zaTEyOCAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX0EsIF9fQSAsIDAsIDEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jYXN0c2k1MTJfc2kyNTYgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19BLCBfX0EgLCAwLCAxLCAyLCAzKTsKK30KKworLyogQml0d2lzZSBvcGVyYXRvcnMgKi8KK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYW5kX2VwaTMyKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJpKSgoX192MTZzdSlfX2EgJiAoX192MTZzdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYW5kX2VwaTMyKF9fbTUxMmkgX19zcmMsIF9fbW1hc2sxNiBfX2ssIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfNTEyKChfX21tYXNrMTYpX19rLAorICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfYW5kX2VwaTMyKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAoX192MTZzaSkgX19zcmMpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2FuZF9lcGkzMihfX21tYXNrMTYgX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX21tNTEyX21hc2tfYW5kX2VwaTMyKF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ssIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hbmRfZXBpNjQoX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpKChfX3Y4ZHUpX19hICYgKF9fdjhkdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYW5kX2VwaTY0KF9fbTUxMmkgX19zcmMsIF9fbW1hc2s4IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICAgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIgKChfX21tYXNrOCkgX19rLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9hbmRfZXBpNjQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fc3JjKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hbmRfZXBpNjQoX19tbWFzazggX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX21tNTEyX21hc2tfYW5kX2VwaTY0KF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ssIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hbmRub3Rfc2k1MTIgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSh+KF9fdjhkdSkoX19BKSAmIChfX3Y4ZHUpX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hbmRub3RfZXBpMzIgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSh+KF9fdjE2c3UpKF9fQSkgJiAoX192MTZzdSlfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYW5kbm90X2VwaTMyKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX2FuZG5vdF9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYW5kbm90X2VwaTMyKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKV9tbTUxMl9tYXNrX2FuZG5vdF9lcGkzMihfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVSwgX19BLCBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FuZG5vdF9lcGk2NChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkofihfX3Y4ZHUpKF9fQSkgJiAoX192OGR1KV9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hbmRub3RfZXBpNjQoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX2FuZG5vdF9lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYW5kbm90X2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpX21tNTEyX21hc2tfYW5kbm90X2VwaTY0KF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19VLCBfX0EsIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfb3JfZXBpMzIoX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpKChfX3YxNnN1KV9fYSB8IChfX3YxNnN1KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19vcl9lcGkzMihfX201MTJpIF9fc3JjLCBfX21tYXNrMTYgX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KV9faywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9vcl9lcGkzMihfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfX3NyYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfb3JfZXBpMzIoX19tbWFzazE2IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpX21tNTEyX21hc2tfb3JfZXBpMzIoX21tNTEyX3NldHplcm9fc2k1MTIoKSwgX19rLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfb3JfZXBpNjQoX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpKChfX3Y4ZHUpX19hIHwgKF9fdjhkdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfb3JfZXBpNjQoX19tNTEyaSBfX3NyYywgX19tbWFzazggX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMigoX19tbWFzazgpX19rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfb3JfZXBpNjQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfX3NyYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfb3JfZXBpNjQoX19tbWFzazggX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSlfbW01MTJfbWFza19vcl9lcGk2NChfbW01MTJfc2V0emVyb19zaTUxMigpLCBfX2ssIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl94b3JfZXBpMzIoX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpKChfX3YxNnN1KV9fYSBeIChfX3YxNnN1KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza194b3JfZXBpMzIoX19tNTEyaSBfX3NyYywgX19tbWFzazE2IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF81MTIoKF9fbW1hc2sxNilfX2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl94b3JfZXBpMzIoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfX3NyYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfeG9yX2VwaTMyKF9fbW1hc2sxNiBfX2ssIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJpKV9tbTUxMl9tYXNrX3hvcl9lcGkzMihfbW01MTJfc2V0emVyb19zaTUxMigpLCBfX2ssIF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl94b3JfZXBpNjQoX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpKChfX3Y4ZHUpX19hIF4gKF9fdjhkdSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfeG9yX2VwaTY0KF9fbTUxMmkgX19zcmMsIF9fbW1hc2s4IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIoKF9fbW1hc2s4KV9faywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3hvcl9lcGk2NChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9fc3JjKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel94b3JfZXBpNjQoX19tbWFzazggX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSlfbW01MTJfbWFza194b3JfZXBpNjQoX21tNTEyX3NldHplcm9fc2k1MTIoKSwgX19rLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYW5kX3NpNTEyKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJpKSgoX192OGR1KV9fYSAmIChfX3Y4ZHUpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9vcl9zaTUxMihfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSkoKF9fdjhkdSlfX2EgfCAoX192OGR1KV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfeG9yX3NpNTEyKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJpKSgoX192OGR1KV9fYSBeIChfX3Y4ZHUpX19iKTsKK30KKworLyogQXJpdGhtZXRpYyAqLworCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hZGRfcGQoX19tNTEyZCBfX2EsIF9fbTUxMmQgX19iKQoreworICByZXR1cm4gKF9fbTUxMmQpKChfX3Y4ZGYpX19hICsgKF9fdjhkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FkZF9wcyhfX201MTIgX19hLCBfX201MTIgX19iKQoreworICByZXR1cm4gKF9fbTUxMikoKF9fdjE2c2YpX19hICsgKF9fdjE2c2YpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbXVsX3BkKF9fbTUxMmQgX19hLCBfX201MTJkIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJkKSgoX192OGRmKV9fYSAqIChfX3Y4ZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tdWxfcHMoX19tNTEyIF9fYSwgX19tNTEyIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTIpKChfX3YxNnNmKV9fYSAqIChfX3YxNnNmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N1Yl9wZChfX201MTJkIF9fYSwgX19tNTEyZCBfX2IpCit7CisgIHJldHVybiAoX19tNTEyZCkoKF9fdjhkZilfX2EgLSAoX192OGRmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3ViX3BzKF9fbTUxMiBfX2EsIF9fbTUxMiBfX2IpCit7CisgIHJldHVybiAoX19tNTEyKSgoX192MTZzZilfX2EgLSAoX192MTZzZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FkZF9lcGk2NCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpICgoX192OGR1KSBfX0EgKyAoX192OGR1KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYWRkX2VwaTY0KF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9hZGRfZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2FkZF9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9hZGRfZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zdWJfZXBpNjQgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSAoKF9fdjhkdSkgX19BIC0gKF9fdjhkdSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N1Yl9lcGk2NChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc3ViX2VwaTY0KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zdWJfZXBpNjQoX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc3ViX2VwaTY0KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYWRkX2VwaTMyIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgKChfX3YxNnN1KSBfX0EgKyAoX192MTZzdSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FkZF9lcGkzMihfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF81MTIoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfYWRkX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYWRkX2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9hZGRfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3ViX2VwaTMyIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgKChfX3YxNnN1KSBfX0EgLSAoX192MTZzdSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N1Yl9lcGkzMihfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF81MTIoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc3ViX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3ViX2VwaTMyKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfNTEyKChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3N1Yl9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpKTsKK30KKworI2RlZmluZSBfbW01MTJfbWFza19tYXhfcm91bmRfcGQoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX21heHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9tYXhfcm91bmRfcGQoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX21heHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWF4X3JvdW5kX3BkKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9tYXhwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl91bmRlZmluZWRfcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXhfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX21heHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tYXhfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9tYXhwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWF4X3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9tYXhwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX21hc2tfbWF4X3JvdW5kX3BzKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX21heHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShXKSwgKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfbWF4X3JvdW5kX3BzKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX21heHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXhfcm91bmRfcHMoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfbWF4cHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl91bmRlZmluZWRfcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21heF9wcyhfX201MTIgX19BLCBfX201MTIgX19CKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfbWF4cHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsCisgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tYXhfcHMgKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9tYXhwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tYXhfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9tYXhwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWF4X3NzKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSxfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9tYXhzc19yb3VuZF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWF4X3NzKF9fbW1hc2s4IF9fVSxfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9tYXhzc19yb3VuZF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXhfcm91bmRfc3MoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfbWF4c3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX21heF9yb3VuZF9zcyhXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9tYXhzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoVyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfbWF4X3JvdW5kX3NzKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX21heHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYXhfc2QoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSxfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9tYXhzZF9yb3VuZF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21heF9zZChfX21tYXNrOCBfX1UsX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbWF4c2Rfcm91bmRfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWF4X3JvdW5kX3NkKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9tYXhzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19tYXhfcm91bmRfc2QoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX21heHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9tYXhfcm91bmRfc2QoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX21heHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkKK19fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21heF9lcGkzMihfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHNkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWF4X2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tYXhfZXBpMzIgKF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2Q1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21heF9lcHUzMihfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHVkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWF4X2VwdTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1ZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tYXhfZXB1MzIgKF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4dWQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21heF9lcGk2NChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHNxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tYXhfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4c3E1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWF4X2VwaTY0IChfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4c3E1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21heF9lcHU2NChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHVxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tYXhfZXB1NjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWF4X2VwdTY0IChfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKKyNkZWZpbmUgX21tNTEyX21hc2tfbWluX3JvdW5kX3BkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9taW5wZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfbWluX3JvdW5kX3BkKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9taW5wZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21pbl9yb3VuZF9wZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfbWlucGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworc3RhdGljICBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWluX3BkKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9taW5wZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWluX3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbWlucGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX21pbl9yb3VuZF9wcyhXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9taW5wczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVyksIChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X21pbl9yb3VuZF9wcyhVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9taW5wczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWluX3JvdW5kX3BzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX21pbnBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9taW5fcGQgKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX21pbnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljICBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9taW5fcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX21pbnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAorICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWluX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfbWlucHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWluX3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfbWlucHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21pbl9zcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbWluc3Nfcm91bmRfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21pbl9zcyhfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbWluc3Nfcm91bmRfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NHNmKSAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWluX3JvdW5kX3NzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX21pbnNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19taW5fcm91bmRfc3MoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfbWluc3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X21pbl9yb3VuZF9zcyhVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9taW5zc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWluX3NkKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbWluc2Rfcm91bmRfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9taW5fc2QoX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21pbnNkX3JvdW5kX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21pbl9yb3VuZF9zZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfbWluc2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfbWluX3JvdW5kX3NkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9taW5zZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfbWluX3JvdW5kX3NkKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9taW5zZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpCitfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9taW5fZXBpMzIoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21pbl9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWluc2Q1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWluX2VwaTMyIChfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnNkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9taW5fZXB1MzIoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51ZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21pbl9lcHUzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWludWQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWluX2VwdTMyIChfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnVkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9taW5fZXBpNjQoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zcTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWluX2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnNxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21pbl9lcGk2NCAoX19tbWFzazggX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnNxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9taW5fZXB1NjQoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51cTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWluX2VwdTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnVxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21pbl9lcHU2NCAoX19tbWFzazggX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnVxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tdWxfZXBpMzIoX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxkcTUxMl9tYXNrICgoX192MTZzaSkgX19YLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19ZLAorICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbXVsX2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazggX19NLCBfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGRxNTEyX21hc2sgKChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbXVsX2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsZHE1MTJfbWFzayAoKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX211bF9lcHUzMihfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bHVkcTUxMl9tYXNrICgoX192MTZzaSkgX19YLAorICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWSwKKyAgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX211bF9lcHUzMiAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWx1ZHE1MTJfbWFzayAoKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgICAoX192OGRpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X211bF9lcHUzMiAoX19tbWFzazggX19NLCBfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bHVkcTUxMl9tYXNrICgoX192MTZzaSkgX19YLAorICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWSwKKyAgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX211bGxvX2VwaTMyIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgKChfX3YxNnN1KSBfX0EgKiAoX192MTZzdSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbXVsbG9fZXBpMzIoX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF81MTIoKF9fbW1hc2sxNilfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfbXVsbG9fZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbXVsbG9fZXBpMzIoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfNTEyKChfX21tYXNrMTYpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX211bGxvX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9fVyk7Cit9CisKKyNkZWZpbmUgX21tNTEyX21hc2tfc3FydF9yb3VuZF9wZChXLCBVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc3FydHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoVyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9zcXJ0X3JvdW5kX3BkKFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zcXJ0cGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9zcXJ0X3JvdW5kX3BkKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zcXJ0cGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl91bmRlZmluZWRfcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworc3RhdGljICBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3FydF9wZChfX201MTJkIF9fYSkKK3sKKyAgcmV0dXJuIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NxcnRwZDUxMl9tYXNrKChfX3Y4ZGYpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NxcnRfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3NxcnRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3FydF9wZCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9zcXJ0cGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfbWFza19zcXJ0X3JvdW5kX3BzKFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NxcnRwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVyksIChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9zcXJ0X3JvdW5kX3BzKFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NxcnRwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3NxcnRfcm91bmRfcHMoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfc3FydHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyAgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3FydF9wcyhfX201MTIgX19hKQoreworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zcXJ0cHM1MTJfbWFzaygoX192MTZzZilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyAgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zcXJ0X3BzKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NxcnRwczUxMl9tYXNrKChfX3YxNnNmKV9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NxcnRfcHMoIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NxcnRwczUxMl9tYXNrKChfX3YxNnNmKV9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyAgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3JzcXJ0MTRfcGQoX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcnNxcnQxNHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpO30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3JzcXJ0MTRfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcnNxcnQxNF9wZCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9yc3FydDE0cGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3JzcXJ0MTRfcHMoX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcnNxcnQxNF9wcyAoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcnNxcnQxNF9wcyAoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyAgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcnNxcnQxNF9zcyhfX20xMjggX19BLCBfX20xMjggX19CKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfcnNxcnQxNHNzX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcnNxcnQxNF9zcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9yc3FydDE0c3NfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcnNxcnQxNF9zcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9yc3FydDE0c3NfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyAgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3JzcXJ0MTRfc2QoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRzZF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcnNxcnQxNF9zZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQoreworIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcnNxcnQxNHNkX21hc2sgKCAoX192MmRmKSBfX0EsCisgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcnNxcnQxNF9zZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCit7CisgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9yc3FydDE0c2RfbWFzayAoIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9yY3AxNF9wZChfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9yY3AxNHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcmNwMTRfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JjcDE0cGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcmNwMTRfcGQgKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcmNwMTRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyAgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcmNwMTRfcHMoX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3JjcDE0cHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3JjcDE0X3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfcmNwMTRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3JjcDE0X3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfcmNwMTRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyAgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcmNwMTRfc3MoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JjcDE0c3NfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcmNwMTRfc3MgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikKK3sKKyByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfcmNwMTRzc19tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9yY3AxNF9zcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9yY3AxNHNzX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9yY3AxNF9zZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcmNwMTRzZF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3JjcDE0X3NkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCit7CisgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9yY3AxNHNkX21hc2sgKCAoX192MmRmKSBfX0EsCisgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcmNwMTRfc2QgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQoreworIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcmNwMTRzZF9tYXNrICggKF9fdjJkZikgX19BLAorICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZmxvb3JfcHMoX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9GTE9PUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQSwgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Zsb29yX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfcm5kc2NhbGVwc19tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfRkxPT1IsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywgX19VLAorICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Zsb29yX3BkKF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcGRfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9GTE9PUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQSwgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZmxvb3JfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcGRfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfRkxPT1IsCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLCBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY2VpbF9wcyAoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NFSUwsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywgX19VLAorICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY2VpbF9wcyhfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfcm5kc2NhbGVwc19tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NFSUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0EsIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jZWlsX3BkKF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcGRfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DRUlMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19BLCAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jZWlsX3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NFSUwsCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLCBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYWJzX2VwaTY0KF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhYnNxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYWJzX2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWJzcTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYWJzX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhYnNxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYWJzX2VwaTMyKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhYnNkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYWJzX2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFic2Q1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2Fic19lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFic2Q1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hZGRfc3MoX19tMTI4IF9fVywgX19tbWFzazggX19VLF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2FkZHNzX3JvdW5kX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hZGRfc3MoX19tbWFzazggX19VLF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2FkZHNzX3JvdW5kX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX2FkZF9yb3VuZF9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9hZGRzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfYWRkX3JvdW5kX3NzKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2FkZHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9hZGRfcm91bmRfc3MoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfYWRkc3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FkZF9zZChfX20xMjhkIF9fVywgX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2FkZHNkX3JvdW5kX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWRkX3NkKF9fbW1hc2s4IF9fVSxfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9hZGRzZF9yb3VuZF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorI2RlZmluZSBfbW1fYWRkX3JvdW5kX3NkKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9hZGRzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19hZGRfcm91bmRfc2QoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2FkZHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9hZGRfcm91bmRfc2QoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2FkZHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FkZF9wZChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX2FkZF9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2FkZF9wZChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfYWRkX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hZGRfcHMoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc181MTIoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfYWRkX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hZGRfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc181MTIoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfYWRkX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCkpOworfQorCisjZGVmaW5lIF9tbTUxMl9hZGRfcm91bmRfcGQoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2FkZHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2FkZF9yb3VuZF9wZChXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfYWRkcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoVyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2FkZF9yb3VuZF9wZChVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfYWRkcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9hZGRfcm91bmRfcHMoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfYWRkcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19hZGRfcm91bmRfcHMoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfYWRkcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFcpLCAoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9hZGRfcm91bmRfcHMoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfYWRkcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N1Yl9zcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc3Vic3Nfcm91bmRfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3N1Yl9zcyhfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc3Vic3Nfcm91bmRfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NHNmKSAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKyNkZWZpbmUgX21tX3N1Yl9yb3VuZF9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zdWJzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfc3ViX3JvdW5kX3NzKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3N1YnNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9zdWJfcm91bmRfc3MoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfc3Vic3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N1Yl9zZChfX20xMjhkIF9fVywgX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3N1YnNkX3JvdW5kX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3ViX3NkKF9fbW1hc2s4IF9fVSxfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zdWJzZF9yb3VuZF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9zdWJfcm91bmRfc2QoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3N1YnNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3N1Yl9yb3VuZF9zZChXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc3Vic2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3N1Yl9yb3VuZF9zZChVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc3Vic2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3ViX3BkKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc3ViX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF81MTIoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zdWJfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N1Yl9wcyhfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zdWJfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3N1Yl9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zdWJfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSk7Cit9CisKKyNkZWZpbmUgX21tNTEyX3N1Yl9yb3VuZF9wZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc3VicGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc3ViX3JvdW5kX3BkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zdWJwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfc3ViX3JvdW5kX3BkKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zdWJwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3N1Yl9yb3VuZF9wcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zdWJwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3N1Yl9yb3VuZF9wcyhXLCBVLCBBLCBCLCBSKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfc3VicHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFcpLCAoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KTsKKworI2RlZmluZSBfbW01MTJfbWFza3pfc3ViX3JvdW5kX3BzKFUsIEEsIEIsIFIpICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zdWJwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSk7CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX211bF9zcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbXVsc3Nfcm91bmRfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X211bF9zcyhfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbXVsc3Nfcm91bmRfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NHNmKSAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKyNkZWZpbmUgX21tX211bF9yb3VuZF9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9tdWxzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfbXVsX3JvdW5kX3NzKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX211bHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9tdWxfcm91bmRfc3MoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfbXVsc3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX211bF9zZChfX20xMjhkIF9fVywgX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX211bHNkX3JvdW5kX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbXVsX3NkKF9fbW1hc2s4IF9fVSxfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9tdWxzZF9yb3VuZF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tdWxfcm91bmRfc2QoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX211bHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX211bF9yb3VuZF9zZChXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfbXVsc2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X211bF9yb3VuZF9zZChVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfbXVsc2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbXVsX3BkKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfbXVsX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbXVsX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF81MTIoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9tdWxfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX211bF9wcyhfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9tdWxfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X211bF9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9tdWxfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSk7Cit9CisKKyNkZWZpbmUgX21tNTEyX211bF9yb3VuZF9wZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfbXVscGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfbXVsX3JvdW5kX3BkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9tdWxwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShXKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfbXVsX3JvdW5kX3BkKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9tdWxwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX211bF9yb3VuZF9wcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9tdWxwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX211bF9yb3VuZF9wcyhXLCBVLCBBLCBCLCBSKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfbXVscHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFcpLCAoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KTsKKworI2RlZmluZSBfbW01MTJfbWFza3pfbXVsX3JvdW5kX3BzKFUsIEEsIEIsIFIpICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9tdWxwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSk7CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2Rpdl9zcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZGl2c3Nfcm91bmRfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Rpdl9zcyhfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZGl2c3Nfcm91bmRfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NHNmKSAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fZGl2X3JvdW5kX3NzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2RpdnNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19kaXZfcm91bmRfc3MoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZGl2c3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2Rpdl9yb3VuZF9zcyhVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9kaXZzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZGl2X3NkKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZGl2c2Rfcm91bmRfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9kaXZfc2QoX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2RpdnNkX3JvdW5kX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX2Rpdl9yb3VuZF9zZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZGl2c2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfZGl2X3JvdW5kX3NkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9kaXZzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfZGl2X3JvdW5kX3NkKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9kaXZzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Rpdl9wZChfX201MTJkIF9fYSwgX19tNTEyZCBfX2IpCit7CisgIHJldHVybiAoX19tNTEyZCkoKF9fdjhkZilfX2EvKF9fdjhkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZGl2X3BkKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfZGl2X3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZGl2X3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF81MTIoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9kaXZfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZGl2X3BzKF9fbTUxMiBfX2EsIF9fbTUxMiBfX2IpCit7CisgIHJldHVybiAoX19tNTEyKSgoX192MTZzZilfX2EvKF9fdjE2c2YpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZGl2X3BzKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfNTEyKChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX2Rpdl9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZGl2X3BzKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfNTEyKChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX2Rpdl9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpKTsKK30KKworI2RlZmluZSBfbW01MTJfZGl2X3JvdW5kX3BkKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9kaXZwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19kaXZfcm91bmRfcGQoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2RpdnBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9kaXZfcm91bmRfcGQoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2RpdnBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfZGl2X3JvdW5kX3BzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2RpdnBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZGl2X3JvdW5kX3BzKFcsIFUsIEEsIEIsIFIpICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9kaXZwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVyksIChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pOworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9kaXZfcm91bmRfcHMoVSwgQSwgQiwgUikgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2RpdnBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KTsKKworI2RlZmluZSBfbW01MTJfcm91bmRzY2FsZV9wcyhBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEEpLCAoX19tbWFzazE2KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcm91bmRzY2FsZV9wcyhBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcm5kc2NhbGVwc19tYXNrKChfX3YxNnNmKShfX201MTIpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEEpLCAoX19tbWFzazE2KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yb3VuZHNjYWxlX3BzKEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JvdW5kc2NhbGVfcm91bmRfcHMoQSwgQiwgQywgaW1tLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQSksIChfX21tYXNrMTYpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcm91bmRzY2FsZV9yb3VuZF9wcyhBLCBCLCBpbW0sIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfbWFzaygoX192MTZzZikoX19tNTEyKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKEEpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JvdW5kc2NhbGVfcm91bmRfcHMoQSwgaW1tLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfcm91bmRzY2FsZV9wZChBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQSksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19yb3VuZHNjYWxlX3BkKEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShBKSwgKF9fbW1hc2s4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcm91bmRzY2FsZV9wZChBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcGRfbWFzaygoX192OGRmKShfX201MTJkKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JvdW5kc2NhbGVfcm91bmRfcGQoQSwgQiwgQywgaW1tLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShBKSwgKF9fbW1hc2s4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yb3VuZHNjYWxlX3JvdW5kX3BkKEEsIEIsIGltbSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcGRfbWFzaygoX192OGRmKShfX201MTJkKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKEEpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JvdW5kc2NhbGVfcm91bmRfcGQoQSwgaW1tLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl91bmRlZmluZWRfcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2ZtYWRkX3JvdW5kX3BkKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShDKSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZm1hZGRfcm91bmRfcGQoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2szX2ZtYWRkX3JvdW5kX3BkKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrMygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza3pfZm1hZGRfcm91bmRfcGQoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2t6KChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9mbXN1Yl9yb3VuZF9wZChBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4ZGYpKF9fbTUxMmQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza19mbXN1Yl9yb3VuZF9wZChBLCBVLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4ZGYpKF9fbTUxMmQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2Ztc3ViX3JvdW5kX3BkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNreigoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhkZikoX19tNTEyZCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX2ZubWFkZF9yb3VuZF9wZChBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzaygtKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEMpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFzazNfZm5tYWRkX3JvdW5kX3BkKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrMygtKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2ZubWFkZF9yb3VuZF9wZChVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFza3ooLShfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9mbm1zdWJfcm91bmRfcGQoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2soLShfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhkZikoX19tNTEyZCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9mbm1zdWJfcm91bmRfcGQoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2t6KC0oX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhkZikoX19tNTEyZCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZm1hZGRfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19mbWFkZF9wZChfX201MTJkIF9fQSwgX19tbWFzazggX19VLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrM19mbWFkZF9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzazMgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2ZtYWRkX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNreiAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZm1zdWJfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZm1zdWJfcGQoX19tNTEyZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2Ztc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNreiAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2ZubWFkZF9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2sgKC0oX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFzazNfZm5tYWRkX3BkKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrMyAoLShfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2ZubWFkZF9wZChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFza3ogKC0oX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9mbm1zdWJfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrICgtKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9mbm1zdWJfcGQoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2t6ICgtKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9mbWFkZF9yb3VuZF9wcyhBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQyksIChfX21tYXNrMTYpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrX2ZtYWRkX3JvdW5kX3BzKEEsIFUsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrM19mbWFkZF9yb3VuZF9wcyhBLCBCLCBDLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrMygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2ZtYWRkX3JvdW5kX3BzKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2t6KChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfZm1zdWJfcm91bmRfcHMoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MTZzZikoX19tNTEyKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZm1zdWJfcm91bmRfcHMoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MTZzZikoX19tNTEyKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9mbXN1Yl9yb3VuZF9wcyhVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNreigoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKShfX201MTIpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9mbm1hZGRfcm91bmRfcHMoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzaygtKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShDKSwgKF9fbW1hc2sxNiktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2szX2ZubWFkZF9yb3VuZF9wcyhBLCBCLCBDLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrMygtKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9mbm1hZGRfcm91bmRfcHMoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFza3ooLShfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfZm5tc3ViX3JvdW5kX3BzKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2soLShfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKShfX201MTIpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza3pfZm5tc3ViX3JvdW5kX3BzKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2t6KC0oX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKShfX201MTIpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZm1hZGRfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZm1hZGRfcHMoX19tNTEyIF9fQSwgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrM19mbWFkZF9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DLCBfX21tYXNrMTYgX19VKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzazMgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZm1hZGRfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2t6ICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Ztc3ViX3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19mbXN1Yl9wcyhfX201MTIgX19BLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9mbXN1Yl9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFza3ogKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2ZubWFkZF9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzayAoLShfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2szX2ZubWFkZF9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DLCBfX21tYXNrMTYgX19VKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzazMgKC0oX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2ZubWFkZF9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFza3ogKC0oX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2ZubXN1Yl9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzayAoLShfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9mbm1zdWJfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2t6ICgtKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9mbWFkZHN1Yl9yb3VuZF9wZChBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrX2ZtYWRkc3ViX3JvdW5kX3BkKEEsIFUsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrM19mbWFkZHN1Yl9yb3VuZF9wZChBLCBCLCBDLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFzazMoKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2ZtYWRkc3ViX3JvdW5kX3BkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNreigoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfZm1zdWJhZGRfcm91bmRfcGQoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKShfX201MTJkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZm1zdWJhZGRfcm91bmRfcGQoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKShfX201MTJkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9mbXN1YmFkZF9yb3VuZF9wZChVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFza3ooKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4ZGYpKF9fbTUxMmQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2ZtYWRkc3ViX3BkKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZm1hZGRzdWJfcGQoX19tNTEyZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFzazNfZm1hZGRzdWJfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkNTEyX21hc2szICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9mbWFkZHN1Yl9wZChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFza3ogKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Ztc3ViYWRkX3BkKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Ztc3ViYWRkX3BkKF9fbTUxMmQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9mbXN1YmFkZF9wZChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFza3ogKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfZm1hZGRzdWJfcm91bmRfcHMoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza19mbWFkZHN1Yl9yb3VuZF9wcyhBLCBVLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFzazNfZm1hZGRzdWJfcm91bmRfcHMoQSwgQiwgQywgVSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFzazMoKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9mbWFkZHN1Yl9yb3VuZF9wcyhVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNreigoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX2Ztc3ViYWRkX3JvdW5kX3BzKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjE2c2YpKF9fbTUxMikoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrX2Ztc3ViYWRkX3JvdW5kX3BzKEEsIFUsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjE2c2YpKF9fbTUxMikoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza3pfZm1zdWJhZGRfcm91bmRfcHMoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFza3ooKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MTZzZikoX19tNTEyKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2ZtYWRkc3ViX3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2ZtYWRkc3ViX3BzKF9fbTUxMiBfX0EsIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFzazNfZm1hZGRzdWJfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQywgX19tbWFzazE2IF9fVSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2szICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2ZtYWRkc3ViX3BzKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNreiAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9mbXN1YmFkZF9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZm1zdWJhZGRfcHMoX19tNTEyIF9fQSwgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZm1zdWJhZGRfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2t6ICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX21hc2szX2Ztc3ViX3JvdW5kX3BkKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm1zdWJwZDUxMl9tYXNrMygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrM19mbXN1Yl9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtc3VicGQ1MTJfbWFzazMgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9tYXNrM19mbXN1Yl9yb3VuZF9wcyhBLCBCLCBDLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm1zdWJwczUxMl9tYXNrMygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrM19mbXN1Yl9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DLCBfX21tYXNrMTYgX19VKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtc3VicHM1MTJfbWFzazMgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9tYXNrM19mbXN1YmFkZF9yb3VuZF9wZChBLCBCLCBDLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcGQ1MTJfbWFzazMoKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFzazNfZm1zdWJhZGRfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBkNTEyX21hc2szICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfbWFzazNfZm1zdWJhZGRfcm91bmRfcHMoQSwgQiwgQywgVSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcHM1MTJfbWFzazMoKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFzazNfZm1zdWJhZGRfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQywgX19tbWFzazE2IF9fVSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBzNTEyX21hc2szICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfbWFza19mbm1hZGRfcm91bmRfcGQoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZm5tYWRkX3BkKF9fbTUxMmQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm5tYWRkcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX21hc2tfZm5tYWRkX3JvdW5kX3BzKEEsIFUsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZm5tYWRkX3BzKF9fbTUxMiBfX0EsIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm5tYWRkcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX21hc2tfZm5tc3ViX3JvdW5kX3BkKEEsIFUsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm5tc3VicGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFzazNfZm5tc3ViX3JvdW5kX3BkKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl92Zm5tc3VicGQ1MTJfbWFzazMoKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19mbm1zdWJfcGQoX19tNTEyZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrM19mbm1zdWJfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDUxMl9tYXNrMyAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2ZubXN1Yl9yb3VuZF9wcyhBLCBVLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm5tc3VicHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2szX2ZubXN1Yl9yb3VuZF9wcyhBLCBCLCBDLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl92Zm5tc3VicHM1MTJfbWFzazMoKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19mbm1zdWJfcHMoX19tNTEyIF9fQSwgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2szX2ZubXN1Yl9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DLCBfX21tYXNrMTYgX19VKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZubXN1YnBzNTEyX21hc2szICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKworCisvKiBWZWN0b3IgcGVybXV0YXRpb25zICovCisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Blcm11dGV4MnZhcl9lcGkzMihfX201MTJpIF9fQSwgX19tNTEyaSBfX0ksIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJkNTEyX21hc2sgKChfX3YxNnNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19wZXJtdXRleDJ2YXJfZXBpMzIgKF9fbTUxMmkgX19BLCBfX21tYXNrMTYgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX201MTJpIF9fSSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3Blcm11dGV4MnZhcl9lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX201MTJpIF9fSSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmQ1MTJfbWFza3ogKChfX3YxNnNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcGVybXV0ZXgydmFyX2VwaTY0KF9fbTUxMmkgX19BLCBfX201MTJpIF9fSSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnE1MTJfbWFzayAoKF9fdjhkaSkgX19JCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcGVybXV0ZXgydmFyX2VwaTY0IChfX201MTJpIF9fQSwgX19tbWFzazggX19VLCBfX201MTJpIF9fSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnE1MTJfbWFzayAoKF9fdjhkaSkgX19JCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3Blcm11dGV4MnZhcl9lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJpIF9fQSwKKyAgICAgICAgIF9fbTUxMmkgX19JLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycTUxMl9tYXNreiAoKF9fdjhkaSkgX19JCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tNTEyX2FsaWducl9lcGk2NChBLCBCLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfYWxpZ25xNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoQiksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2FsaWducl9lcGk2NChXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18oe1wKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfYWxpZ25xNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2FsaWducl9lcGk2NChVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18oe1wKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfYWxpZ25xNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9hbGlnbnJfZXBpMzIoQSwgQiwgSSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2FsaWduZDUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoQiksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfYWxpZ25yX2VwaTMyKFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfYWxpZ25kNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9hbGlnbnJfZXBpMzIoVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fKHtcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2FsaWduZDUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSk7IH0pCisvKiBWZWN0b3IgRXh0cmFjdCAqLworCisjZGVmaW5lIF9tbTUxMl9leHRyYWN0ZjY0eDRfcGQoQSwgSSkgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSSkgJiAxKSA/IDQgOiAwLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSSkgJiAxKSA/IDUgOiAxLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSSkgJiAxKSA/IDYgOiAyLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSSkgJiAxKSA/IDcgOiAzKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19leHRyYWN0ZjY0eDRfcGQoVywgVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8yNTYoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTUxMl9leHRyYWN0ZjY0eDRfcGQoKEEpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoVykpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9leHRyYWN0ZjY0eDRfcGQoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8yNTYoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTUxMl9leHRyYWN0ZjY0eDRfcGQoKEEpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19wZCgpKTsgfSkKKworI2RlZmluZSBfbW01MTJfZXh0cmFjdGYzMng0X3BzKEEsIEkpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgXAorICAoX19tMTI4KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnNmKShfX201MTIpKEEpLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl91bmRlZmluZWRfcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKEkpICYgMHgzKSAqIDQsICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgKyAoKEkpICYgMHgzKSAqIDQsICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKyAoKEkpICYgMHgzKSAqIDQsICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgKyAoKEkpICYgMHgzKSAqIDQpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2V4dHJhY3RmMzJ4NF9wcyhXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW01MTJfZXh0cmFjdGYzMng0X3BzKChBKSwgKGltbSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKFcpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZXh0cmFjdGYzMng0X3BzKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbTUxMl9leHRyYWN0ZjMyeDRfcHMoKEEpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpKTsgfSkKKworLyogVmVjdG9yIEJsZW5kICovCisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYmxlbmRfcGQoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX1cpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYmxlbmRfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fVykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMiAoKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYmxlbmRfZXBpNjQoX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX1cpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIgKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX192OGRpKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2JsZW5kX2VwaTMyKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fVykKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMiAoKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQSk7Cit9CisKKy8qIENvbXBhcmUgKi8KKworI2RlZmluZSBfbW01MTJfY21wX3JvdW5kX3BzX21hc2soQSwgQiwgUCwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIChpbnQpKFApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY21wX3JvdW5kX3BzX21hc2soVSwgQSwgQiwgUCwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIChpbnQpKFApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9jbXBfcHNfbWFzayhBLCBCLCBQKSBcCisgIF9tbTUxMl9jbXBfcm91bmRfcHNfbWFzaygoQSksIChCKSwgKFApLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisjZGVmaW5lIF9tbTUxMl9tYXNrX2NtcF9wc19tYXNrKFUsIEEsIEIsIFApIFwKKyAgX21tNTEyX21hc2tfY21wX3JvdW5kX3BzX21hc2soKFUpLCAoQSksIChCKSwgKFApLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tNTEyX2NtcGVxX3BzX21hc2soQSwgQikgXAorICAgIF9tbTUxMl9jbXBfcHNfbWFzaygoQSksIChCKSwgX0NNUF9FUV9PUSkKKyNkZWZpbmUgX21tNTEyX21hc2tfY21wZXFfcHNfbWFzayhrLCBBLCBCKSBcCisgICAgX21tNTEyX21hc2tfY21wX3BzX21hc2soKGspLCAoQSksIChCKSwgX0NNUF9FUV9PUSkKKworI2RlZmluZSBfbW01MTJfY21wbHRfcHNfbWFzayhBLCBCKSBcCisgICAgX21tNTEyX2NtcF9wc19tYXNrKChBKSwgKEIpLCBfQ01QX0xUX09TKQorI2RlZmluZSBfbW01MTJfbWFza19jbXBsdF9wc19tYXNrKGssIEEsIEIpIFwKKyAgICBfbW01MTJfbWFza19jbXBfcHNfbWFzaygoayksIChBKSwgKEIpLCBfQ01QX0xUX09TKQorCisjZGVmaW5lIF9tbTUxMl9jbXBsZV9wc19tYXNrKEEsIEIpIFwKKyAgICBfbW01MTJfY21wX3BzX21hc2soKEEpLCAoQiksIF9DTVBfTEVfT1MpCisjZGVmaW5lIF9tbTUxMl9tYXNrX2NtcGxlX3BzX21hc2soaywgQSwgQikgXAorICAgIF9tbTUxMl9tYXNrX2NtcF9wc19tYXNrKChrKSwgKEEpLCAoQiksIF9DTVBfTEVfT1MpCisKKyNkZWZpbmUgX21tNTEyX2NtcHVub3JkX3BzX21hc2soQSwgQikgXAorICAgIF9tbTUxMl9jbXBfcHNfbWFzaygoQSksIChCKSwgX0NNUF9VTk9SRF9RKQorI2RlZmluZSBfbW01MTJfbWFza19jbXB1bm9yZF9wc19tYXNrKGssIEEsIEIpIFwKKyAgICBfbW01MTJfbWFza19jbXBfcHNfbWFzaygoayksIChBKSwgKEIpLCBfQ01QX1VOT1JEX1EpCisKKyNkZWZpbmUgX21tNTEyX2NtcG5lcV9wc19tYXNrKEEsIEIpIFwKKyAgICBfbW01MTJfY21wX3BzX21hc2soKEEpLCAoQiksIF9DTVBfTkVRX1VRKQorI2RlZmluZSBfbW01MTJfbWFza19jbXBuZXFfcHNfbWFzayhrLCBBLCBCKSBcCisgICAgX21tNTEyX21hc2tfY21wX3BzX21hc2soKGspLCAoQSksIChCKSwgX0NNUF9ORVFfVVEpCisKKyNkZWZpbmUgX21tNTEyX2NtcG5sdF9wc19tYXNrKEEsIEIpIFwKKyAgICBfbW01MTJfY21wX3BzX21hc2soKEEpLCAoQiksIF9DTVBfTkxUX1VTKQorI2RlZmluZSBfbW01MTJfbWFza19jbXBubHRfcHNfbWFzayhrLCBBLCBCKSBcCisgICAgX21tNTEyX21hc2tfY21wX3BzX21hc2soKGspLCAoQSksIChCKSwgX0NNUF9OTFRfVVMpCisKKyNkZWZpbmUgX21tNTEyX2NtcG5sZV9wc19tYXNrKEEsIEIpIFwKKyAgICBfbW01MTJfY21wX3BzX21hc2soKEEpLCAoQiksIF9DTVBfTkxFX1VTKQorI2RlZmluZSBfbW01MTJfbWFza19jbXBubGVfcHNfbWFzayhrLCBBLCBCKSBcCisgICAgX21tNTEyX21hc2tfY21wX3BzX21hc2soKGspLCAoQSksIChCKSwgX0NNUF9OTEVfVVMpCisKKyNkZWZpbmUgX21tNTEyX2NtcG9yZF9wc19tYXNrKEEsIEIpIFwKKyAgICBfbW01MTJfY21wX3BzX21hc2soKEEpLCAoQiksIF9DTVBfT1JEX1EpCisjZGVmaW5lIF9tbTUxMl9tYXNrX2NtcG9yZF9wc19tYXNrKGssIEEsIEIpIFwKKyAgICBfbW01MTJfbWFza19jbXBfcHNfbWFzaygoayksIChBKSwgKEIpLCBfQ01QX09SRF9RKQorCisjZGVmaW5lIF9tbTUxMl9jbXBfcm91bmRfcGRfbWFzayhBLCBCLCBQLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIChpbnQpKFApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2NtcF9yb3VuZF9wZF9tYXNrKFUsIEEsIEIsIFAsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgKGludCkoUCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9jbXBfcGRfbWFzayhBLCBCLCBQKSBcCisgIF9tbTUxMl9jbXBfcm91bmRfcGRfbWFzaygoQSksIChCKSwgKFApLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisjZGVmaW5lIF9tbTUxMl9tYXNrX2NtcF9wZF9tYXNrKFUsIEEsIEIsIFApIFwKKyAgX21tNTEyX21hc2tfY21wX3JvdW5kX3BkX21hc2soKFUpLCAoQSksIChCKSwgKFApLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tNTEyX2NtcGVxX3BkX21hc2soQSwgQikgXAorICAgIF9tbTUxMl9jbXBfcGRfbWFzaygoQSksIChCKSwgX0NNUF9FUV9PUSkKKyNkZWZpbmUgX21tNTEyX21hc2tfY21wZXFfcGRfbWFzayhrLCBBLCBCKSBcCisgICAgX21tNTEyX21hc2tfY21wX3BkX21hc2soKGspLCAoQSksIChCKSwgX0NNUF9FUV9PUSkKKworI2RlZmluZSBfbW01MTJfY21wbHRfcGRfbWFzayhBLCBCKSBcCisgICAgX21tNTEyX2NtcF9wZF9tYXNrKChBKSwgKEIpLCBfQ01QX0xUX09TKQorI2RlZmluZSBfbW01MTJfbWFza19jbXBsdF9wZF9tYXNrKGssIEEsIEIpIFwKKyAgICBfbW01MTJfbWFza19jbXBfcGRfbWFzaygoayksIChBKSwgKEIpLCBfQ01QX0xUX09TKQorCisjZGVmaW5lIF9tbTUxMl9jbXBsZV9wZF9tYXNrKEEsIEIpIFwKKyAgICBfbW01MTJfY21wX3BkX21hc2soKEEpLCAoQiksIF9DTVBfTEVfT1MpCisjZGVmaW5lIF9tbTUxMl9tYXNrX2NtcGxlX3BkX21hc2soaywgQSwgQikgXAorICAgIF9tbTUxMl9tYXNrX2NtcF9wZF9tYXNrKChrKSwgKEEpLCAoQiksIF9DTVBfTEVfT1MpCisKKyNkZWZpbmUgX21tNTEyX2NtcHVub3JkX3BkX21hc2soQSwgQikgXAorICAgIF9tbTUxMl9jbXBfcGRfbWFzaygoQSksIChCKSwgX0NNUF9VTk9SRF9RKQorI2RlZmluZSBfbW01MTJfbWFza19jbXB1bm9yZF9wZF9tYXNrKGssIEEsIEIpIFwKKyAgICBfbW01MTJfbWFza19jbXBfcGRfbWFzaygoayksIChBKSwgKEIpLCBfQ01QX1VOT1JEX1EpCisKKyNkZWZpbmUgX21tNTEyX2NtcG5lcV9wZF9tYXNrKEEsIEIpIFwKKyAgICBfbW01MTJfY21wX3BkX21hc2soKEEpLCAoQiksIF9DTVBfTkVRX1VRKQorI2RlZmluZSBfbW01MTJfbWFza19jbXBuZXFfcGRfbWFzayhrLCBBLCBCKSBcCisgICAgX21tNTEyX21hc2tfY21wX3BkX21hc2soKGspLCAoQSksIChCKSwgX0NNUF9ORVFfVVEpCisKKyNkZWZpbmUgX21tNTEyX2NtcG5sdF9wZF9tYXNrKEEsIEIpIFwKKyAgICBfbW01MTJfY21wX3BkX21hc2soKEEpLCAoQiksIF9DTVBfTkxUX1VTKQorI2RlZmluZSBfbW01MTJfbWFza19jbXBubHRfcGRfbWFzayhrLCBBLCBCKSBcCisgICAgX21tNTEyX21hc2tfY21wX3BkX21hc2soKGspLCAoQSksIChCKSwgX0NNUF9OTFRfVVMpCisKKyNkZWZpbmUgX21tNTEyX2NtcG5sZV9wZF9tYXNrKEEsIEIpIFwKKyAgICBfbW01MTJfY21wX3BkX21hc2soKEEpLCAoQiksIF9DTVBfTkxFX1VTKQorI2RlZmluZSBfbW01MTJfbWFza19jbXBubGVfcGRfbWFzayhrLCBBLCBCKSBcCisgICAgX21tNTEyX21hc2tfY21wX3BkX21hc2soKGspLCAoQSksIChCKSwgX0NNUF9OTEVfVVMpCisKKyNkZWZpbmUgX21tNTEyX2NtcG9yZF9wZF9tYXNrKEEsIEIpIFwKKyAgICBfbW01MTJfY21wX3BkX21hc2soKEEpLCAoQiksIF9DTVBfT1JEX1EpCisjZGVmaW5lIF9tbTUxMl9tYXNrX2NtcG9yZF9wZF9tYXNrKGssIEEsIEIpIFwKKyAgICBfbW01MTJfbWFza19jbXBfcGRfbWFzaygoayksIChBKSwgKEIpLCBfQ01QX09SRF9RKQorCisvKiBDb252ZXJzaW9uICovCisKKyNkZWZpbmUgX21tNTEyX2N2dHRfcm91bmRwc19lcHUzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0dHBzMnVkcTUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfdW5kZWZpbmVkX2VwaTMyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnR0X3JvdW5kcHNfZXB1MzIoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1ZHE1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9jdnR0X3JvdW5kcHNfZXB1MzIoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1ZHE1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR0cHNfZXB1MzIoX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydWRxNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0dHBzX2VwdTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydWRxNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnR0cHNfZXB1MzIgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVkcTUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kZXBpMzJfcHMoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfY3Z0ZHEycHM1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRlcGkzMl9wcyhXLCBVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9jdnRkcTJwczUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dF9yb3VuZGVwaTMyX3BzKFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2N2dGRxMnBzNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRlcHUzMl9wcyhBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9jdnR1ZHEycHM1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dF9yb3VuZGVwdTMyX3BzKFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwczUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kZXB1MzJfcHMoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfY3Z0dWRxMnBzNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcHUzMl9wcyAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycHM1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl91bmRlZmluZWRfcHMgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcHUzMl9wcyAoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycHM1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0ZXB1MzJfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBzNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcGkzMl9wZChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnRkcTJwZDUxMl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaTMyX3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnRkcTJwZDUxMl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcGkzMl9wZCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnRkcTJwZDUxMl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwaTMybG9fcGQoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX21tNTEyX2N2dGVwaTMyX3BkKF9tbTUxMl9jYXN0c2k1MTJfc2kyNTYoX19BKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcGkzMmxvX3BkKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX21tNTEyX21hc2tfY3Z0ZXBpMzJfcGQoX19XLCBfX1UsIF9tbTUxMl9jYXN0c2k1MTJfc2kyNTYoX19BKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcGkzMl9wcyAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9jdnRkcTJwczUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfdW5kZWZpbmVkX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaTMyX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBzNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwaTMyX3BzIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBzNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcHUzMl9wZChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycGQ1MTJfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcHUzMl9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBkNTEyX21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcHUzMl9wZCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycGQ1MTJfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXB1MzJsb19wZChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfbW01MTJfY3Z0ZXB1MzJfcGQoX21tNTEyX2Nhc3RzaTUxMl9zaTI1NihfX0EpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwdTMybG9fcGQoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSxfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfbW01MTJfbWFza19jdnRlcHUzMl9wZChfX1csIF9fVSwgX21tNTEyX2Nhc3RzaTUxMl9zaTI1NihfX0EpKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kcGRfcHMoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfY3Z0cGQycHM1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRwZF9wcyhXLCBVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9jdnRwZDJwczUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dF9yb3VuZHBkX3BzKFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0cGRfcHMgKF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0cGQycHM1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl91bmRlZmluZWRfcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRwZF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHBkX3BzIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0cGQycHM1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRwZF9wc2xvIChfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2YpIF9tbTUxMl9jdnRwZF9wcyhfX0EpLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRwZF9wc2xvIChfX201MTIgX19XLCBfX21tYXNrOCBfX1UsX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciAoCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX21tNTEyX21hc2tfY3Z0cGRfcHMgKF9tbTUxMl9jYXN0cHM1MTJfcHMyNTYoX19XKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19VLCBfX0EpLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwc19waChBLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfdmN2dHBzMnBoNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRwc19waChVLCBXLCBBLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfdmN2dHBzMnBoNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKShfX20yNTZpKShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dF9yb3VuZHBzX3BoKFcsIEEsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl92Y3Z0cHMycGg1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgKGludCkoSSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2N2dHBzX3BoKEEsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl92Y3Z0cHMycGg1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgKGludCkoSSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRwc19waChVLCBXLCBBLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfdmN2dHBzMnBoNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKShfX20yNTZpKShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dHBzX3BoKFcsIEEsIEkpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3ZjdnRwczJwaDUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCAoaW50KShJKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFcpKTsgfSkKKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kcGhfcHMoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmN2dHBoMnBzNTEyX21hc2soKF9fdjE2aGkpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dF9yb3VuZHBoX3BzKFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3ZjdnRwaDJwczUxMl9tYXNrKChfX3YxNmhpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kcGhfcHMoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfdmN2dHBoMnBzNTEyX21hc2soKF9fdjE2aGkpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKworc3RhdGljICBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0cGhfcHMoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Y3Z0cGgycHM1MTJfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRwaF9wcyAoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Y3Z0cGgycHM1MTJfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0cGhfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmN2dHBoMnBzNTEyX21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnR0X3JvdW5kcGRfZXBpMzIoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnR0X3JvdW5kcGRfZXBpMzIoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0dF9yb3VuZHBkX2VwaTMyKFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9jdnR0cGQyZHE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR0cGRfZXBpMzIoX19tNTEyZCBfX2EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9jdnR0cGQyZHE1MTJfbWFzaygoX192OGRmKSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnR0cGRfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0dHBkX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0dF9yb3VuZHBzX2VwaTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnR0cHMyZHE1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnR0X3JvdW5kcHNfZXBpMzIoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcTUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9jdnR0X3JvdW5kcHNfZXBpMzIoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcTUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0dHBzX2VwaTMyKF9fbTUxMiBfX2EpCit7CisgIHJldHVybiAoX19tNTEyaSkKKyAgICBfX2J1aWx0aW5faWEzMl9jdnR0cHMyZHE1MTJfbWFzaygoX192MTZzZikgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHRwc19lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMmRxNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnR0cHNfZXBpMzIgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMmRxNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwc19lcGkzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0cHMyZHE1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kcHNfZXBpMzIoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2N2dHBzMmRxNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9jdnRfcm91bmRwc19lcGkzMihVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0cHMyZHE1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHBzX2VwaTMyIChfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMmRxNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfdW5kZWZpbmVkX2VwaTMyICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHBzX2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJkcTUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0cHNfZXBpMzIgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cHMyZHE1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZHBkX2VwaTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9jdnRwZDJkcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kcGRfZXBpMzIoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kcGRfZXBpMzIoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0cGRfZXBpMzIgKF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgICAgX21tMjU2X3VuZGVmaW5lZF9zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHBkX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJkcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0cGRfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cGQyZHE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZHBzX2VwdTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnRwczJ1ZHE1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRwc19lcHUzMihXLCBVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0cHMydWRxNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dF9yb3VuZHBzX2VwdTMyKFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnRwczJ1ZHE1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0cHNfZXB1MzIgKCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVkcTUxMl9tYXNrICgoX192MTZzZikgX19BLFwKKyAgICAgICAgICAgICAgICAgIChfX3YxNnNpKVwKKyAgICAgICAgICAgICAgICAgIF9tbTUxMl91bmRlZmluZWRfZXBpMzIgKCksXAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsXAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTtcCit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRwc19lcHUzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cHMydWRxNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRwc19lcHUzMiAoIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cHMydWRxNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MTZzaSkgCisgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSAsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwZF9lcHUzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfY3Z0cGQydWRxNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dF9yb3VuZHBkX2VwdTMyKFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9jdnRwZDJ1ZHE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dF9yb3VuZHBkX2VwdTMyKFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9jdnRwZDJ1ZHE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHBkX2VwdTMyIChfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1ZHE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgICAgIF9tbTI1Nl91bmRlZmluZWRfc2kyNTYgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHBkX2VwdTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1ZHE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHBkX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVkcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKy8qIFVucGFjayBhbmQgSW50ZXJsZWF2ZSAqLworCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl91bnBhY2toaV9wZChfX201MTJkIF9fYSwgX19tNTEyZCBfX2IpCit7CisgIHJldHVybiAoX19tNTEyZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGRmKV9fYSwgKF9fdjhkZilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCA5LCAxKzIsIDkrMiwgMSs0LCA5KzQsIDErNiwgOSs2KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3VucGFja2hpX3BkKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl91bnBhY2toaV9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3VucGFja2hpX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKQoreworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3VucGFja2hpX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl91bnBhY2tsb19wZChfX201MTJkIF9fYSwgX19tNTEyZCBfX2IpCit7CisgIHJldHVybiAoX19tNTEyZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGRmKV9fYSwgKF9fdjhkZilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCA4LCAwKzIsIDgrMiwgMCs0LCA4KzQsIDArNiwgOCs2KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3VucGFja2xvX3BkKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl91bnBhY2tsb19wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3VucGFja2xvX3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl91bnBhY2tsb19wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl91bnBhY2toaV9wcyhfX201MTIgX19hLCBfX201MTIgX19iKQoreworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZzZilfX2EsIChfX3YxNnNmKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgICAgMTgsICAgIDMsICAgIDE5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKzQsICAxOCs0LCAgMys0LCAgMTkrNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMis4LCAgMTgrOCwgIDMrOCwgIDE5KzgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIrMTIsIDE4KzEyLCAzKzEyLCAxOSsxMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3VucGFja2hpX3BzKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfdW5wYWNraGlfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3VucGFja2hpX3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKQoreworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc181MTIoKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3VucGFja2hpX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3VucGFja2xvX3BzKF9fbTUxMiBfX2EsIF9fbTUxMiBfX2IpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnNmKV9fYSwgKF9fdjE2c2YpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAxNiwgICAgMSwgICAgMTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDArNCwgIDE2KzQsICAxKzQsICAxNys0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKzgsICAxNis4LCAgMSs4LCAgMTcrOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCsxMiwgMTYrMTIsIDErMTIsIDE3KzEyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfdW5wYWNrbG9fcHMoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfNTEyKChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl91bnBhY2tsb19wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfdW5wYWNrbG9fcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfdW5wYWNrbG9fcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5wYWNraGlfZXBpMzIoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2c2kpX19BLCAoX192MTZzaSlfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAgICAxOCwgICAgMywgICAgMTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKzQsICAxOCs0LCAgMys0LCAgMTkrNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIrOCwgIDE4KzgsICAzKzgsICAxOSs4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMisxMiwgMTgrMTIsIDMrMTIsIDE5KzEyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3VucGFja2hpX2VwaTMyKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfdW5wYWNraGlfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel91bnBhY2toaV9lcGkzMihfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfdW5wYWNraGlfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5wYWNrbG9fZXBpMzIoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2c2kpX19BLCAoX192MTZzaSlfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAxNiwgICAgMSwgICAgMTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKzQsICAxNis0LCAgMSs0LCAgMTcrNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDArOCwgIDE2KzgsICAxKzgsICAxNys4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCsxMiwgMTYrMTIsIDErMTIsIDE3KzEyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3VucGFja2xvX2VwaTMyKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfdW5wYWNrbG9fZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel91bnBhY2tsb19lcGkzMihfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfdW5wYWNrbG9fZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5wYWNraGlfZXBpNjQoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhkaSlfX0EsIChfX3Y4ZGkpX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgOSwgMSsyLCA5KzIsIDErNCwgOSs0LCAxKzYsIDkrNik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza191bnBhY2toaV9lcGk2NChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMigoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl91bnBhY2toaV9lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3VucGFja2hpX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfdW5wYWNraGlfZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5wYWNrbG9fZXBpNjQgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4ZGkpX19BLCAoX192OGRpKV9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDgsIDArMiwgOCsyLCAwKzQsIDgrNCwgMCs2LCA4KzYpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfdW5wYWNrbG9fZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfNTEyKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3VucGFja2xvX2VwaTY0KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfdW5wYWNrbG9fZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfdW5wYWNrbG9fZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKKy8qIEJpdCBUZXN0ICovCisKK3N0YXRpYyBfX2lubGluZSBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdGVzdF9lcGkzMl9tYXNrKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bWQ1MTIgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza190ZXN0X2VwaTMyX21hc2sgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bWQ1MTIgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl90ZXN0X2VwaTY0X21hc2soX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG1xNTEyICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfdGVzdF9lcGk2NF9tYXNrIChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrOCkgX19idWlsdGluX2lhMzJfcHRlc3RtcTUxMiAoKF9fdjhkaSkgX19BLCAoX192OGRpKSBfX0IsIF9fVSk7Cit9CisKKworLyogU0lNRCBsb2FkIG9wcyAqLworCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9sb2FkdV9zaTUxMiAodm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2xvYWRkcXVzaTUxMl9tYXNrICgoY29uc3QgaW50ICopIF9fUCwKKyAgICAgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbG9hZHVfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfbG9hZGRxdXNpNTEyX21hc2sgKChjb25zdCBpbnQgKikgX19QLAorICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbG9hZHVfZXBpMzIoX19tbWFzazE2IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2xvYWRkcXVzaTUxMl9tYXNrICgoY29uc3QgaW50ICopX19QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbG9hZHVfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1ZGk1MTJfbWFzayAoKGNvbnN0IGxvbmcgbG9uZyAqKSBfX1AsCisgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2xvYWR1X2VwaTY0KF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2xvYWRkcXVkaTUxMl9tYXNrICgoY29uc3QgbG9uZyBsb25nICopX19QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbG9hZHVfcHMgKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2xvYWR1cHM1MTJfbWFzayAoKGNvbnN0IGZsb2F0ICopIF9fUCwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbG9hZHVfcHMoX19tbWFzazE2IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfbG9hZHVwczUxMl9tYXNrICgoY29uc3QgZmxvYXQgKilfX1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19sb2FkdV9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2xvYWR1cGQ1MTJfbWFzayAoKGNvbnN0IGRvdWJsZSAqKSBfX1AsCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbG9hZHVfcGQoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbG9hZHVwZDUxMl9tYXNrICgoY29uc3QgZG91YmxlICopX19QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9sb2FkdV9wZChkb3VibGUgY29uc3QgKl9fcCkKK3sKKyAgc3RydWN0IF9fbG9hZHVfcGQgeworICAgIF9fbTUxMmQgX192OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgcmV0dXJuICgoc3RydWN0IF9fbG9hZHVfcGQqKV9fcCktPl9fdjsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9sb2FkdV9wcyhmbG9hdCBjb25zdCAqX19wKQoreworICBzdHJ1Y3QgX19sb2FkdV9wcyB7CisgICAgX19tNTEyIF9fdjsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIHJldHVybiAoKHN0cnVjdCBfX2xvYWR1X3BzKilfX3ApLT5fX3Y7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbG9hZF9wcyhmbG9hdCBjb25zdCAqX19wKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfbG9hZGFwczUxMl9tYXNrICgoY29uc3QgX192MTZzZiAqKV9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19sb2FkX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9sb2FkYXBzNTEyX21hc2sgKChjb25zdCBfX3YxNnNmICopIF9fUCwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbG9hZF9wcyhfX21tYXNrMTYgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9sb2FkYXBzNTEyX21hc2sgKChjb25zdCBfX3YxNnNmICopX19QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2xvYWRfcGQoZG91YmxlIGNvbnN0ICpfX3ApCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbG9hZGFwZDUxMl9tYXNrICgoY29uc3QgX192OGRmICopX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbG9hZF9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2xvYWRhcGQ1MTJfbWFzayAoKGNvbnN0IF9fdjhkZiAqKSBfX1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9sb2FkX3BkKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2xvYWRhcGQ1MTJfbWFzayAoKGNvbnN0IF9fdjhkZiAqKV9fUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbG9hZF9zaTUxMiAodm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKihfX201MTJpICopIF9fUDsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbG9hZF9lcGkzMiAodm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKihfX201MTJpICopIF9fUDsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbG9hZF9lcGk2NCAodm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKihfX201MTJpICopIF9fUDsKK30KKworLyogU0lNRCBzdG9yZSBvcHMgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdG9yZXVfZXBpNjQodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZWRxdWRpNTEyX21hc2sgKChsb25nIGxvbmcgKilfX1AsIChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N0b3JldV9zaTUxMiAodm9pZCAqX19QLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVkcXVzaTUxMl9tYXNrICgoaW50ICopIF9fUCwgKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdG9yZXVfZXBpMzIodm9pZCAqX19QLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVkcXVzaTUxMl9tYXNrICgoaW50ICopX19QLCAoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3RvcmV1X3BkKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmV1cGQ1MTJfbWFzayAoKGRvdWJsZSAqKV9fUCwgKF9fdjhkZikgX19BLCAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N0b3JldV9wZCh2b2lkICpfX1AsIF9fbTUxMmQgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZXVwZDUxMl9tYXNrKChkb3VibGUgKilfX1AsIChfX3Y4ZGYpX19BLCAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N0b3JldV9wcyh2b2lkICpfX1AsIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBzNTEyX21hc2sgKChmbG9hdCAqKV9fUCwgKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3RvcmV1X3BzKHZvaWQgKl9fUCwgX19tNTEyIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmV1cHM1MTJfbWFzaygoZmxvYXQgKilfX1AsIChfX3YxNnNmKV9fQSwgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3RvcmVfcGQodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZWFwZDUxMl9tYXNrICgoX192OGRmICopX19QLCAoX192OGRmKSBfX0EsIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3RvcmVfcGQodm9pZCAqX19QLCBfX201MTJkIF9fQSkKK3sKKyAgKihfX201MTJkKilfX1AgPSBfX0E7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3RvcmVfcHModm9pZCAqX19QLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZWFwczUxMl9tYXNrICgoX192MTZzZiAqKV9fUCwgKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3RvcmVfcHModm9pZCAqX19QLCBfX201MTIgX19BKQoreworICAqKF9fbTUxMiopX19QID0gX19BOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zdG9yZV9zaTUxMiAodm9pZCAqX19QLCBfX201MTJpIF9fQSkKK3sKKyAgKihfX201MTJpICopIF9fUCA9IF9fQTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3RvcmVfZXBpMzIgKHZvaWQgKl9fUCwgX19tNTEyaSBfX0EpCit7CisgICooX19tNTEyaSAqKSBfX1AgPSBfX0E7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N0b3JlX2VwaTY0ICh2b2lkICpfX1AsIF9fbTUxMmkgX19BKQoreworICAqKF9fbTUxMmkgKikgX19QID0gX19BOworfQorCisvKiBNYXNrIG9wcyAqLworCitzdGF0aWMgX19pbmxpbmUgX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2tub3QoX19tbWFzazE2IF9fTSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2tub3RoaShfX00pOworfQorCisvKiBJbnRlZ2VyIGNvbXBhcmUgKi8KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGVxX2VwaTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBlcV9lcGkzMl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9wY21wZXFkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZXFfZXB1MzJfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZXFfZXB1MzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGVxX2VwaTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZXFxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBlcV9lcGk2NF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcXE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGVxX2VwdTY0X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGVxX2VwdTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBnZV9lcGkzMl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZ2VfZXBpMzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGdlX2VwdTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGdlX2VwdTMyX21hc2soX19tbWFzazE2IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZ2VfZXBpNjRfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGdlX2VwaTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBnZV9lcHU2NF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBnZV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZ3RfZXBpMzJfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGd0ZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGd0X2VwaTMyX21hc2soX19tbWFzazE2IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3BjbXBndGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBndF9lcHUzMl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBndF9lcHUzMl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZ3RfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGd0X2VwaTY0X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGd0cTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZ3RfZXB1NjRfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZ3RfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGxlX2VwaTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBsZV9lcGkzMl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbGVfZXB1MzJfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbGVfZXB1MzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsZV9lcGk2NF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbGVfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGxlX2VwdTY0X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGxlX2VwdTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsdF9lcGkzMl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbHRfZXBpMzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGx0X2VwdTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGx0X2VwdTMyX21hc2soX19tbWFzazE2IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbHRfZXBpNjRfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGx0X2VwaTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsdF9lcHU2NF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBsdF9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbmVxX2VwaTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBuZXFfZXBpMzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcG5lcV9lcHUzMl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBuZXFfZXB1MzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBuZXFfZXBpNjRfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcG5lcV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbmVxX2VwdTY0X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcG5lcV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwaThfZXBpMzIoX19tMTI4aSBfX0EpCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGV4dGVuc2lvbiwgYnV0IF9fdjE2cWkgaXMgYSBjaGFyCisgICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YxNnFzLiAqLworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoKF9fdjE2cXMpX19BLCBfX3YxNnNpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaThfZXBpMzIoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF81MTIoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfY3Z0ZXBpOF9lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcGk4X2VwaTMyKF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF81MTIoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfY3Z0ZXBpOF9lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXBpOF9lcGk2NChfX20xMjhpIF9fQSkKK3sKKyAgLyogVGhpcyBmdW5jdGlvbiBhbHdheXMgcGVyZm9ybXMgYSBzaWduZWQgZXh0ZW5zaW9uLCBidXQgX192MTZxaSBpcyBhIGNoYXIKKyAgICAgd2hpY2ggbWF5IGJlIHNpZ25lZCBvciB1bnNpZ25lZCwgc28gdXNlIF9fdjE2cXMuICovCisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZxcylfX0EsIChfX3YxNnFzKV9fQSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyksIF9fdjhkaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcGk4X2VwaTY0KF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX2N2dGVwaThfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcGk4X2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfY3Z0ZXBpOF9lcGk2NChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMiAoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXBpMzJfZXBpNjQoX19tMjU2aSBfX1gpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5fY29udmVydHZlY3RvcigoX192OHNpKV9fWCwgX192OGRpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaTMyX2VwaTY0KF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19YKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX2N2dGVwaTMyX2VwaTY0KF9fWCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0ZXBpMzJfZXBpNjQoX19tbWFzazggX19VLCBfX20yNTZpIF9fWCkKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9jdnRlcGkzMl9lcGk2NChfX1gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcGkxNl9lcGkzMihfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKChfX3YxNmhpKV9fQSwgX192MTZzaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcGkxNl9lcGkzMihfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX2N2dGVwaTE2X2VwaTMyKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0ZXBpMTZfZXBpMzIoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX2N2dGVwaTE2X2VwaTMyKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcGkxNl9lcGk2NChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKChfX3Y4aGkpX19BLCBfX3Y4ZGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpMTZfZXBpNjQoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfY3Z0ZXBpMTZfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcGkxNl9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX2N2dGVwaTE2X2VwaTY0KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwdThfZXBpMzIoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5fY29udmVydHZlY3RvcigoX192MTZxdSlfX0EsIF9fdjE2c2kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXB1OF9lcGkzMihfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9jdnRlcHU4X2VwaTMyKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwdThfZXBpMzIoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9jdnRlcHU4X2VwaTMyKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcHU4X2VwaTY0KF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cXUpX19BLCAoX192MTZxdSlfX0EsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpLCBfX3Y4ZGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXB1OF9lcGk2NChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9jdnRlcHU4X2VwaTY0KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0ZXB1OF9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX2N2dGVwdThfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXB1MzJfZXBpNjQoX19tMjU2aSBfX1gpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5fY29udmVydHZlY3RvcigoX192OHN1KV9fWCwgX192OGRpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwdTMyX2VwaTY0KF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19YKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX2N2dGVwdTMyX2VwaTY0KF9fWCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0ZXB1MzJfZXBpNjQoX19tbWFzazggX19VLCBfX20yNTZpIF9fWCkKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9jdnRlcHUzMl9lcGk2NChfX1gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcHUxNl9lcGkzMihfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKChfX3YxNmh1KV9fQSwgX192MTZzaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcHUxNl9lcGkzMihfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX2N2dGVwdTE2X2VwaTMyKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0ZXB1MTZfZXBpMzIoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX2N2dGVwdTE2X2VwaTMyKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwdTE2X2VwaTY0KF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoKF9fdjhodSlfX0EsIF9fdjhkaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcHUxNl9lcGk2NChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfNTEyKChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9jdnRlcHUxNl9lcGk2NChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwdTE2X2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfY3Z0ZXB1MTZfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcm9ydl9lcGkzMiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Byb3J2ZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3JvcnZfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHJvcnZkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcm9ydl9lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Byb3J2ZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcm9ydl9lcGk2NCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Byb3J2cTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcm9ydl9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Byb3J2cTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcm9ydl9lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHJvcnZxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCisKKworI2RlZmluZSBfbW01MTJfY21wX2VwaTMyX21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wZDUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9jbXBfZXB1MzJfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2NtcF9lcGk2NF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfY21wX2VwdTY0X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2NtcF9lcGkzMl9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGQ1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShtKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY21wX2VwdTMyX21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKG0pKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jbXBfZXBpNjRfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHE1MTJfbWFzaygoX192OGRpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkobSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2NtcF9lcHU2NF9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JvbF9lcGkzMihhLCBiKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHJvbGQ1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoYSksIChpbnQpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JvbF9lcGkzMihXLCBVLCBhLCBiKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHJvbGQ1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoYSksIChpbnQpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yb2xfZXBpMzIoVSwgYSwgYikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3Byb2xkNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKGEpLCAoaW50KShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JvbF9lcGk2NChhLCBiKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHJvbHE1MTJfbWFzaygoX192OGRpKShfX201MTJpKShhKSwgKGludCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JvbF9lcGk2NChXLCBVLCBhLCBiKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHJvbHE1MTJfbWFzaygoX192OGRpKShfX201MTJpKShhKSwgKGludCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShXKSwgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JvbF9lcGk2NChVLCBhLCBiKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHJvbHE1MTJfbWFzaygoX192OGRpKShfX201MTJpKShhKSwgKGludCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcm9sdl9lcGkzMiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Byb2x2ZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3JvbHZfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHJvbHZkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcm9sdl9lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Byb2x2ZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcm9sdl9lcGk2NCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Byb2x2cTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcm9sdl9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Byb2x2cTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcm9sdl9lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHJvbHZxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCisjZGVmaW5lIF9tbTUxMl9yb3JfZXBpMzIoQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3Byb3JkNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19yb3JfZXBpMzIoVywgVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3Byb3JkNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcm9yX2VwaTMyKFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wcm9yZDUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9yb3JfZXBpNjQoQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3Byb3JxNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19yb3JfZXBpNjQoVywgVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3Byb3JxNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoVyksIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yb3JfZXBpNjQoVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3Byb3JxNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3NsbGlfZXBpMzIoQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BzbGxkaTUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19zbGxpX2VwaTMyKFcsIFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wc2xsZGk1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3NsbGlfZXBpMzIoVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BzbGxkaTUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3NsbGlfZXBpNjQoQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BzbGxxaTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19zbGxpX2VwaTY0KFcsIFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wc2xscWk1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3NsbGlfZXBpNjQoVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BzbGxxaTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKworCisjZGVmaW5lIF9tbTUxMl9zcmxpX2VwaTMyKEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wc3JsZGk1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc3JsaV9lcGkzMihXLCBVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNybGRpNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9zcmxpX2VwaTMyKFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wc3JsZGk1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9zcmxpX2VwaTY0KEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wc3JscWk1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc3JsaV9lcGk2NChXLCBVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNybHFpNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9zcmxpX2VwaTY0KFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wc3JscWk1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbG9hZF9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9tb3ZkcWEzMmxvYWQ1MTJfbWFzayAoKGNvbnN0IF9fdjE2c2kgKikgX19QLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2xvYWRfZXBpMzIgKF9fbW1hc2sxNiBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9tb3ZkcWEzMmxvYWQ1MTJfbWFzayAoKGNvbnN0IF9fdjE2c2kgKikgX19QLAorICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdG9yZV9lcGkzMiAodm9pZCAqX19QLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfbW92ZHFhMzJzdG9yZTUxMl9tYXNrICgoX192MTZzaSAqKSBfX1AsIChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21vdl9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfNTEyICgoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21vdl9lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfc2VsZWN0ZF81MTIgKChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21vdl9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfc2VsZWN0cV81MTIgKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbW92X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfNTEyICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19sb2FkX2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfbW92ZHFhNjRsb2FkNTEyX21hc2sgKChjb25zdCBfX3Y4ZGkgKikgX19QLAorICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9sb2FkX2VwaTY0IChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9tb3ZkcWE2NGxvYWQ1MTJfbWFzayAoKGNvbnN0IF9fdjhkaSAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdG9yZV9lcGk2NCAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZkcWE2NHN0b3JlNTEyX21hc2sgKChfX3Y4ZGkgKikgX19QLCAoX192OGRpKSBfX0EsCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21vdmVkdXBfcGQgKF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhkZilfX0EsIChfX3Y4ZGYpX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMiwgMiwgNCwgNCwgNiwgNik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tb3ZlZHVwX3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX21vdmVkdXBfcGQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbW92ZWR1cF9wZCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX21vdmVkdXBfcGQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCkpOworfQorCisjZGVmaW5lIF9tbTUxMl9maXh1cGltbV9yb3VuZF9wZChBLCBCLCBDLCBpbW0sIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9maXh1cGltbXBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZml4dXBpbW1fcm91bmRfcGQoQSwgVSwgQiwgQywgaW1tLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZml4dXBpbW1wZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfZml4dXBpbW1fcGQoQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZml4dXBpbW1wZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19maXh1cGltbV9wZChBLCBVLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9maXh1cGltbXBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZml4dXBpbW1fcm91bmRfcGQoVSwgQSwgQiwgQywgaW1tLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZml4dXBpbW1wZDUxMl9tYXNreigoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9maXh1cGltbV9wZChVLCBBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9maXh1cGltbXBkNTEyX21hc2t6KChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9maXh1cGltbV9yb3VuZF9wcyhBLCBCLCBDLCBpbW0sIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2ZpeHVwaW1tX3JvdW5kX3BzKEEsIFUsIEIsIEMsIGltbSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZml4dXBpbW1wczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9maXh1cGltbV9wcyhBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2ZpeHVwaW1tX3BzKEEsIFUsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZml4dXBpbW1wczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9maXh1cGltbV9yb3VuZF9wcyhVLCBBLCBCLCBDLCBpbW0sIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcHM1MTJfbWFza3ooKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2ZpeHVwaW1tX3BzKFUsIEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZml4dXBpbW1wczUxMl9tYXNreigoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX2ZpeHVwaW1tX3JvdW5kX3NkKEEsIEIsIEMsIGltbSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tc2RfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19maXh1cGltbV9yb3VuZF9zZChBLCBVLCBCLCBDLCBpbW0sIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9maXh1cGltbXNkX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9maXh1cGltbV9zZChBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9maXh1cGltbXNkX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2ZpeHVwaW1tX3NkKEEsIFUsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tc2RfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9maXh1cGltbV9yb3VuZF9zZChVLCBBLCBCLCBDLCBpbW0sIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9maXh1cGltbXNkX21hc2t6KChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfZml4dXBpbW1fc2QoVSwgQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZml4dXBpbW1zZF9tYXNreigoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW1fZml4dXBpbW1fcm91bmRfc3MoQSwgQiwgQywgaW1tLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9maXh1cGltbXNzX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2ZpeHVwaW1tX3JvdW5kX3NzKEEsIFUsIEIsIEMsIGltbSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZml4dXBpbW1zc19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2ZpeHVwaW1tX3NzKEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZml4dXBpbW1zc19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19maXh1cGltbV9zcyhBLCBVLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tc3NfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9maXh1cGltbV9yb3VuZF9zcyhVLCBBLCBCLCBDLCBpbW0sIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tc3NfbWFza3ooKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfZml4dXBpbW1fc3MoVSwgQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9maXh1cGltbXNzX21hc2t6KChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9nZXRleHBfcm91bmRfc2QoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2dldGV4cHNkMTI4X3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZ2V0ZXhwX3NkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwc2QxMjhfcm91bmRfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsIChfX3YyZGYpIF9tbV9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgLTEsIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19nZXRleHBfc2QgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKK3sKKyByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHNkMTI4X3JvdW5kX21hc2sgKCAoX192MmRmKSBfX0EsCisgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrX2dldGV4cF9yb3VuZF9zZChXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nZXRleHBzZDEyOF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9nZXRleHBfc2QgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQoreworIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwc2QxMjhfcm91bmRfbWFzayAoIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza3pfZ2V0ZXhwX3JvdW5kX3NkKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2dldGV4cHNkMTI4X3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fZ2V0ZXhwX3JvdW5kX3NzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dldGV4cHNzMTI4X3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2dldGV4cF9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHNzMTI4X3JvdW5kX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsIChfX3Y0c2YpICBfbW1fc2V0emVyb19wcygpLCAoX19tbWFzazgpIC0xLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19nZXRleHBfc3MgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikKK3sKKyByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwc3MxMjhfcm91bmRfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza19nZXRleHBfcm91bmRfc3MoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9nZXRleHBzczEyOF9yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2dldGV4cF9zcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9nZXRleHBzczEyOF9yb3VuZF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2t6X2dldGV4cF9yb3VuZF9zcyhVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dldGV4cHNzMTI4X3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2dldG1hbnRfcm91bmRfc2QoQSwgQiwgQywgRCwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2dldG1hbnRzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoRCk8PDIpIHwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2dldG1hbnRfc2QoQSwgQiwgQywgRCkgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nZXRtYW50c2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEQpPDwyKSB8IChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2dldG1hbnRfc2QoVywgVSwgQSwgQiwgQywgRCkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZ2V0bWFudHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChEKTw8MikgfCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19nZXRtYW50X3JvdW5kX3NkKFcsIFUsIEEsIEIsIEMsIEQsIFIpKHtcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2dldG1hbnRzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoRCk8PDIpIHwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2dldG1hbnRfc2QoVSwgQSwgQiwgQywgRCkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZ2V0bWFudHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChEKTw8MikgfCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2dldG1hbnRfcm91bmRfc2QoVSwgQSwgQiwgQywgRCwgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZ2V0bWFudHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChEKTw8MikgfCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2dldG1hbnRfcm91bmRfc3MoQSwgQiwgQywgRCwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZ2V0bWFudHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEQpPDwyKSB8IChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fZ2V0bWFudF9zcyhBLCBCLCBDLCBEKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9nZXRtYW50c3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoRCk8PDIpIHwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfZ2V0bWFudF9zcyhXLCBVLCBBLCBCLCBDLCBEKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dldG1hbnRzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChEKTw8MikgfCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2dldG1hbnRfcm91bmRfc3MoVywgVSwgQSwgQiwgQywgRCwgUikoe1wKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9nZXRtYW50c3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoRCk8PDIpIHwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2dldG1hbnRfc3MoVSwgQSwgQiwgQywgRCkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9nZXRtYW50c3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoRCk8PDIpIHwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9nZXRtYW50X3JvdW5kX3NzKFUsIEEsIEIsIEMsIEQsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZ2V0bWFudHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEQpPDwyKSB8IChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9rbW92IChfX21tYXNrMTYgX19BKQoreworICByZXR1cm4gIF9fQTsKK30KKworI2RlZmluZSBfbW1fY29taV9yb3VuZF9zZChBLCBCLCBQLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoaW50KV9fYnVpbHRpbl9pYTMyX3Zjb21pc2QoKF9fdjJkZikoX19tMTI4ZCkoQSksIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShQKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9jb21pX3JvdW5kX3NzKEEsIEIsIFAsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChpbnQpX19idWlsdGluX2lhMzJfdmNvbWlzcygoX192NHNmKShfX20xMjgpKEEpLCAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShQKSwgKGludCkoUikpOyB9KQorCisjaWZkZWYgX194ODZfNjRfXworI2RlZmluZSBfbW1fY3Z0X3JvdW5kc2Rfc2k2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKGxvbmcgbG9uZylfX2J1aWx0aW5faWEzMl92Y3Z0c2Qyc2k2NCgoX192MmRmKShfX20xMjhkKShBKSwgKGludCkoUikpOyB9KQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFzazJfcGVybXV0ZXgydmFyX2VwaTMyIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0ksCisgICAgICAgICBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFyZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zbGxfZXBpMzIgKF9fbTUxMmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2xsZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zbGxfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNsbGQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NsbF9lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzbGxkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2xsX2VwaTY0IChfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNsbHE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc2xsX2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNsbHE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NsbF9lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNsbHE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zbGx2X2VwaTMyIChfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNsbHYxNnNpX21hc2sgKChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc2xsdl9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjE2c2lfbWFzayAoKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zbGx2X2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNsbHYxNnNpX21hc2sgKChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zbGx2X2VwaTY0IChfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNsbHY4ZGlfbWFzayAoKF9fdjhkaSkgX19YLAorICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWSwKKyAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgIF9tbTUxMl91bmRlZmluZWRfcGQgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zbGx2X2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNsbHY4ZGlfbWFzayAoKF9fdjhkaSkgX19YLAorICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWSwKKyAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NsbHZfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzbGx2OGRpX21hc2sgKChfX3Y4ZGkpIF9fWCwKKyAgICAgICAgICAgICAoX192OGRpKSBfX1ksCisgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3JhX2VwaTMyIChfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNyYWQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3JhX2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzcmFkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zcmFfZXBpMzIgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JhZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NyYV9lcGk2NCAoX19tNTEyaSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzcmFxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NyYV9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzcmFxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zcmFfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzcmFxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3Jhdl9lcGkzMiAoX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzcmF2MTZzaV9tYXNrICgoX192MTZzaSkgX19YLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19ZLAorICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NyYXZfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNyYXYxNnNpX21hc2sgKChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3Jhdl9lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzcmF2MTZzaV9tYXNrICgoX192MTZzaSkgX19YLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19ZLAorICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3Jhdl9lcGk2NCAoX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzcmF2OGRpX21hc2sgKChfX3Y4ZGkpIF9fWCwKKyAgICAgICAgICAgICAoX192OGRpKSBfX1ksCisgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NyYXZfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JhdjhkaV9tYXNrICgoX192OGRpKSBfX1gsCisgICAgICAgICAgICAgKF9fdjhkaSkgX19ZLAorICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3Jhdl9lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNyYXY4ZGlfbWFzayAoKF9fdjhkaSkgX19YLAorICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWSwKKyAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zcmxfZXBpMzIgKF9fbTUxMmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JsZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zcmxfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNybGQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NybF9lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzcmxkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3JsX2VwaTY0IChfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNybHE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3JsX2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNybHE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NybF9lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNybHE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zcmx2X2VwaTMyIChfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNybHYxNnNpX21hc2sgKChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3Jsdl9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JsdjE2c2lfbWFzayAoKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zcmx2X2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNybHYxNnNpX21hc2sgKChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zcmx2X2VwaTY0IChfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHNybHY4ZGlfbWFzayAoKF9fdjhkaSkgX19YLAorICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWSwKKyAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3Jsdl9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bzcmx2OGRpX21hc2sgKChfX3Y4ZGkpIF9fWCwKKyAgICAgICAgICAgICAoX192OGRpKSBfX1ksCisgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zcmx2X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3JsdjhkaV9tYXNrICgoX192OGRpKSBfX1gsCisgICAgICAgICAgICAgKF9fdjhkaSkgX19ZLAorICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCisjZGVmaW5lIF9tbTUxMl90ZXJuYXJ5bG9naWNfZXBpMzIoQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHRlcm5sb2dkNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfdGVybmFyeWxvZ2ljX2VwaTMyKEEsIFUsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3B0ZXJubG9nZDUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfdGVybmFyeWxvZ2ljX2VwaTMyKFUsIEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3B0ZXJubG9nZDUxMl9tYXNreigoX192MTZzaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCAoX19tbWFzazE2KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3Rlcm5hcnlsb2dpY19lcGk2NChBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wdGVybmxvZ3E1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3Rlcm5hcnlsb2dpY19lcGk2NChBLCBVLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9wdGVybmxvZ3E1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfdGVybmFyeWxvZ2ljX2VwaTY0KFUsIEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3B0ZXJubG9ncTUxMl9tYXNreigoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2lmZGVmIF9feDg2XzY0X18KKyNkZWZpbmUgX21tX2N2dF9yb3VuZHNkX2k2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKGxvbmcgbG9uZylfX2J1aWx0aW5faWEzMl92Y3Z0c2Qyc2k2NCgoX192MmRmKShfX20xMjhkKShBKSwgKGludCkoUikpOyB9KQorI2VuZGlmCisKKyNkZWZpbmUgX21tX2N2dF9yb3VuZHNkX3NpMzIoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChpbnQpX19idWlsdGluX2lhMzJfdmN2dHNkMnNpMzIoKF9fdjJkZikoX19tMTI4ZCkoQSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fY3Z0X3JvdW5kc2RfaTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoaW50KV9fYnVpbHRpbl9pYTMyX3ZjdnRzZDJzaTMyKChfX3YyZGYpKF9fbTEyOGQpKEEpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2N2dF9yb3VuZHNkX3UzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKHVuc2lnbmVkIGludClfX2J1aWx0aW5faWEzMl92Y3Z0c2QydXNpMzIoKF9fdjJkZikoX19tMTI4ZCkoQSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2RfdTMyIChfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuICh1bnNpZ25lZCkgX19idWlsdGluX2lhMzJfdmN2dHNkMnVzaTMyICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KKyNkZWZpbmUgX21tX2N2dF9yb3VuZHNkX3U2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5faWEzMl92Y3Z0c2QydXNpNjQoKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2RfdTY0IChfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpIF9fYnVpbHRpbl9pYTMyX3ZjdnRzZDJ1c2k2NCAoKF9fdjJkZikKKyAgICAgICAgICAgICAgICAgX19BLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorI2VuZGlmCisKKyNkZWZpbmUgX21tX2N2dF9yb3VuZHNzX3NpMzIoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChpbnQpX19idWlsdGluX2lhMzJfdmN2dHNzMnNpMzIoKF9fdjRzZikoX19tMTI4KShBKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9jdnRfcm91bmRzc19pMzIoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChpbnQpX19idWlsdGluX2lhMzJfdmN2dHNzMnNpMzIoKF9fdjRzZikoX19tMTI4KShBKSwgKGludCkoUikpOyB9KQorCisjaWZkZWYgX194ODZfNjRfXworI2RlZmluZSBfbW1fY3Z0X3JvdW5kc3Nfc2k2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKGxvbmcgbG9uZylfX2J1aWx0aW5faWEzMl92Y3Z0c3Myc2k2NCgoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2N2dF9yb3VuZHNzX2k2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKGxvbmcgbG9uZylfX2J1aWx0aW5faWEzMl92Y3Z0c3Myc2k2NCgoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShSKSk7IH0pCisjZW5kaWYKKworI2RlZmluZSBfbW1fY3Z0X3JvdW5kc3NfdTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAodW5zaWduZWQgaW50KV9fYnVpbHRpbl9pYTMyX3ZjdnRzczJ1c2kzMigoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNzX3UzMiAoX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuICh1bnNpZ25lZCkgX19idWlsdGluX2lhMzJfdmN2dHNzMnVzaTMyICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KKyNkZWZpbmUgX21tX2N2dF9yb3VuZHNzX3U2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5faWEzMl92Y3Z0c3MydXNpNjQoKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzc191NjQgKF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKSBfX2J1aWx0aW5faWEzMl92Y3Z0c3MydXNpNjQgKChfX3Y0c2YpCisgICAgICAgICAgICAgICAgIF9fQSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKyNlbmRpZgorCisjZGVmaW5lIF9tbV9jdnR0X3JvdW5kc2RfaTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoaW50KV9fYnVpbHRpbl9pYTMyX3ZjdnR0c2Qyc2kzMigoX192MmRmKShfX20xMjhkKShBKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9jdnR0X3JvdW5kc2Rfc2kzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKGludClfX2J1aWx0aW5faWEzMl92Y3Z0dHNkMnNpMzIoKF9fdjJkZikoX19tMTI4ZCkoQSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRzZF9pMzIgKF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKGludCkgX19idWlsdGluX2lhMzJfdmN2dHRzZDJzaTMyICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCisjZGVmaW5lIF9tbV9jdnR0X3JvdW5kc2Rfc2k2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKGxvbmcgbG9uZylfX2J1aWx0aW5faWEzMl92Y3Z0dHNkMnNpNjQoKF9fdjJkZikoX19tMTI4ZCkoQSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fY3Z0dF9yb3VuZHNkX2k2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKGxvbmcgbG9uZylfX2J1aWx0aW5faWEzMl92Y3Z0dHNkMnNpNjQoKF9fdjJkZikoX19tMTI4ZCkoQSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRzZF9pNjQgKF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKGxvbmcgbG9uZykgX19idWlsdGluX2lhMzJfdmN2dHRzZDJzaTY0ICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisjZW5kaWYKKworI2RlZmluZSBfbW1fY3Z0dF9yb3VuZHNkX3UzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKHVuc2lnbmVkIGludClfX2J1aWx0aW5faWEzMl92Y3Z0dHNkMnVzaTMyKChfX3YyZGYpKF9fbTEyOGQpKEEpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRzZF91MzIgKF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKHVuc2lnbmVkKSBfX2J1aWx0aW5faWEzMl92Y3Z0dHNkMnVzaTMyICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCisjZGVmaW5lIF9tbV9jdnR0X3JvdW5kc2RfdTY0KEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAodW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9pYTMyX3ZjdnR0c2QydXNpNjQoKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRzZF91NjQgKF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZykgX19idWlsdGluX2lhMzJfdmN2dHRzZDJ1c2k2NCAoKF9fdjJkZikKKyAgICAgICAgICAgICAgICAgIF9fQSwKKyAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisjZW5kaWYKKworI2RlZmluZSBfbW1fY3Z0dF9yb3VuZHNzX2kzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKGludClfX2J1aWx0aW5faWEzMl92Y3Z0dHNzMnNpMzIoKF9fdjRzZikoX19tMTI4KShBKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9jdnR0X3JvdW5kc3Nfc2kzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKGludClfX2J1aWx0aW5faWEzMl92Y3Z0dHNzMnNpMzIoKF9fdjRzZikoX19tMTI4KShBKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHNzX2kzMiAoX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChpbnQpIF9fYnVpbHRpbl9pYTMyX3ZjdnR0c3Myc2kzMiAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjaWZkZWYgX194ODZfNjRfXworI2RlZmluZSBfbW1fY3Z0dF9yb3VuZHNzX2k2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKGxvbmcgbG9uZylfX2J1aWx0aW5faWEzMl92Y3Z0dHNzMnNpNjQoKF9fdjRzZikoX19tMTI4KShBKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9jdnR0X3JvdW5kc3Nfc2k2NChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKGxvbmcgbG9uZylfX2J1aWx0aW5faWEzMl92Y3Z0dHNzMnNpNjQoKF9fdjRzZikoX19tMTI4KShBKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHNzX2k2NCAoX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChsb25nIGxvbmcpIF9fYnVpbHRpbl9pYTMyX3ZjdnR0c3Myc2k2NCAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorI2VuZGlmCisKKyNkZWZpbmUgX21tX2N2dHRfcm91bmRzc191MzIoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgICh1bnNpZ25lZCBpbnQpX19idWlsdGluX2lhMzJfdmN2dHRzczJ1c2kzMigoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRzc191MzIgKF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAodW5zaWduZWQpIF9fYnVpbHRpbl9pYTMyX3ZjdnR0c3MydXNpMzIgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KKyNkZWZpbmUgX21tX2N2dHRfcm91bmRzc191NjQoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgICh1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX2lhMzJfdmN2dHRzczJ1c2k2NCgoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0c3NfdTY0IChfX20xMjggX19BKQoreworICByZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZykgX19idWlsdGluX2lhMzJfdmN2dHRzczJ1c2k2NCAoKF9fdjRzZikKKyAgICAgICAgICAgICAgICAgIF9fQSwKKyAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrMl9wZXJtdXRleDJ2YXJfcGQgKF9fbTUxMmQgX19BLCBfX201MTJpIF9fSSwgX19tbWFzazggX19VLAorICAgICAgICAgICAgX19tNTEyZCBfX0IpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFzazJfcGVybXV0ZXgydmFyX3BzIChfX201MTIgX19BLCBfX201MTJpIF9fSSwgX19tbWFzazE2IF9fVSwKKyAgICAgICAgICAgIF9fbTUxMiBfX0IpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFycHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFzazJfcGVybXV0ZXgydmFyX2VwaTY0IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0ksCisgICAgICAgICBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tNTEyX3Blcm11dGVfcGQoWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4ZGYpKF9fbTUxMmQpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChDKSA+PiAwKSAmIDB4MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKEMpID4+IDEpICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICsgKCgoQykgPj4gMikgJiAweDEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKyAoKChDKSA+PiAzKSAmIDB4MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKEMpID4+IDQpICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoQykgPj4gNSkgJiAweDEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgKyAoKChDKSA+PiA2KSAmIDB4MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiArICgoKEMpID4+IDcpICYgMHgxKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcGVybXV0ZV9wZChXLCBVLCBYLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3Blcm11dGVfcGQoKFgpLCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3Blcm11dGVfcGQoVSwgWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9wZXJtdXRlX3BkKChYKSwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpKTsgfSkKKworI2RlZmluZSBfbW01MTJfcGVybXV0ZV9wcyhYLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZzZikoX19tNTEyKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl91bmRlZmluZWRfcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICArICgoKEMpID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICArICgoKEMpID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICArICgoKEMpID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICArICgoKEMpID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICArICgoKEMpID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICArICgoKEMpID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICArICgoKEMpID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICArICgoKEMpID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICArICgoKEMpID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICArICgoKEMpID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICArICgoKEMpID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICArICgoKEMpID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKEMpID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKEMpID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKEMpID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKEMpID4+IDYpICYgMHgzKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcGVybXV0ZV9wcyhXLCBVLCBYLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc181MTIoKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3Blcm11dGVfcHMoKFgpLCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFcpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcGVybXV0ZV9wcyhVLCBYLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc181MTIoKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3Blcm11dGVfcHMoKFgpLCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Blcm11dGV2YXJfcGQgKF9fbTUxMmQgX19BLCBfX201MTJpIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92cGVybWlsdmFycGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAoX192OGRpKSBfX0MsCisgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgIF9tbTUxMl91bmRlZmluZWRfcGQgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcGVybXV0ZXZhcl9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmkgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaWx2YXJwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQywKKyAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcGVybXV0ZXZhcl9wZCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyaSBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19DLAorICAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcGVybXV0ZXZhcl9wcyAoX19tNTEyIF9fQSwgX19tNTEyaSBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92cGVybWlsdmFycHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19DLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgICAgICAgIF9tbTUxMl91bmRlZmluZWRfcHMgKCksCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19wZXJtdXRldmFyX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTJpIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaWx2YXJwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0MsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcGVybXV0ZXZhcl9wcyAoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyaSBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92cGVybWlsdmFycHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19DLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Blcm11dGV4MnZhcl9wZChfX201MTJkIF9fQSwgX19tNTEyaSBfX0ksIF9fbTUxMmQgX19CKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwZDUxMl9tYXNrICgoX192OGRpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcGVybXV0ZXgydmFyX3BkIChfX201MTJkIF9fQSwgX19tbWFzazggX19VLCBfX201MTJpIF9fSSwgX19tNTEyZCBfX0IpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBkNTEyX21hc2sgKChfX3Y4ZGkpIF9fSQorICAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3Blcm11dGV4MnZhcl9wZCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyaSBfX0ksCisgICAgICAgICAgICBfX201MTJkIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycGQ1MTJfbWFza3ogKChfX3Y4ZGkpIF9fSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9wZXJtdXRleDJ2YXJfcHMoX19tNTEyIF9fQSwgX19tNTEyaSBfX0ksIF9fbTUxMiBfX0IpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycHM1MTJfbWFzayAoKF9fdjE2c2kpIF9fSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19wZXJtdXRleDJ2YXJfcHMgKF9fbTUxMiBfX0EsIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19JLCBfX201MTIgX19CKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBzNTEyX21hc2sgKChfX3YxNnNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9wZXJtdXRleDJ2YXJfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMmkgX19JLAorICAgICAgICAgICAgX19tNTEyIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwczUxMl9tYXNreiAoKF9fdjE2c2kpIF9fSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdGVzdG5fZXBpMzJfbWFzayAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2sxNikgX19idWlsdGluX2lhMzJfcHRlc3RubWQ1MTIgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3Rlc3RuX2VwaTMyX21hc2sgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bm1kNTEyICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Rlc3RuX2VwaTY0X21hc2sgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrOCkgX19idWlsdGluX2lhMzJfcHRlc3RubXE1MTIgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3Rlc3RuX2VwaTY0X21hc2sgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tcTUxMiAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgKF9fdjhkaSkgX19CLCBfX1UpOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnR0X3JvdW5kcGRfZXB1MzIoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1ZHE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfdW5kZWZpbmVkX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dHRfcm91bmRwZF9lcHUzMihXLCBVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfY3Z0dHBkMnVkcTUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9jdnR0X3JvdW5kcGRfZXB1MzIoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1ZHE1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0dHBkX2VwdTMyIChfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydWRxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgICAgICBfbW0yNTZfdW5kZWZpbmVkX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnR0cGRfZXB1MzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1ZHE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHRwZF9lcHUzMiAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydWRxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fcm91bmRzY2FsZV9yb3VuZF9zZChBLCBCLCBpbW0sIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9yb3VuZHNjYWxlX3NkKEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlc2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3JvdW5kc2NhbGVfc2QoVywgVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcm5kc2NhbGVzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcm91bmRzY2FsZV9yb3VuZF9zZChXLCBVLCBBLCBCLCBJLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcm5kc2NhbGVzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JvdW5kc2NhbGVfc2QoVSwgQSwgQiwgSSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlc2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoSSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JvdW5kc2NhbGVfcm91bmRfc2QoVSwgQSwgQiwgSSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlc2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoSSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fcm91bmRzY2FsZV9yb3VuZF9zcyhBLCBCLCBpbW0sIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlc3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX3JvdW5kc2NhbGVfc3MoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19yb3VuZHNjYWxlX3NzKFcsIFUsIEEsIEIsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlc3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShJKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3JvdW5kc2NhbGVfcm91bmRfc3MoVywgVSwgQSwgQiwgSSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcm5kc2NhbGVzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcm91bmRzY2FsZV9zcyhVLCBBLCBCLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShJKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9yb3VuZHNjYWxlX3JvdW5kX3NzKFUsIEEsIEIsIEksIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlc3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfc2NhbGVmX3JvdW5kX3BkKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zY2FsZWZwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl91bmRlZmluZWRfcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3NjYWxlZl9yb3VuZF9wZChXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2NhbGVmcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3NjYWxlZl9yb3VuZF9wZChVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2NhbGVmcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NjYWxlZl9wZCAoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICBfbW01MTJfdW5kZWZpbmVkX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NjYWxlZl9wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc2NhbGVmX3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfc2NhbGVmX3JvdW5kX3BzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NjYWxlZnBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19zY2FsZWZfcm91bmRfcHMoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfc2NhbGVmcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9zY2FsZWZfcm91bmRfcHMoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfc2NhbGVmcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zY2FsZWZfcHMgKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgICAgX21tNTEyX3VuZGVmaW5lZF9wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAorICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc2NhbGVmX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfc2NhbGVmcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3NjYWxlZl9wcyAoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX3NjYWxlZl9yb3VuZF9zZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc2NhbGVmc2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2NhbGVmX3NkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc2NhbGVmc2Rfcm91bmRfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAoX192MmRmKSggX19CKSwgKF9fdjJkZikgX21tX3NldHplcm9fcGQoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NjYWxlZl9zZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQoreworIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc2NhbGVmc2Rfcm91bmRfbWFzayAoIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrX3NjYWxlZl9yb3VuZF9zZChXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc2NhbGVmc2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc2NhbGVmX3NkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKK3sKKyByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnNkX3JvdW5kX21hc2sgKCAoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrel9zY2FsZWZfcm91bmRfc2QoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NjYWxlZnNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fc2NhbGVmX3JvdW5kX3NzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3NjYWxlZnNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NjYWxlZl9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnNzX3JvdW5kX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNmKSggX19CKSwgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NjYWxlZl9zcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zY2FsZWZzc19yb3VuZF9tYXNrICggKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza19zY2FsZWZfcm91bmRfc3MoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfc2NhbGVmc3Nfcm91bmRfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zY2FsZWZfc3MgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikKK3sKKyByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc2NhbGVmc3Nfcm91bmRfbWFzayAoIChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2t6X3NjYWxlZl9yb3VuZF9zcyhVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zY2FsZWZzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfc3JhaV9lcGkzMihBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNyYWRpNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3NyYWlfZXBpMzIoVywgVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BzcmFkaTUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfc3JhaV9lcGkzMihVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNyYWRpNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfc3JhaV9lcGk2NChBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNyYXFpNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3NyYWlfZXBpNjQoVywgVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3BzcmFxaTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfc3JhaV9lcGk2NChVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfcHNyYXFpNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfc2h1ZmZsZV9mMzJ4NChBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NodWZfZjMyeDRfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc2h1ZmZsZV9mMzJ4NChXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NodWZfZjMyeDRfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3NodWZmbGVfZjMyeDQoVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zaHVmX2YzMng0X21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3NodWZmbGVfZjY0eDIoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2h1Zl9mNjR4Ml9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc2h1ZmZsZV9mNjR4MihXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9zaHVmX2Y2NHgyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3NodWZmbGVfZjY0eDIoVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2h1Zl9mNjR4Ml9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfc2h1ZmZsZV9pMzJ4NChBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zaHVmX2kzMng0X21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3NodWZmbGVfaTMyeDQoVywgVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2h1Zl9pMzJ4NF9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfc2h1ZmZsZV9pMzJ4NChVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zaHVmX2kzMng0X21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfc2h1ZmZsZV9pNjR4MihBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zaHVmX2k2NHgyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc2h1ZmZsZV9pNjR4MihXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zaHVmX2k2NHgyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3NodWZmbGVfaTY0eDIoVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2h1Zl9pNjR4Ml9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfc2h1ZmZsZV9wZChBLCBCLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgKyAoKChNKSA+PiAwKSAmIDB4MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgKyAoKChNKSA+PiAxKSAmIDB4MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgKyAoKChNKSA+PiAyKSAmIDB4MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgKyAoKChNKSA+PiAzKSAmIDB4MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgKyAoKChNKSA+PiA0KSAmIDB4MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIgKyAoKChNKSA+PiA1KSAmIDB4MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgKyAoKChNKSA+PiA2KSAmIDB4MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQgKyAoKChNKSA+PiA3KSAmIDB4MSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3NodWZmbGVfcGQoVywgVSwgQSwgQiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zaHVmZmxlX3BkKChBKSwgKEIpLCAoTSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3NodWZmbGVfcGQoVSwgQSwgQiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zaHVmZmxlX3BkKChBKSwgKEIpLCAoTSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9zaHVmZmxlX3BzKEEsIEIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICArICgoKE0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICArICgoKE0pID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiArICgoKE0pID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiArICgoKE0pID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICArICgoKE0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICArICgoKE0pID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCArICgoKE0pID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCArICgoKE0pID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICArICgoKE0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICArICgoKE0pID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCArICgoKE0pID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCArICgoKE0pID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKE0pID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKE0pID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCArICgoKE0pID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCArICgoKE0pID4+IDYpICYgMHgzKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc2h1ZmZsZV9wcyhXLCBVLCBBLCBCLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc181MTIoKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NodWZmbGVfcHMoKEEpLCAoQiksIChNKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVykpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9zaHVmZmxlX3BzKFUsIEEsIEIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2h1ZmZsZV9wcygoQSksIChCKSwgKE0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpKTsgfSkKKworI2RlZmluZSBfbW1fc3FydF9yb3VuZF9zZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc3FydHNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3FydF9zZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQoreworIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc3FydHNkX3JvdW5kX21hc2sgKCAoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza19zcXJ0X3JvdW5kX3NkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zcXJ0c2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3FydF9zZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCit7CisgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zcXJ0c2Rfcm91bmRfbWFzayAoIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2t6X3NxcnRfcm91bmRfc2QoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NxcnRzZF9yb3VuZF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX3NxcnRfcm91bmRfc3MoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfc3FydHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3FydF9zcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zcXJ0c3Nfcm91bmRfbWFzayAoIChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrX3NxcnRfcm91bmRfc3MoVywgVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfc3FydHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3FydF9zcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zcXJ0c3Nfcm91bmRfbWFzayAoIChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2t6X3NxcnRfcm91bmRfc3MoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfc3FydHNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RfZjMyeDQgKF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RmMzJ4NF81MTIgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgICAgIF9tbTUxMl91bmRlZmluZWRfcHMgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYnJvYWRjYXN0X2YzMng0IChfX201MTIgX19PLCBfX21tYXNrMTYgX19NLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjMyeDRfNTEyICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX08sCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9icm9hZGNhc3RfZjMyeDQgKF9fbW1hc2sxNiBfX00sIF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RmMzJ4NF81MTIgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Jyb2FkY2FzdF9mNjR4NCAoX19tMjU2ZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjY0eDRfNTEyICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgICAgICAgX21tNTEyX3VuZGVmaW5lZF9wZCAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYnJvYWRjYXN0X2Y2NHg0IChfX201MTJkIF9fTywgX19tbWFzazggX19NLCBfX20yNTZkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RmNjR4NF81MTIgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fTywKKyAgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYnJvYWRjYXN0X2Y2NHg0IChfX21tYXNrOCBfX00sIF9fbTI1NmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGY2NHg0XzUxMiAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RfaTMyeDQgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGkzMng0XzUxMiAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgICAgICBfbW01MTJfdW5kZWZpbmVkX2VwaTMyICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYnJvYWRjYXN0X2kzMng0IChfX201MTJpIF9fTywgX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTMyeDRfNTEyICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19PLAorICAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9icm9hZGNhc3RfaTMyeDQgKF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGkzMng0XzUxMiAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYnJvYWRjYXN0X2k2NHg0IChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RpNjR4NF81MTIgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgICAgICBfbW01MTJfdW5kZWZpbmVkX2VwaTMyICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19icm9hZGNhc3RfaTY0eDQgKF9fbTUxMmkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGk2NHg0XzUxMiAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19PLAorICAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9icm9hZGNhc3RfaTY0eDQgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTY0eDRfNTEyICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYnJvYWRjYXN0c2RfcGQgKF9fbTUxMmQgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKF9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfYnJvYWRjYXN0c2RfcGQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX08pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2Jyb2FkY2FzdHNkX3BkIChfX21tYXNrOCBfX00sIF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKF9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfYnJvYWRjYXN0c2RfcGQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYnJvYWRjYXN0c3NfcHMgKF9fbTUxMiBfX08sIF9fbW1hc2sxNiBfX00sIF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX21tNTEyX2Jyb2FkY2FzdHNzX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19PKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2Jyb2FkY2FzdHNzX3BzIChfX21tYXNrMTYgX19NLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc181MTIoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9icm9hZGNhc3Rzc19wcyhfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHNlcGkzMl9lcGk4IChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c2RiNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3VuZGVmaW5lZF9zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHNlcGkzMl9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNkYjUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRzZXBpMzJfZXBpOCAoX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNkYjUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHNlcGkzMl9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZGI1MTJtZW1fbWFzayAoKF9fdjE2cWkgKikgX19QLCAoX192MTZzaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHNlcGkzMl9lcGkxNiAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnNkdzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl91bmRlZmluZWRfc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRzZXBpMzJfZXBpMTYgKF9fbTI1NmkgX19PLCBfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92c2R3NTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHNlcGkzMl9lcGkxNiAoX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnNkdzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHNlcGkzMl9zdG9yZXVfZXBpMTYgKHZvaWQgKl9fUCwgX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZHc1MTJtZW1fbWFzayAoKF9fdjE2aGkqKSBfX1AsIChfX3YxNnNpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0c2VwaTY0X2VwaTggKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWI1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV91bmRlZmluZWRfc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHNlcGk2NF9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3FiNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0c2VwaTY0X2VwaTggKF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNxYjUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0c2VwaTY0X3N0b3JldV9lcGk4ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92c3FiNTEybWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjhkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHNlcGk2NF9lcGkzMiAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnNxZDUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfdW5kZWZpbmVkX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRzZXBpNjRfZXBpMzIgKF9fbTI1NmkgX19PLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHNlcGk2NF9lcGkzMiAoX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92c3FkNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2kpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHNlcGk2NF9zdG9yZXVfZXBpMzIgKHZvaWQgKl9fUCwgX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnNxZDUxMm1lbV9tYXNrICgoX192OHNpICopIF9fUCwgKF9fdjhkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHNlcGk2NF9lcGkxNiAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNxdzUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fdW5kZWZpbmVkX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRzZXBpNjRfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcXc1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHNlcGk2NF9lcGkxNiAoX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3F3NTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHNlcGk2NF9zdG9yZXVfZXBpMTYgKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcXc1MTJtZW1fbWFzayAoKF9fdjhoaSAqKSBfX1AsIChfX3Y4ZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR1c2VwaTMyX2VwaTggKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2RiNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV91bmRlZmluZWRfc2kxMjggKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0dXNlcGkzMl9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzZGI1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX19PLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0dXNlcGkzMl9lcGk4IChfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNkYjUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0dXNlcGkzMl9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2RiNTEybWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjE2c2kpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR1c2VwaTMyX2VwaTE2IChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNkdzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfdW5kZWZpbmVkX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHVzZXBpMzJfZXBpMTYgKF9fbTI1NmkgX19PLCBfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNkdzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX08sCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnR1c2VwaTMyX2VwaTE2IChfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNkdzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0dXNlcGkzMl9zdG9yZXVfZXBpMTYgKHZvaWQgKl9fUCwgX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2R3NTEybWVtX21hc2sgKChfX3YxNmhpKikgX19QLCAoX192MTZzaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHVzZXBpNjRfZXBpOCAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzcWI1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fdW5kZWZpbmVkX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0dXNlcGk2NF9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxYjUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHVzZXBpNjRfZXBpOCAoX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxYjUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnR1c2VwaTY0X3N0b3JldV9lcGk4ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92dXNxYjUxMm1lbV9tYXNrICgoX192MTZxaSAqKSBfX1AsIChfX3Y4ZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR1c2VwaTY0X2VwaTMyIChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxZDUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhzaSkgX21tMjU2X3VuZGVmaW5lZF9zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHVzZXBpNjRfZXBpMzIgKF9fbTI1NmkgX19PLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FkNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0dXNlcGk2NF9lcGkzMiAoX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxZDUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhzaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHVzZXBpNjRfc3RvcmV1X2VwaTMyICh2b2lkKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FkNTEybWVtX21hc2sgKChfX3Y4c2kqKSBfX1AsIChfX3Y4ZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR1c2VwaTY0X2VwaTE2IChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxdzUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3VuZGVmaW5lZF9zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHVzZXBpNjRfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3F3NTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGhpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0dXNlcGk2NF9lcGkxNiAoX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxdzUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHVzZXBpNjRfc3RvcmV1X2VwaTE2ICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3F3NTEybWVtX21hc2sgKChfX3Y4aGkqKSBfX1AsIChfX3Y4ZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcGkzMl9lcGk4IChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92ZGI1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV91bmRlZmluZWRfc2kxMjggKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaTMyX2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92ZGI1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcGkzMl9lcGk4IChfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92ZGI1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpMzJfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92ZGI1MTJtZW1fbWFzayAoKF9fdjE2cWkgKikgX19QLCAoX192MTZzaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwaTMyX2VwaTE2IChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92ZHc1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl91bmRlZmluZWRfc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaTMyX2VwaTE2IChfX20yNTZpIF9fTywgX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdmR3NTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNmhpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0ZXBpMzJfZXBpMTYgKF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZkdzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcGkzMl9zdG9yZXVfZXBpMTYgKHZvaWQgKiBfX1AsIF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92ZHc1MTJtZW1fbWFzayAoKF9fdjE2aGkgKikgX19QLCAoX192MTZzaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwaTY0X2VwaTggKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxYjUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fdW5kZWZpbmVkX3NpMTI4ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaTY0X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxYjUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0ZXBpNjRfZXBpOCAoX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92cWI1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcGk2NF9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnFiNTEybWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjhkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwaTY0X2VwaTMyIChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92cWQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfdW5kZWZpbmVkX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaTY0X2VwaTMyIChfX20yNTZpIF9fTywgX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92cWQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAoX192OHNpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0ZXBpNjRfZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnFkNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcGk2NF9zdG9yZXVfZXBpMzIgKHZvaWQqIF9fUCwgX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnFkNTEybWVtX21hc2sgKChfX3Y4c2kgKikgX19QLCAoX192OGRpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXBpNjRfZXBpMTYgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxdzUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV91bmRlZmluZWRfc2kxMjggKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpNjRfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxdzUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4aGkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcGk2NF9lcGkxNiAoX19tbWFzazggX19NLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92cXc1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaTY0X3N0b3JldV9lcGkxNiAodm9pZCAqX19QLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92cXc1MTJtZW1fbWFzayAoKF9fdjhoaSAqKSBfX1AsIChfX3Y4ZGkpIF9fQSwgX19NKTsKK30KKworI2RlZmluZSBfbW01MTJfZXh0cmFjdGkzMng0X2VwaTMyKEEsIGltbSkgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgIFwKKyAgKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2c2kpKF9fbTUxMmkpKEEpLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl91bmRlZmluZWRfZXBpMzIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKChpbW0pICYgMHgzKSAqIDQsICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSArICgoaW1tKSAmIDB4MykgKiA0LCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKyAoKGltbSkgJiAweDMpICogNCwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzICsgKChpbW0pICYgMHgzKSAqIDQpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2V4dHJhY3RpMzJ4NF9lcGkzMihXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19VLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tNTEyX2V4dHJhY3RpMzJ4NF9lcGkzMigoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9fVyk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2V4dHJhY3RpMzJ4NF9lcGkzMihVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19VLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tNTEyX2V4dHJhY3RpMzJ4NF9lcGkzMigoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9leHRyYWN0aTY0eDRfZXBpNjQoQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4ZGkpKF9fbTUxMmkpKEEpLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3VuZGVmaW5lZF9lcGkzMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDEpID8gNCA6IDAsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDEpID8gNSA6IDEsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDEpID8gNiA6IDIsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDEpID8gNyA6IDMpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2V4dHJhY3RpNjR4NF9lcGk2NChXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW01MTJfZXh0cmFjdGk2NHg0X2VwaTY0KChBKSwgKGltbSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX19XKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZXh0cmFjdGk2NHg0X2VwaTY0KFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMjU2KChfX21tYXNrOClfX1UsICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTUxMl9leHRyYWN0aTY0eDRfZXBpNjQoKEEpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsgfSkKKworI2RlZmluZSBfbW01MTJfaW5zZXJ0ZjY0eDQoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX2Nhc3RwZDI1Nl9wZDUxMigoX19tMjU2ZCkoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gIDAgOiAgOCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/ICAxIDogIDksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAgMiA6IDEwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gIDMgOiAxMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/ICA4IDogIDQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAgOSA6ICA1LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gMTAgOiAgNiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/IDExIDogIDcpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2luc2VydGY2NHg0KFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfaW5zZXJ0ZjY0eDQoKEEpLCAoQiksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKFcpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfaW5zZXJ0ZjY0eDQoVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyKChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9pbnNlcnRmNjR4NCgoQSksIChCKSwgKGltbSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpKTsgfSkKKworI2RlZmluZSBfbW01MTJfaW5zZXJ0aTY0eDQoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhkaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX2Nhc3RzaTI1Nl9zaTUxMigoX19tMjU2aSkoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gIDAgOiAgOCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/ICAxIDogIDksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAgMiA6IDEwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gIDMgOiAxMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/ICA4IDogIDQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAgOSA6ICA1LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gMTAgOiAgNiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/IDExIDogIDcpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2luc2VydGk2NHg0KFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfNTEyKChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9pbnNlcnRpNjR4NCgoQSksIChCKSwgKGltbSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoVykpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9pbnNlcnRpNjR4NChVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSlfbW01MTJfaW5zZXJ0aTY0eDQoKEEpLCAoQiksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2luc2VydGYzMng0KEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfY2FzdHBzMTI4X3BzNTEyKChfX20xMjgpKEIpKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMCkgPyAxNiA6ICAwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMCkgPyAxNyA6ICAxLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMCkgPyAxOCA6ICAyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMCkgPyAxOSA6ICAzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMSkgPyAxNiA6ICA0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMSkgPyAxNyA6ICA1LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMSkgPyAxOCA6ICA2LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMSkgPyAxOSA6ICA3LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMikgPyAxNiA6ICA4LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMikgPyAxNyA6ICA5LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMikgPyAxOCA6IDEwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMikgPyAxOSA6IDExLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMykgPyAxNiA6IDEyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMykgPyAxNyA6IDEzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMykgPyAxOCA6IDE0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMykgPyAxOSA6IDE1KTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pbnNlcnRmMzJ4NChXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX2luc2VydGYzMng0KChBKSwgKEIpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2luc2VydGYzMng0KFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfNTEyKChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfaW5zZXJ0ZjMyeDQoKEEpLCAoQiksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2luc2VydGkzMng0KEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnNpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX2Nhc3RzaTEyOF9zaTUxMigoX19tMTI4aSkoQikpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGltbSkgJiAweDMpID09IDApID8gMTYgOiAgMCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMCkgPyAxNyA6ICAxLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbW0pICYgMHgzKSA9PSAwKSA/IDE4IDogIDIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGltbSkgJiAweDMpID09IDApID8gMTkgOiAgMywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMSkgPyAxNiA6ICA0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbW0pICYgMHgzKSA9PSAxKSA/IDE3IDogIDUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGltbSkgJiAweDMpID09IDEpID8gMTggOiAgNiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMSkgPyAxOSA6ICA3LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbW0pICYgMHgzKSA9PSAyKSA/IDE2IDogIDgsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGltbSkgJiAweDMpID09IDIpID8gMTcgOiAgOSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMikgPyAxOCA6IDEwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbW0pICYgMHgzKSA9PSAyKSA/IDE5IDogMTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGltbSkgJiAweDMpID09IDMpID8gMTYgOiAxMiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW1tKSAmIDB4MykgPT0gMykgPyAxNyA6IDEzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbW0pICYgMHgzKSA9PSAzKSA/IDE4IDogMTQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGltbSkgJiAweDMpID09IDMpID8gMTkgOiAxNSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfaW5zZXJ0aTMyeDQoVywgVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF81MTIoKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9pbnNlcnRpMzJ4NCgoQSksIChCKSwgKGltbSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoVykpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9pbnNlcnRpMzJ4NChVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX2luc2VydGkzMng0KChBKSwgKEIpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9nZXRtYW50X3JvdW5kX3BkKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9nZXRtYW50cGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZ2V0bWFudF9yb3VuZF9wZChXLCBVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZ2V0bWFudHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8MikgfCAoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZ2V0bWFudF9yb3VuZF9wZChVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZ2V0bWFudHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8MikgfCAoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2dldG1hbnRfcGQoQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2dldG1hbnRwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoQyk8PDIpIHwgKEIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZ2V0bWFudF9wZChXLCBVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZ2V0bWFudHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8MikgfCAoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZ2V0bWFudF9wZChVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZ2V0bWFudHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8MikgfCAoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX2dldG1hbnRfcm91bmRfcHMoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZ2V0bWFudHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZ2V0bWFudF9yb3VuZF9wcyhXLCBVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9nZXRtYW50cHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoQyk8PDIpIHwgKEIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZ2V0bWFudF9yb3VuZF9wcyhVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9nZXRtYW50cHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoQyk8PDIpIHwgKEIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9nZXRtYW50X3BzKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2dldG1hbnRwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8Mil8KEIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl91bmRlZmluZWRfcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2dldG1hbnRfcHMoVywgVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZ2V0bWFudHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKXwoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2dldG1hbnRfcHMoVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZ2V0bWFudHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKXwoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsgfSkKKworI2RlZmluZSBfbW01MTJfZ2V0ZXhwX3JvdW5kX3BkKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9nZXRleHBwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19nZXRleHBfcm91bmRfcGQoVywgVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2dldGV4cHBkNTEyX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfZ2V0ZXhwX3JvdW5kX3BkKFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9nZXRleHBwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2dldGV4cF9wZCAoX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl91bmRlZmluZWRfcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZ2V0ZXhwX3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9nZXRleHBwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZ2V0ZXhwX3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9nZXRleHBfcm91bmRfcHMoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZ2V0ZXhwcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZ2V0ZXhwX3JvdW5kX3BzKFcsIFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2dldGV4cHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9nZXRleHBfcm91bmRfcHMoVSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZ2V0ZXhwcHM1MTJfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2dldGV4cF9wcyAoX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZzZikgX21tNTEyX3VuZGVmaW5lZF9wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAorICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZ2V0ZXhwX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfZ2V0ZXhwcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZ2V0ZXhwX3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfZ2V0ZXhwcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2k2NGdhdGhlcl9wcyhpbmRleCwgYWRkciwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRpdjE2c2YoKF9fdjhzZilfbW0yNTZfdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCBjb25zdCAqKShhZGRyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoaW5kZXgpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfaTY0Z2F0aGVyX3BzKCBfX3YxX29sZCwgX19tYXNrLCBfX2luZGV4LFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FkZHIsIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18oe1wKK19fYnVpbHRpbl9pYTMyX2dhdGhlcmRpdjE2c2YgKChfX3Y4c2YpIF9fdjFfb2xkLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWRkciwoX192OGRpKSBfX2luZGV4LCBfX21hc2ssIF9fc2NhbGUpO1wKK30pCisKKyNkZWZpbmUgX21tNTEyX2k2NGdhdGhlcl9lcGkzMihpbmRleCwgYWRkciwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRpdjE2c2koKF9fdjhzaSlfbW0yNTZfdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2k2NGdhdGhlcl9lcGkzMih2MV9vbGQsIG1hc2ssIGluZGV4LCBhZGRyLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfZ2F0aGVyZGl2MTZzaSgoX192OHNpKShfX20yNTZpKSh2MV9vbGQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShhZGRyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkobWFzayksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2k2NGdhdGhlcl9wZChpbmRleCwgYWRkciwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRpdjhkZigoX192OGRmKV9tbTUxMl91bmRlZmluZWRfcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSBjb25zdCAqKShhZGRyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoaW5kZXgpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfaTY0Z2F0aGVyX3BkKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9nYXRoZXJkaXY4ZGYoKF9fdjhkZikoX19tNTEyZCkodjFfb2xkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSBjb25zdCAqKShhZGRyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKG1hc2spLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9pNjRnYXRoZXJfZXBpNjQoaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9nYXRoZXJkaXY4ZGkoKF9fdjhkaSlfbW01MTJfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2k2NGdhdGhlcl9lcGk2NCh2MV9vbGQsIG1hc2ssIGluZGV4LCBhZGRyLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfZ2F0aGVyZGl2OGRpKChfX3Y4ZGkpKF9fbTUxMmkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfaTMyZ2F0aGVyX3BzKGluZGV4LCBhZGRyLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9nYXRoZXJzaXYxNnNmKChfX3YxNnNmKV9tbTUxMl91bmRlZmluZWRfcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0IGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfaTMyZ2F0aGVyX3BzKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnNpdjE2c2YoKF9fdjE2c2YpKF9fbTUxMikodjFfb2xkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0IGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKG1hc2spLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9pMzJnYXRoZXJfZXBpMzIoaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9nYXRoZXJzaXYxNnNpKChfX3YxNnNpKV9tbTUxMl91bmRlZmluZWRfZXBpMzIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pMzJnYXRoZXJfZXBpMzIodjFfb2xkLCBtYXNrLCBpbmRleCwgYWRkciwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnNpdjE2c2koKF9fdjE2c2kpKF9fbTUxMmkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKG1hc2spLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9pMzJnYXRoZXJfcGQoaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9nYXRoZXJzaXY4ZGYoKF9fdjhkZilfbW01MTJfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGluZGV4KSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2kzMmdhdGhlcl9wZCh2MV9vbGQsIG1hc2ssIGluZGV4LCBhZGRyLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZ2F0aGVyc2l2OGRmKChfX3Y4ZGYpKF9fbTUxMmQpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfaTMyZ2F0aGVyX2VwaTY0KGluZGV4LCBhZGRyLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfZ2F0aGVyc2l2OGRpKChfX3Y4ZGkpX21tNTEyX3VuZGVmaW5lZF9lcGkzMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShpbmRleCksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pMzJnYXRoZXJfZXBpNjQodjFfb2xkLCBtYXNrLCBpbmRleCwgYWRkciwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnNpdjhkaSgoX192OGRpKShfX201MTJpKSh2MV9vbGQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkobWFzayksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2k2NHNjYXR0ZXJfcHMoYWRkciwgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjE2c2YoKGZsb2F0ICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2k2NHNjYXR0ZXJfcHMoYWRkciwgbWFzaywgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjE2c2YoKGZsb2F0ICopKGFkZHIpLCAoX19tbWFzazgpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfaTY0c2NhdHRlcl9lcGkzMihhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2MTZzaSgoaW50ICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pNjRzY2F0dGVyX2VwaTMyKGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXYxNnNpKChpbnQgKikoYWRkciksIChfX21tYXNrOCkobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfaTY0c2NhdHRlcl9wZChhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2OGRmKChkb3VibGUgKikoYWRkciksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pNjRzY2F0dGVyX3BkKGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXY4ZGYoKGRvdWJsZSAqKShhZGRyKSwgKF9fbW1hc2s4KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfaTY0c2NhdHRlcl9lcGk2NChhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2OGRpKChsb25nIGxvbmcgKikoYWRkciksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19pNjRzY2F0dGVyX2VwaTY0KGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXY4ZGkoKGxvbmcgbG9uZyAqKShhZGRyKSwgKF9fbW1hc2s4KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW01MTJfaTMyc2NhdHRlcl9wcyhhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2MTZzZigoZmxvYXQgKikoYWRkciksIChfX21tYXNrMTYpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfaTMyc2NhdHRlcl9wcyhhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2MTZzZigoZmxvYXQgKikoYWRkciksIChfX21tYXNrMTYpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpKF9fbTUxMikodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9pMzJzY2F0dGVyX2VwaTMyKGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXYxNnNpKChpbnQgKikoYWRkciksIChfX21tYXNrMTYpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2kzMnNjYXR0ZXJfZXBpMzIoYWRkciwgbWFzaywgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjE2c2koKGludCAqKShhZGRyKSwgKF9fbW1hc2sxNikobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9pMzJzY2F0dGVyX3BkKGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXY4ZGYoKGRvdWJsZSAqKShhZGRyKSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2kzMnNjYXR0ZXJfcGQoYWRkciwgbWFzaywgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjhkZigoZG91YmxlICopKGFkZHIpLCAoX19tbWFzazgpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9pMzJzY2F0dGVyX2VwaTY0KGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXY4ZGkoKGxvbmcgbG9uZyAqKShhZGRyKSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2kzMnNjYXR0ZXJfZXBpNjQoYWRkciwgbWFzaywgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjhkaSgobG9uZyBsb25nICopKGFkZHIpLCAoX19tbWFzazgpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbWFkZF9zcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzczNfbWFzayAoKF9fdjRzZikgX19XLAorICAgICAgICAgIChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza19mbWFkZF9yb3VuZF9zcyhXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fKHtcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2soKF9fdjRzZikoX19tMTI4KShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm1hZGRfc3MgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2t6ICgoX192NHNmKSBfX0EsCisgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgIChfX3Y0c2YpIF9fQywKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrel9mbWFkZF9yb3VuZF9zcyhVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzM19tYXNreigoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShDKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm1hZGRfc3MgKF9fbTEyOCBfX1csIF9fbTEyOCBfX1gsIF9fbTEyOCBfX1ksIF9fbW1hc2s4IF9fVSkKK3sKKyByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2szICgoX192NHNmKSBfX1csCisgICAgICAgICAgKF9fdjRzZikgX19YLAorICAgICAgICAgIChfX3Y0c2YpIF9fWSwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrM19mbWFkZF9yb3VuZF9zcyhXLCBYLCBZLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzM19tYXNrMygoX192NHNmKShfX20xMjgpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShZKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2Ztc3ViX3NzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCit7CisgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzM19tYXNrICgoX192NHNmKSBfX1csCisgICAgICAgICAgKF9fdjRzZikgX19BLAorICAgICAgICAgIC0oX192NHNmKSBfX0IsCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza19mbXN1Yl9yb3VuZF9zcyhXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzM19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Ztc3ViX3NzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzM19tYXNreiAoKF9fdjRzZikgX19BLAorICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAtKF9fdjRzZikgX19DLAorICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2t6X2Ztc3ViX3JvdW5kX3NzKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2t6KChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjRzZikoX19tMTI4KShDKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbXN1Yl9zcyAoX19tMTI4IF9fVywgX19tMTI4IF9fWCwgX19tMTI4IF9fWSwgX19tbWFzazggX19VKQoreworIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzczNfbWFzazMgKChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAoX192NHNmKSBfX1gsCisgICAgICAgICAgLShfX3Y0c2YpIF9fWSwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrM19mbXN1Yl9yb3VuZF9zcyhXLCBYLCBZLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzM19tYXNrMygoX192NHNmKShfX20xMjgpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0c2YpKF9fbTEyOCkoWSksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbm1hZGRfc3MgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikKK3sKKyByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2sgKChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAtKF9fdjRzZikgX19BLAorICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrX2ZubWFkZF9yb3VuZF9zcyhXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzM19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbm1hZGRfc3MgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2t6ICgtKF9fdjRzZikgX19BLAorICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza3pfZm5tYWRkX3JvdW5kX3NzKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2t6KC0oX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShDKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbm1hZGRfc3MgKF9fbTEyOCBfX1csIF9fbTEyOCBfX1gsIF9fbTEyOCBfX1ksIF9fbW1hc2s4IF9fVSkKK3sKKyByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2szICgtKF9fdjRzZikgX19XLAorICAgICAgICAgIChfX3Y0c2YpIF9fWCwKKyAgICAgICAgICAoX192NHNmKSBfX1ksCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFzazNfZm5tYWRkX3JvdW5kX3NzKFcsIFgsIFksIFUsIFIpIF9fZXh0ZW5zaW9uX18oe1wKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRzczNfbWFzazMoLShfX3Y0c2YpKF9fbTEyOCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFkpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZm5tc3ViX3NzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCit7CisgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzM19tYXNrICgoX192NHNmKSBfX1csCisgICAgICAgICAgLShfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAtKF9fdjRzZikgX19CLAorICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfZm5tc3ViX3JvdW5kX3NzKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2soKF9fdjRzZikoX19tMTI4KShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0c2YpKF9fbTEyOCkoQiksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbm1zdWJfc3MgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2t6ICgtKF9fdjRzZikgX19BLAorICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAtKF9fdjRzZikgX19DLAorICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2t6X2ZubXN1Yl9yb3VuZF9zcyhVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzM19tYXNreigtKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NHNmKShfX20xMjgpKEMpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbm1zdWJfc3MgKF9fbTEyOCBfX1csIF9fbTEyOCBfX1gsIF9fbTEyOCBfX1ksIF9fbW1hc2s4IF9fVSkKK3sKKyByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2szICgtKF9fdjRzZikgX19XLAorICAgICAgICAgIChfX3Y0c2YpIF9fWCwKKyAgICAgICAgICAtKF9fdjRzZikgX19ZLAorICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2szX2ZubXN1Yl9yb3VuZF9zcyhXLCBYLCBZLCBVLCBSKSBfX2V4dGVuc2lvbl9fKHtcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkc3MzX21hc2szKC0oX192NHNmKShfX20xMjgpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0c2YpKF9fbTEyOCkoWSksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZm1hZGRfc2QgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKK3sKKyByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNrICggKF9fdjJkZikgX19XLAorICAgICAgICAgIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza19mbWFkZF9yb3VuZF9zZChXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fKHtcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNrKChfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbWFkZF9zZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2t6ICggKF9fdjJkZikgX19BLAorICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAoX192MmRmKSBfX0MsCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza3pfZm1hZGRfcm91bmRfc2QoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2t6KChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQyksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm1hZGRfc2QgKF9fbTEyOGQgX19XLCBfX20xMjhkIF9fWCwgX19tMTI4ZCBfX1ksIF9fbW1hc2s4IF9fVSkKK3sKKyByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNrMyAoKF9fdjJkZikgX19XLAorICAgICAgICAgIChfX3YyZGYpIF9fWCwKKyAgICAgICAgICAoX192MmRmKSBfX1ksCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFzazNfZm1hZGRfcm91bmRfc2QoVywgWCwgWSwgVSwgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2szKChfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoWSksIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2Ztc3ViX3NkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCit7CisgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzZDNfbWFzayAoIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAoX192MmRmKSBfX0EsCisgICAgICAgICAgLShfX3YyZGYpIF9fQiwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrX2Ztc3ViX3JvdW5kX3NkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNrKChfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MmRmKShfX20xMjhkKShCKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm1zdWJfc2QgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNreiAoIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgLShfX3YyZGYpIF9fQywKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrel9mbXN1Yl9yb3VuZF9zZChVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzZDNfbWFza3ooKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjJkZikoX19tMTI4ZCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbXN1Yl9zZCAoX19tMTI4ZCBfX1csIF9fbTEyOGQgX19YLCBfX20xMjhkIF9fWSwgX19tbWFzazggX19VKQoreworIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2szICgoX192MmRmKSBfX1csCisgICAgICAgICAgKF9fdjJkZikgX19YLAorICAgICAgICAgIC0oX192MmRmKSBfX1ksCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFzazNfZm1zdWJfcm91bmRfc2QoVywgWCwgWSwgVSwgUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2szKChfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YyZGYpKF9fbTEyOGQpKFkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbm1hZGRfc2QgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKK3sKKyByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNrICggKF9fdjJkZikgX19XLAorICAgICAgICAgIC0oX192MmRmKSBfX0EsCisgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfZm5tYWRkX3JvdW5kX3NkKFcsIFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNrKChfX3YyZGYpKF9fbTEyOGQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm5tYWRkX3NkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzZDNfbWFza3ogKCAtKF9fdjJkZikgX19BLAorICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAoX192MmRmKSBfX0MsCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza3pfZm5tYWRkX3JvdW5kX3NkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNreigtKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShDKSwgKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2ZubWFkZF9zZCAoX19tMTI4ZCBfX1csIF9fbTEyOGQgX19YLCBfX20xMjhkIF9fWSwgX19tbWFzazggX19VKQoreworIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2szICgtKF9fdjJkZikgX19XLAorICAgICAgICAgIChfX3YyZGYpIF9fWCwKKyAgICAgICAgICAoX192MmRmKSBfX1ksCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFzazNfZm5tYWRkX3JvdW5kX3NkKFcsIFgsIFksIFUsIFIpIF9fZXh0ZW5zaW9uX18oe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkc2QzX21hc2szKC0oX192MmRmKShfX20xMjhkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFkpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbm1zdWJfc2QgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKK3sKKyByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNrICggKF9fdjJkZikgX19XLAorICAgICAgICAgIC0oX192MmRmKSBfX0EsCisgICAgICAgICAgLShfX3YyZGYpIF9fQiwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXNrX2ZubXN1Yl9yb3VuZF9zZChXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzZDNfbWFzaygoX192MmRmKShfX20xMjhkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YyZGYpKF9fbTEyOGQpKEIpLCAoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbm1zdWJfc2QgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNreiAoIC0oX192MmRmKSBfX0EsCisgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgIC0oX192MmRmKSBfX0MsCisgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWFza3pfZm5tc3ViX3JvdW5kX3NkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNreigtKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjJkZikoX19tMTI4ZCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm5tc3ViX3NkIChfX20xMjhkIF9fVywgX19tMTI4ZCBfX1gsIF9fbTEyOGQgX19ZLCBfX21tYXNrOCBfX1UpCit7CisgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzZDNfbWFzazMgKC0oX192MmRmKSAoX19XKSwKKyAgICAgICAgICAoX192MmRmKSBfX1gsCisgICAgICAgICAgLShfX3YyZGYpIChfX1kpLAorICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21hc2szX2ZubXN1Yl9yb3VuZF9zZChXLCBYLCBZLCBVLCBSKSBfX2V4dGVuc2lvbl9fKHtcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkM19tYXNrMygtKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjJkZikoX19tMTI4ZCkoWSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfcGVybXV0ZXhfcGQoWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4ZGYpKF9fbTUxMmQpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChDKSA+PiAwKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKEMpID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgoQykgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChDKSA+PiA2KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKEMpID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoQykgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChDKSA+PiA0KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKEMpID4+IDYpICYgMHgzKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcGVybXV0ZXhfcGQoVywgVSwgWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9wZXJtdXRleF9wZCgoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFcpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcGVybXV0ZXhfcGQoVSwgWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9wZXJtdXRleF9wZCgoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3Blcm11dGV4X2VwaTY0KFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGRpKShfX201MTJpKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl91bmRlZmluZWRfZXBpMzIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgoQykgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChDKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKEMpID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgoQykgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChDKSA+PiAwKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKEMpID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoQykgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChDKSA+PiA2KSAmIDB4MykpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3Blcm11dGV4X2VwaTY0KFcsIFUsIFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3Blcm11dGV4X2VwaTY0KChYKSwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShXKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3Blcm11dGV4X2VwaTY0KFUsIFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzUxMigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpX21tNTEyX3Blcm11dGV4X2VwaTY0KChYKSwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Blcm11dGV4dmFyX3BkIChfX201MTJpIF9fWCwgX19tNTEyZCBfX1kpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcGVybXZhcmRmNTEyX21hc2sgKChfX3Y4ZGYpIF9fWSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19YLAorICAgICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfdW5kZWZpbmVkX3BkICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3Blcm11dGV4dmFyX3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fWCwgX19tNTEyZCBfX1kpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcGVybXZhcmRmNTEyX21hc2sgKChfX3Y4ZGYpIF9fWSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19YLAorICAgICAgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9wZXJtdXRleHZhcl9wZCAoX19tbWFzazggX19VLCBfX201MTJpIF9fWCwgX19tNTEyZCBfX1kpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcGVybXZhcmRmNTEyX21hc2sgKChfX3Y4ZGYpIF9fWSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19YLAorICAgICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3Blcm11dGV4dmFyX2VwaTY0IChfX21tYXNrOCBfX00sIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyZGk1MTJfbWFzayAoKF9fdjhkaSkgX19ZLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Blcm11dGV4dmFyX2VwaTY0IChfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGVybXZhcmRpNTEyX21hc2sgKChfX3Y4ZGkpIF9fWSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19YLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfdW5kZWZpbmVkX2VwaTMyICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3Blcm11dGV4dmFyX2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19NLCBfX201MTJpIF9fWCwKKyAgICAgICAgICAgICBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyZGk1MTJfbWFzayAoKF9fdjhkaSkgX19ZLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Blcm11dGV4dmFyX3BzIChfX201MTJpIF9fWCwgX19tNTEyIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJzZjUxMl9tYXNrICgoX192MTZzZikgX19ZLAorICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl91bmRlZmluZWRfcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19wZXJtdXRleHZhcl9wcyAoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX1gsIF9fbTUxMiBfX1kpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyc2Y1MTJfbWFzayAoKF9fdjE2c2YpIF9fWSwKKyAgICAgICAgICAgICAgICAoX192MTZzaSkgX19YLAorICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3Blcm11dGV4dmFyX3BzIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fWCwgX19tNTEyIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJzZjUxMl9tYXNrICgoX192MTZzZikgX19ZLAorICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcGVybXV0ZXh2YXJfZXBpMzIgKF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyc2k1MTJfbWFzayAoKF9fdjE2c2kpIF9fWSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Blcm11dGV4dmFyX2VwaTMyIChfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGVybXZhcnNpNTEyX21hc2sgKChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfbW01MTJfdW5kZWZpbmVkX2VwaTMyICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19wZXJtdXRleHZhcl9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19YLAorICAgICAgICAgICAgIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJzaTUxMl9tYXNrICgoX192MTZzaSkgX19ZLAorICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19YLAorICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfa2FuZCAoX19tbWFzazE2IF9fQSwgX19tbWFzazE2IF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX2thbmRoaSAoKF9fbW1hc2sxNikgX19BLCAoX19tbWFzazE2KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfa2FuZG4gKF9fbW1hc2sxNiBfX0EsIF9fbW1hc2sxNiBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazE2KSBfX2J1aWx0aW5faWEzMl9rYW5kbmhpICgoX19tbWFzazE2KSBfX0EsIChfX21tYXNrMTYpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9rb3IgKF9fbW1hc2sxNiBfX0EsIF9fbW1hc2sxNiBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazE2KSBfX2J1aWx0aW5faWEzMl9rb3JoaSAoKF9fbW1hc2sxNikgX19BLCAoX19tbWFzazE2KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfa29ydGVzdGMgKF9fbW1hc2sxNiBfX0EsIF9fbW1hc2sxNiBfX0IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9rb3J0ZXN0Y2hpICgoX19tbWFzazE2KSBfX0EsIChfX21tYXNrMTYpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9rb3J0ZXN0eiAoX19tbWFzazE2IF9fQSwgX19tbWFzazE2IF9fQikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2tvcnRlc3R6aGkgKChfX21tYXNrMTYpIF9fQSwgKF9fbW1hc2sxNikgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2t1bnBhY2tiIChfX21tYXNrMTYgX19BLCBfX21tYXNrMTYgX19CKQoreworICByZXR1cm4gKF9fbW1hc2sxNikgX19idWlsdGluX2lhMzJfa3VucGNraGkgKChfX21tYXNrMTYpIF9fQSwgKF9fbW1hc2sxNikgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2t4bm9yIChfX21tYXNrMTYgX19BLCBfX21tYXNrMTYgX19CKQoreworICByZXR1cm4gKF9fbW1hc2sxNikgX19idWlsdGluX2lhMzJfa3hub3JoaSAoKF9fbW1hc2sxNikgX19BLCAoX19tbWFzazE2KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfa3hvciAoX19tbWFzazE2IF9fQSwgX19tbWFzazE2IF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX2t4b3JoaSAoKF9fbW1hc2sxNikgX19BLCAoX19tbWFzazE2KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N0cmVhbV9zaTUxMiAoX19tNTEyaSAqIF9fUCwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9ub250ZW1wb3JhbF9zdG9yZSgoX192OGRpKV9fQSwgKF9fdjhkaSopX19QKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zdHJlYW1fbG9hZF9zaTUxMiAodm9pZCAqX19QKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfbW92bnRkcWE1MTIgKChfX3Y4ZGkgKilfX1ApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N0cmVhbV9wZCAoZG91YmxlICpfX1AsIF9fbTUxMmQgX19BKQoreworICBfX2J1aWx0aW5fbm9udGVtcG9yYWxfc3RvcmUoKF9fdjhkZilfX0EsIChfX3Y4ZGYqKV9fUCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3RyZWFtX3BzIChmbG9hdCAqX19QLCBfX201MTIgX19BKQoreworICBfX2J1aWx0aW5fbm9udGVtcG9yYWxfc3RvcmUoKF9fdjE2c2YpX19BLCAoX192MTZzZiopX19QKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NvbXByZXNzX3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc2RmNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jb21wcmVzc19wZCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc2RmNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NvbXByZXNzX2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc2RpNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jb21wcmVzc19lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc2RpNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY29tcHJlc3NfcHMgKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3NmNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jb21wcmVzc19wcyAoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc2Y1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY29tcHJlc3NfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3NpNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jb21wcmVzc19lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY29tcHJlc3NzaTUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tX2NtcF9yb3VuZF9zc19tYXNrKFgsIFksIFAsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wc3NfbWFzaygoX192NHNmKShfX20xMjgpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoWSksIChpbnQpKFApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2NtcF9yb3VuZF9zc19tYXNrKE0sIFgsIFksIFAsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wc3NfbWFzaygoX192NHNmKShfX20xMjgpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoWSksIChpbnQpKFApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fY21wX3NzX21hc2soWCwgWSwgUCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBzc19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShZKSwgKGludCkoUCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfY21wX3NzX21hc2soTSwgWCwgWSwgUCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBzc19tYXNrKChfX3Y0c2YpKF9fbTEyOCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShZKSwgKGludCkoUCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9jbXBfcm91bmRfc2RfbWFzayhYLCBZLCBQLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHNkX21hc2soKF9fdjJkZikoX19tMTI4ZCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoWSksIChpbnQpKFApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2NtcF9yb3VuZF9zZF9tYXNrKE0sIFgsIFksIFAsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wc2RfbWFzaygoX192MmRmKShfX20xMjhkKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShZKSwgKGludCkoUCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9jbXBfc2RfbWFzayhYLCBZLCBQKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHNkX21hc2soKF9fdjJkZikoX19tMTI4ZCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoWSksIChpbnQpKFApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2NtcF9zZF9tYXNrKE0sIFgsIFksIFApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wc2RfbWFzaygoX192MmRmKShfX20xMjhkKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShZKSwgKGludCkoUCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbW92ZWhkdXBfcHMgKF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnNmKV9fQSwgKF9fdjE2c2YpX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEsIDMsIDMsIDUsIDUsIDcsIDcsIDksIDksIDExLCAxMSwgMTMsIDEzLCAxNSwgMTUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tb3ZlaGR1cF9wcyAoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfNTEyKChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX21vdmVoZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbW92ZWhkdXBfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9tb3ZlaGR1cF9wcyhfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tb3ZlbGR1cF9wcyAoX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2c2YpX19BLCAoX192MTZzZilfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMiwgMiwgNCwgNCwgNiwgNiwgOCwgOCwgMTAsIDEwLCAxMiwgMTIsIDE0LCAxNCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21vdmVsZHVwX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc181MTIoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfbW92ZWxkdXBfcHMoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tb3ZlbGR1cF9wcyAoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfNTEyKChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX21vdmVsZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbW92ZV9zcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbW92c3NfbWFzayAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tb3ZlX3NzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9tb3Zzc19tYXNrICgoX192NHNmKSBfX0EsIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbW92ZV9zZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21vdnNkX21hc2sgKChfX3YyZGYpIF9fQSwgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21vdmVfc2QgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21vdnNkX21hc2sgKChfX3YyZGYpIF9fQSwgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCisjZGVmaW5lIF9tbTUxMl9zaHVmZmxlX2VwaTMyKEEsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZzaSkoX19tNTEyaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3VuZGVmaW5lZF9lcGkzMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICsgKCgoSSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICsgKCgoSSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICsgKCgoSSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICsgKCgoSSkgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoSSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoSSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoSSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgoSSkgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICsgKCgoSSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICsgKCgoSSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICsgKCgoSSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICsgKCgoSSkgPj4gNikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoSSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoSSkgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoSSkgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgoSSkgPj4gNikgJiAweDMpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19zaHVmZmxlX2VwaTMyKFcsIFUsIEEsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzUxMigoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2h1ZmZsZV9lcGkzMigoQSksIChJKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKFcpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfc2h1ZmZsZV9lcGkzMihVLCBBLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF81MTIoKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NodWZmbGVfZXBpMzIoKEEpLCAoSSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKV9tbTUxMl9zZXR6ZXJvX3NpNTEyKCkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZXhwYW5kX3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9leHBhbmRkZjUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9leHBhbmRfcGQgKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfZXhwYW5kZGY1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2V4cGFuZF9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfZXhwYW5kZGk1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZXhwYW5kX2VwaTY0ICggX19tbWFzazggX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRkaTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZXhwYW5kbG9hZHVfcGQoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRkZjUxMl9tYXNrICgoY29uc3QgX192OGRmICopX19QLAorICAgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9leHBhbmRsb2FkdV9wZChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2FkZGY1MTJfbWFzayAoKGNvbnN0IF9fdjhkZiAqKV9fUCwKKyAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZXhwYW5kbG9hZHVfZXBpNjQoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRkaTUxMl9tYXNrICgoY29uc3QgX192OGRpICopX19QLAorICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9leHBhbmRsb2FkdV9lcGk2NChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2FkZGk1MTJfbWFzayAoKGNvbnN0IF9fdjhkaSAqKV9fUCwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fcGQoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19leHBhbmRsb2FkdV9wcyhfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2Fkc2Y1MTJfbWFzayAoKGNvbnN0IF9fdjE2c2YgKilfX1AsCisgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZXhwYW5kbG9hZHVfcHMoX19tbWFzazE2IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZHNmNTEyX21hc2sgKChjb25zdCBfX3YxNnNmICopX19QLAorICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcygpLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19leHBhbmRsb2FkdV9lcGkzMihfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRzaTUxMl9tYXNrICgoY29uc3QgX192MTZzaSAqKV9fUCwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9leHBhbmRsb2FkdV9lcGkzMihfX21tYXNrMTYgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZHNpNTEyX21hc2sgKChjb25zdCBfX3YxNnNpICopX19QLAorICAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX3NldHplcm9fcHMoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZXhwYW5kX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfZXhwYW5kc2Y1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZXhwYW5kX3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfZXhwYW5kc2Y1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcygpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2V4cGFuZF9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZHNpNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2V4cGFuZF9lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfZXhwYW5kc2k1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX3NldHplcm9fcHMoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwc19wZChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfY3Z0cHMycGQ1MTJfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRwc19wZChXLCBVLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfY3Z0cHMycGQ1MTJfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dF9yb3VuZHBzX3BkKFUsIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9jdnRwczJwZDUxMl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0cHNfcGQgKF9fbTI1NiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0cHMycGQ1MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgICAgX21tNTEyX3VuZGVmaW5lZF9wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRwc19wZCAoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnRwczJwZDUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0cHNfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnRwczJwZDUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0cHNsb19wZCAoX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9tbTUxMl9jdnRwc19wZChfbW01MTJfY2FzdHBzNTEyX3BzMjU2KF9fQSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRwc2xvX3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMikgX21tNTEyX21hc2tfY3Z0cHNfcGQoX19XLCBfX1UsIF9tbTUxMl9jYXN0cHM1MTJfcHMyNTYoX19BKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tb3ZfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzUxMiAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhkZikgX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tb3ZfcGQgKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfc2VsZWN0cGRfNTEyICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCAoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21vdl9wcyAoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzUxMiAoKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgIChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tb3ZfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc181MTIgKChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAoX192MTZzZikgX19BLAorICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcyAoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jb21wcmVzc3N0b3JldV9wZCAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3N0b3JlZGY1MTJfbWFzayAoKF9fdjhkZiAqKSBfX1AsIChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NvbXByZXNzc3RvcmV1X2VwaTY0ICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc3RvcmVkaTUxMl9tYXNrICgoX192OGRpICopIF9fUCwgKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY29tcHJlc3NzdG9yZXVfcHMgKHZvaWQgKl9fUCwgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfY29tcHJlc3NzdG9yZXNmNTEyX21hc2sgKChfX3YxNnNmICopIF9fUCwgKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jb21wcmVzc3N0b3JldV9lcGkzMiAodm9pZCAqX19QLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfY29tcHJlc3NzdG9yZXNpNTEyX21hc2sgKChfX3YxNnNpICopIF9fUCwgKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tX2N2dF9yb3VuZHNkX3NzKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2N2dHNkMnNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jdnRfcm91bmRzZF9zcyhXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jdnRzZDJzc19yb3VuZF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpLCAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2N2dF9yb3VuZHNkX3NzKFUsIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2N2dHNkMnNzX3JvdW5kX21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRzZF9zcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjhkIF9fQikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHNkMnNzX3JvdW5kX21hc2sgKChfX3Y0c2YpKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19XKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKF9fVSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRzZF9zcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjhkIF9fQikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHNkMnNzX3JvdW5kX21hc2sgKChfX3Y0c2YpKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoX19VKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fY3Z0c3NfaTMyIF9tbV9jdnRzc19zaTMyCisjZGVmaW5lIF9tbV9jdnRzZF9pMzIgX21tX2N2dHNkX3NpMzIKKyNkZWZpbmUgX21tX2N2dGkzMl9zZCBfbW1fY3Z0c2kzMl9zZAorI2RlZmluZSBfbW1fY3Z0aTMyX3NzIF9tbV9jdnRzaTMyX3NzCisjaWZkZWYgX194ODZfNjRfXworI2RlZmluZSBfbW1fY3Z0c3NfaTY0IF9tbV9jdnRzc19zaTY0CisjZGVmaW5lIF9tbV9jdnRzZF9pNjQgX21tX2N2dHNkX3NpNjQKKyNkZWZpbmUgX21tX2N2dGk2NF9zZCBfbW1fY3Z0c2k2NF9zZAorI2RlZmluZSBfbW1fY3Z0aTY0X3NzIF9tbV9jdnRzaTY0X3NzCisjZW5kaWYKKworI2lmZGVmIF9feDg2XzY0X18KKyNkZWZpbmUgX21tX2N2dF9yb3VuZGk2NF9zZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY3Z0c2kyc2Q2NCgoX192MmRmKShfX20xMjhkKShBKSwgKGxvbmcgbG9uZykoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2N2dF9yb3VuZHNpNjRfc2QoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2N2dHNpMnNkNjQoKF9fdjJkZikoX19tMTI4ZCkoQSksIChsb25nIGxvbmcpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoUikpOyB9KQorI2VuZGlmCisKKyNkZWZpbmUgX21tX2N2dF9yb3VuZHNpMzJfc3MoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfY3Z0c2kyc3MzMigoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShCKSwgKGludCkoUikpOyB9KQorCisjZGVmaW5lIF9tbV9jdnRfcm91bmRpMzJfc3MoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfY3Z0c2kyc3MzMigoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShCKSwgKGludCkoUikpOyB9KQorCisjaWZkZWYgX194ODZfNjRfXworI2RlZmluZSBfbW1fY3Z0X3JvdW5kc2k2NF9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jdnRzaTJzczY0KChfX3Y0c2YpKF9fbTEyOCkoQSksIChsb25nIGxvbmcpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisKKyNkZWZpbmUgX21tX2N2dF9yb3VuZGk2NF9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jdnRzaTJzczY0KChfX3Y0c2YpKF9fbTEyOCkoQSksIChsb25nIGxvbmcpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShSKSk7IH0pCisjZW5kaWYKKworI2RlZmluZSBfbW1fY3Z0X3JvdW5kc3Nfc2QoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2N2dHNzMnNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jdnRfcm91bmRzc19zZChXLCBVLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY3Z0c3Myc2Rfcm91bmRfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSksIChpbnQpKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfY3Z0X3JvdW5kc3Nfc2QoVSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2N2dHNzMnNkX3JvdW5kX21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0c3Nfc2QgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjggX19CKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0c3Myc2Rfcm91bmRfbWFzaygoX192MmRmKShfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19XKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKF9fVSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IAorfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHNzX3NkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjggX19CKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0c3Myc2Rfcm91bmRfbWFzaygoX192MmRmKShfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKF9fVSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IAorfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHUzMl9zZCAoX19tMTI4ZCBfX0EsIHVuc2lnbmVkIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jdnR1c2kyc2QzMiAoKF9fdjJkZikgX19BLCBfX0IpOworfQorCisjaWZkZWYgX194ODZfNjRfXworI2RlZmluZSBfbW1fY3Z0X3JvdW5kdTY0X3NkKEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jdnR1c2kyc2Q2NCgoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShCKSwgKGludCkoUikpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHU2NF9zZCAoX19tMTI4ZCBfX0EsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0IpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0dXNpMnNkNjQgKChfX3YyZGYpIF9fQSwgX19CLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorI2VuZGlmCisKKyNkZWZpbmUgX21tX2N2dF9yb3VuZHUzMl9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jdnR1c2kyc3MzMigoX192NHNmKShfX20xMjgpKEEpLCAodW5zaWduZWQgaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHUzMl9zcyAoX19tMTI4IF9fQSwgdW5zaWduZWQgX19CKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dXNpMnNzMzIgKChfX3Y0c2YpIF9fQSwgX19CLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCisjZGVmaW5lIF9tbV9jdnRfcm91bmR1NjRfc3MoQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfY3Z0dXNpMnNzNjQoKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKEIpLCAoaW50KShSKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR1NjRfc3MgKF9fbTEyOCBfX0EsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0IpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnR1c2kyc3M2NCAoKF9fdjRzZikgX19BLCBfX0IsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc2V0MV9lcGkzMiAoX19tNTEyaSBfX08sIF9fbW1hc2sxNiBfX00sIGludCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdGQ1MTJfZ3ByX21hc2sgKF9fQSwgKF9fdjE2c2kpIF9fTywKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zZXQxX2VwaTY0IChfX201MTJpIF9fTywgX19tbWFzazggX19NLCBsb25nIGxvbmcgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3RxNTEyX2dwcl9tYXNrIChfX0EsIChfX3Y4ZGkpIF9fTywKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zZXRfZXBpMzIgKGludCBfX0EsIGludCBfX0IsIGludCBfX0MsIGludCBfX0QsCisgICAgIGludCBfX0UsIGludCBfX0YsIGludCBfX0csIGludCBfX0gsCisgICAgIGludCBfX0ksIGludCBfX0osIGludCBfX0ssIGludCBfX0wsCisgICAgIGludCBfX00sIGludCBfX04sIGludCBfX08sIGludCBfX1ApCit7CisgIHJldHVybiBfX2V4dGVuc2lvbl9fIChfX201MTJpKShfX3YxNnNpKQorICB7IF9fUCwgX19PLCBfX04sIF9fTSwgX19MLCBfX0ssIF9fSiwgX19JLAorICAgIF9fSCwgX19HLCBfX0YsIF9fRSwgX19ELCBfX0MsIF9fQiwgX19BIH07Cit9CisKKyNkZWZpbmUgX21tNTEyX3NldHJfZXBpMzIoZTAsZTEsZTIsZTMsZTQsZTUsZTYsZTcsICAgICAgICAgICBcCisgICAgICAgZTgsZTksZTEwLGUxMSxlMTIsZTEzLGUxNCxlMTUpICAgICAgICAgIFwKKyAgX21tNTEyX3NldF9lcGkzMigoZTE1KSwoZTE0KSwoZTEzKSwoZTEyKSwoZTExKSwoZTEwKSwoZTkpLChlOCksKGU3KSwoZTYpLCBcCisgICAgICAgICAgICAgICAgICAgKGU1KSwoZTQpLChlMyksKGUyKSwoZTEpLChlMCkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0X2VwaTY0IChsb25nIGxvbmcgX19BLCBsb25nIGxvbmcgX19CLCBsb25nIGxvbmcgX19DLAorICAgICBsb25nIGxvbmcgX19ELCBsb25nIGxvbmcgX19FLCBsb25nIGxvbmcgX19GLAorICAgICBsb25nIGxvbmcgX19HLCBsb25nIGxvbmcgX19IKQoreworICByZXR1cm4gX19leHRlbnNpb25fXyAoX19tNTEyaSkgKF9fdjhkaSkKKyAgeyBfX0gsIF9fRywgX19GLCBfX0UsIF9fRCwgX19DLCBfX0IsIF9fQSB9OworfQorCisjZGVmaW5lIF9tbTUxMl9zZXRyX2VwaTY0KGUwLGUxLGUyLGUzLGU0LGU1LGU2LGU3KSAgICAgICAgICAgXAorICBfbW01MTJfc2V0X2VwaTY0KChlNyksKGU2KSwoZTUpLChlNCksKGUzKSwoZTIpLChlMSksKGUwKSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zZXRfcGQgKGRvdWJsZSBfX0EsIGRvdWJsZSBfX0IsIGRvdWJsZSBfX0MsIGRvdWJsZSBfX0QsCisgICAgICAgIGRvdWJsZSBfX0UsIGRvdWJsZSBfX0YsIGRvdWJsZSBfX0csIGRvdWJsZSBfX0gpCit7CisgIHJldHVybiBfX2V4dGVuc2lvbl9fIChfX201MTJkKQorICB7IF9fSCwgX19HLCBfX0YsIF9fRSwgX19ELCBfX0MsIF9fQiwgX19BIH07Cit9CisKKyNkZWZpbmUgX21tNTEyX3NldHJfcGQoZTAsZTEsZTIsZTMsZTQsZTUsZTYsZTcpICAgICAgICAgICAgICBcCisgIF9tbTUxMl9zZXRfcGQoKGU3KSwoZTYpLChlNSksKGU0KSwoZTMpLChlMiksKGUxKSwoZTApKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0X3BzIChmbG9hdCBfX0EsIGZsb2F0IF9fQiwgZmxvYXQgX19DLCBmbG9hdCBfX0QsCisgICAgICAgIGZsb2F0IF9fRSwgZmxvYXQgX19GLCBmbG9hdCBfX0csIGZsb2F0IF9fSCwKKyAgICAgICAgZmxvYXQgX19JLCBmbG9hdCBfX0osIGZsb2F0IF9fSywgZmxvYXQgX19MLAorICAgICAgICBmbG9hdCBfX00sIGZsb2F0IF9fTiwgZmxvYXQgX19PLCBmbG9hdCBfX1ApCit7CisgIHJldHVybiBfX2V4dGVuc2lvbl9fIChfX201MTIpCisgIHsgX19QLCBfX08sIF9fTiwgX19NLCBfX0wsIF9fSywgX19KLCBfX0ksCisgICAgX19ILCBfX0csIF9fRiwgX19FLCBfX0QsIF9fQywgX19CLCBfX0EgfTsKK30KKworI2RlZmluZSBfbW01MTJfc2V0cl9wcyhlMCxlMSxlMixlMyxlNCxlNSxlNixlNyxlOCxlOSxlMTAsZTExLGUxMixlMTMsZTE0LGUxNSkgXAorICBfbW01MTJfc2V0X3BzKChlMTUpLChlMTQpLChlMTMpLChlMTIpLChlMTEpLChlMTApLChlOSksKGU4KSwoZTcpLChlNiksKGU1KSwgXAorICAgICAgICAgICAgICAgIChlNCksKGUzKSwoZTIpLChlMSksKGUwKSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Fic19wcyhfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMilfbW01MTJfYW5kX2VwaTMyKF9tbTUxMl9zZXQxX2VwaTMyKDB4N0ZGRkZGRkYpLChfX201MTJpKV9fQSkgOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hYnNfcHMoX19tNTEyIF9fVywgX19tbWFzazE2IF9fSywgX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpX21tNTEyX21hc2tfYW5kX2VwaTMyKChfX201MTJpKV9fVywgX19LLCBfbW01MTJfc2V0MV9lcGkzMigweDdGRkZGRkZGKSwoX19tNTEyaSlfX0EpIDsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hYnNfcGQoX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZClfbW01MTJfYW5kX2VwaTY0KF9tbTUxMl9zZXQxX2VwaTY0KDB4N0ZGRkZGRkZGRkZGRkZGRiksKF9fdjhkaSlfX0EpIDsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Fic19wZChfX201MTJkIF9fVywgX19tbWFzazggX19LLCBfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKV9tbTUxMl9tYXNrX2FuZF9lcGk2NCgoX192OGRpKV9fVywgX19LLCBfbW01MTJfc2V0MV9lcGk2NCgweDdGRkZGRkZGRkZGRkZGRkYpLChfX3Y4ZGkpX19BKTsKK30KKworLy8gVmVjdG9yLXJlZHVjdGlvbiBhcml0aG1ldGljIGFjY2VwdHMgdmVjdG9ycyBhcyBpbnB1dHMgYW5kIHByb2R1Y2VzIHNjYWxhcnMgYXMKKy8vIG91dHB1dHMuIFRoaXMgY2xhc3Mgb2YgdmVjdG9yIG9wZXJhdGlvbiBmb3JtcyB0aGUgYmFzaXMgb2YgbWFueSBzY2llbnRpZmljCisvLyBjb21wdXRhdGlvbnMuIEluIHZlY3Rvci1yZWR1Y3Rpb24gYXJpdGhtZXRpYywgdGhlIGV2YWx1YXRpb24gb2ZmIGlzCisvLyBpbmRlcGVuZGVudCBvZiB0aGUgb3JkZXIgb2YgdGhlIGlucHV0IGVsZW1lbnRzIG9mIFYuCisKKy8vIFVzZWQgYmlzZWN0aW9uIG1ldGhvZC4gQXQgZWFjaCBzdGVwLCB3ZSBwYXJ0aXRpb24gdGhlIHZlY3RvciB3aXRoIHByZXZpb3VzCisvLyBzdGVwIGluIGhhbGYsIGFuZCB0aGUgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBvbiBpdHMgdHdvIGhhbHZlcy4KKy8vIFRoaXMgdGFrZXMgbG9nMihuKSBzdGVwcyB3aGVyZSBuIGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHZlY3Rvci4KKworLy8gVmVjNTEyIC0gVmVjdG9yIHdpdGggc2l6ZSA1MTIuCisvLyBPcGVyYXRvciAtIENhbiBiZSBvbmUgb2YgZm9sbG93aW5nOiArLCosJix8CisvLyBUMiAgLSBDYW4gZ2V0ICdpJyBmb3IgaW50IGFuZCAnZicgZm9yIGZsb2F0LgorLy8gVDEgLSBDYW4gZ2V0ICdpJyBmb3IgaW50IGFuZCAnZCcgZm9yIGRvdWJsZS4KKworI2RlZmluZSBfbW01MTJfcmVkdWNlX29wZXJhdG9yXzY0Yml0KFZlYzUxMiwgT3BlcmF0b3IsIFQyLCBUMSkgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18oeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX20yNTYjI1QxIFZlYzI1NiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZCMjVDIpVmVjNTEyLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkIyNUMilWZWM1MTIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGQjI1QyKVZlYzUxMiwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZCMjVDIpVmVjNTEyLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgNSwgNiwgNyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX20xMjgjI1QxIFZlYzEyOCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZCMjVDIpVmVjMjU2LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkIyNUMilWZWMyNTYsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGQjI1QyKVZlYzI1NiwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZCMjVDIpVmVjMjU2LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgMyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWZWMxMjggPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmQjI1QyKVZlYzEyOCwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZCMjVDIpVmVjMTI4LCAwLCAtMSkgICAgICAgICBcCisgICAgICAgICAgICAgT3BlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmQjI1QyKVZlYzEyOCwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZCMjVDIpVmVjMTI4LCAxLCAtMSk7ICAgICAgICBcCisgICAgcmV0dXJuIFZlYzEyOFswXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSkKKworc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUyBfbW01MTJfcmVkdWNlX2FkZF9lcGk2NChfX201MTJpIF9fVykgeworICBfbW01MTJfcmVkdWNlX29wZXJhdG9yXzY0Yml0KF9fVywgKywgaSwgaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMgX21tNTEyX3JlZHVjZV9tdWxfZXBpNjQoX19tNTEyaSBfX1cpIHsKKyAgX21tNTEyX3JlZHVjZV9vcGVyYXRvcl82NGJpdChfX1csICosIGksIGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTIF9tbTUxMl9yZWR1Y2VfYW5kX2VwaTY0KF9fbTUxMmkgX19XKSB7CisgIF9tbTUxMl9yZWR1Y2Vfb3BlcmF0b3JfNjRiaXQoX19XLCAmLCBpLCBpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUyBfbW01MTJfcmVkdWNlX29yX2VwaTY0KF9fbTUxMmkgX19XKSB7CisgIF9tbTUxMl9yZWR1Y2Vfb3BlcmF0b3JfNjRiaXQoX19XLCB8LCBpLCBpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gZG91YmxlIF9fREVGQVVMVF9GTl9BVFRSUyBfbW01MTJfcmVkdWNlX2FkZF9wZChfX201MTJkIF9fVykgeworICBfbW01MTJfcmVkdWNlX29wZXJhdG9yXzY0Yml0KF9fVywgKywgZiwgZCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGRvdWJsZSBfX0RFRkFVTFRfRk5fQVRUUlMgX21tNTEyX3JlZHVjZV9tdWxfcGQoX19tNTEyZCBfX1cpIHsKKyAgX21tNTEyX3JlZHVjZV9vcGVyYXRvcl82NGJpdChfX1csICosIGYsIGQpOworfQorCisvLyBWZWM1MTIgLSBWZWN0b3Igd2l0aCBzaXplIDUxMi4KKy8vIFZlYzUxMk5ldXRyYWwgLSBBbGwgdmVjdG9yIGVsZW1lbnRzIHNldCB0byB0aGUgaWRlbnRpdHkgZWxlbWVudC4gCisvLyBJZGVudGl0eSBlbGVtZW50OiB7KywwfSx7KiwxfSx7JiwweEZGRkZGRkZGRkZGRkZGRkZ9LHt8LDB9CisvLyBPcGVyYXRvciAtIENhbiBiZSBvbmUgb2YgZm9sbG93aW5nOiArLCosJix8CisvLyBNYXNrIC0gSW50cmluc2ljIE1hc2sKKy8vIFQyICAtIENhbiBnZXQgJ2knIGZvciBpbnQgYW5kICdmJyBmb3IgZmxvYXQuCisvLyBUMSAtIENhbiBnZXQgJ2knIGZvciBpbnQgYW5kICdkJyBmb3IgcGFja2VkIGRvdWJsZS1wcmVjaXNpb24uCisvLyBUMyAtIENhbiBiZSBQZCBmb3IgcGFja2VkIGRvdWJsZSBvciBxIGZvciBxLXdvcmQuCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcmVkdWNlX29wZXJhdG9yXzY0Yml0KFZlYzUxMiwgVmVjNTEyTmV1dHJhbCwgT3BlcmF0b3IsICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXNrLCBUMiwgVDEsIFQzKSAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWZWM1MTIgPSBfX2J1aWx0aW5faWEzMl9zZWxlY3QjI1QzIyNfNTEyKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIChfX21tYXNrOClNYXNrLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoX192OGQjI1QyKVZlYzUxMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgKF9fdjhkIyNUMilWZWM1MTJOZXV0cmFsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX21tNTEyX3JlZHVjZV9vcGVyYXRvcl82NGJpdChWZWM1MTIsIE9wZXJhdG9yLCBUMiwgVDEpOyAgICAgICAgICAgICAgICAgICAgXAorICB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19yZWR1Y2VfYWRkX2VwaTY0KF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX1cpIHsKKyAgX21tNTEyX21hc2tfcmVkdWNlX29wZXJhdG9yXzY0Yml0KF9fVywgX21tNTEyX3NldDFfZXBpNjQoMCksICssIF9fTSwgaSwgaSwgcSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3JlZHVjZV9tdWxfZXBpNjQoX19tbWFzazggX19NLCBfX201MTJpIF9fVykgeworICBfbW01MTJfbWFza19yZWR1Y2Vfb3BlcmF0b3JfNjRiaXQoX19XLCBfbW01MTJfc2V0MV9lcGk2NCgxKSwgKiwgX19NLCBpLCBpLCBxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcmVkdWNlX2FuZF9lcGk2NChfX21tYXNrOCBfX00sIF9fbTUxMmkgX19XKSB7CisgIF9tbTUxMl9tYXNrX3JlZHVjZV9vcGVyYXRvcl82NGJpdChfX1csIF9tbTUxMl9zZXQxX2VwaTY0KDB4RkZGRkZGRkZGRkZGRkZGRiksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiwgX19NLCAgaSwgaSwgcSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3JlZHVjZV9vcl9lcGk2NChfX21tYXNrOCBfX00sIF9fbTUxMmkgX19XKSB7CisgIF9tbTUxMl9tYXNrX3JlZHVjZV9vcGVyYXRvcl82NGJpdChfX1csIF9tbTUxMl9zZXQxX2VwaTY0KDApLCB8LCBfX00sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgaSwgcSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGRvdWJsZSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3JlZHVjZV9hZGRfcGQoX19tbWFzazggX19NLCBfX201MTJkIF9fVykgeworICBfbW01MTJfbWFza19yZWR1Y2Vfb3BlcmF0b3JfNjRiaXQoX19XLCBfbW01MTJfc2V0MV9wZCgwKSwgKywgX19NLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYsIGQsIHBkKTsKK30KKworc3RhdGljIF9faW5saW5lX18gZG91YmxlIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcmVkdWNlX211bF9wZChfX21tYXNrOCBfX00sIF9fbTUxMmQgX19XKSB7CisgIF9tbTUxMl9tYXNrX3JlZHVjZV9vcGVyYXRvcl82NGJpdChfX1csIF9tbTUxMl9zZXQxX3BkKDEpLCAqLCBfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLCBkLCBwZCk7Cit9CisKKy8vIFZlYzUxMiAtIFZlY3RvciB3aXRoIHNpemUgNTEyLgorLy8gT3BlcmF0b3IgLSBDYW4gYmUgb25lIG9mIGZvbGxvd2luZzogKywqLCYsfAorLy8gVDIgLSBDYW4gZ2V0ICdpJyBmb3IgaW50IGFuZCAnICcgZm9yIHBhY2tlZCBzaW5nbGUuCisvLyBUMSAtIENhbiBnZXQgJ2knIGZvciBpbnQgYW5kICdmJyBmb3IgZmxvYXQuCisKKyNkZWZpbmUgX21tNTEyX3JlZHVjZV9vcGVyYXRvcl8zMmJpdChWZWM1MTIsIE9wZXJhdG9yLCBUMiwgVDEpIF9fZXh0ZW5zaW9uX18oeyBcCisgICAgX19tMjU2IyNUMSBWZWMyNTYgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKF9fbTI1NiMjVDEpKF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnMjI1QyKVZlYzUxMiwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzIyNUMilWZWM1MTIsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNykgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cyMjVDIpVmVjNTEyLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnMjI1QyKVZlYzUxMiwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KSk7ICAgICAgICAgICAgXAorICAgIF9fbTEyOCMjVDEgVmVjMTI4ID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAoX19tMTI4IyNUMSkoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHMjI1QyKVZlYzI1NiwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzIyNUMilWZWMyNTYsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4cyMjVDIpVmVjMjU2LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHMjI1QyKVZlYzI1NiwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgNSwgNiwgNykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWZWMxMjggPSAoX19tMTI4IyNUMSkoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHMjI1QyKVZlYzEyOCwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzIyNUMilWZWMxMjgsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIC0xLCAtMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0cyMjVDIpVmVjMTI4LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHMjI1QyKVZlYzEyOCwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgMywgLTEsIC0xKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWZWMxMjggPSAoX19tMTI4IyNUMSkoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHMjI1QyKVZlYzEyOCwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzIyNUMilWZWMxMjgsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC0xLCAtMSwgLTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0cyMjVDIpVmVjMTI4LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHMjI1QyKVZlYzEyOCwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgLTEsIC0xLCAtMSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gVmVjMTI4WzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0pCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9yZWR1Y2VfYWRkX2VwaTMyKF9fbTUxMmkgX19XKSB7CisgIF9tbTUxMl9yZWR1Y2Vfb3BlcmF0b3JfMzJiaXQoX19XLCArLCBpLCBpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUyAKK19tbTUxMl9yZWR1Y2VfbXVsX2VwaTMyKF9fbTUxMmkgX19XKSB7CisgIF9tbTUxMl9yZWR1Y2Vfb3BlcmF0b3JfMzJiaXQoX19XLCAqLCBpLCBpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUyAKK19tbTUxMl9yZWR1Y2VfYW5kX2VwaTMyKF9fbTUxMmkgX19XKSB7CisgIF9tbTUxMl9yZWR1Y2Vfb3BlcmF0b3JfMzJiaXQoX19XLCAmLCBpLCBpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUyAKK19tbTUxMl9yZWR1Y2Vfb3JfZXBpMzIoX19tNTEyaSBfX1cpIHsKKyAgX21tNTEyX3JlZHVjZV9vcGVyYXRvcl8zMmJpdChfX1csIHwsIGksIGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBmbG9hdCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9yZWR1Y2VfYWRkX3BzKF9fbTUxMiBfX1cpIHsKKyAgX21tNTEyX3JlZHVjZV9vcGVyYXRvcl8zMmJpdChfX1csICssIGYsICk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGZsb2F0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3JlZHVjZV9tdWxfcHMoX19tNTEyIF9fVykgeworICBfbW01MTJfcmVkdWNlX29wZXJhdG9yXzMyYml0KF9fVywgKiwgZiwgKTsKK30KKworLy8gVmVjNTEyIC0gVmVjdG9yIHdpdGggc2l6ZSA1MTIuCisvLyBWZWM1MTJOZXV0cmFsIC0gQWxsIHZlY3RvciBlbGVtZW50cyBzZXQgdG8gdGhlIGlkZW50aXR5IGVsZW1lbnQuIAorLy8gSWRlbnRpdHkgZWxlbWVudDogeyssMH0seyosMX0seyYsMHhGRkZGRkZGRn0se3wsMH0KKy8vIE9wZXJhdG9yIC0gQ2FuIGJlIG9uZSBvZiBmb2xsb3dpbmc6ICssKiwmLHwKKy8vIE1hc2sgLSBJbnRyaW5zaWMgTWFzaworLy8gVDIgIC0gQ2FuIGdldCAnaScgZm9yIGludCBhbmQgJ2YnIGZvciBmbG9hdC4KKy8vIFQxIC0gQ2FuIGdldCAnaScgZm9yIGludCBhbmQgJ2QnIGZvciBkb3VibGUuCisvLyBUMyAtIENhbiBiZSBQcyBmb3IgcGFja2VkIHNpbmdsZSBvciBkIGZvciBkLXdvcmQuCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcmVkdWNlX29wZXJhdG9yXzMyYml0KFZlYzUxMiwgVmVjNTEyTmV1dHJhbCwgT3BlcmF0b3IsICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXNrLCBUMiwgVDEsIFQzKSAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWZWM1MTIgPSAoX19tNTEyIyNUMSlfX2J1aWx0aW5faWEzMl9zZWxlY3QjI1QzIyNfNTEyKCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpTWFzaywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzIyNUMilWZWM1MTIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cyMjVDIpVmVjNTEyTmV1dHJhbCk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX21tNTEyX3JlZHVjZV9vcGVyYXRvcl8zMmJpdChWZWM1MTIsIE9wZXJhdG9yLCBUMiwgVDEpOyAgICAgICAgICAgICAgICAgICAgXAorICB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19yZWR1Y2VfYWRkX2VwaTMyKCBfX21tYXNrMTYgX19NLCBfX201MTJpIF9fVykgeworICBfbW01MTJfbWFza19yZWR1Y2Vfb3BlcmF0b3JfMzJiaXQoX19XLCBfbW01MTJfc2V0MV9lcGkzMigwKSwgKywgX19NLCBpLCBpLCBkKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcmVkdWNlX211bF9lcGkzMiggX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX1cpIHsKKyAgX21tNTEyX21hc2tfcmVkdWNlX29wZXJhdG9yXzMyYml0KF9fVywgX21tNTEyX3NldDFfZXBpMzIoMSksICosIF9fTSwgaSwgaSwgZCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3JlZHVjZV9hbmRfZXBpMzIoIF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19XKSB7CisgIF9tbTUxMl9tYXNrX3JlZHVjZV9vcGVyYXRvcl8zMmJpdChfX1csIF9tbTUxMl9zZXQxX2VwaTMyKDB4RkZGRkZGRkYpLCAmLCBfX00sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgaSwgZCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3JlZHVjZV9vcl9lcGkzMihfX21tYXNrMTYgX19NLCBfX201MTJpIF9fVykgeworICBfbW01MTJfbWFza19yZWR1Y2Vfb3BlcmF0b3JfMzJiaXQoX19XLCBfbW01MTJfc2V0MV9lcGkzMigwKSwgfCwgX19NLCBpLCBpLCBkKTsKK30KKworc3RhdGljIF9faW5saW5lX18gZmxvYXQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19yZWR1Y2VfYWRkX3BzKF9fbW1hc2sxNiBfX00sIF9fbTUxMiBfX1cpIHsKKyAgX21tNTEyX21hc2tfcmVkdWNlX29wZXJhdG9yXzMyYml0KF9fVywgX21tNTEyX3NldDFfcHMoMCksICssIF9fTSwgZiwgLCBwcyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGZsb2F0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcmVkdWNlX211bF9wcyhfX21tYXNrMTYgX19NLCBfX201MTIgX19XKSB7CisgIF9tbTUxMl9tYXNrX3JlZHVjZV9vcGVyYXRvcl8zMmJpdChfX1csIF9tbTUxMl9zZXQxX3BzKDEpLCAqLCBfX00sIGYsICwgcHMpOworfQorCisvLyBVc2VkIGJpc2VjdGlvbiBtZXRob2QuIEF0IGVhY2ggc3RlcCwgd2UgcGFydGl0aW9uIHRoZSB2ZWN0b3Igd2l0aCBwcmV2aW91cworLy8gc3RlcCBpbiBoYWxmLCBhbmQgdGhlIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgb24gaXRzIHR3byBoYWx2ZXMuCisvLyBUaGlzIHRha2VzIGxvZzIobikgc3RlcHMgd2hlcmUgbiBpcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB2ZWN0b3IuCisvLyBUaGlzIG1hY3JvIHVzZXMgb25seSBpbnRyaW5zaWNzIGZyb20gdGhlIEFWWDUxMkYgZmVhdHVyZS4KKworLy8gVmVjNTEyIC0gVmVjdG9yIHdpdGggc2l6ZSBvZiA1MTIuCisvLyBJbnRyaW5OYW1lIC0gQ2FuIGJlIG9uZSBvZiBmb2xsb3dpbmc6IHttYXh8bWlufV97ZXBpNjR8ZXB1NjR8cGR9IGZvciBleGFtcGxlOgorLy8gICAgICAgICAgICAgIF9fbW01MTJfbWF4X2VwaTY0CisvLyBUMSAtIENhbiBnZXQgJ2knIGZvciBpbnQgYW5kICdkJyBmb3IgZG91YmxlLltfX201MTJ7aXxkfV0KKy8vIFQyIC0gQ2FuIGdldCAnaScgZm9yIGludCBhbmQgJ2YnIGZvciBmbG9hdC4gW19fdjhke2l8Zn1dCisKKyNkZWZpbmUgX21tNTEyX3JlZHVjZV9tYXhNaW5fNjRiaXQoVmVjNTEyLCBJbnRyaW5OYW1lLCBUMSwgVDIpIF9fZXh0ZW5zaW9uX18oeyBcCisgICAgICAgIFZlYzUxMiA9IF9tbTUxMl8jI0ludHJpbk5hbWUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tNTEyIyNUMSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZCMjVDIpVmVjNTEyLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGQjI1QyKVZlYzUxMiwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIC0xLCAtMSwgLTEsIC0xKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbTUxMiMjVDEpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGQjI1QyKVZlYzUxMiwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkIyNUMilWZWM1MTIsICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCA1LCA2LCA3LCAtMSwgLTEsIC0xLCAtMSkpOyBcCisgICAgICAgIFZlYzUxMiA9IF9tbTUxMl8jI0ludHJpbk5hbWUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tNTEyIyNUMSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZCMjVDIpVmVjNTEyLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGQjI1QyKVZlYzUxMiwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbTUxMiMjVDEpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGQjI1QyKVZlYzUxMiwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkIyNUMilWZWM1MTIsICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAzLCAtMSwgLTEsIC0xLCAtMSwgLTEsICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBWZWM1MTIgPSBfbW01MTJfIyNJbnRyaW5OYW1lKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbTUxMiMjVDEpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGQjI1QyKVZlYzUxMiwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkIyNUMilWZWM1MTIsICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX201MTIjI1QxKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkIyNUMilWZWM1MTIsICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZCMjVDIpVmVjNTEyLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSkpXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gVmVjNTEyWzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0pCisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMgCitfbW01MTJfcmVkdWNlX21heF9lcGk2NChfX201MTJpIF9fVikgeworICBfbW01MTJfcmVkdWNlX21heE1pbl82NGJpdChfX1YsIG1heF9lcGk2NCwgaSwgaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9yZWR1Y2VfbWF4X2VwdTY0KF9fbTUxMmkgX19WKSB7CisgIF9tbTUxMl9yZWR1Y2VfbWF4TWluXzY0Yml0KF9fViwgbWF4X2VwdTY0LCBpLCBpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gZG91YmxlIF9fREVGQVVMVF9GTl9BVFRSUyAKK19tbTUxMl9yZWR1Y2VfbWF4X3BkKF9fbTUxMmQgX19WKSB7CisgIF9tbTUxMl9yZWR1Y2VfbWF4TWluXzY0Yml0KF9fViwgbWF4X3BkLCBkLCBmKTsKK30KKworc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUyBfbW01MTJfcmVkdWNlX21pbl9lcGk2NAorKF9fbTUxMmkgX19WKSB7CisgIF9tbTUxMl9yZWR1Y2VfbWF4TWluXzY0Yml0KF9fViwgbWluX2VwaTY0LCBpLCBpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3JlZHVjZV9taW5fZXB1NjQoX19tNTEyaSBfX1YpIHsKKyAgX21tNTEyX3JlZHVjZV9tYXhNaW5fNjRiaXQoX19WLCBtaW5fZXB1NjQsIGksIGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBkb3VibGUgX19ERUZBVUxUX0ZOX0FUVFJTIAorX21tNTEyX3JlZHVjZV9taW5fcGQoX19tNTEyZCBfX1YpIHsKKyAgX21tNTEyX3JlZHVjZV9tYXhNaW5fNjRiaXQoX19WLCBtaW5fcGQsIGQsIGYpOworfQorCisvLyBWZWM1MTIgLSBWZWN0b3Igd2l0aCBzaXplIDUxMi4KKy8vIFZlYzUxMk5ldXRyYWwgLSBBIDUxMiBsZW5ndGggdmVjdG9yIHdpdGggZWxlbWVudHMgc2V0IHRvIHRoZSBpZGVudGl0eSBlbGVtZW50CisvLyBJZGVudGl0eSBlbGVtZW50OiB7bWF4X2VwaSwweDgwMDAwMDAwMDAwMDAwMDB9CisvLyAgICAgICAgICAgICAgICAgICB7bWF4X2VwdSwweDAwMDAwMDAwMDAwMDAwMDB9CisvLyAgICAgICAgICAgICAgICAgICB7bWF4X3BkLCAweEZGRjAwMDAwMDAwMDAwMDB9CisvLyAgICAgICAgICAgICAgICAgICB7bWluX2VwaSwweDdGRkZGRkZGRkZGRkZGRkZ9CisvLyAgICAgICAgICAgICAgICAgICB7bWluX2VwdSwweEZGRkZGRkZGRkZGRkZGRkZ9CisvLyAgICAgICAgICAgICAgICAgICB7bWluX3BkLCAweDdGRjAwMDAwMDAwMDAwMDB9CisvLworLy8gSW50cmluTmFtZSAtIENhbiBiZSBvbmUgb2YgZm9sbG93aW5nOiB7bWF4fG1pbn1fe2VwaTY0fGVwdTY0fHBkfSBmb3IgZXhhbXBsZToKKy8vICAgICAgICAgICAgICBfX21tNTEyX21heF9lcGk2NAorLy8gVDEgLSBDYW4gZ2V0ICdpJyBmb3IgaW50IGFuZCAnZCcgZm9yIGRvdWJsZS5bX19tNTEye2l8ZH1dCisvLyBUMiAtIENhbiBnZXQgJ2knIGZvciBpbnQgYW5kICdmJyBmb3IgZmxvYXQuIFtfX3Y4ZHtpfGZ9XQorLy8gVDMgLSBDYW4gZ2V0ICdxJyBxIHdvcmQgYW5kICdwZCcgZm9yIHBhY2tlZCBkb3VibGUuCisvLyAgICAgIFtfX2J1aWx0aW5faWEzMl9zZWxlY3R7cXxwZH1fNTEyXQorLy8gTWFzayAtIEludHJpbnNpYyBNYXNrCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcmVkdWNlX21heE1pbl82NGJpdChWZWM1MTIsIFZlYzUxMk5ldXRyYWwsIEludHJpbk5hbWUsIFQxLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVDIsIFQzLCBNYXNrKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWZWM1MTIgPSAoX19tNTEyIyNUMSlfX2J1aWx0aW5faWEzMl9zZWxlY3QjI1QzIyNfNTEyKCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOClNYXNrLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGQjI1QyKVZlYzUxMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkIyNUMilWZWM1MTJOZXV0cmFsKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX21tNTEyX3JlZHVjZV9tYXhNaW5fNjRiaXQoVmVjNTEyLCBJbnRyaW5OYW1lLCBUMSwgVDIpOyAgICAgICAgICAgICAgICAgICAgXAorICB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19yZWR1Y2VfbWF4X2VwaTY0KF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX1YpIHsKKyAgX21tNTEyX21hc2tfcmVkdWNlX21heE1pbl82NGJpdChfX1YsIF9tbTUxMl9zZXQxX2VwaTY0KDB4ODAwMDAwMDAwMDAwMDAwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2VwaTY0LCBpLCBpLCBxLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19yZWR1Y2VfbWF4X2VwdTY0KF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX1YpIHsKKyAgX21tNTEyX21hc2tfcmVkdWNlX21heE1pbl82NGJpdChfX1YsIF9tbTUxMl9zZXQxX2VwaTY0KDB4MDAwMDAwMDAwMDAwMDAwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2VwdTY0LCBpLCBpLCBxLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBkb3VibGUgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19yZWR1Y2VfbWF4X3BkKF9fbW1hc2s4IF9fTSwgX19tNTEyZCBfX1YpIHsKKyAgX21tNTEyX21hc2tfcmVkdWNlX21heE1pbl82NGJpdChfX1YsIC1fbW01MTJfc2V0MV9wZChfX2J1aWx0aW5faW5mKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wZCwgZCwgZiwgcGQsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3JlZHVjZV9taW5fZXBpNjQoX19tbWFzazggX19NLCBfX201MTJpIF9fVikgeworICBfbW01MTJfbWFza19yZWR1Y2VfbWF4TWluXzY0Yml0KF9fViwgX21tNTEyX3NldDFfZXBpNjQoMHg3RkZGRkZGRkZGRkZGRkZGKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fZXBpNjQsIGksIGksIHEsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3JlZHVjZV9taW5fZXB1NjQoX19tbWFzazggX19NLCBfX201MTJpIF9fVikgeworICBfbW01MTJfbWFza19yZWR1Y2VfbWF4TWluXzY0Yml0KF9fViwgX21tNTEyX3NldDFfZXBpNjQoMHhGRkZGRkZGRkZGRkZGRkZGKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fZXB1NjQsIGksIGksIHEsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGRvdWJsZSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3JlZHVjZV9taW5fcGQoX19tbWFzazggX19NLCBfX201MTJkIF9fVikgeworICBfbW01MTJfbWFza19yZWR1Y2VfbWF4TWluXzY0Yml0KF9fViwgX21tNTEyX3NldDFfcGQoX19idWlsdGluX2luZigpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fcGQsIGQsIGYsIHBkLCBfX00pOworfQorCisvLyBWZWM1MTIgLSBWZWN0b3Igd2l0aCBzaXplIDUxMi4KKy8vIEludHJpbk5hbWUgLSBDYW4gYmUgb25lIG9mIGZvbGxvd2luZzoge21heHxtaW59X3tlcGkzMnxlcHUzMnxwc30gZm9yIGV4YW1wbGU6CisvLyAgICAgICAgICAgICAgX19tbTUxMl9tYXhfZXBpMzIKKy8vIFQxIC0gQ2FuIGdldCAnaScgZm9yIGludCBhbmQgJyAnIC5bX19tNTEye2l8fV0KKy8vIFQyIC0gQ2FuIGdldCAnaScgZm9yIGludCBhbmQgJ2YnIGZvciBmbG9hdC5bX192MTZze2l8Zn1dCisKKyNkZWZpbmUgX21tNTEyX3JlZHVjZV9tYXhNaW5fMzJiaXQoVmVjNTEyLCBJbnRyaW5OYW1lLCBUMSwgVDIpIF9fZXh0ZW5zaW9uX18oeyBcCisgICAgVmVjNTEyID0gX21tNTEyXyMjSW50cmluTmFtZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgKF9fbTUxMiMjVDEpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzIyNUMilWZWM1MTIsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cyMjVDIpVmVjNTEyLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAoX19tNTEyIyNUMSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnMjI1QyKVZlYzUxMiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzIyNUMilWZWM1MTIsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSkpOyAgICAgICAgICAgIFwKKyAgICBWZWM1MTIgPSBfbW01MTJfIyNJbnRyaW5OYW1lKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAoX19tNTEyIyNUMSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnMjI1QyKVZlYzUxMiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzIyNUMilWZWM1MTIsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgLTEsIC0xLCAtMSwgLTEsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIChfX201MTIjI1QxKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cyMjVDIpVmVjNTEyLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnMjI1QyKVZlYzUxMiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCA1LCA2LCA3LCAtMSwgLTEsIC0xLCAtMSwgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSk7ICAgICAgICAgICAgXAorICAgIFZlYzUxMiA9IF9tbTUxMl8jI0ludHJpbk5hbWUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIChfX201MTIjI1QxKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cyMjVDIpVmVjNTEyLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnMjI1QyKVZlYzUxMiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgKF9fbTUxMiMjVDEpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzIyNUMilWZWM1MTIsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cyMjVDIpVmVjNTEyLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsIDMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpKTsgICAgICAgICAgICBcCisgICAgVmVjNTEyID0gX21tNTEyXyMjSW50cmluTmFtZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgKF9fbTUxMiMjVDEpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzIyNUMilWZWM1MTIsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cyMjVDIpVmVjNTEyLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAoX19tNTEyIyNUMSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnMjI1QyKVZlYzUxMiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzIyNUMilWZWM1MTIsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSkpOyAgICAgICAgICAgIFwKKyAgICByZXR1cm4gVmVjNTEyWzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0pCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMgX21tNTEyX3JlZHVjZV9tYXhfZXBpMzIoX19tNTEyaSBhKSB7CisgIF9tbTUxMl9yZWR1Y2VfbWF4TWluXzMyYml0KGEsIG1heF9lcGkzMiwgaSwgaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9yZWR1Y2VfbWF4X2VwdTMyKF9fbTUxMmkgYSkgeworICBfbW01MTJfcmVkdWNlX21heE1pbl8zMmJpdChhLCBtYXhfZXB1MzIsIGksIGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBmbG9hdCBfX0RFRkFVTFRfRk5fQVRUUlMgX21tNTEyX3JlZHVjZV9tYXhfcHMoX19tNTEyIGEpIHsKKyAgX21tNTEyX3JlZHVjZV9tYXhNaW5fMzJiaXQoYSwgbWF4X3BzLCAsIGYpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTIF9tbTUxMl9yZWR1Y2VfbWluX2VwaTMyKF9fbTUxMmkgYSkgeworICBfbW01MTJfcmVkdWNlX21heE1pbl8zMmJpdChhLCBtaW5fZXBpMzIsIGksIGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcmVkdWNlX21pbl9lcHUzMihfX201MTJpIGEpIHsKKyAgX21tNTEyX3JlZHVjZV9tYXhNaW5fMzJiaXQoYSwgbWluX2VwdTMyLCBpLCBpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gZmxvYXQgX19ERUZBVUxUX0ZOX0FUVFJTIF9tbTUxMl9yZWR1Y2VfbWluX3BzKF9fbTUxMiBhKSB7CisgIF9tbTUxMl9yZWR1Y2VfbWF4TWluXzMyYml0KGEsIG1pbl9wcywgLCBmKTsKK30KKworLy8gVmVjNTEyIC0gVmVjdG9yIHdpdGggc2l6ZSA1MTIuCisvLyBWZWM1MTJOZXV0cmFsIC0gQSA1MTIgbGVuZ3RoIHZlY3RvciB3aXRoIGVsZW1lbnRzIHNldCB0byB0aGUgaWRlbnRpdHkgZWxlbWVudAorLy8gSWRlbnRpdHkgZWxlbWVudDoge21heF9lcGksMHg4MDAwMDAwMH0KKy8vICAgICAgICAgICAgICAgICAgIHttYXhfZXB1LDB4MDAwMDAwMDB9CisvLyAgICAgICAgICAgICAgICAgICB7bWF4X3BzLCAweEZGODAwMDAwfQorLy8gICAgICAgICAgICAgICAgICAge21pbl9lcGksMHg3RkZGRkZGRn0KKy8vICAgICAgICAgICAgICAgICAgIHttaW5fZXB1LDB4RkZGRkZGRkZ9CisvLyAgICAgICAgICAgICAgICAgICB7bWluX3BzLCAweDdGODAwMDAwfQorLy8KKy8vIEludHJpbk5hbWUgLSBDYW4gYmUgb25lIG9mIGZvbGxvd2luZzoge21heHxtaW59X3tlcGkzMnxlcHUzMnxwc30gZm9yIGV4YW1wbGU6CisvLyAgICAgICAgICAgICAgX19tbTUxMl9tYXhfZXBpMzIKKy8vIFQxIC0gQ2FuIGdldCAnaScgZm9yIGludCBhbmQgJyAnIC5bX19tNTEye2l8fV0KKy8vIFQyIC0gQ2FuIGdldCAnaScgZm9yIGludCBhbmQgJ2YnIGZvciBmbG9hdC5bX192MTZze2l8Zn1dCisvLyBUMyAtIENhbiBnZXQgJ3EnIHEgd29yZCBhbmQgJ3BkJyBmb3IgcGFja2VkIGRvdWJsZS4KKy8vICAgICAgW19fYnVpbHRpbl9pYTMyX3NlbGVjdHtxfHBkfV81MTJdCisvLyBNYXNrIC0gSW50cmluc2ljIE1hc2sKKworI2RlZmluZSBfbW01MTJfbWFza19yZWR1Y2VfbWF4TWluXzMyYml0KFZlYzUxMiwgVmVjNTEyTmV1dHJhbCwgSW50cmluTmFtZSwgVDEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUMiwgVDMsIE1hc2spICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18oeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFZlYzUxMiA9IChfX201MTIjI1QxKV9fYnVpbHRpbl9pYTMyX3NlbGVjdCMjVDMjI181MTIoICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KU1hc2ssICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cyMjVDIpVmVjNTEyLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnMjI1QyKVZlYzUxMk5ldXRyYWwpOyAgICAgICAgICAgIFwKKyAgIF9tbTUxMl9yZWR1Y2VfbWF4TWluXzMyYml0KFZlYzUxMiwgSW50cmluTmFtZSwgVDEsIFQyKTsgICAgICAgICAgICAgICAgICAgICBcCisgICB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19yZWR1Y2VfbWF4X2VwaTMyKF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19WKSB7CisgIF9tbTUxMl9tYXNrX3JlZHVjZV9tYXhNaW5fMzJiaXQoX19WLCBfbW01MTJfc2V0MV9lcGkzMigweDgwMDAwMDAwKSwgbWF4X2VwaTMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIGksIGQsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3JlZHVjZV9tYXhfZXB1MzIoX19tbWFzazE2IF9fTSwgX19tNTEyaSBfX1YpIHsKKyAgX21tNTEyX21hc2tfcmVkdWNlX21heE1pbl8zMmJpdChfX1YsIF9tbTUxMl9zZXQxX2VwaTMyKDB4MDAwMDAwMDApLCBtYXhfZXB1MzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgaSwgZCwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gZmxvYXQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19yZWR1Y2VfbWF4X3BzKF9fbW1hc2sxNiBfX00sIF9fbTUxMiBfX1YpIHsKKyAgX21tNTEyX21hc2tfcmVkdWNlX21heE1pbl8zMmJpdChfX1YsLV9tbTUxMl9zZXQxX3BzKF9fYnVpbHRpbl9pbmZmKCkpLCBtYXhfcHMsICwgZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcmVkdWNlX21pbl9lcGkzMihfX21tYXNrMTYgX19NLCBfX201MTJpIF9fVikgeworICBfbW01MTJfbWFza19yZWR1Y2VfbWF4TWluXzMyYml0KF9fViwgX21tNTEyX3NldDFfZXBpMzIoMHg3RkZGRkZGRiksIG1pbl9lcGkzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBpLCBkLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19yZWR1Y2VfbWluX2VwdTMyKF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19WKSB7CisgIF9tbTUxMl9tYXNrX3JlZHVjZV9tYXhNaW5fMzJiaXQoX19WLCBfbW01MTJfc2V0MV9lcGkzMigweEZGRkZGRkZGKSwgbWluX2VwdTMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIGksIGQsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGZsb2F0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcmVkdWNlX21pbl9wcyhfX21tYXNrMTYgX19NLCBfX201MTIgX19WKSB7CisgIF9tbTUxMl9tYXNrX3JlZHVjZV9tYXhNaW5fMzJiaXQoX19WLCBfbW01MTJfc2V0MV9wcyhfX2J1aWx0aW5faW5mZigpKSwgbWluX3BzLCAsIGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHMsIF9fTSk7Cit9CisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8vIF9fQVZYNTEyRklOVFJJTl9ICmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eDUxMmlmbWFpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEyaWZtYWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZWZiYWUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eDUxMmlmbWFpbnRyaW4uaApAQCAtMCwwICsxLDkyIEBACisvKj09PS0tLS0tLS0tLS0tLS0gYXZ4NTEyaWZtYWludHJpbi5oIC0gSUZNQSBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxhdng1MTJpZm1haW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0lGTUFJTlRSSU5fSAorI2RlZmluZSBfX0lGTUFJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImF2eDUxMmlmbWEiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFkZDUyaGlfZXB1NjQgKF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSwgX19tNTEyaSBfX1opCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBtYWRkNTJodXE1MTJfbWFzayAoKF9fdjhkaSkgX19YLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWSwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1osCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tYWRkNTJoaV9lcHU2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX1gsCisgICAgICAgICAgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBtYWRkNTJodXE1MTJfbWFzayAoKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWCwKKyAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1ksCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21hZGQ1MmhpX2VwdTY0IChfX21tYXNrOCBfX00sIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSwgX19tNTEyaSBfX1opCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBtYWRkNTJodXE1MTJfbWFza3ogKChfX3Y4ZGkpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19ZLAorICAgICAgICAgICAgICAoX192OGRpKSBfX1osCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYWRkNTJsb19lcHU2NCAoX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZLCBfX201MTJpIF9fWikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cG1hZGQ1Mmx1cTUxMl9tYXNrICgoX192OGRpKSBfX1gsCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19ZLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21hZGQ1MmxvX2VwdTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19NLCBfX201MTJpIF9fWCwKKyAgICAgICAgICBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cG1hZGQ1Mmx1cTUxMl9tYXNrICgoX192OGRpKSBfX1csCisgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19YLAorICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWSwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWFkZDUybG9fZXB1NjQgKF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZLCBfX201MTJpIF9fWikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cG1hZGQ1Mmx1cTUxMl9tYXNreiAoKF9fdjhkaSkgX19YLAorICAgICAgICAgICAgICAoX192OGRpKSBfX1ksCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fWiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hdng1MTJpZm1hdmxpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEyaWZtYXZsaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMxZWU1YwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEyaWZtYXZsaW50cmluLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8qPT09LS0tLS0tLS0tLS0tLSBhdng1MTJpZm1hdmxpbnRyaW4uaCAtIElGTUEgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEyaWZtYXZsaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0lGTUFWTElOVFJJTl9ICisjZGVmaW5lIF9fSUZNQVZMSU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhdng1MTJpZm1hLGF2eDUxMnZsIikpKQorCisKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWRkNTJoaV9lcHU2NCAoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZLCBfX20xMjhpIF9fWikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cG1hZGQ1Mmh1cTEyOF9tYXNrICgoX192MmRpKSBfX1gsCisgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19ZLAorICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fWiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21hZGQ1MmhpX2VwdTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBtYWRkNTJodXExMjhfbWFzayAoKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fWCwKKyAgICAgICAgICAgICAgICAgICAoX192MmRpKSBfX1ksCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21hZGQ1MmhpX2VwdTY0IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSwgX19tMTI4aSBfX1opCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBtYWRkNTJodXExMjhfbWFza3ogKChfX3YyZGkpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19ZLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1osCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYWRkNTJoaV9lcHU2NCAoX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZLCBfX20yNTZpIF9fWikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cG1hZGQ1Mmh1cTI1Nl9tYXNrICgoX192NGRpKSBfX1gsCisgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19ZLAorICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21hZGQ1MmhpX2VwdTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19NLCBfX20yNTZpIF9fWCwKKyAgICAgICAgICBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cG1hZGQ1Mmh1cTI1Nl9tYXNrICgoX192NGRpKSBfX1csCisgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19YLAorICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWSwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWFkZDUyaGlfZXB1NjQgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZLCBfX20yNTZpIF9fWikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cG1hZGQ1Mmh1cTI1Nl9tYXNreiAoKF9fdjRkaSkgX19YLAorICAgICAgICAgICAgICAoX192NGRpKSBfX1ksCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hZGQ1MmxvX2VwdTY0IChfX20xMjhpIF9fWCwgX19tMTI4aSBfX1ksIF9fbTEyOGkgX19aKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwbWFkZDUybHVxMTI4X21hc2sgKChfX3YyZGkpIF9fWCwKKyAgICAgICAgICAgICAgICAgICAoX192MmRpKSBfX1ksCisgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19aLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWFkZDUybG9fZXB1NjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cG1hZGQ1Mmx1cTEyOF9tYXNrICgoX192MmRpKSBfX1csCisgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19YLAorICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fWSwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWFkZDUybG9fZXB1NjQgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZLCBfX20xMjhpIF9fWikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cG1hZGQ1Mmx1cTEyOF9tYXNreiAoKF9fdjJkaSkgX19YLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1ksCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fWiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hZGQ1MmxvX2VwdTY0IChfX20yNTZpIF9fWCwgX19tMjU2aSBfX1ksIF9fbTI1NmkgX19aKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwbWFkZDUybHVxMjU2X21hc2sgKChfX3Y0ZGkpIF9fWCwKKyAgICAgICAgICAgICAgICAgICAoX192NGRpKSBfX1ksCisgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19aLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWFkZDUybG9fZXB1NjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19YLAorICAgICAgICAgIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwbWFkZDUybHVxMjU2X21hc2sgKChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgICAoX192NGRpKSBfX1gsCisgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19ZLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tYWRkNTJsb19lcHU2NCAoX19tbWFzazggX19NLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1ksIF9fbTI1NmkgX19aKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwbWFkZDUybHVxMjU2X21hc2t6ICgoX192NGRpKSBfX1gsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19aLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Cit9CisKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEycGZpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEycGZpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2ZhM2NmCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hdng1MTJwZmludHJpbi5oCkBAIC0wLDAgKzEsMTExIEBACisvKj09PS0tLS0tLS0tLS0tLS0gYXZ4NTEycGZpbnRyaW4uaCAtIFBGIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGF2eDUxMnBmaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0FWWDUxMlBGSU5UUklOX0gKKyNkZWZpbmUgX19BVlg1MTJQRklOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEycGYiKSkpCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcHJlZmV0Y2hfaTMyZ2F0aGVyX3BkKGluZGV4LCBtYXNrLCBhZGRyLCBzY2FsZSwgaGludCkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfZ2F0aGVycGZkcGQoKF9fbW1hc2s4KShtYXNrKSwgKF9fdjhzaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgY29uc3QgKikoYWRkciksIChpbnQpKHNjYWxlKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShoaW50KSk7IH0pCisgICAgICAgICAgICAgIAorI2RlZmluZSBfbW01MTJfcHJlZmV0Y2hfaTMyZ2F0aGVyX3BkKGluZGV4LCBhZGRyLCBzY2FsZSwgaGludCkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfZ2F0aGVycGZkcGQoKF9fbW1hc2s4KSAtMSwgKF9fdjhzaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgY29uc3QgKikoYWRkciksIChpbnQpKHNjYWxlKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShoaW50KSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcHJlZmV0Y2hfaTMyZ2F0aGVyX3BzKGluZGV4LCBtYXNrLCBhZGRyLCBzY2FsZSwgaGludCkgKHtcCisgIF9fYnVpbHRpbl9pYTMyX2dhdGhlcnBmZHBzKChfX21tYXNrMTYpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShpbmRleCksIChpbnQgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoc2NhbGUpLCAoaW50KShoaW50KSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3ByZWZldGNoX2kzMmdhdGhlcl9wcyhpbmRleCwgYWRkciwgc2NhbGUsIGhpbnQpICh7XAorICBfX2J1aWx0aW5faWEzMl9nYXRoZXJwZmRwcygoX19tbWFzazE2KSAtMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoaW5kZXgpLCAoaW50IGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHNjYWxlKSwgKGludCkoaGludCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3ByZWZldGNoX2k2NGdhdGhlcl9wZChpbmRleCwgbWFzaywgYWRkciwgc2NhbGUsIGhpbnQpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX2dhdGhlcnBmcXBkKChfX21tYXNrOCkobWFzayksIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKGFkZHIpLCAoaW50KShzY2FsZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaGludCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9wcmVmZXRjaF9pNjRnYXRoZXJfcGQoaW5kZXgsIGFkZHIsIHNjYWxlLCBoaW50KSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9nYXRoZXJwZnFwZCgoX19tbWFzazgpIC0xLCAoX192OGRpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyBjb25zdCAqKShhZGRyKSwgKGludCkoc2NhbGUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGhpbnQpKTsgfSkKKyAgICAgICAgICAgICAgCisjZGVmaW5lIF9tbTUxMl9tYXNrX3ByZWZldGNoX2k2NGdhdGhlcl9wcyhpbmRleCwgbWFzaywgYWRkciwgc2NhbGUsIGhpbnQpICh7XAorICBfX2J1aWx0aW5faWEzMl9nYXRoZXJwZnFwcygoX19tbWFzazgpKG1hc2spLCAoX192OGRpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShhZGRyKSwgKGludCkoc2NhbGUpLCAoaW50KShoaW50KSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3ByZWZldGNoX2k2NGdhdGhlcl9wcyhpbmRleCwgYWRkciwgc2NhbGUsIGhpbnQpICh7XAorICBfX2J1aWx0aW5faWEzMl9nYXRoZXJwZnFwcygoX19tbWFzazgpIC0xLCAoX192OGRpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShhZGRyKSwgKGludCkoc2NhbGUpLCAoaW50KShoaW50KSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3ByZWZldGNoX2kzMnNjYXR0ZXJfcGQoYWRkciwgaW5kZXgsIHNjYWxlLCBoaW50KSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVycGZkcGQoKF9fbW1hc2s4KS0xLCAoX192OHNpKShfX20yNTZpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgKikoYWRkciksIChpbnQpKHNjYWxlKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaGludCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3ByZWZldGNoX2kzMnNjYXR0ZXJfcGQoYWRkciwgbWFzaywgaW5kZXgsIHNjYWxlLCBoaW50KSBfX2V4dGVuc2lvbl9fICh7XAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVycGZkcGQoKF9fbW1hc2s4KShtYXNrKSwgKF9fdjhzaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nICopKGFkZHIpLCAoaW50KShzY2FsZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGhpbnQpKTsgfSkKKworI2RlZmluZSBfbW01MTJfcHJlZmV0Y2hfaTMyc2NhdHRlcl9wcyhhZGRyLCBpbmRleCwgc2NhbGUsIGhpbnQpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJwZmRwcygoX19tbWFzazE2KS0xLCAoX192MTZzaSkoX19tNTEyaSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50ICopKGFkZHIpLCAoaW50KShzY2FsZSksIChpbnQpKGhpbnQpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19wcmVmZXRjaF9pMzJzY2F0dGVyX3BzKGFkZHIsIG1hc2ssIGluZGV4LCBzY2FsZSwgaGludCkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnBmZHBzKChfX21tYXNrMTYpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoaW5kZXgpLCAoaW50ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShzY2FsZSksIChpbnQpKGhpbnQpKTsgfSkKKworI2RlZmluZSBfbW01MTJfcHJlZmV0Y2hfaTY0c2NhdHRlcl9wZChhZGRyLCBpbmRleCwgc2NhbGUsIGhpbnQpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJwZnFwZCgoX19tbWFzazgpLTEsIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyAqKShhZGRyKSwgKGludCkoc2NhbGUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShoaW50KSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcHJlZmV0Y2hfaTY0c2NhdHRlcl9wZChhZGRyLCBtYXNrLCBpbmRleCwgc2NhbGUsIGhpbnQpIF9fZXh0ZW5zaW9uX18gKHtcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJwZnFwZCgoX19tbWFzazgpKG1hc2spLCAoX192OGRpKShfX201MTJpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgKikoYWRkciksIChpbnQpKHNjYWxlKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaGludCkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9wcmVmZXRjaF9pNjRzY2F0dGVyX3BzKGFkZHIsIGluZGV4LCBzY2FsZSwgaGludCkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnBmcXBzKChfX21tYXNrOCktMSwgKF9fdjhkaSkoX19tNTEyaSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50ICopKGFkZHIpLCAoaW50KShzY2FsZSksIChpbnQpKGhpbnQpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19wcmVmZXRjaF9pNjRzY2F0dGVyX3BzKGFkZHIsIG1hc2ssIGluZGV4LCBzY2FsZSwgaGludCkgX19leHRlbnNpb25fXyAoe1wKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnBmcXBzKChfX21tYXNrOCkobWFzayksIChfX3Y4ZGkpKF9fbTUxMmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCAqKShhZGRyKSwgKGludCkoc2NhbGUpLCAoaW50KShoaW50KSk7IH0pCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eDUxMnZibWlpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEydmJtaWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNzIzOGUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eDUxMnZibWlpbnRyaW4uaApAQCAtMCwwICsxLDEzNyBAQAorLyo9PT0tLS0tLS0tLS0tLS0tIGF2eDUxMnZibWlpbnRyaW4uaCAtIFZCTUkgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEydmJtaWludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19WQk1JSU5UUklOX0gKKyNkZWZpbmUgX19WQk1JSU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhdng1MTJ2Ym1pIikpKQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFzazJfcGVybXV0ZXgydmFyX2VwaTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fSSwKKyAgICAgICAgIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJxaTUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcGVybXV0ZXgydmFyX2VwaTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fSSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnFpNTEyX21hc2sgKChfX3Y2NHFpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcGVybXV0ZXgydmFyX2VwaTggKF9fbTUxMmkgX19BLCBfX21tYXNrNjQgX19VLAorICAgICAgICBfX201MTJpIF9fSSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnFpNTEyX21hc2sgKChfX3Y2NHFpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9wZXJtdXRleDJ2YXJfZXBpOCAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsCisgICAgICAgICBfX201MTJpIF9fSSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnFpNTEyX21hc2t6ICgoX192NjRxaSkgX19JCisgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Blcm11dGV4dmFyX2VwaTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFycWk1MTJfbWFzayAoKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl91bmRlZmluZWRfZXBpMzIgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9wZXJtdXRleHZhcl9lcGk4IChfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwKKyAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGVybXZhcnFpNTEyX21hc2sgKChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcGVybXV0ZXh2YXJfZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLAorICAgICAgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJxaTUxMl9tYXNrICgoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbXVsdGlzaGlmdF9lcGk2NF9lcGk4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwbXVsdGlzaGlmdHFiNTEyX21hc2sgKChfX3Y2NHFpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fWSwKKyAgICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbXVsdGlzaGlmdF9lcGk2NF9lcGk4IChfX21tYXNrNjQgX19NLCBfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBtdWx0aXNoaWZ0cWI1MTJfbWFzayAoKF9fdjY0cWkpIF9fWCwKKyAgICAgICAgICAgICAgICAoX192NjRxaSkgX19ZLAorICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX211bHRpc2hpZnRfZXBpNjRfZXBpOCAoX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwbXVsdGlzaGlmdHFiNTEyX21hc2sgKChfX3Y2NHFpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fWSwKKyAgICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3VuZGVmaW5lZF9lcGkzMiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Cit9CisKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEydmJtaXZsaW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eDUxMnZibWl2bGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNWM2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eDUxMnZibWl2bGludHJpbi5oCkBAIC0wLDAgKzEsMjQ3IEBACisvKj09PS0tLS0tLS0tLS0tLS0gYXZ4NTEydmJtaXZsaW50cmluLmggLSBWQk1JIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGF2eDUxMnZibWl2bGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19WQk1JVkxJTlRSSU5fSAorI2RlZmluZSBfX1ZCTUlWTElOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEydmJtaSxhdng1MTJ2bCIpKSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2syX3Blcm11dGV4MnZhcl9lcGk4IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0ksIF9fbW1hc2sxNiBfX1UsCisgICAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFycWkxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazE2KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2syX3Blcm11dGV4MnZhcl9lcGk4IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0ksCisgICAgICAgICBfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFycWkyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMycWkpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazMyKQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Blcm11dGV4MnZhcl9lcGk4IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0ksIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJxaTEyOF9tYXNrICgoX192MTZxaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0KKyAgICAgICAgICAgICAgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19wZXJtdXRleDJ2YXJfZXBpOCAoX19tMTI4aSBfX0EsIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19JLAorICAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycWkxMjhfbWFzayAoKF9fdjE2cWkpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazE2KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3Blcm11dGV4MnZhcl9lcGk4IChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0ksCisgICAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycWkxMjhfbWFza3ogKChfX3YxNnFpKSBfX0kKKyAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpCisgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Blcm11dGV4MnZhcl9lcGk4IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0ksIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJxaTI1Nl9tYXNrICgoX192MzJxaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0KKyAgICAgICAgICAgICAgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wZXJtdXRleDJ2YXJfZXBpOCAoX19tMjU2aSBfX0EsIF9fbW1hc2szMiBfX1UsCisgICAgICAgIF9fbTI1NmkgX19JLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycWkyNTZfbWFzayAoKF9fdjMycWkpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazMyKQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3Blcm11dGV4MnZhcl9lcGk4IChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgIF9fbTI1NmkgX19JLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycWkyNTZfbWFza3ogKChfX3YzMnFpKSBfX0kKKyAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpCisgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Blcm11dGV4dmFyX2VwaTggKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFycWkxMjhfbWFzayAoKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV91bmRlZmluZWRfc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9wZXJtdXRleHZhcl9lcGk4IChfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGVybXZhcnFpMTI4X21hc2sgKChfX3YxNnFpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3Blcm11dGV4dmFyX2VwaTggKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwKKyAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFycWkxMjhfbWFzayAoKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9wZXJtdXRleHZhcl9lcGk4IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGVybXZhcnFpMjU2X21hc2sgKChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfdW5kZWZpbmVkX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcGVybXV0ZXh2YXJfZXBpOCAoX19tbWFzazMyIF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJxaTI1Nl9tYXNrICgoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wZXJtdXRleHZhcl9lcGk4IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGVybXZhcnFpMjU2X21hc2sgKChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tdWx0aXNoaWZ0X2VwaTY0X2VwaTggKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBtdWx0aXNoaWZ0cWIxMjhfbWFzayAoKF9fdjE2cWkpIF9fWCwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX19ZLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tdWx0aXNoaWZ0X2VwaTY0X2VwaTggKF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cG11bHRpc2hpZnRxYjEyOF9tYXNrICgoX192MTZxaSkgX19YLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1ksCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWx0aXNoaWZ0X2VwaTY0X2VwaTggKF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cG11bHRpc2hpZnRxYjEyOF9tYXNrICgoX192MTZxaSkgX19YLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1ksCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpCisgICAgICAgICAgICAgICAgX21tX3VuZGVmaW5lZF9zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tdWx0aXNoaWZ0X2VwaTY0X2VwaTggKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBtdWx0aXNoaWZ0cWIyNTZfbWFzayAoKF9fdjMycWkpIF9fWCwKKyAgICAgICAgICAgICAgICAoX192MzJxaSkgX19ZLAorICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tdWx0aXNoaWZ0X2VwaTY0X2VwaTggKF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cG11bHRpc2hpZnRxYjI1Nl9tYXNrICgoX192MzJxaSkgX19YLAorICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1ksCisgICAgICAgICAgICAgICAgKF9fdjMycWkpCisgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tdWx0aXNoaWZ0X2VwaTY0X2VwaTggKF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cG11bHRpc2hpZnRxYjI1Nl9tYXNrICgoX192MzJxaSkgX19YLAorICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1ksCisgICAgICAgICAgICAgICAgKF9fdjMycWkpCisgICAgICAgICAgICAgICAgX21tMjU2X3VuZGVmaW5lZF9zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEydmxid2ludHJpbi5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hdng1MTJ2bGJ3aW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwNmY3ZAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEydmxid2ludHJpbi5oCkBAIC0wLDAgKzEsMzIyMCBAQAorLyo9PT0tLS0tIGF2eDUxMnZsYndpbnRyaW4uaCAtIEFWWDUxMlZMIGFuZCBBVlg1MTJCVyBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEydmxid2ludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19BVlg1MTJWTEJXSU5UUklOX0gKKyNkZWZpbmUgX19BVlg1MTJWTEJXSU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhdng1MTJ2bCxhdng1MTJidyIpKSkKKworc3RhdGljICBfX2lubGluZSBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldHplcm9faGkodm9pZCl7CisgICAgcmV0dXJuIChfX20xMjhpKShfX3Y4aGkpeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07Cit9CisKKy8qIEludGVnZXIgY29tcGFyZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfZXBpOF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9wY21wZXFiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZXFfZXBpOF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9wY21wZXFiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfZXB1OF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBlcV9lcHU4X21hc2soX19tbWFzazE2IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGVxX2VwaThfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfcGNtcGVxYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGVxX2VwaThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfcGNtcGVxYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGVxX2VwdThfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZXFfZXB1OF9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGVxX2VwaTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGVxdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBlcV9lcGkxNl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGVxdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfZXB1MTZfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZXFfZXB1MTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGVxX2VwaTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3BjbXBlcXcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBlcV9lcGkxNl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9wY21wZXF3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZXFfZXB1MTZfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZXFfZXB1MTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ2VfZXBpOF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ2VfZXBpOF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ2VfZXB1OF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBnZV9lcHU4X21hc2soX19tbWFzazE2IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGdlX2VwaThfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGdlX2VwaThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGdlX2VwdThfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZ2VfZXB1OF9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGdlX2VwaTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBnZV9lcGkxNl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ2VfZXB1MTZfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ2VfZXB1MTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGdlX2VwaTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBnZV9lcGkxNl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ2VfZXB1MTZfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZ2VfZXB1MTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfZXBpOF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9wY21wZ3RiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ3RfZXBpOF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9wY21wZ3RiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfZXB1OF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBndF9lcHU4X21hc2soX19tbWFzazE2IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGd0X2VwaThfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfcGNtcGd0YjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGd0X2VwaThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfcGNtcGd0YjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGd0X2VwdThfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZ3RfZXB1OF9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGd0X2VwaTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGd0dzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBndF9lcGkxNl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGd0dzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfZXB1MTZfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ3RfZXB1MTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGd0X2VwaTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3BjbXBndHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBndF9lcGkxNl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9wY21wZ3R3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ3RfZXB1MTZfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZ3RfZXB1MTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbGVfZXBpOF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbGVfZXBpOF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbGVfZXB1OF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBsZV9lcHU4X21hc2soX19tbWFzazE2IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGxlX2VwaThfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGxlX2VwaThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGxlX2VwdThfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbGVfZXB1OF9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGxlX2VwaTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBsZV9lcGkxNl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbGVfZXB1MTZfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbGVfZXB1MTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGxlX2VwaTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBsZV9lcGkxNl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbGVfZXB1MTZfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbGVfZXB1MTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbHRfZXBpOF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbHRfZXBpOF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbHRfZXB1OF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBsdF9lcHU4X21hc2soX19tbWFzazE2IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGx0X2VwaThfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGx0X2VwaThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGx0X2VwdThfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbHRfZXB1OF9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X2VwaTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBsdF9lcGkxNl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbHRfZXB1MTZfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbHRfZXB1MTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGx0X2VwaTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBsdF9lcGkxNl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbHRfZXB1MTZfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbHRfZXB1MTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmVxX2VwaThfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcG5lcV9lcGk4X21hc2soX19tbWFzazE2IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZXFfZXB1OF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBuZXFfZXB1OF9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBuZXFfZXBpOF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbmVxX2VwaThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcG5lcV9lcHU4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcG5lcV9lcHU4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmVxX2VwaTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBuZXFfZXBpMTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5lcV9lcHUxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBuZXFfZXB1MTZfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcG5lcV9lcGkxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbmVxX2VwaTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBuZXFfZXB1MTZfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbmVxX2VwdTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2FkZF9lcGk4KF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpeworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8yNTYoKF9fbW1hc2szMilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfYWRkX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hZGRfZXBpOChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X2FkZF9lcGk4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYWRkX2VwaTE2KF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X2FkZF9lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FkZF9lcGkxNihfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X2FkZF9lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N1Yl9lcGk4KF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X3N1Yl9lcGk4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3ViX2VwaTgoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzI1NigoX19tbWFzazMyKV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9zdWJfZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N1Yl9lcGkxNihfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zdWJfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zdWJfZXBpMTYoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zdWJfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hZGRfZXBpOChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzEyOCgoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9hZGRfZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2FkZF9lcGk4KF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjgoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fYWRkX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hZGRfZXBpMTYoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fYWRkX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hZGRfZXBpMTYoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9hZGRfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N1Yl9lcGk4KF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMTI4KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3N1Yl9lcGk4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3ViX2VwaTgoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzEyOCgoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9zdWJfZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N1Yl9lcGkxNihfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zdWJfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3N1Yl9lcGkxNihfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3N1Yl9lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbXVsbG9fZXBpMTYoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfbXVsbG9fZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tdWxsb19lcGkxNihfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X211bGxvX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbXVsbG9fZXBpMTYoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fbXVsbG9fZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X211bGxvX2VwaTE2KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fbXVsbG9fZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2JsZW5kX2VwaTggKF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fVykKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzEyOCAoKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAorICAgICAgICAgICAgICAoX192MTZxaSkgX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2JsZW5kX2VwaTggKF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fVykKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzI1NiAoKF9fbW1hc2szMikgX19VLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYmxlbmRfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19XKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19ibGVuZF9lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19XKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2ICgoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hYnNfZXBpOChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzEyOCgoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9hYnNfZXBpOChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hYnNfZXBpOChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMTI4KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX2Fic19lcGk4KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Fic19lcGk4KF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X2Fic19lcGk4KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Fic19lcGk4IChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X2Fic19lcGk4KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2Fic19lcGkxNihfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9hYnNfZXBpMTYoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hYnNfZXBpMTYoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9hYnNfZXBpMTYoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hYnNfZXBpMTYoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfYWJzX2VwaTE2KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Fic19lcGkxNihfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X2Fic19lcGkxNihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcGFja3NfZXBpMzIoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9wYWNrc19lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcGFja3NfZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9wYWNrc19lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcGFja3NfZXBpMzIoX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfcGFja3NfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wYWNrc19lcGkzMihfX20yNTZpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfcGFja3NfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9wYWNrc19lcGkxNihfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzEyOCgoX19tbWFzazE2KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9wYWNrc19lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3BhY2tzX2VwaTE2KF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzEyOCgoX19tbWFzazE2KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9wYWNrc19lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3BhY2tzX2VwaTE2KF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X3BhY2tzX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfcGFja3NfZXBpMTYoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X3BhY2tzX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcGFja3VzX2VwaTMyKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3BhY2t1c19lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcGFja3VzX2VwaTMyKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fcGFja3VzX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9wYWNrdXNfZXBpMzIoX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9wYWNrdXNfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3BhY2t1c19lcGkzMihfX20yNTZpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9wYWNrdXNfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3BhY2t1c19lcGkxNihfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzEyOCgoX19tbWFzazE2KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3BhY2t1c19lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcGFja3VzX2VwaTE2KF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzEyOCgoX19tbWFzazE2KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3BhY2t1c19lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcGFja3VzX2VwaTE2KF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfcGFja3VzX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wYWNrdXNfZXBpMTYoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfcGFja3VzX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FkZHNfZXBpOChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjgoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fYWRkc19lcGk4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWRkc19lcGk4KF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMTI4KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX2FkZHNfZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2FkZHNfZXBpOChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8yNTYoKF9fbW1hc2szMilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9hZGRzX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FkZHNfZXBpOChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzI1NigoX19tbWFzazMyKV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X2FkZHNfZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYWRkc19lcGkxNihfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fYWRkc19lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWRkc19lcGkxNihfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9hZGRzX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hZGRzX2VwaTE2KF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfYWRkc19lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hZGRzX2VwaTE2KF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9hZGRzX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FkZHNfZXB1OChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjgoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fYWRkc19lcHU4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWRkc19lcHU4KF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMTI4KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX2FkZHNfZXB1OChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2FkZHNfZXB1OChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8yNTYoKF9fbW1hc2szMilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9hZGRzX2VwdTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FkZHNfZXB1OChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzI1NigoX19tbWFzazMyKV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X2FkZHNfZXB1OChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYWRkc19lcHUxNihfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fYWRkc19lcHUxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWRkc19lcHUxNihfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9hZGRzX2VwdTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hZGRzX2VwdTE2KF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfYWRkc19lcHUxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hZGRzX2VwdTE2KF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9hZGRzX2VwdTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2F2Z19lcHU4KF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzEyOCgoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9hdmdfZXB1OChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2F2Z19lcHU4KF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMTI4KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX2F2Z19lcHU4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYXZnX2VwdTgoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X2F2Z19lcHU4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYXZnX2VwdTgoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8yNTYoKF9fbW1hc2szMilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfYXZnX2VwdTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hdmdfZXB1MTYoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX2F2Z19lcHUxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYXZnX2VwdTE2KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX2F2Z19lcHUxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYXZnX2VwdTE2KF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X2F2Z19lcHUxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYXZnX2VwdTE2KF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfYXZnX2VwdTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWF4X2VwaTgoX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjgoKF9fbW1hc2sxNilfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fbWF4X2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYXhfZXBpOChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjgoKF9fbW1hc2sxNilfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fbWF4X2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tYXhfZXBpOChfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzI1NigoX19tbWFzazMyKV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9tYXhfZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21heF9lcGk4KF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzI1NigoX19tbWFzazMyKV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9tYXhfZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21heF9lcGkxNihfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9tYXhfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21heF9lcGkxNihfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fbWF4X2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tYXhfZXBpMTYoX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9tYXhfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21heF9lcGkxNihfX20yNTZpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9tYXhfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21heF9lcHU4KF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMTI4KChfX21tYXNrMTYpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX21heF9lcHU4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWF4X2VwdTgoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMTI4KChfX21tYXNrMTYpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX21heF9lcHU4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWF4X2VwdTggKF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X21heF9lcHU4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWF4X2VwdTgoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X21heF9lcHU4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWF4X2VwdTE2KF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX21heF9lcHUxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWF4X2VwdTE2KF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9tYXhfZXB1MTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21heF9lcHUxNihfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X21heF9lcHUxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWF4X2VwdTE2KF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X21heF9lcHUxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWluX2VwaTgoX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjgoKF9fbW1hc2sxNilfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fbWluX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19taW5fZXBpOChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjgoKF9fbW1hc2sxNilfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fbWluX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9taW5fZXBpOChfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzI1NigoX19tbWFzazMyKV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9taW5fZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21pbl9lcGk4KF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzI1NigoX19tbWFzazMyKV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9taW5fZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21pbl9lcGkxNihfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9taW5fZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21pbl9lcGkxNihfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fbWluX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9taW5fZXBpMTYoX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9taW5fZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21pbl9lcGkxNihfX20yNTZpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9taW5fZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21pbl9lcHU4KF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMTI4KChfX21tYXNrMTYpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX21pbl9lcHU4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWluX2VwdTgoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMTI4KChfX21tYXNrMTYpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX21pbl9lcHU4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWluX2VwdTggKF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X21pbl9lcHU4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWluX2VwdTgoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X21pbl9lcHU4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWluX2VwdTE2KF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX21pbl9lcHUxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWluX2VwdTE2KF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9taW5fZXB1MTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21pbl9lcHUxNihfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X21pbl9lcHUxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWluX2VwdTE2KF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X21pbl9lcHUxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zaHVmZmxlX2VwaTgoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMTI4KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fc2h1ZmZsZV9lcGk4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zaHVmZmxlX2VwaTgoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjgoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9zaHVmZmxlX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NodWZmbGVfZXBpOChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8yNTYoKF9fbW1hc2szMilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9zaHVmZmxlX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NodWZmbGVfZXBpOChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzI1NigoX19tbWFzazMyKV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X3NodWZmbGVfZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3Vic19lcGk4KF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzEyOCgoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9zdWJzX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zdWJzX2VwaTgoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjgoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fc3Vic19lcGk4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3Vic19lcGk4KF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzI1NigoX19tbWFzazMyKV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X3N1YnNfZXBpOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3Vic19lcGk4KF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfc3Vic19lcGk4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdWJzX2VwaTE2KF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zdWJzX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zdWJzX2VwaTE2KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3N1YnNfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N1YnNfZXBpMTYoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zdWJzX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3N1YnNfZXBpMTYoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3N1YnNfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3Vic19lcHU4KF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzEyOCgoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9zdWJzX2VwdTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zdWJzX2VwdTgoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjgoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fc3Vic19lcHU4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3Vic19lcHU4KF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzI1NigoX19tbWFzazMyKV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X3N1YnNfZXB1OChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3Vic19lcHU4KF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfc3Vic19lcHU4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdWJzX2VwdTE2KF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zdWJzX2VwdTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zdWJzX2VwdTE2KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3N1YnNfZXB1MTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N1YnNfZXB1MTYoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zdWJzX2VwdTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3N1YnNfZXB1MTYoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3N1YnNfZXB1MTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2syX3Blcm11dGV4MnZhcl9lcGkxNiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19JLCBfX21tYXNrOCBfX1UsCisgICAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFyaGkxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19JIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazJfcGVybXV0ZXgydmFyX2VwaTE2IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0ksCisgICAgICAgICBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFyaGkyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0kgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Blcm11dGV4MnZhcl9lcGkxNiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19JLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyaGkxMjhfbWFzayAoKF9fdjhoaSkgX19JLyogaWR4ICovLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19wZXJtdXRleDJ2YXJfZXBpMTYgKF9fbTEyOGkgX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19JLAorICAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyaGkxMjhfbWFzayAoKF9fdjhoaSkgX19JLyogaWR4ICovLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3Blcm11dGV4MnZhcl9lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0ksCisgICAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyaGkxMjhfbWFza3ogKChfX3Y4aGkpIF9fSS8qIGlkeCAqLywKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9wZXJtdXRleDJ2YXJfZXBpMTYgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fSSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmhpMjU2X21hc2sgKChfX3YxNmhpKSBfX0kvKiBpZHggKi8sCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3Blcm11dGV4MnZhcl9lcGkxNiAoX19tMjU2aSBfX0EsIF9fbW1hc2sxNiBfX1UsCisgICAgICAgIF9fbTI1NmkgX19JLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyaGkyNTZfbWFzayAoKF9fdjE2aGkpIF9fSS8qIGlkeCAqLywKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9wZXJtdXRleDJ2YXJfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgICAgX19tMjU2aSBfX0ksIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJoaTI1Nl9tYXNreiAoKF9fdjE2aGkpIF9fSS8qIGlkeCAqLywKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21hZGR1YnNfZXBpMTYoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9tYWRkdWJzX2VwaTE2KF9fWCwgX19ZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21hZGR1YnNfZXBpMTYoX19tbWFzazggX19VLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX21hZGR1YnNfZXBpMTYoX19YLCBfX1kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWFkZHVic19lcGkxNihfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX1gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbTI1NmkgX19ZKSB7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfbWFkZHVic19lcGkxNihfX1gsIF9fWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tYWRkdWJzX2VwaTE2KF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkgeworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X21hZGR1YnNfZXBpMTYoX19YLCBfX1kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWFkZF9lcGkxNihfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9tYWRkX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tYWRkX2VwaTE2KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fbWFkZF9lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWFkZF9lcGkxNihfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X21hZGRfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWFkZF9lcGkxNihfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfbWFkZF9lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2VwaTE2X2VwaTggKF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnN3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0c2VwaTE2X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnN3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19PLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0c2VwaTE2X2VwaTggKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3diMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRzZXBpMTZfZXBpOCAoX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3diMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHNlcGkxNl9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3diMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19PLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0c2VwaTE2X2VwaTggKF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnN3YjI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHVzZXBpMTZfZXBpOCAoX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXN3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnR1c2VwaTE2X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzd2IxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnR1c2VwaTE2X2VwaTggKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXN3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnR1c2VwaTE2X2VwaTggKF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzd2IyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnR1c2VwaTE2X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3diMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHVzZXBpMTZfZXBpOCAoX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXN3YjI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXBpMTZfZXBpOCAoX19tMTI4aSBfX0EpIHsKKworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpMTZfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92d2IxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0ZXBpMTZfZXBpOCAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcGkxNl9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdndiMTI4bWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjhoaSkgX19BLCBfX00pOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRzZXBpMTZfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Zzd2IxMjhtZW1fbWFzayAoKF9fdjE2cWkgKikgX19QLCAoX192OGhpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnR1c2VwaTE2X3N0b3JldV9lcGk4ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92dXN3YjEyOG1lbV9tYXNrICgoX192MTZxaSAqKSBfX1AsIChfX3Y4aGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGkxNl9lcGk4IChfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z3YjI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGkxNl9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92d2IyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwaTE2X2VwaTggKF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdndiMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGkxNl9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Z3YjI1Nm1lbV9tYXNrICgoX192MTZxaSAqKSBfX1AsIChfX3YxNmhpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRzZXBpMTZfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92c3diMjU2bWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjE2aGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHVzZXBpMTZfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3diMjU2bWVtX21hc2sgKChfX3YxNnFpKikgX19QLCAoX192MTZoaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbXVsaHJzX2VwaTE2KF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkgeworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX211bGhyc19lcGkxNihfX1gsIF9fWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbXVsaHJzX2VwaTE2KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fbXVsaHJzX2VwaTE2KF9fWCwgX19ZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tdWxocnNfZXBpMTYoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkgeworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9tdWxocnNfZXBpMTYoX19YLCBfX1kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X211bGhyc19lcGkxNihfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfbXVsaHJzX2VwaTE2KF9fWCwgX19ZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tdWxoaV9lcHUxNihfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9tdWxoaV9lcHUxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbXVsaGlfZXB1MTYoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9tdWxoaV9lcHUxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbXVsaGlfZXB1MTYoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfbXVsaGlfZXB1MTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tdWxoaV9lcHUxNihfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X211bGhpX2VwdTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbXVsaGlfZXBpMTYoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fbXVsaGlfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X211bGhpX2VwaTE2KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fbXVsaGlfZXBpMTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX211bGhpX2VwaTE2KF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X211bGhpX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbXVsaGlfZXBpMTYoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9tdWxoaV9lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3VucGFja2hpX2VwaTgoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjgoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3VucGFja2hpX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfdW5wYWNraGlfZXBpOChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMTI4KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV91bnBhY2toaV9lcGk4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3VucGFja2hpX2VwaTgoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8yNTYoKF9fbW1hc2szMilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X3VucGFja2hpX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfdW5wYWNraGlfZXBpOChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl91bnBhY2toaV9lcGk4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3VucGFja2hpX2VwaTE2KF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV91bnBhY2toaV9lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3VucGFja2hpX2VwaTE2KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3VucGFja2hpX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3VucGFja2hpX2VwaTE2KF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3VucGFja2hpX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfdW5wYWNraGlfZXBpMTYoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl91bnBhY2toaV9lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3VucGFja2xvX2VwaTgoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjgoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3VucGFja2xvX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfdW5wYWNrbG9fZXBpOChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMTI4KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV91bnBhY2tsb19lcGk4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3VucGFja2xvX2VwaTgoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8yNTYoKF9fbW1hc2szMilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X3VucGFja2xvX2VwaTgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfdW5wYWNrbG9fZXBpOChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl91bnBhY2tsb19lcGk4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3VucGFja2xvX2VwaTE2KF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV91bnBhY2tsb19lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3VucGFja2xvX2VwaTE2KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3VucGFja2xvX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3VucGFja2xvX2VwaTE2KF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3VucGFja2xvX2VwaTE2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfdW5wYWNrbG9fZXBpMTYoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl91bnBhY2tsb19lcGkxNihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwaThfZXBpMTYoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fY3Z0ZXBpOF9lcGkxNihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaThfZXBpMTYoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9jdnRlcGk4X2VwaTE2KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXBpOF9lcGkxNihfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9jdnRlcGk4X2VwaTE2KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwaThfZXBpMTYoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9jdnRlcGk4X2VwaTE2KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXB1OF9lcGkxNihfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9jdnRlcHU4X2VwaTE2KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0ZXB1OF9lcGkxNihfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX2N2dGVwdThfZXBpMTYoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcHU4X2VwaTE2KF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X2N2dGVwdThfZXBpMTYoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXB1OF9lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9jdnRlcHU4X2VwaTE2KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworCisjZGVmaW5lIF9tbV9jbXBfZXBpOF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGIxMjhfbWFzaygoX192MTZxaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jbXBfZXBpOF9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGIxMjhfbWFzaygoX192MTZxaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShtKSk7IH0pCisKKyNkZWZpbmUgX21tX2NtcF9lcHU4X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2NtcF9lcHU4X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKG0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfY21wX2VwaThfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXBiMjU2X21hc2soKF9fdjMycWkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKShfX20yNTZpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfY21wX2VwaThfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXBiMjU2X21hc2soKF9fdjMycWkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKShfX20yNTZpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikobSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9jbXBfZXB1OF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSkoX19tMjU2aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19jbXBfZXB1OF9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSkoX19tMjU2aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKShtKSk7IH0pCisKKyNkZWZpbmUgX21tX2NtcF9lcGkxNl9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wdzEyOF9tYXNrKChfX3Y4aGkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSkoX19tMTI4aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jbXBfZXBpMTZfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkobSkpOyB9KQorCisjZGVmaW5lIF9tbV9jbXBfZXB1MTZfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXB3MTI4X21hc2soKF9fdjhoaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSkoX19tMTI4aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfY21wX2VwdTE2X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfY21wX2VwaTE2X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wdzI1Nl9tYXNrKChfX3YxNmhpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSkoX19tMjU2aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2NtcF9lcGkxNl9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcHcyNTZfbWFzaygoX192MTZoaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpKF9fbTI1NmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShtKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2NtcF9lcHUxNl9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXB3MjU2X21hc2soKF9fdjE2aGkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSkoX19tMjU2aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19jbXBfZXB1MTZfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpKF9fbTI1NmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikobSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3NodWZmbGVoaV9lcGkxNihXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NodWZmbGVoaV9lcGkxNigoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKShfX20xMjhpKShXKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3NodWZmbGVoaV9lcGkxNihVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NodWZmbGVoaV9lcGkxNigoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX2hpKCkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3NodWZmbGVoaV9lcGkxNihXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2h1ZmZsZWhpX2VwaTE2KChBKSwgKGltbSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKShfX20yNTZpKShXKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X3NodWZmbGVoaV9lcGkxNihVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2h1ZmZsZWhpX2VwaTE2KChBKSwgKGltbSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3NodWZmbGVsb19lcGkxNihXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NodWZmbGVsb19lcGkxNigoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKShfX20xMjhpKShXKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3NodWZmbGVsb19lcGkxNihVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NodWZmbGVsb19lcGkxNigoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX2hpKCkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3NodWZmbGVsb19lcGkxNihXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2h1ZmZsZWxvX2VwaTE2KChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSkoX19tMjU2aSkoVykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9zaHVmZmxlbG9fZXBpMTYoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNikoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NodWZmbGVsb19lcGkxNigoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2xsdl9lcGkxNiAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzbGx2MTZoaV9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZoaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NsbHZfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwKKyAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzbGx2MTZoaV9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NsbHZfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjE2aGlfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NsbHZfZXBpMTYgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjhoaV9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4aGkpCisgICAgICAgICAgICAgX21tX3NldHplcm9faGkgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zbGx2X2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzbGx2OGhpX21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zbGx2X2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc2xsdjhoaV9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4aGkpCisgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc2xsX2VwaTE2KF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NsbF9lcGkxNihfX0EsIF9fQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zbGxfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KV9fVSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2xsX2VwaTE2KF9fQSwgX19CKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NsbF9lcGkxNihfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX1UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zbGxfZXBpMTYoX19BLCBfX0IpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NsbF9lcGkxNihfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NsbF9lcGkxNihfX0EsIF9fQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc2xsaV9lcGkxNihfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgaW50IF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NsbGlfZXBpMTYoX19BLCBfX0IpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc2xsaV9lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgaW50IF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NsbGlfZXBpMTYoX19BLCBfX0IpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc2xsaV9lcGkxNihfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIGludCBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2xsaV9lcGkxNihfX0EsIF9fQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zbGxpX2VwaTE2KF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBpbnQgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX1UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NsbGlfZXBpMTYoX19BLCBfX0IpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NybHZfZXBpMTYgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3JsdjE2aGlfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zcmx2X2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3JsdjE2aGlfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zcmx2X2VwaTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNybHYxNmhpX21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNmhpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmx2X2VwaTE2IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNybHY4aGlfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGhpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX2hpICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3Jsdl9lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JsdjhoaV9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3Jsdl9lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNybHY4aGlfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGhpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zcmF2X2VwaTE2IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNyYXYxNmhpX21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNmhpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3Jhdl9lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHNyYXYxNmhpX21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3Jhdl9lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzcmF2MTZoaV9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZoaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3Jhdl9lcGkxNiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzcmF2OGhpX21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhoaSkKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19oaSAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NyYXZfZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNyYXY4aGlfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NyYXZfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzcmF2OGhpX21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhoaSkKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zcmFfZXBpMTYoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KV9fVSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc3JhX2VwaTE2KF9fQSwgX19CKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NyYV9lcGkxNihfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NyYV9lcGkxNihfX0EsIF9fQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zcmFfZXBpMTYoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMjU2KChfX21tYXNrMTYpX19VLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc3JhX2VwaTE2KF9fQSwgX19CKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zcmFfZXBpMTYoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX1UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zcmFfZXBpMTYoX19BLCBfX0IpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NyYWlfZXBpMTYoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIGludCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCgoX19tbWFzazgpX19VLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zcmFpX2VwaTE2KF9fQSwgX19CKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NyYWlfZXBpMTYoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgaW50IF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NyYWlfZXBpMTYoX19BLCBfX0IpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3JhaV9lcGkxNihfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIGludCBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc3JhaV9lcGkxNihfX0EsIF9fQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zcmFpX2VwaTE2KF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBpbnQgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX1UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NyYWlfZXBpMTYoX19BLCBfX0IpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3JsX2VwaTE2KF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NybF9lcGkxNihfX0EsIF9fQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zcmxfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0d18xMjgoKF9fbW1hc2s4KV9fVSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc3JsX2VwaTE2KF9fQSwgX19CKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NybF9lcGkxNihfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX1UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zcmxfZXBpMTYoX19BLCBfX0IpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NybF9lcGkxNihfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NybF9lcGkxNihfX0EsIF9fQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3JsaV9lcGkxNihfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgaW50IF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NybGlfZXBpMTYoX19BLCBfX0IpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3JsaV9lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgaW50IF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KChfX21tYXNrOClfX1UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NybGlfZXBpMTYoX19BLCBfX0IpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3JsaV9lcGkxNihfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIGludCBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NigoX19tbWFzazE2KV9fVSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc3JsaV9lcGkxNihfX0EsIF9fQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zcmxpX2VwaTE2KF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBpbnQgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoKF9fbW1hc2sxNilfX1UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NybGlfZXBpMTYoX19BLCBfX0IpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbW92X2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOCAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbW92X2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9faGkgKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbW92X2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYgKChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21vdl9lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYgKChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tb3ZfZXBpOCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMTI4ICgoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tb3ZfZXBpOCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjggKChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19oaSAoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tb3ZfZXBpOCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2ICgoX19tbWFzazMyKSBfX1UsCisgICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MzJxaSkgX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tb3ZfZXBpOCAoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfc2VsZWN0Yl8yNTYgKChfX21tYXNrMzIpIF9fVSwKKyAgICAgICAgICAgICAgICAoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSk7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NldDFfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2sxNiBfX00sIGNoYXIgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3RiMTI4X2dwcl9tYXNrIChfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc2V0MV9lcGk4IChfX21tYXNrMTYgX19NLCBjaGFyIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0YjEyOF9ncHJfbWFzayAoX19BLAorICAgICAgICAgICAgICAgICAoX192MTZxaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zZXQxX2VwaTggKF9fbTI1NmkgX19PLCBfX21tYXNrMzIgX19NLCBjaGFyIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0YjI1Nl9ncHJfbWFzayAoX19BLAorICAgICAgICAgICAgICAgICAoX192MzJxaSkgX19PLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NldDFfZXBpOCAoX19tbWFzazMyIF9fTSwgY2hhciBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdGIyNTZfZ3ByX21hc2sgKF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjMycWkpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbG9hZHVfZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1aGkxMjhfbWFzayAoKF9fdjhoaSAqKSBfX1AsCisgICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2xvYWR1X2VwaTE2IChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1aGkxMjhfbWFzayAoKF9fdjhoaSAqKSBfX1AsCisgICAgICAgICAgICAgICAgIChfX3Y4aGkpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX2hpICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19sb2FkdV9lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1aGkyNTZfbWFzayAoKF9fdjE2aGkgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2xvYWR1X2VwaTE2IChfX21tYXNrMTYgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfbG9hZGRxdWhpMjU2X21hc2sgKChfX3YxNmhpICopIF9fUCwKKyAgICAgICAgICAgICAgICAgKF9fdjE2aGkpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbG9hZHVfZXBpOCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1cWkxMjhfbWFzayAoKF9fdjE2cWkgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2xvYWR1X2VwaTggKF9fbW1hc2sxNiBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1cWkxMjhfbWFzayAoKF9fdjE2cWkgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192MTZxaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19sb2FkdV9lcGk4IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2xvYWRkcXVxaTI1Nl9tYXNrICgoX192MzJxaSAqKSBfX1AsCisgICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbG9hZHVfZXBpOCAoX19tbWFzazMyIF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2xvYWRkcXVxaTI1Nl9tYXNrICgoX192MzJxaSAqKSBfX1AsCisgICAgICAgICAgICAgICAgIChfX3YzMnFpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdG9yZXVfZXBpMTYgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVkcXVoaTEyOF9tYXNrICgoX192OGhpICopIF9fUCwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3RvcmV1X2VwaTE2ICh2b2lkICpfX1AsIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZWRxdWhpMjU2X21hc2sgKChfX3YxNmhpICopIF9fUCwKKyAgICAgICAgICAgICAoX192MTZoaSkgX19BLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdG9yZXVfZXBpOCAodm9pZCAqX19QLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVkcXVxaTEyOF9tYXNrICgoX192MTZxaSAqKSBfX1AsCisgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3RvcmV1X2VwaTggKHZvaWQgKl9fUCwgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JlZHF1cWkyNTZfbWFzayAoKF9fdjMycWkgKikgX19QLAorICAgICAgICAgICAgIChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Rlc3RfZXBpOF9tYXNrIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazE2KSBfX2J1aWx0aW5faWEzMl9wdGVzdG1iMTI4ICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdGVzdF9lcGk4X21hc2sgKF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bWIxMjggKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAoX192MTZxaSkgX19CLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdGVzdF9lcGk4X21hc2sgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMzIpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bWIyNTYgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza190ZXN0X2VwaThfbWFzayAoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2szMikgX19idWlsdGluX2lhMzJfcHRlc3RtYjI1NiAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Rlc3RfZXBpMTZfbWFzayAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG13MTI4ICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdGVzdF9lcGkxNl9tYXNrIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrOCkgX19idWlsdGluX2lhMzJfcHRlc3RtdzEyOCAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl90ZXN0X2VwaTE2X21hc2sgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bXcyNTYgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza190ZXN0X2VwaTE2X21hc2sgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bXcyNTYgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAoX192MTZoaSkgX19CLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdGVzdG5fZXBpOF9tYXNrIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazE2KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tYjEyOCAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdGVzdG5fZXBpOF9tYXNrIChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazE2KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tYjEyOCAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZxaSkgX19CLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdGVzdG5fZXBpOF9tYXNrIChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazMyKSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tYjI1NiAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfdGVzdG5fZXBpOF9tYXNrIChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazMyKSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tYjI1NiAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAoX192MzJxaSkgX19CLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV90ZXN0bl9lcGkxNl9tYXNrIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bm13MTI4ICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza190ZXN0bl9lcGkxNl9tYXNrIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrOCkgX19idWlsdGluX2lhMzJfcHRlc3RubXcxMjggKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Rlc3RuX2VwaTE2X21hc2sgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bm13MjU2ICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza190ZXN0bl9lcGkxNl9tYXNrIChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazE2KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tdzI1NiAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZoaSkgX19CLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92ZXBpOF9tYXNrIChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX2N2dGIybWFzazEyOCAoKF9fdjE2cWkpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tb3ZlcGk4X21hc2sgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbW1hc2szMikgX19idWlsdGluX2lhMzJfY3Z0YjJtYXNrMjU2ICgoX192MzJxaSkgX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92ZXBpMTZfbWFzayAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX2N2dHcybWFzazEyOCAoKF9fdjhoaSkgX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21vdmVwaTE2X21hc2sgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbW1hc2sxNikgX19idWlsdGluX2lhMzJfY3Z0dzJtYXNrMjU2ICgoX192MTZoaSkgX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZtX2VwaTggKF9fbW1hc2sxNiBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0bWFzazJiMTI4IChfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21vdm1fZXBpOCAoX19tbWFzazMyIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRtYXNrMmIyNTYgKF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92bV9lcGkxNiAoX19tbWFzazggX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dG1hc2sydzEyOCAoX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tb3ZtX2VwaTE2IChfX21tYXNrMTYgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dG1hc2sydzI1NiAoX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2Jyb2FkY2FzdGJfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0Yl8xMjgoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9icm9hZGNhc3RiX2VwaTgoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Jyb2FkY2FzdGJfZXBpOCAoX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzEyOChfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX2Jyb2FkY2FzdGJfZXBpOChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYnJvYWRjYXN0Yl9lcGk4IChfX20yNTZpIF9fTywgX19tbWFzazMyIF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RiXzI1NihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X2Jyb2FkY2FzdGJfZXBpOChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fTyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYnJvYWRjYXN0Yl9lcGk4IChfX21tYXNrMzIgX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KF9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfYnJvYWRjYXN0Yl9lcGk4KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19icm9hZGNhc3R3X2VwaTE2IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHdfMTI4KF9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9icm9hZGNhc3R3X2VwaTE2KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKSBfX08pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Jyb2FkY2FzdHdfZXBpMTYgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzEyOChfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fYnJvYWRjYXN0d19lcGkxNihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19icm9hZGNhc3R3X2VwaTE2IChfX20yNTZpIF9fTywgX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3R3XzI1NihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X2Jyb2FkY2FzdHdfZXBpMTYoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX08pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Jyb2FkY2FzdHdfZXBpMTYgKF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0d18yNTYoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9icm9hZGNhc3R3X2VwaTE2KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zZXQxX2VwaTE2IChfX20yNTZpIF9fTywgX19tbWFzazE2IF9fTSwgc2hvcnQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3R3MjU2X2dwcl9tYXNrIChfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX08sCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc2V0MV9lcGkxNiAoX19tbWFzazE2IF9fTSwgc2hvcnQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3R3MjU2X2dwcl9tYXNrIChfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NldDFfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIHNob3J0IF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0dzEyOF9ncHJfbWFzayAoX19BLAorICAgICAgICAgICAgICAgICAoX192OGhpKSBfX08sCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc2V0MV9lcGkxNiAoX19tbWFzazggX19NLCBzaG9ydCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdHcxMjhfZ3ByX21hc2sgKF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcGVybXV0ZXh2YXJfZXBpMTYgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyaGkxMjhfbWFzayAoKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV91bmRlZmluZWRfc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3Blcm11dGV4dmFyX2VwaTE2IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyaGkxMjhfbWFzayAoKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19wZXJtdXRleHZhcl9lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGVybXZhcmhpMTI4X21hc2sgKChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9wZXJtdXRleHZhcl9lcGkxNiAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJoaTI1Nl9tYXNrICgoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3VuZGVmaW5lZF9zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3Blcm11dGV4dmFyX2VwaTE2IChfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGVybXZhcmhpMjU2X21hc2sgKChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3Blcm11dGV4dmFyX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGVybXZhcmhpMjU2X21hc2sgKChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKKyNkZWZpbmUgX21tX21hc2tfYWxpZ25yX2VwaTgoVywgVSwgQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMTI4KChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fYWxpZ25yX2VwaTgoKEEpLCAoQiksIChpbnQpKE4pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKFcpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfYWxpZ25yX2VwaTgoVSwgQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMTI4KChfX21tYXNrMTYpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fYWxpZ25yX2VwaTgoKEEpLCAoQiksIChpbnQpKE4pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3NldHplcm9fc2kxMjgoKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfYWxpZ25yX2VwaTgoVywgVSwgQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfYWxpZ25yX2VwaTgoKEEpLCAoQiksIChpbnQpKE4pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpKF9fbTI1NmkpKFcpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfYWxpZ25yX2VwaTgoVSwgQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGJfMjU2KChfX21tYXNrMzIpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSlfbW0yNTZfYWxpZ25yX2VwaTgoKEEpLCAoQiksIChpbnQpKE4pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7IH0pCisKKyNkZWZpbmUgX21tX2Ric2FkX2VwdTgoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZGJwc2FkYncxMjhfbWFzaygoX192MTZxaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX2hpKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2Ric2FkX2VwdTgoVywgVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZGJwc2FkYncxMjhfbWFzaygoX192MTZxaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKShfX20xMjhpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9kYnNhZF9lcHU4KFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2RicHNhZGJ3MTI4X21hc2soKF9fdjE2cWkpKF9fbTEyOGkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2Ric2FkX2VwdTgoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfZGJwc2FkYncyNTZfbWFzaygoX192MzJxaSkoX19tMjU2aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSkoX19tMjU2aSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfZGJzYWRfZXB1OChXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9kYnBzYWRidzI1Nl9tYXNrKChfX3YzMnFpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKShfX20yNTZpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKShfX20yNTZpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfZGJzYWRfZXB1OChVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9kYnBzYWRidzI1Nl9tYXNrKChfX3YzMnFpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKShfX20yNTZpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShVKSk7IH0pCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fQVZYNTEyVkxCV0lOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eDUxMnZsY2RpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEydmxjZGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMDJlMmUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eDUxMnZsY2RpbnRyaW4uaApAQCAtMCwwICsxLDI2MyBAQAorLyo9PT0tLS0tIGF2eDUxMnZsY2RpbnRyaW4uaCAtIEFWWDUxMlZMIGFuZCBBVlg1MTJDRCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGF2eDUxMnZsY2RpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQVZYNTEyVkxDRElOVFJJTl9ICisjZGVmaW5lIF9fQVZYNTEyVkxDRElOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEydmwsYXZ4NTEyY2QiKSkpCisKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9icm9hZGNhc3RtYl9lcGk2NCAoX19tbWFzazggX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdG1iMTI4IChfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdG1iX2VwaTY0IChfX21tYXNrOCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0bWIyNTYgKF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYnJvYWRjYXN0bXdfZXBpMzIgKF9fbW1hc2sxNiBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0bXcxMjggKF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0bXdfZXBpMzIgKF9fbW1hc2sxNiBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0bXcyNTYgKF9fQSk7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb25mbGljdF9lcGk2NCAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBjb25mbGljdGRpXzEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fdW5kZWZpbmVkX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jb25mbGljdF9lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBjb25mbGljdGRpXzEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY29uZmxpY3RfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBjb25mbGljdGRpXzEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICAgX21tX3NldHplcm9fZGkgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY29uZmxpY3RfZXBpNjQgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RkaV8yNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjRkaSkgIF9tbTI1Nl91bmRlZmluZWRfc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NvbmZsaWN0X2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0ZGlfMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jb25mbGljdF9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0ZGlfMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbmZsaWN0X2VwaTMyIChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0c2lfMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2kpIF9tbV91bmRlZmluZWRfc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NvbmZsaWN0X2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0c2lfMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jb25mbGljdF9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0c2lfMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2kpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NvbmZsaWN0X2VwaTMyIChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0c2lfMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2kpIF9tbTI1Nl91bmRlZmluZWRfc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NvbmZsaWN0X2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0c2lfMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jb25mbGljdF9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0c2lfMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9semNudF9lcGkzMiAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBsemNudGRfMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbHpjbnRfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRkXzEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2x6Y250X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRkXzEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbHpjbnRfZXBpMzIgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRkXzI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2x6Y250X2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGx6Y250ZF8yNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9semNudF9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGx6Y250ZF8yNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2x6Y250X2VwaTY0IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGx6Y250cV8xMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19kaSAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19semNudF9lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBsemNudHFfMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbHpjbnRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBsemNudHFfMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fZGkgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9semNudF9lcGk2NCAoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBsemNudHFfMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbHpjbnRfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRxXzI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2x6Y250X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRxXzI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fQVZYNTEyVkxDRElOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eDUxMnZsZHFpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEydmxkcWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOWRhNDMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eDUxMnZsZHFpbnRyaW4uaApAQCAtMCwwICsxLDEyMDAgQEAKKy8qPT09LS0tLSBhdng1MTJ2bGRxaW50cmluLmggLSBBVlg1MTJWTCBhbmQgQVZYNTEyRFEgaW50cmluc2ljcyAtLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGF2eDUxMnZsZHFpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQVZYNTEyVkxEUUlOVFJJTl9ICisjZGVmaW5lIF9fQVZYNTEyVkxEUUlOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEydmwsYXZ4NTEyZHEiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbXVsbG9fZXBpNjQgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpICgoX192NGR1KSBfX0EgKiAoX192NGR1KSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbXVsbG9fZXBpNjQoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfbXVsbG9fZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X211bGxvX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfbXVsbG9fZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWxsb19lcGk2NCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgKChfX3YyZHUpIF9fQSAqIChfX3YyZHUpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tdWxsb19lcGk2NChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9tdWxsb19lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbXVsbG9fZXBpNjQoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9tdWxsb19lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYW5kbm90X3BkKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfYW5kbm90X3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYW5kbm90X3BkKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9hbmRub3RfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hbmRub3RfcGQoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9hbmRub3RfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hbmRub3RfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX2FuZG5vdF9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYW5kbm90X3BzKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X2FuZG5vdF9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hbmRub3RfcHMoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfYW5kbm90X3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FuZG5vdF9wcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9hbmRub3RfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYW5kbm90X3BzKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX2FuZG5vdF9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYW5kX3BkKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfYW5kX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYW5kX3BkKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9hbmRfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hbmRfcGQoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9hbmRfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hbmRfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX2FuZF9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYW5kX3BzKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X2FuZF9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hbmRfcHMoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfYW5kX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FuZF9wcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9hbmRfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYW5kX3BzKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX2FuZF9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfeG9yX3BkKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfeG9yX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfeG9yX3BkKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl94b3JfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza194b3JfcGQoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV94b3JfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel94b3JfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV94b3JfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3hvcl9wcyhfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl94b3JfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfeG9yX3BzKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3hvcl9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza194b3JfcHMoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1feG9yX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3hvcl9wcyhfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV94b3JfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX29yX3BkKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfb3JfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9vcl9wZChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfb3JfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19vcl9wZChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX29yX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfb3JfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX29yX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19vcl9wcyhfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9vcl9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9vcl9wcyhfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9vcl9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19vcl9wcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9vcl9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9vcl9wcyhfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9vcl9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBkX2VwaTY0IChfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnFxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0cGRfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQycXExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cGRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJxcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0cGRfZXBpNjQgKF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cGQycXEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRwZF9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRwZF9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnFxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwZF9lcHU2NCAoX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRwZF9lcHU2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cGRfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHBkX2VwdTY0IChfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHBkX2VwdTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRwZF9lcHU2NCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cHNfZXBpNjQgKF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHBzX2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cHMycXExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cHNfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRwc19lcGk2NCAoX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0cHNfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJxcTI1Nl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRwc19lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cHMycXEyNTZfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBzX2VwdTY0IChfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cHMydXFxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0cHNfZXB1NjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1cXExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cHNfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0cHNfZXB1NjQgKF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1cXEyNTZfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRwc19lcHU2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTI1Nl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRwc19lcHU2NCAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cHMydXFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcGk2NF9wZCAoX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwZDEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwaTY0X3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTY0X3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9tbV9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwaTY0X3BkIChfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBkMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfbW0yNTZfc2V0emVyb19wZCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXBpNjRfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpNjRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwZDI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkZikgX21tMjU2X3NldHplcm9fcGQoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcGk2NF9wcyAoX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcGk2NF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0cXEycHMxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcGk2NF9wcyAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0cXEycHMxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXBpNjRfcHMgKF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwczI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXBpNjRfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpNjRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0cGRfZXBpNjQgKF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnFxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0dHBkX2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnR0cGRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQycXExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHRwZF9lcGk2NCAoX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQycXEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnR0cGRfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnFxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHRwZF9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHBkX2VwdTY0IChfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnR0cGRfZXB1NjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVxcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnR0cGRfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydXFxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnR0cGRfZXB1NjQgKF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHRwZF9lcHU2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydXFxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHRwZF9lcHU2NCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRwc19lcGk2NCAoX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHRwc19lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnR0cHNfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0dHBzX2VwaTY0IChfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0dHBzX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHRwc19lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0cHNfZXB1NjQgKF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydXFxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0dHBzX2VwdTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnR0cHNfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1cXExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHRwc19lcHU2NCAoX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1cXEyNTZfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnR0cHNfZXB1NjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydXFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHRwc19lcHU2NCAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTI1Nl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXB1NjRfcGQgKF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXB1NjRfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwdTY0X3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcHU2NF9wZCAoX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9tbTI1Nl9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcHU2NF9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXB1NjRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9tbTI1Nl9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXB1NjRfcHMgKF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycHMxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwdTY0X3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycHMxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcHU2NF9wcyAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwdTY0X3BzIChfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcHU2NF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXB1NjRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwczI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tX3JhbmdlX3BkKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yYW5nZXBkMTI4X21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3JhbmdlX3BkKFcsIFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yYW5nZXBkMTI4X21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9yYW5nZV9wZChVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JhbmdlcGQxMjhfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIChpbnQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9yYW5nZV9wZChBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfcmFuZ2VwZDI1Nl9tYXNrKChfX3Y0ZGYpKF9fbTI1NmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShCKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19yYW5nZV9wZChXLCBVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgIFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfcmFuZ2VwZDI1Nl9tYXNrKChfX3Y0ZGYpKF9fbTI1NmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShCKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfcmFuZ2VfcGQoVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9yYW5nZXBkMjU2X21hc2soKF9fdjRkZikoX19tMjU2ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fcmFuZ2VfcHMoQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcmFuZ2VwczEyOF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcmFuZ2VfcHMoVywgVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcmFuZ2VwczEyOF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSwgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JhbmdlX3BzKFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgIFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yYW5nZXBzMTI4X21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCAoaW50KShDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3JhbmdlX3BzKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3JhbmdlcHMyNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoQiksIChpbnQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3JhbmdlX3BzKFcsIFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3JhbmdlcHMyNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoQiksIChpbnQpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoVyksIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9yYW5nZV9wcyhVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfcmFuZ2VwczI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShCKSwgKGludCkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9yZWR1Y2VfcGQoQSwgQikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkMTI4X21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19yZWR1Y2VfcGQoVywgVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkMTI4X21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcmVkdWNlX3BkKFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgICAgIFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcmVkdWNlcGQxMjhfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfcmVkdWNlX3BkKEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDI1Nl9tYXNrKChfX3Y0ZGYpKF9fbTI1NmQpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfcmVkdWNlX3BkKFcsIFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDI1Nl9tYXNrKChfX3Y0ZGYpKF9fbTI1NmQpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X3JlZHVjZV9wZChVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7ICAgICBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkMjU2X21hc2soKF9fdjRkZikoX19tMjU2ZCkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX3JlZHVjZV9wcyhBLCBCKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgICAgIFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yZWR1Y2VwczEyOF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcmVkdWNlX3BzKFcsIFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgICAgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzMTI4X21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9yZWR1Y2VfcHMoVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyAgICAgICAgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzMTI4X21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3JlZHVjZV9wcyhBLCBCKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgIFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9yZWR1Y2VwczI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfcmVkdWNlX3BzKFcsIFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzMjU2X21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9yZWR1Y2VfcHMoVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyAgICAgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzMjU2X21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdmVwaTMyX21hc2sgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9jdnRkMm1hc2sxMjggKChfX3Y0c2kpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21vdmVwaTMyX21hc2sgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9jdnRkMm1hc2syNTYgKChfX3Y4c2kpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92bV9lcGkzMiAoX19tbWFzazggX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dG1hc2syZDEyOCAoX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tb3ZtX2VwaTMyIChfX21tYXNrOCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0bWFzazJkMjU2IChfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdm1fZXBpNjQgKF9fbW1hc2s4IF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRtYXNrMnExMjggKF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbW92bV9lcGk2NCAoX19tbWFzazggX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dG1hc2sycTI1NiAoX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92ZXBpNjRfbWFzayAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX2N2dHEybWFzazEyOCAoKF9fdjJkaSkgX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbW92ZXBpNjRfbWFzayAoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX2N2dHEybWFzazI1NiAoKF9fdjRkaSkgX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdF9mMzJ4MiAoX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGYzMngyXzI1Nl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfdW5kZWZpbmVkX3BzKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Jyb2FkY2FzdF9mMzJ4MiAoX19tMjU2IF9fTywgX19tbWFzazggX19NLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjMyeDJfMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfX08sCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Jyb2FkY2FzdF9mMzJ4MiAoX19tbWFzazggX19NLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjMyeDJfMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdF9mNjR4MiAoX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjY0eDJfMjU2X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfdW5kZWZpbmVkX3BkKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYnJvYWRjYXN0X2Y2NHgyIChfX20yNTZkIF9fTywgX19tbWFzazggX19NLCBfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RmNjR4Ml8yNTZfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NGRmKSBfX08sCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYnJvYWRjYXN0X2Y2NHgyIChfX21tYXNrOCBfX00sIF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGY2NHgyXzI1Nl9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Jyb2FkY2FzdF9pMzJ4MiAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTMyeDJfMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYnJvYWRjYXN0X2kzMngyIChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RpMzJ4Ml8xMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNpKSBfX08sCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYnJvYWRjYXN0X2kzMngyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGkzMngyXzEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdF9pMzJ4MiAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTMyeDJfMjU2X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfdW5kZWZpbmVkX3NpMjU2KCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYnJvYWRjYXN0X2kzMngyIChfX20yNTZpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RpMzJ4Ml8yNTZfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfX08sCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYnJvYWRjYXN0X2kzMngyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGkzMngyXzI1Nl9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdF9pNjR4MiAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTY0eDJfMjU2X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfdW5kZWZpbmVkX3NpMjU2KCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYnJvYWRjYXN0X2k2NHgyIChfX20yNTZpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RpNjR4Ml8yNTZfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192NGRpKSBfX08sCisgICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYnJvYWRjYXN0X2k2NHgyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2Jyb2FkY2FzdGk2NHgyXzI1Nl9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCisjZGVmaW5lIF9tbTI1Nl9leHRyYWN0ZjY0eDJfcGQoQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRkZikoX19tMjU2ZCkoQSksICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDEpID8gMiA6IDAsICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDEpID8gMyA6IDEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2V4dHJhY3RmNjR4Ml9wZChXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbTI1Nl9leHRyYWN0ZjY0eDJfcGQoKEEpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoVykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9leHRyYWN0ZjY0eDJfcGQoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMTI4KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW0yNTZfZXh0cmFjdGY2NHgyX3BkKChBKSwgKGltbSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2V4dHJhY3RpNjR4Ml9lcGk2NChBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRpKShfX20yNTZpKShBKSwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAxKSA/IDIgOiAwLCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAxKSA/IDMgOiAxKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19leHRyYWN0aTY0eDJfZXBpNjQoVywgVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbTI1Nl9leHRyYWN0aTY0eDJfZXBpNjQoKEEpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoVykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9leHRyYWN0aTY0eDJfZXBpNjQoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbTI1Nl9leHRyYWN0aTY0eDJfZXBpNjQoKEEpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0emVyb19kaSgpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaW5zZXJ0ZjY0eDIoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRkZikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X2Nhc3RwZDEyOF9wZDI1NigoX19tMTI4ZCkoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gMCA6IDQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAxIDogNSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/IDQgOiAyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gNSA6IDMpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2luc2VydGY2NHgyKFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfaW5zZXJ0ZjY0eDIoKEEpLCAoQiksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKFcpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfaW5zZXJ0ZjY0eDIoVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9pbnNlcnRmNjR4MigoQSksIChCKSwgKGltbSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19wZCgpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaW5zZXJ0aTY0eDIoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRkaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X2Nhc3RzaTEyOF9zaTI1NigoX19tMTI4aSkoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gMCA6IDQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAxIDogNSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/IDQgOiAyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gNSA6IDMpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2luc2VydGk2NHgyKFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMjU2KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9pbnNlcnRpNjR4MigoQSksIChCKSwgKGltbSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoVykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9pbnNlcnRpNjR4MihVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfaW5zZXJ0aTY0eDIoKEEpLCAoQiksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfZnBjbGFzc19wZF9tYXNrKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9mcGNsYXNzcGQxMjhfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX2ZwY2xhc3NfcGRfbWFzayhBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfZnBjbGFzc3BkMTI4X21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfZnBjbGFzc19wZF9tYXNrKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9mcGNsYXNzcGQyNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2ZwY2xhc3NfcGRfbWFzayhBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfZnBjbGFzc3BkMjU2X21hc2soKF9fdjRkZikoX19tMjU2ZCkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfZnBjbGFzc19wc19tYXNrKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9mcGNsYXNzcHMxMjhfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fZnBjbGFzc19wc19tYXNrKEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9mcGNsYXNzcHMxMjhfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2ZwY2xhc3NfcHNfbWFzayhVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfZnBjbGFzc3BzMjU2X21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2ZwY2xhc3NfcHNfbWFzayhBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfZnBjbGFzc3BzMjU2X21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEydmxpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4NTEydmxpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmZmN2E3Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9hdng1MTJ2bGludHJpbi5oCkBAIC0wLDAgKzEsODk3NSBAQAorLyo9PT0tLS0tIGF2eDUxMnZsaW50cmluLmggLSBBVlg1MTJWTCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEydmxpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQVZYNTEyVkxJTlRSSU5fSAorI2RlZmluZSBfX0FWWDUxMlZMSU5UUklOX0gKKworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhdng1MTJ2bCIpKSkKKworLyogRG9lc24ndCByZXF1aXJlIGF2eDUxMnZsLCB1c2VkIGluIGF2eDUxMmRxaW50cmluLmggKi8KK3N0YXRpYyAgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImF2eDUxMmYiKSkpCitfbW1fc2V0emVyb19kaSh2b2lkKSB7CisgIHJldHVybiAoX19tMTI4aSkoX192MmRpKXsgMExMLCAwTEx9OworfQorCisvKiBJbnRlZ2VyIGNvbXBhcmUgKi8KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfZXBpMzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZXFkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGVxX2VwaTMyX21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZXFkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9lcHUzMl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBlcV9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBlcV9lcGkzMl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZXFfZXBpMzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGVxX2VwdTMyX21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGVxX2VwdTMyX21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGVxX2VwaTY0X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGVxcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBlcV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGVxcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfZXB1NjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZXFfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZXFfZXBpNjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZXFxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGVxX2VwaTY0X21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZXFxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBlcV9lcHU2NF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBlcV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGdlX2VwaTMyX21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBnZV9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ2VfZXB1MzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ2VfZXB1MzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ2VfZXBpMzJfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGdlX2VwaTMyX21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBnZV9lcHUzMl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBnZV9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBnZV9lcGk2NF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ2VfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGdlX2VwdTY0X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGdlX2VwdTY0X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGdlX2VwaTY0X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBnZV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ2VfZXB1NjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZ2VfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfZXBpMzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZ3RkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGd0X2VwaTMyX21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZ3RkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9lcHUzMl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBndF9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBndF9lcGkzMl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZ3RfZXBpMzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGd0X2VwdTMyX21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGd0X2VwdTMyX21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGd0X2VwaTY0X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGd0cTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBndF9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGd0cTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfZXB1NjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ3RfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ3RfZXBpNjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZ3RxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGd0X2VwaTY0X21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZ3RxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBndF9lcHU2NF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBndF9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsZV9lcGkzMl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbGVfZXBpMzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGxlX2VwdTMyX21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGxlX2VwdTMyX21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGxlX2VwaTMyX21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBsZV9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbGVfZXB1MzJfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbGVfZXB1MzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbGVfZXBpNjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGxlX2VwaTY0X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsZV9lcHU2NF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBsZV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBsZV9lcGk2NF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbGVfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGxlX2VwdTY0X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGxlX2VwdTY0X21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X2VwaTMyX21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBsdF9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbHRfZXB1MzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbHRfZXB1MzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbHRfZXBpMzJfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGx0X2VwaTMyX21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBsdF9lcHUzMl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBsdF9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9lcGk2NF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbHRfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X2VwdTY0X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGx0X2VwdTY0X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGx0X2VwaTY0X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBsdF9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbHRfZXB1NjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbHRfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmVxX2VwaTMyX21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBuZXFfZXBpMzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5lcV9lcHUzMl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBuZXFfZXB1MzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbmVxX2VwaTMyX21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBuZXFfZXBpMzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcG5lcV9lcHUzMl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBuZXFfZXB1MzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmVxX2VwaTY0X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBuZXFfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5lcV9lcHU2NF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBuZXFfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbmVxX2VwaTY0X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBuZXFfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcG5lcV9lcHU2NF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBuZXFfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2FkZF9lcGkzMihfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfYWRkX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hZGRfZXBpMzIoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfYWRkX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hZGRfZXBpNjQoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X2FkZF9lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYWRkX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X2FkZF9lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3ViX2VwaTMyKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zdWJfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3N1Yl9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zdWJfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N1Yl9lcGk2NChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc3ViX2VwaTY0KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zdWJfZXBpNjQoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc3ViX2VwaTY0KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hZGRfZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX2FkZF9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWRkX2VwaTMyKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX2FkZF9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYWRkX2VwaTY0KF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9hZGRfZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2FkZF9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9hZGRfZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N1Yl9lcGkzMihfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc3ViX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zdWJfZXBpMzIoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc3ViX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdWJfZXBpNjQoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3N1Yl9lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3ViX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3N1Yl9lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbXVsX2VwaTMyKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMjU2KChfX21tYXNrOClfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9tdWxfZXBpMzIoX19YLCBfX1kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X211bF9lcGkzMihfX21tYXNrOCBfX00sIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMjU2KChfX21tYXNrOClfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9tdWxfZXBpMzIoX19YLCBfX1kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX211bF9lcGkzMihfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fbXVsX2VwaTMyKF9fWCwgX19ZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tdWxfZXBpMzIoX19tbWFzazggX19NLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fbXVsX2VwaTMyKF9fWCwgX19ZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tdWxfZXB1MzIoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X211bF9lcHUzMihfX1gsIF9fWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbXVsX2VwdTMyKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X211bF9lcHUzMihfX1gsIF9fWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbXVsX2VwdTMyKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9tdWxfZXB1MzIoX19YLCBfX1kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X211bF9lcHUzMihfX21tYXNrOCBfX00sIF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9tdWxfZXB1MzIoX19YLCBfX1kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tdWxsb19lcGkzMihfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9tdWxsb19lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbXVsbG9fZXBpMzIoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYoKF9fbW1hc2s4KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X211bGxvX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tdWxsb19lcGkzMihfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9tdWxsb19lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbXVsbG9fZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX211bGxvX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2FuZF9lcGkzMihfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfYW5kX3NpMjU2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hbmRfZXBpMzIoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfbW0yNTZfbWFza19hbmRfZXBpMzIoX21tMjU2X3NldHplcm9fc2kyNTYoKSwgX19VLCBfX0EsIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hbmRfZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX2FuZF9zaTEyOChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYW5kX2VwaTMyKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX21tX21hc2tfYW5kX2VwaTMyKF9tbV9zZXR6ZXJvX3NpMTI4KCksIF9fVSwgX19BLCBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYW5kbm90X2VwaTMyKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9hbmRub3Rfc2kyNTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FuZG5vdF9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9tbTI1Nl9tYXNrX2FuZG5vdF9lcGkzMihfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVSwgX19BLCBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYW5kbm90X2VwaTMyKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9hbmRub3Rfc2kxMjgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2FuZG5vdF9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfbW1fbWFza19hbmRub3RfZXBpMzIoX21tX3NldHplcm9fc2kxMjgoKSwgX19VLCBfX0EsIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19vcl9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X29yX3NpMjU2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9vcl9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9tbTI1Nl9tYXNrX29yX2VwaTMyKF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIF9fVSwgX19BLCBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfb3JfZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX29yX3NpMTI4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9vcl9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9tbV9tYXNrX29yX2VwaTMyKF9tbV9zZXR6ZXJvX3NpMTI4KCksIF9fVSwgX19BLCBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfeG9yX2VwaTMyKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl94b3Jfc2kyNTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3hvcl9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9tbTI1Nl9tYXNrX3hvcl9lcGkzMihfbW0yNTZfc2V0emVyb19zaTI1NigpLCBfX1UsIF9fQSwgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3hvcl9lcGkzMihfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1feG9yX3NpMTI4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel94b3JfZXBpMzIoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfbW1fbWFza194b3JfZXBpMzIoX21tX3NldHplcm9fc2kxMjgoKSwgX19VLCBfX0EsIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hbmRfZXBpNjQoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X2FuZF9zaTI1NihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYW5kX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX21tMjU2X21hc2tfYW5kX2VwaTY0KF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIF9fVSwgX19BLCBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYW5kX2VwaTY0KF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9hbmRfc2kxMjgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2FuZF9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9tbV9tYXNrX2FuZF9lcGk2NChfbW1fc2V0emVyb19zaTEyOCgpLCBfX1UsIF9fQSwgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2FuZG5vdF9lcGk2NChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfYW5kbm90X3NpMjU2KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hbmRub3RfZXBpNjQoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfbW0yNTZfbWFza19hbmRub3RfZXBpNjQoX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1UsIF9fQSwgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FuZG5vdF9lcGk2NChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fYW5kbm90X3NpMTI4KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hbmRub3RfZXBpNjQoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfbW1fbWFza19hbmRub3RfZXBpNjQoX21tX3NldHplcm9fc2kxMjgoKSwgX19VLCBfX0EsIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19vcl9lcGk2NChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfb3Jfc2kyNTYoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X29yX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX21tMjU2X21hc2tfb3JfZXBpNjQoX21tMjU2X3NldHplcm9fc2kyNTYoKSwgX19VLCBfX0EsIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19vcl9lcGk2NChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fb3Jfc2kxMjgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X29yX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX21tX21hc2tfb3JfZXBpNjQoX21tX3NldHplcm9fc2kxMjgoKSwgX19VLCBfX0EsIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza194b3JfZXBpNjQoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3hvcl9zaTI1NihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfeG9yX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX21tMjU2X21hc2tfeG9yX2VwaTY0KF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIF9fVSwgX19BLCBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfeG9yX2VwaTY0KF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV94b3Jfc2kxMjgoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3hvcl9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9tbV9tYXNrX3hvcl9lcGk2NChfbW1fc2V0emVyb19zaTEyOCgpLCBfX1UsIF9fQSwgX19CKTsKK30KKworI2RlZmluZSBfbW1fY21wX2VwaTMyX21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMTI4X21hc2soKF9fdjRzaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2NtcF9lcGkzMl9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDEyOF9tYXNrKChfX3Y0c2kpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtKSk7IH0pCisKKyNkZWZpbmUgX21tX2NtcF9lcHUzMl9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jbXBfZXB1MzJfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkobSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9jbXBfZXBpMzJfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfY21wX2VwaTMyX21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfY21wX2VwdTMyX21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2NtcF9lcHUzMl9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtKSk7IH0pCisKKyNkZWZpbmUgX21tX2NtcF9lcGk2NF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jbXBfZXBpNjRfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHExMjhfbWFzaygoX192MmRpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkobSkpOyB9KQorCisjZGVmaW5lIF9tbV9jbXBfZXB1NjRfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfY21wX2VwdTY0X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfY21wX2VwaTY0X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2NtcF9lcGk2NF9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTI1Nl9tYXNrKChfX3Y0ZGkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2NtcF9lcHU2NF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19jbXBfZXB1NjRfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkobSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9jbXBfcHNfbWFzayhhLCBiLCBwKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBwczI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19jbXBfcHNfbWFzayhtLCBhLCBiLCBwKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBwczI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2NtcF9wZF9tYXNrKGEsIGIsIHApICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHBkMjU2X21hc2soKF9fdjRkZikoX19tMjU2ZCkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoYiksIChpbnQpKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfY21wX3BkX21hc2sobSwgYSwgYiwgcCkgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcGQyNTZfbWFzaygoX192NGRmKShfX20yNTZkKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtKSk7IH0pCisKKyNkZWZpbmUgX21tX2NtcF9wc19tYXNrKGEsIGIsIHApICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHBzMTI4X21hc2soKF9fdjRzZikoX19tMTI4KShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2NtcF9wc19tYXNrKG0sIGEsIGIsIHApICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHBzMTI4X21hc2soKF9fdjRzZikoX19tMTI4KShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW1fY21wX3BkX21hc2soYSwgYiwgcCkgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcGQxMjhfbWFzaygoX192MmRmKShfX20xMjhkKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShiKSwgKGludCkocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jbXBfcGRfbWFzayhtLCBhLCBiLCBwKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBwZDEyOF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKGIpLCAoaW50KShwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKG0pKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2ZtYWRkX3BkKF9fbTEyOGQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm1hZGRfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMTI4X21hc2szICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm1hZGRfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMTI4X21hc2t6ICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbXN1Yl9wZChfX20xMjhkIF9fQSwgX19tbWFzazggX19VLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbXN1Yl9wZChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQxMjhfbWFza3ogKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm5tYWRkX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDEyOF9tYXNrMyAoLShfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbm1hZGRfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMTI4X21hc2t6ICgtKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2ZubXN1Yl9wZChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQxMjhfbWFza3ogKC0oX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZm1hZGRfcGQoX19tMjU2ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrM19mbWFkZF9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQyNTZfbWFzazMgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9mbWFkZF9wZChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQyNTZfbWFza3ogKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Ztc3ViX3BkKF9fbTI1NmQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Ztc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDI1Nl9tYXNreiAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrM19mbm1hZGRfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMjU2X21hc2szICgtKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2ZubWFkZF9wZChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQyNTZfbWFza3ogKC0oX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZm5tc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDI1Nl9tYXNreiAoLShfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2ZtYWRkX3BzKF9fbTEyOCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2ZtYWRkX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMTI4X21hc2szICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbWFkZF9wcyhfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczEyOF9tYXNreiAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbXN1Yl9wcyhfX20xMjggX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjRzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm1zdWJfcHMoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkcHMxMjhfbWFza3ogKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbm1hZGRfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkcHMxMjhfbWFzazMgKC0oX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbm1hZGRfcHMoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkcHMxMjhfbWFza3ogKC0oX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbm1zdWJfcHMoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkcHMxMjhfbWFza3ogKC0oX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19mbWFkZF9wcyhfX20yNTYgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrM19mbWFkZF9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczI1Nl9tYXNrMyAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZm1hZGRfcHMoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtYWRkcHMyNTZfbWFza3ogKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZm1zdWJfcHMoX19tMjU2IF9fQSwgX19tbWFzazggX19VLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtYWRkcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Ztc3ViX3BzKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMjU2X21hc2t6ICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazNfZm5tYWRkX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMjU2X21hc2szICgtKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZm5tYWRkX3BzKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMjU2X21hc2t6ICgtKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZm5tc3ViX3BzKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMjU2X21hc2t6ICgtKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2ZtYWRkc3ViX3BkKF9fbTEyOGQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm1hZGRzdWJfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkMTI4X21hc2szICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm1hZGRzdWJfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkMTI4X21hc2t6ICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbXN1YmFkZF9wZChfX20xMjhkIF9fQSwgX19tbWFzazggX19VLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbXN1YmFkZF9wZChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQxMjhfbWFza3ogKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19mbWFkZHN1Yl9wZChfX20yNTZkIF9fQSwgX19tbWFzazggX19VLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2szX2ZtYWRkc3ViX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDI1Nl9tYXNrMyAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2ZtYWRkc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDI1Nl9tYXNreiAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZm1zdWJhZGRfcGQoX19tMjU2ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZm1zdWJhZGRfcGQoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkMjU2X21hc2t6ICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbWFkZHN1Yl9wcyhfX20xMjggX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbWFkZHN1Yl9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczEyOF9tYXNrMyAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm1hZGRzdWJfcHMoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMxMjhfbWFza3ogKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZm1zdWJhZGRfcHMoX19tMTI4IF9fQSwgX19tbWFzazggX19VLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Ztc3ViYWRkX3BzKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzMTI4X21hc2t6ICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19mbWFkZHN1Yl9wcyhfX20yNTYgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2szX2ZtYWRkc3ViX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzMjU2X21hc2szICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9mbWFkZHN1Yl9wcyhfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczI1Nl9tYXNreiAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19mbXN1YmFkZF9wcyhfX20yNTYgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZm1zdWJhZGRfcHMoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMyNTZfbWFza3ogKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm1zdWJfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBkMTI4X21hc2szICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazNfZm1zdWJfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBkMjU2X21hc2szICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbXN1Yl9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1zdWJwczEyOF9tYXNrMyAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazNfZm1zdWJfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtc3VicHMyNTZfbWFzazMgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbXN1YmFkZF9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcGQxMjhfbWFzazMgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrM19mbXN1YmFkZF9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcGQyNTZfbWFzazMgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2Ztc3ViYWRkX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBzMTI4X21hc2szICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrM19mbXN1YmFkZF9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwczI1Nl9tYXNrMyAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZm5tYWRkX3BkKF9fbTEyOGQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm5tYWRkcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZm5tYWRkX3BkKF9fbTI1NmQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm5tYWRkcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbm1hZGRfcHMoX19tMTI4IF9fQSwgX19tbWFzazggX19VLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZubWFkZHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZm5tYWRkX3BzKF9fbTI1NiBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbm1zdWJfcGQoX19tMTI4ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm5tc3ViX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm5tc3VicGQxMjhfbWFzazMgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2ZubXN1Yl9wZChfX20yNTZkIF9fQSwgX19tbWFzazggX19VLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZubXN1YnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrM19mbm1zdWJfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDI1Nl9tYXNrMyAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbm1zdWJfcHMoX19tMTI4IF9fQSwgX19tbWFzazggX19VLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZubXN1YnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2ZubXN1Yl9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm5tc3VicHMxMjhfbWFzazMgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZm5tc3ViX3BzKF9fbTI1NiBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrM19mbm1zdWJfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZubXN1YnBzMjU2X21hc2szICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hZGRfcGQoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9hZGRfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hZGRfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX2FkZF9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2FkZF9wZChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X2FkZF9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FkZF9wZChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfYWRkX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hZGRfcHMoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fYWRkX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2FkZF9wcyhfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9hZGRfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYWRkX3BzKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X2FkZF9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hZGRfcHMoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfYWRkX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19ibGVuZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX1cpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19ibGVuZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX1cpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NiAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAorICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19ibGVuZF9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX1cpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjggKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19ibGVuZF9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX1cpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8yNTYgKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2JsZW5kX3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX1cpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzEyOCAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2JsZW5kX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX1cpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NiAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19ibGVuZF9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX1cpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19ibGVuZF9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX1cpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NiAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jb21wcmVzc19wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc2RmMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jb21wcmVzc19wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzZGYxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY29tcHJlc3NfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY29tcHJlc3NkZjI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY29tcHJlc3NfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc2RmMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NvbXByZXNzX2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzZGkxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2NvbXByZXNzX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY29tcHJlc3NkaTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jb21wcmVzc19lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc2RpMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jb21wcmVzc19lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzZGkyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jb21wcmVzc19wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3NmMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jb21wcmVzc19wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3NmMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY29tcHJlc3NfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY29tcHJlc3NzZjI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY29tcHJlc3NfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY29tcHJlc3NzZjI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2YpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jb21wcmVzc19lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3NpMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jb21wcmVzc19lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc2kxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY29tcHJlc3NfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY29tcHJlc3NzaTI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY29tcHJlc3NfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3NpMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NvbXByZXNzc3RvcmV1X3BkICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgX19idWlsdGluX2lhMzJfY29tcHJlc3NzdG9yZWRmMTI4X21hc2sgKChfX3YyZGYgKikgX19QLAorICAgICAgICAgICAgKF9fdjJkZikgX19BLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY29tcHJlc3NzdG9yZXVfcGQgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3N0b3JlZGYyNTZfbWFzayAoKF9fdjRkZiAqKSBfX1AsCisgICAgICAgICAgICAoX192NGRmKSBfX0EsCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jb21wcmVzc3N0b3JldV9lcGk2NCAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc3RvcmVkaTEyOF9tYXNrICgoX192MmRpICopIF9fUCwKKyAgICAgICAgICAgIChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NvbXByZXNzc3RvcmV1X2VwaTY0ICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgX19idWlsdGluX2lhMzJfY29tcHJlc3NzdG9yZWRpMjU2X21hc2sgKChfX3Y0ZGkgKikgX19QLAorICAgICAgICAgICAgKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY29tcHJlc3NzdG9yZXVfcHMgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc3RvcmVzZjEyOF9tYXNrICgoX192NHNmICopIF9fUCwKKyAgICAgICAgICAgIChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NvbXByZXNzc3RvcmV1X3BzICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3N0b3Jlc2YyNTZfbWFzayAoKF9fdjhzZiAqKSBfX1AsCisgICAgICAgICAgICAoX192OHNmKSBfX0EsCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jb21wcmVzc3N0b3JldV9lcGkzMiAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc3RvcmVzaTEyOF9tYXNrICgoX192NHNpICopIF9fUCwKKyAgICAgICAgICAgIChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NvbXByZXNzc3RvcmV1X2VwaTMyICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgX19idWlsdGluX2lhMzJfY29tcHJlc3NzdG9yZXNpMjU2X21hc2sgKChfX3Y4c2kgKikgX19QLAorICAgICAgICAgICAgKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpMzJfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0ZHEycGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0ZXBpMzJfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jdnRkcTJwZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGkzMl9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnRkcTJwZDI1Nl9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRlcGkzMl9wZCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBkMjU2X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpMzJfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBzMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTMyX3BzIChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0ZHEycHMxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGkzMl9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0ZHEycHMyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpMzJfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnRkcTJwczI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRwZF9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRwZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHBkX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHBkX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQyZHEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRwZF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0cGQycHNfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cGRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0cGRfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHBkX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnRwZDJwczI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cGRfZXB1MzIgKF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQydWRxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0cGRfZXB1MzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQydWRxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cGRfZXB1MzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1ZHExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHBkX2VwdTMyIChfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHBkX2VwdTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHBkX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQydWRxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHBzX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cHMyZHExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cHNfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMmRxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHBzX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cHMyZHEyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0cHNfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMmRxMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHBzX3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0cHMycGQxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cHNfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnBkMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHBzX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0cHMycGQyNTZfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0cHNfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnBkMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwc19lcHUzMiAoX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHBzX2VwdTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cHMydWRxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cHNfZXB1MzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0cHNfZXB1MzIgKF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1ZHEyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRwc19lcHUzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVkcTI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHBzX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1ZHEyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0dHBkX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHRwZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnR0cGRfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMmRxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0dHBkX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMmRxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0cGRfZXB1MzIgKF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHRwZF9lcHUzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydWRxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnR0cGRfZXB1MzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydWRxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnR0cGRfZXB1MzIgKF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHRwZF9lcHUzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydWRxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnR0cGRfZXB1MzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydWRxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHRwc19lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHRwc19lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMmRxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHRwc19lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcTI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHRwc19lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMmRxMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0cHNfZXB1MzIgKF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydWRxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0dHBzX2VwdTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0dHBzX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydWRxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnR0cHNfZXB1MzIgKF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydWRxMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0dHBzX2VwdTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVkcTI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0dHBzX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydWRxMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcHUzMl9wZCAoX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcHUzMl9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcHUzMl9wZCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXB1MzJfcGQgKF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBkMjU2X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXB1MzJfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBkMjU2X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXB1MzJfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycGQyNTZfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXB1MzJfcHMgKF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycHMxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwdTMyX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycHMxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcHUzMl9wcyAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBzMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwdTMyX3BzIChfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBzMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcHUzMl9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBzMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXB1MzJfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwczI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19kaXZfcGQoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9kaXZfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9kaXZfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX2Rpdl9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Rpdl9wZChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X2Rpdl9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Rpdl9wZChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfZGl2X3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19kaXZfcHMoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fZGl2X3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Rpdl9wcyhfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9kaXZfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZGl2X3BzKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X2Rpdl9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9kaXZfcHMoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfZGl2X3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19leHBhbmRfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZXhwYW5kZGYxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZXhwYW5kX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZXhwYW5kZGYxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZXhwYW5kX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGRmMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2V4cGFuZF9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGRmMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2V4cGFuZF9lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRkaTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9leHBhbmRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRkaTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19leHBhbmRfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfZXhwYW5kZGkyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZXhwYW5kX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfZXhwYW5kZGkyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZXhwYW5kbG9hZHVfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRkZjEyOF9tYXNrICgoX192MmRmICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZXhwYW5kbG9hZHVfcGQgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZGRmMTI4X21hc2sgKChfX3YyZGYgKikgX19QLAorICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2V4cGFuZGxvYWR1X3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2FkZGYyNTZfbWFzayAoKF9fdjRkZiAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2V4cGFuZGxvYWR1X3BkIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRkZjI1Nl9tYXNrICgoX192NGRmICopIF9fUCwKKyAgICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19leHBhbmRsb2FkdV9lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZGRpMTI4X21hc2sgKChfX3YyZGkgKikgX19QLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9leHBhbmRsb2FkdV9lcGk2NCAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2FkZGkxMjhfbWFzayAoKF9fdjJkaSAqKSBfX1AsCisgICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZXhwYW5kbG9hZHVfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsCisgICAgICAgICAgICAgdm9pZCBjb25zdCAqX19QKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZGRpMjU2X21hc2sgKChfX3Y0ZGkgKikgX19QLAorICAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9leHBhbmRsb2FkdV9lcGk2NCAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2FkZGkyNTZfbWFzayAoKF9fdjRkaSAqKSBfX1AsCisgICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19leHBhbmRsb2FkdV9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRzZjEyOF9tYXNrICgoX192NHNmICopIF9fUCwKKyAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZXhwYW5kbG9hZHVfcHMgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2Fkc2YxMjhfbWFzayAoKF9fdjRzZiAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2V4cGFuZGxvYWR1X3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZHNmMjU2X21hc2sgKChfX3Y4c2YgKikgX19QLAorICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9leHBhbmRsb2FkdV9wcyAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRzZjI1Nl9tYXNrICgoX192OHNmICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2V4cGFuZGxvYWR1X2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2Fkc2kxMjhfbWFzayAoKF9fdjRzaSAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2V4cGFuZGxvYWR1X2VwaTMyIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRzaTEyOF9tYXNrICgoX192NHNpICopIF9fUCwKKyAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19leHBhbmRsb2FkdV9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwKKyAgICAgICAgICAgICB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2Fkc2kyNTZfbWFzayAoKF9fdjhzaSAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2V4cGFuZGxvYWR1X2VwaTMyIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRzaTI1Nl9tYXNrICgoX192OHNpICopIF9fUCwKKyAgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2V4cGFuZF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9leHBhbmRzZjEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9leHBhbmRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZXhwYW5kc2YxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19leHBhbmRfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfZXhwYW5kc2YyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZXhwYW5kX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZHNmMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2V4cGFuZF9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRzaTEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9leHBhbmRfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRzaTEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19leHBhbmRfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfZXhwYW5kc2kyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZXhwYW5kX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfZXhwYW5kc2kyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2dldGV4cF9wZCAoX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9nZXRleHBwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2dldGV4cF9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9nZXRleHBwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9nZXRleHBfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9nZXRleHBwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZ2V0ZXhwX3BkIChfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZ2V0ZXhwX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2dldGV4cF9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2dldGV4cF9wcyAoX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2dldGV4cF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9nZXRleHBwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9nZXRleHBfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZ2V0ZXhwX3BzIChfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9nZXRleHBwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZ2V0ZXhwX3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2dldGV4cF9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9nZXRleHBwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYXhfcGQoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9tYXhfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tYXhfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX21heF9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21heF9wZChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X21heF9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21heF9wZChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfbWF4X3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYXhfcHMoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fbWF4X3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21heF9wcyhfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9tYXhfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWF4X3BzKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X21heF9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tYXhfcHMoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfbWF4X3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19taW5fcGQoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9taW5fcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9taW5fcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX21pbl9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21pbl9wZChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X21pbl9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21pbl9wZChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfbWluX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19taW5fcHMoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fbWluX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21pbl9wcyhfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9taW5fcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWluX3BzKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X21pbl9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9taW5fcHMoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfbWluX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tdWxfcGQoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9tdWxfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tdWxfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX211bF9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX211bF9wZChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X211bF9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X211bF9wZChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfbXVsX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tdWxfcHMoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fbXVsX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X211bF9wcyhfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9tdWxfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbXVsX3BzKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X211bF9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tdWxfcHMoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfbXVsX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hYnNfZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9hYnNfZXBpMzIoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hYnNfZXBpMzIoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX2Fic19lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Fic19lcGkzMihfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9hYnNfZXBpMzIoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hYnNfZXBpMzIoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYoKF9fbW1hc2sxNilfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9hYnNfZXBpMzIoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWJzX2VwaTY0IChfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYWJzX2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Fic19lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hYnNfZXBpNjQgKF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFic3EyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hYnNfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFic3EyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYWJzX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFic3EyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21heF9lcGkzMihfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX21heF9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWF4X2VwaTMyKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX21heF9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWF4X2VwaTMyKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfbWF4X2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tYXhfZXBpMzIoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfbWF4X2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tYXhfZXBpNjQgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21heF9lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWF4X2VwaTY0IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4c3ExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tYXhfZXBpNjQgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHNxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21heF9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHNxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWF4X2VwaTY0IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4c3EyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tYXhfZXB1MzIoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9tYXhfZXB1MzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21heF9lcHUzMihfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9tYXhfZXB1MzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21heF9lcHUzMihfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYoKF9fbW1hc2s4KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X21heF9lcHUzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWF4X2VwdTMyKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYoKF9fbW1hc2s4KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X21heF9lcHUzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWF4X2VwdTY0IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1cTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWF4X2VwdTY0IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21heF9lcHU2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHVxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWF4X2VwdTY0IChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1cTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWF4X2VwdTY0IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21heF9lcHU2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHVxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWluX2VwaTMyKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fbWluX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19taW5fZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fbWluX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9taW5fZXBpMzIoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9taW5fZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21pbl9lcGkzMihfX20yNTZpIF9fVywgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9taW5fZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21pbl9lcGk2NCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19taW5fZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21pbl9lcGk2NCAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWluc3ExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21pbl9lcGk2NCAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnNxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19taW5fZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLAorICAgICAgICAgICBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zcTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21pbl9lcGk2NCAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWluc3EyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21pbl9lcHUzMihfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX21pbl9lcHUzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWluX2VwdTMyKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX21pbl9lcHUzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWluX2VwdTMyKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfbWluX2VwdTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19taW5fZXB1MzIoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfbWluX2VwdTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9taW5fZXB1NjQgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW51cTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWluX2VwdTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWludXExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9taW5fZXB1NjQgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnVxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9taW5fZXB1NjQgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51cTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWluX2VwdTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWludXEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9taW5fZXB1NjQgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnVxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworI2RlZmluZSBfbW1fcm91bmRzY2FsZV9wZChBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkXzEyOF9tYXNrKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKworI2RlZmluZSBfbW1fbWFza19yb3VuZHNjYWxlX3BkKFcsIFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcGRfMTI4X21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworCisjZGVmaW5lIF9tbV9tYXNrel9yb3VuZHNjYWxlX3BkKFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcGRfMTI4X21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKworI2RlZmluZSBfbW0yNTZfcm91bmRzY2FsZV9wZChBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkXzI1Nl9tYXNrKChfX3Y0ZGYpKF9fbTI1NmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKworI2RlZmluZSBfbW0yNTZfbWFza19yb3VuZHNjYWxlX3BkKFcsIFUsIEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcGRfMjU2X21hc2soKF9fdjRkZikoX19tMjU2ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9yb3VuZHNjYWxlX3BkKFUsIEEsIGltbSkgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkXzI1Nl9tYXNrKChfX3Y0ZGYpKF9fbTI1NmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9yb3VuZHNjYWxlX3BzKEEsIGltbSkgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfMTI4X21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisKKyNkZWZpbmUgX21tX21hc2tfcm91bmRzY2FsZV9wcyhXLCBVLCBBLCBpbW0pICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzXzEyOF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisKKyNkZWZpbmUgX21tX21hc2t6X3JvdW5kc2NhbGVfcHMoVSwgQSwgaW1tKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcm5kc2NhbGVwc18xMjhfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9yb3VuZHNjYWxlX3BzKEEsIGltbSkgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfMjU2X21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3JvdW5kc2NhbGVfcHMoVywgVSwgQSwgaW1tKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfcm5kc2NhbGVwc18yNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9yb3VuZHNjYWxlX3BzKFUsIEEsIGltbSkgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfMjU2X21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zY2FsZWZfcGQgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NjYWxlZl9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsCisgICAgICAgIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc2NhbGVmcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NjYWxlZl9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NjYWxlZl9wZCAoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfc2NhbGVmcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc2NhbGVmX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwKKyAgICAgICAgICAgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc2NhbGVmX3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zY2FsZWZfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zY2FsZWZfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc2NhbGVmcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc2NhbGVmX3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NjYWxlZl9wcyAoX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfc2NhbGVmcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NjYWxlZl9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BLAorICAgICAgICAgICBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zY2FsZWZfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfc2NhbGVmcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCisjZGVmaW5lIF9tbV9pNjRzY2F0dGVyX3BkKGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2MmRmKChkb3VibGUgKikoYWRkciksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pNjRzY2F0dGVyX3BkKGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2MmRmKChkb3VibGUgKikoYWRkciksIChfX21tYXNrOCkobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tX2k2NHNjYXR0ZXJfZXBpNjQoYWRkciwgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXYyZGkoKGxvbmcgbG9uZyAqKShhZGRyKSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2k2NHNjYXR0ZXJfZXBpNjQoYWRkciwgbWFzaywgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXYyZGkoKGxvbmcgbG9uZyAqKShhZGRyKSwgKF9fbW1hc2s4KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaTY0c2NhdHRlcl9wZChhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjRkZigoZG91YmxlICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTY0c2NhdHRlcl9wZChhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjRkZigoZG91YmxlICopKGFkZHIpLCAoX19tbWFzazgpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pNjRzY2F0dGVyX2VwaTY0KGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2NGRpKChsb25nIGxvbmcgKikoYWRkciksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pNjRzY2F0dGVyX2VwaTY0KGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2NGRpKChsb25nIGxvbmcgKikoYWRkciksIChfX21tYXNrOCkobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tX2k2NHNjYXR0ZXJfcHMoYWRkciwgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXY0c2YoKGZsb2F0ICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShpbmRleCksIChfX3Y0c2YpKF9fbTEyOCkodjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pNjRzY2F0dGVyX3BzKGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2NHNmKChmbG9hdCAqKShhZGRyKSwgKF9fbW1hc2s4KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGluZGV4KSwgKF9fdjRzZikoX19tMTI4KSh2MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbV9pNjRzY2F0dGVyX2VwaTMyKGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2NHNpKChpbnQgKikoYWRkciksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pNjRzY2F0dGVyX2VwaTMyKGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2NHNpKChpbnQgKikoYWRkciksIChfX21tYXNrOCkobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2k2NHNjYXR0ZXJfcHMoYWRkciwgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXY4c2YoKGZsb2F0ICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShpbmRleCksIChfX3Y0c2YpKF9fbTEyOCkodjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pNjRzY2F0dGVyX3BzKGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2OHNmKChmbG9hdCAqKShhZGRyKSwgKF9fbW1hc2s4KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGluZGV4KSwgKF9fdjRzZikoX19tMTI4KSh2MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pNjRzY2F0dGVyX2VwaTMyKGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2OHNpKChpbnQgKikoYWRkciksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pNjRzY2F0dGVyX2VwaTMyKGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgIFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjhzaSgoaW50ICopKGFkZHIpLCAoX19tbWFzazgpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbV9pMzJzY2F0dGVyX3BkKGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgICAgICBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXYyZGYoKGRvdWJsZSAqKShhZGRyKSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2kzMnNjYXR0ZXJfcGQoYWRkciwgbWFzaywgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoeyAgICAgICAgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2MmRmKChkb3VibGUgKikoYWRkciksIChfX21tYXNrOCkobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tX2kzMnNjYXR0ZXJfZXBpNjQoYWRkciwgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXYyZGkoKGxvbmcgbG9uZyAqKShhZGRyKSwgKF9fbW1hc2s4KS0xLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2kzMnNjYXR0ZXJfZXBpNjQoYWRkciwgbWFzaywgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXYyZGkoKGxvbmcgbG9uZyAqKShhZGRyKSwgKF9fbW1hc2s4KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaTMyc2NhdHRlcl9wZChhZGRyLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjRkZigoZG91YmxlICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTMyc2NhdHRlcl9wZChhZGRyLCBtYXNrLCBpbmRleCwgdjEsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjRkZigoZG91YmxlICopKGFkZHIpLCAoX19tbWFzazgpKG1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkodjEpLCAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pMzJzY2F0dGVyX2VwaTY0KGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2NGRpKChsb25nIGxvbmcgKikoYWRkciksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pMzJzY2F0dGVyX2VwaTY0KGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2NGRpKChsb25nIGxvbmcgKikoYWRkciksIChfX21tYXNrOCkobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tX2kzMnNjYXR0ZXJfcHMoYWRkciwgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXY0c2YoKGZsb2F0ICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpbmRleCksIChfX3Y0c2YpKF9fbTEyOCkodjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pMzJzY2F0dGVyX3BzKGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2NHNmKChmbG9hdCAqKShhZGRyKSwgKF9fbW1hc2s4KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGluZGV4KSwgKF9fdjRzZikoX19tMTI4KSh2MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbV9pMzJzY2F0dGVyX2VwaTMyKGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2NHNpKChpbnQgKikoYWRkciksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pMzJzY2F0dGVyX2VwaTMyKGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2NHNpKChpbnQgKikoYWRkciksIChfX21tYXNrOCkobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2kzMnNjYXR0ZXJfcHMoYWRkciwgaW5kZXgsIHYxLCBzY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXY4c2YoKGZsb2F0ICopKGFkZHIpLCAoX19tbWFzazgpLTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShpbmRleCksIChfX3Y4c2YpKF9fbTI1NikodjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pMzJzY2F0dGVyX3BzKGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2OHNmKChmbG9hdCAqKShhZGRyKSwgKF9fbW1hc2s4KShtYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGluZGV4KSwgKF9fdjhzZikoX19tMjU2KSh2MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShzY2FsZSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pMzJzY2F0dGVyX2VwaTMyKGFkZHIsIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2OHNpKChpbnQgKikoYWRkciksIChfX21tYXNrOCktMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKHYxKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pMzJzY2F0dGVyX2VwaTMyKGFkZHIsIG1hc2ssIGluZGV4LCB2MSwgc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2OHNpKChpbnQgKikoYWRkciksIChfX21tYXNrOCkobWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShpbmRleCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKSh2MSksIChpbnQpKHNjYWxlKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zcXJ0X3BkKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zcXJ0X3BkKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NxcnRfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc3FydF9wZChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zcXJ0X3BkKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zcXJ0X3BkKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NxcnRfcGQoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc3FydF9wZChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NxcnRfcHMoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc3FydF9wcyhfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3FydF9wcyhfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zcXJ0X3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BkKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zcXJ0X3BzKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NxcnRfcHMoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NxcnRfcHMoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc3FydF9wcyhfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2V0emVyb19wcygpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N1Yl9wZChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3N1Yl9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3N1Yl9wZChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc3ViX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3ViX3BkKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc3ViX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zdWJfcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N1Yl9wcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zdWJfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3ViX3BzKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3N1Yl9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zdWJfcHMoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc3ViX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3N1Yl9wcyhfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zdWJfcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2V0emVyb19wcygpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrMl9wZXJtdXRleDJ2YXJfZXBpMzIgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fSSwgX19tbWFzazggX19VLAorICAgICAgICAgICAgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFyZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2syX3Blcm11dGV4MnZhcl9lcGkzMiAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19JLAorICAgICAgICAgX19tbWFzazggX19VLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazJfcGVybXV0ZXgydmFyX3BkIChfX20xMjhkIF9fQSwgX19tMTI4aSBfX0ksIF9fbW1hc2s4IF9fVSwKKyAgICAgICAgIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcnBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2syX3Blcm11dGV4MnZhcl9wZCAoX19tMjU2ZCBfX0EsIF9fbTI1NmkgX19JLCBfX21tYXNrOCBfX1UsCisgICAgICAgICAgICBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2syX3Blcm11dGV4MnZhcl9wcyAoX19tMTI4IF9fQSwgX19tMTI4aSBfX0ksIF9fbW1hc2s4IF9fVSwKKyAgICAgICAgIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazJfcGVybXV0ZXgydmFyX3BzIChfX20yNTYgX19BLCBfX20yNTZpIF9fSSwgX19tbWFzazggX19VLAorICAgICAgICAgICAgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazJfcGVybXV0ZXgydmFyX2VwaTY0IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0ksIF9fbW1hc2s4IF9fVSwKKyAgICAgICAgICAgIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcnExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrMl9wZXJtdXRleDJ2YXJfZXBpNjQgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fSSwKKyAgICAgICAgIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFycTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Blcm11dGV4MnZhcl9lcGkzMiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19JLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJkMTI4X21hc2sgKChfX3Y0c2kpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3Blcm11dGV4MnZhcl9lcGkzMiAoX19tMTI4aSBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0ksCisgICAgICAgICAgIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmQxMjhfbWFzayAoKF9fdjRzaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9wZXJtdXRleDJ2YXJfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19JLAorICAgICAgICAgICAgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyZDEyOF9tYXNreiAoKF9fdjRzaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGVybXV0ZXgydmFyX2VwaTMyIChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0ksIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmQyNTZfbWFzayAoKF9fdjhzaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfcGVybXV0ZXgydmFyX2VwaTMyIChfX20yNTZpIF9fQSwgX19tbWFzazggX19VLCBfX20yNTZpIF9fSSwKKyAgICAgICAgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyZDI1Nl9tYXNrICgoX192OHNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3Blcm11dGV4MnZhcl9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgIF9fbTI1NmkgX19JLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJkMjU2X21hc2t6ICgoX192OHNpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9wZXJtdXRleDJ2YXJfcGQgKF9fbTEyOGQgX19BLCBfX20xMjhpIF9fSSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycGQxMjhfbWFzayAoKF9fdjJkaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0KKyAgICAgICAgICAgICAgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19wZXJtdXRleDJ2YXJfcGQgKF9fbTEyOGQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19JLAorICAgICAgICBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwZDEyOF9tYXNrICgoX192MmRpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9wZXJtdXRleDJ2YXJfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGkgX19JLAorICAgICAgICAgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycGQxMjhfbWFza3ogKChfX3YyZGkpIF9fSQorICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGVybXV0ZXgydmFyX3BkIChfX20yNTZkIF9fQSwgX19tMjU2aSBfX0ksIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBkMjU2X21hc2sgKChfX3Y0ZGkpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtCisgICAgICAgICAgICAgIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfcGVybXV0ZXgydmFyX3BkIChfX20yNTZkIF9fQSwgX19tbWFzazggX19VLCBfX20yNTZpIF9fSSwKKyAgICAgICAgICAgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycGQyNTZfbWFzayAoKF9fdjRkaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcGVybXV0ZXgydmFyX3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZpIF9fSSwKKyAgICAgICAgICAgIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBkMjU2X21hc2t6ICgoX192NGRpKSBfX0kKKyAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcGVybXV0ZXgydmFyX3BzIChfX20xMjggX19BLCBfX20xMjhpIF9fSSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBzMTI4X21hc2sgKChfX3Y0c2kpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcGVybXV0ZXgydmFyX3BzIChfX20xMjggX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19JLAorICAgICAgICBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycHMxMjhfbWFzayAoKF9fdjRzaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3Blcm11dGV4MnZhcl9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjhpIF9fSSwKKyAgICAgICAgIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwczEyOF9tYXNreiAoKF9fdjRzaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9wZXJtdXRleDJ2YXJfcHMgKF9fbTI1NiBfX0EsIF9fbTI1NmkgX19JLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycHMyNTZfbWFzayAoKF9fdjhzaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wZXJtdXRleDJ2YXJfcHMgKF9fbTI1NiBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0ksCisgICAgICAgICAgIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwczI1Nl9tYXNrICgoX192OHNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcGVybXV0ZXgydmFyX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NmkgX19JLAorICAgICAgICAgICAgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBzMjU2X21hc2t6ICgoX192OHNpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9wZXJtdXRleDJ2YXJfZXBpNjQgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fSSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycTEyOF9tYXNrICgoX192MmRpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19wZXJtdXRleDJ2YXJfZXBpNjQgKF9fbTEyOGkgX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19JLAorICAgICAgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJxMTI4X21hc2sgKChfX3YyZGkpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcGVybXV0ZXgydmFyX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fSSwKKyAgICAgICAgICAgIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnExMjhfbWFza3ogKChfX3YyZGkpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGVybXV0ZXgydmFyX2VwaTY0IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0ksIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnEyNTZfbWFzayAoKF9fdjRkaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfcGVybXV0ZXgydmFyX2VwaTY0IChfX20yNTZpIF9fQSwgX19tbWFzazggX19VLCBfX20yNTZpIF9fSSwKKyAgICAgICAgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycTI1Nl9tYXNrICgoX192NGRpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3Blcm11dGV4MnZhcl9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgIF9fbTI1NmkgX19JLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJxMjU2X21hc2t6ICgoX192NGRpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwaThfZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fY3Z0ZXBpOF9lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaThfZXBpMzIoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9jdnRlcGk4X2VwaTMyKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXBpOF9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfY3Z0ZXBpOF9lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwaThfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfY3Z0ZXBpOF9lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwaThfZXBpNjQoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fY3Z0ZXBpOF9lcGk2NChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaThfZXBpNjQoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9jdnRlcGk4X2VwaTY0KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXBpOF9lcGk2NChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9jdnRlcGk4X2VwaTY0KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpOF9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X2N2dGVwaThfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcGkzMl9lcGk2NChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9jdnRlcGkzMl9lcGk2NChfX1gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTMyX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fY3Z0ZXBpMzJfZXBpNjQoX19YKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGkzMl9lcGk2NChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9jdnRlcGkzMl9lcGk2NChfX1gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwaTMyX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfY3Z0ZXBpMzJfZXBpNjQoX19YKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcGkxNl9lcGkzMihfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9jdnRlcGkxNl9lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTE2X2VwaTMyKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fY3Z0ZXBpMTZfZXBpMzIoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGkxNl9lcGkzMihfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9jdnRlcGkxNl9lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwaTE2X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X2N2dGVwaTE2X2VwaTMyKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpMTZfZXBpNjQoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fY3Z0ZXBpMTZfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcGkxNl9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX2N2dGVwaTE2X2VwaTY0KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXBpMTZfZXBpNjQoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfY3Z0ZXBpMTZfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRlcGkxNl9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X2N2dGVwaTE2X2VwaTY0KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcHU4X2VwaTMyKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX2N2dGVwdThfZXBpMzIoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcHU4X2VwaTMyKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fY3Z0ZXB1OF9lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwdThfZXBpMzIoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfY3Z0ZXB1OF9lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwdThfZXBpMzIoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9jdnRlcHU4X2VwaTMyKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXB1OF9lcGk2NChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9jdnRlcHU4X2VwaTY0KF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0ZXB1OF9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX2N2dGVwdThfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcHU4X2VwaTY0KF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X2N2dGVwdThfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRlcHU4X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X2N2dGVwdThfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcHUzMl9lcGk2NChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9jdnRlcHUzMl9lcGk2NChfX1gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwdTMyX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fY3Z0ZXB1MzJfZXBpNjQoX19YKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcHUzMl9lcGk2NChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9jdnRlcHUzMl9lcGk2NChfX1gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwdTMyX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfY3Z0ZXB1MzJfZXBpNjQoX19YKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcHUxNl9lcGkzMihfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9jdnRlcHUxNl9lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwdTE2X2VwaTMyKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fY3Z0ZXB1MTZfZXBpMzIoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcHUxNl9lcGkzMihfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9jdnRlcHUxNl9lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwdTE2X2VwaTMyKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfY3Z0ZXB1MTZfZXBpMzIoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcHUxNl9lcGk2NChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9jdnRlcHUxNl9lcGk2NChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwdTE2X2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fY3Z0ZXB1MTZfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcHUxNl9lcGk2NChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9jdnRlcHUxNl9lcGk2NChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwdTE2X2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfY3Z0ZXB1MTZfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKKworI2RlZmluZSBfbW1fcm9sX2VwaTMyKGEsIGIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Byb2xkMTI4X21hc2soKF9fdjRzaSkoX19tMTI4aSkoYSksIChpbnQpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2V0emVyb19zaTEyOCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19yb2xfZXBpMzIodywgdSwgYSwgYikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHJvbGQxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShhKSwgKGludCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKSh3KSwgKF9fbW1hc2s4KSh1KSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JvbF9lcGkzMih1LCBhLCBiKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wcm9sZDEyOF9tYXNrKChfX3Y0c2kpKF9fbTEyOGkpKGEpLCAoaW50KShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkodSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9yb2xfZXBpMzIoYSwgYikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHJvbGQyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShhKSwgKGludCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3JvbF9lcGkzMih3LCB1LCBhLCBiKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wcm9sZDI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKGEpLCAoaW50KShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKHcpLCAoX19tbWFzazgpKHUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfcm9sX2VwaTMyKHUsIGEsIGIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Byb2xkMjU2X21hc2soKF9fdjhzaSkoX19tMjU2aSkoYSksIChpbnQpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSh1KSk7IH0pCisKKyNkZWZpbmUgX21tX3JvbF9lcGk2NChhLCBiKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wcm9scTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKGEpLCAoaW50KShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldHplcm9fZGkoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcm9sX2VwaTY0KHcsIHUsIGEsIGIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Byb2xxMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoYSksIChpbnQpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkodyksIChfX21tYXNrOCkodSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9yb2xfZXBpNjQodSwgYSwgYikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHJvbHExMjhfbWFzaygoX192MmRpKShfX20xMjhpKShhKSwgKGludCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXR6ZXJvX2RpKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKHUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfcm9sX2VwaTY0KGEsIGIpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Byb2xxMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoYSksIChpbnQpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19yb2xfZXBpNjQodywgdSwgYSwgYikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHJvbHEyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShhKSwgKGludCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKSh3KSwgKF9fbW1hc2s4KSh1KSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X3JvbF9lcGk2NCh1LCBhLCBiKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wcm9scTI1Nl9tYXNrKChfX3Y0ZGkpKF9fbTI1NmkpKGEpLCAoaW50KShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkodSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3JvbHZfZXBpMzIgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wcm9sdmQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3JvbHZfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHJvbHZkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9yb2x2X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wcm9sdmQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcm9sdl9lcGkzMiAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Byb2x2ZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfcm9sdl9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wcm9sdmQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3JvbHZfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Byb2x2ZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9yb2x2X2VwaTY0IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHJvbHZxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19kaSAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19yb2x2X2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Byb2x2cTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcm9sdl9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHJvbHZxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19kaSAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3JvbHZfZXBpNjQgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wcm9sdnEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3JvbHZfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHJvbHZxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9yb2x2X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wcm9sdnEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tX3Jvcl9lcGkzMihBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHJvcmQxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3Jvcl9lcGkzMihXLCBVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHJvcmQxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShXKSwgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3Jvcl9lcGkzMihVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHJvcmQxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfcm9yX2VwaTMyKEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wcm9yZDI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfcm9yX2VwaTMyKFcsIFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wcm9yZDI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKFcpLCAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfcm9yX2VwaTMyKFUsIEEsIEIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wcm9yZDI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKEEpLCAoaW50KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9yb3JfZXBpNjQoQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Byb3JxMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0emVyb19kaSgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19yb3JfZXBpNjQoVywgVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Byb3JxMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoVyksIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9yb3JfZXBpNjQoVSwgQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Byb3JxMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoQSksIChpbnQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0emVyb19kaSgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3Jvcl9lcGk2NChBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHJvcnEyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3Jvcl9lcGk2NChXLCBVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHJvcnEyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShXKSwgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X3Jvcl9lcGk2NChVLCBBLCBCKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHJvcnEyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShBKSwgKGludCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NsbF9lcGkzMihfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2xsX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zbGxfZXBpMzIoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2xsX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zbGxfZXBpMzIoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NsbF9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc2xsX2VwaTMyKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NsbF9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc2xsaV9lcGkzMihfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgaW50IF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zbGxpX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zbGxpX2VwaTMyKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIGludCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2xsaV9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc2xsaV9lcGkzMihfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgaW50IF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zbGxpX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zbGxpX2VwaTMyKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIGludCBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2xsaV9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc2xsX2VwaTY0KF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zbGxfZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NsbF9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zbGxfZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0emVyb19kaSgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NsbF9lcGk2NChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2xsX2VwaTY0KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zbGxfZXBpNjQoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2xsX2VwaTY0KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zbGxpX2VwaTY0KF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBpbnQgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NsbGlfZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NsbGlfZXBpNjQoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgaW50IF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zbGxpX2VwaTY0KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldHplcm9fZGkoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zbGxpX2VwaTY0KF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBpbnQgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NsbGlfZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NsbGlfZXBpNjQoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgaW50IF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zbGxpX2VwaTY0KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcm9ydl9lcGkzMiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Byb3J2ZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcm9ydl9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wcm9ydmQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3JvcnZfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Byb3J2ZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9yb3J2X2VwaTMyIChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHJvcnZkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19yb3J2X2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKKyAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Byb3J2ZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcm9ydl9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHJvcnZkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3JvcnZfZXBpNjQgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wcm9ydnExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX2RpICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3JvcnZfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHJvcnZxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9yb3J2X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wcm9ydnExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX2RpICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcm9ydl9lcGk2NCAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Byb3J2cTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfcm9ydl9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wcm9ydnEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3JvcnZfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Byb3J2cTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NsbHZfZXBpNjQoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NsbHZfZXBpNjQoX19YLCBfX1kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NsbHZfZXBpNjQoX19tbWFzazggX19VLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2xsdl9lcGk2NChfX1gsIF9fWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXR6ZXJvX2RpKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc2xsdl9lcGk2NChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zbGx2X2VwaTY0KF9fWCwgX19ZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NsbHZfZXBpNjQoX19tbWFzazggX19VLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zbGx2X2VwaTY0KF9fWCwgX19ZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NsbHZfZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NsbHZfZXBpMzIoX19YLCBfX1kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NsbHZfZXBpMzIoX19tbWFzazggX19VLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2xsdl9lcGkzMihfX1gsIF9fWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc2xsdl9lcGkzMihfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zbGx2X2VwaTMyKF9fWCwgX19ZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NsbHZfZXBpMzIoX19tbWFzazggX19VLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zbGx2X2VwaTMyKF9fWCwgX19ZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NybHZfZXBpNjQoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NybHZfZXBpNjQoX19YLCBfX1kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NybHZfZXBpNjQoX19tbWFzazggX19VLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc3Jsdl9lcGk2NChfX1gsIF9fWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXR6ZXJvX2RpKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3Jsdl9lcGk2NChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zcmx2X2VwaTY0KF9fWCwgX19ZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NybHZfZXBpNjQoX19tbWFzazggX19VLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zcmx2X2VwaTY0KF9fWCwgX19ZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NybHZfZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc3Jsdl9lcGkzMihfX1gsIF9fWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zcmx2X2VwaTMyKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc3Jsdl9lcGkzMihfX1gsIF9fWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zcmx2X2VwaTMyKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NybHZfZXBpMzIoX19YLCBfX1kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3Jsdl9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NybHZfZXBpMzIoX19YLCBfX1kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3JsX2VwaTMyKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zcmxfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NybF9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zcmxfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NybF9lcGkzMihfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc3JsX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zcmxfZXBpMzIoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc3JsX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zcmxpX2VwaTMyKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBpbnQgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NybGlfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NybGlfZXBpMzIoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgaW50IF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zcmxpX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zcmxpX2VwaTMyKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBpbnQgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NybGlfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NybGlfZXBpMzIoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgaW50IF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zcmxpX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zcmxfZXBpNjQoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NybF9lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3JsX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NybF9lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXR6ZXJvX2RpKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3JsX2VwaTY0KF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zcmxfZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NybF9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zcmxfZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NybGlfZXBpNjQoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIGludCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc3JsaV9lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3JsaV9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBpbnQgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NybGlfZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0emVyb19kaSgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NybGlfZXBpNjQoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIGludCBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc3JsaV9lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3JsaV9lcGk2NChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBpbnQgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NybGlfZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NyYXZfZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc3Jhdl9lcGkzMihfX1gsIF9fWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zcmF2X2VwaTMyKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc3Jhdl9lcGkzMihfX1gsIF9fWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zcmF2X2VwaTMyKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NyYXZfZXBpMzIoX19YLCBfX1kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3Jhdl9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NyYXZfZXBpMzIoX19YLCBfX1kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NyYXZfZXBpNjQgKF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JhdnExMjhfbWFzayAoKF9fdjJkaSkgX19YLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1ksCisgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX2RpICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NyYXZfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YLAorICAgICAgICAgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHNyYXZxMTI4X21hc2sgKChfX3YyZGkpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19ZLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zcmF2X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JhdnExMjhfbWFzayAoKF9fdjJkaSkgX19YLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1ksCisgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX2RpICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3Jhdl9lcGk2NCAoX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzcmF2cTI1Nl9tYXNrICgoX192NGRpKSBfX1gsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3Jhdl9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX1gsCisgICAgICBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3JhdnEyNTZfbWFzayAoKF9fdjRkaSkgX19YLAorICAgICAgICAgICAgICAoX192NGRpKSBfX1ksCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NyYXZfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzcmF2cTI1Nl9tYXNrICgoX192NGRpKSBfX1gsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21vdl9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjggKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbW92X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNpKSBfbW1fc2V0emVyb19zaTEyOCAoKSk7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21vdl9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYgKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbW92X2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19sb2FkX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfbW92ZHFhMzJsb2FkMTI4X21hc2sgKChfX3Y0c2kgKikgX19QLAorICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9sb2FkX2VwaTMyIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9tb3ZkcWEzMmxvYWQxMjhfbWFzayAoKF9fdjRzaSAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19sb2FkX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfbW92ZHFhMzJsb2FkMjU2X21hc2sgKChfX3Y4c2kgKikgX19QLAorICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9sb2FkX2VwaTMyIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9tb3ZkcWEzMmxvYWQyNTZfbWFzayAoKF9fdjhzaSAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdG9yZV9lcGkzMiAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZkcWEzMnN0b3JlMTI4X21hc2sgKChfX3Y0c2kgKikgX19QLAorICAgICAgICAgIChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zdG9yZV9lcGkzMiAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZkcWEzMnN0b3JlMjU2X21hc2sgKChfX3Y4c2kgKikgX19QLAorICAgICAgICAgIChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tb3ZfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMTI4ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRpKSBfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21vdl9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fZGkgKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbW92X2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NiAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tb3ZfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYgKChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2xvYWRfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9tb3ZkcWE2NGxvYWQxMjhfbWFzayAoKF9fdjJkaSAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2xvYWRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX21vdmRxYTY0bG9hZDEyOF9tYXNrICgoX192MmRpICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fZGkgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2xvYWRfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9tb3ZkcWE2NGxvYWQyNTZfbWFzayAoKF9fdjRkaSAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2xvYWRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX21vdmRxYTY0bG9hZDI1Nl9tYXNrICgoX192NGRpICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N0b3JlX2VwaTY0ICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX21vdmRxYTY0c3RvcmUxMjhfbWFzayAoKF9fdjJkaSAqKSBfX1AsCisgICAgICAgICAgKF9fdjJkaSkgX19BLAorICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N0b3JlX2VwaTY0ICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX21vdmRxYTY0c3RvcmUyNTZfbWFzayAoKF9fdjRkaSAqKSBfX1AsCisgICAgICAgICAgKF9fdjRkaSkgX19BLAorICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21vdmVkdXBfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fbW92ZWR1cF9wZChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tb3ZlZHVwX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fbW92ZWR1cF9wZChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tb3ZlZHVwX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X21vdmVkdXBfcGQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbW92ZWR1cF9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X21vdmVkdXBfcGQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCkpOworfQorCisKKyNkZWZpbmUgX21tX21hc2tfc2V0MV9lcGkzMihPLCBNLCBBKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdGQxMjhfZ3ByX21hc2soKGludCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoTyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3NldDFfZXBpMzIoTSwgQSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3RkMTI4X2dwcl9tYXNrKChpbnQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19zZXQxX2VwaTMyKE8sIE0sIEEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0ZDI1Nl9ncHJfbWFzaygoaW50KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShPKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfc2V0MV9lcGkzMihNLCBBKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdGQyNTZfZ3ByX21hc2soKGludCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSkpOyB9KQorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NldDFfZXBpNjQgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIGxvbmcgbG9uZyBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdHExMjhfZ3ByX21hc2sgKF9fQSwgKF9fdjJkaSkgX19PLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NldDFfZXBpNjQgKF9fbW1hc2s4IF9fTSwgbG9uZyBsb25nIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0cTEyOF9ncHJfbWFzayAoX19BLAorICAgICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NldDFfZXBpNjQgKF9fbTI1NmkgX19PLCBfX21tYXNrOCBfX00sIGxvbmcgbG9uZyBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdHEyNTZfZ3ByX21hc2sgKF9fQSwgKF9fdjRkaSkgX19PLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NldDFfZXBpNjQgKF9fbW1hc2s4IF9fTSwgbG9uZyBsb25nIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0cTI1Nl9ncHJfbWFzayAoX19BLAorICAgICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKyNlbmRpZgorCisjZGVmaW5lIF9tbV9maXh1cGltbV9wZChBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9maXh1cGltbXBkMTI4X21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19maXh1cGltbV9wZChBLCBVLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9maXh1cGltbXBkMTI4X21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2ZpeHVwaW1tX3BkKFUsIEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcGQxMjhfbWFza3ooKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaW1tKSwgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2ZpeHVwaW1tX3BkKEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcGQyNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2ZpeHVwaW1tX3BkKEEsIFUsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcGQyNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfZml4dXBpbW1fcGQoVSwgQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfZml4dXBpbW1wZDI1Nl9tYXNreigoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fZml4dXBpbW1fcHMoQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9maXh1cGltbXBzMTI4X21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfZml4dXBpbW1fcHMoQSwgVSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9maXh1cGltbXBzMTI4X21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9maXh1cGltbV9wcyhVLCBBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcHMxMjhfbWFza3ooKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9maXh1cGltbV9wcyhBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcHMyNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19maXh1cGltbV9wcyhBLCBVLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2ZpeHVwaW1tcHMyNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X2ZpeHVwaW1tX3BzKFUsIEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfZml4dXBpbW1wczI1Nl9tYXNreigoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19sb2FkX3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbG9hZGFwZDEyOF9tYXNrICgoX192MmRmICopIF9fUCwKKyAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9sb2FkX3BkIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9sb2FkYXBkMTI4X21hc2sgKChfX3YyZGYgKikgX19QLAorICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbG9hZF9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2xvYWRhcGQyNTZfbWFzayAoKF9fdjRkZiAqKSBfX1AsCisgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbG9hZF9wZCAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfbG9hZGFwZDI1Nl9tYXNrICgoX192NGRmICopIF9fUCwKKyAgICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbG9hZF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9sb2FkYXBzMTI4X21hc2sgKChfX3Y0c2YgKikgX19QLAorICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2xvYWRfcHMgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbG9hZGFwczEyOF9tYXNrICgoX192NHNmICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbG9hZF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9sb2FkYXBzMjU2X21hc2sgKChfX3Y4c2YgKikgX19QLAorICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2xvYWRfcHMgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfbG9hZGFwczI1Nl9tYXNrICgoX192OHNmICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2xvYWR1X2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfbG9hZGRxdWRpMTI4X21hc2sgKChfX3YyZGkgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9sb2FkdV9lcGk2NCAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfbG9hZGRxdWRpMTI4X21hc2sgKChfX3YyZGkgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbG9hZHVfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1ZGkyNTZfbWFzayAoKF9fdjRkaSAqKSBfX1AsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2xvYWR1X2VwaTY0IChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1ZGkyNTZfbWFzayAoKF9fdjRkaSAqKSBfX1AsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19sb2FkdV9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2xvYWRkcXVzaTEyOF9tYXNrICgoX192NHNpICopIF9fUCwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbG9hZHVfZXBpMzIgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2xvYWRkcXVzaTEyOF9tYXNrICgoX192NHNpICopIF9fUCwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2xvYWR1X2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfbG9hZGRxdXNpMjU2X21hc2sgKChfX3Y4c2kgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9sb2FkdV9lcGkzMiAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfbG9hZGRxdXNpMjU2X21hc2sgKChfX3Y4c2kgKikgX19QLAorICAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbG9hZHVfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9sb2FkdXBkMTI4X21hc2sgKChfX3YyZGYgKikgX19QLAorICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2xvYWR1X3BkIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9sb2FkdXBkMTI4X21hc2sgKChfX3YyZGYgKikgX19QLAorICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbG9hZHVfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9sb2FkdXBkMjU2X21hc2sgKChfX3Y0ZGYgKikgX19QLAorICAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2xvYWR1X3BkIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9sb2FkdXBkMjU2X21hc2sgKChfX3Y0ZGYgKikgX19QLAorICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19sb2FkdV9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9sb2FkdXBzMTI4X21hc2sgKChfX3Y0c2YgKikgX19QLAorICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2xvYWR1X3BzIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2xvYWR1cHMxMjhfbWFzayAoKF9fdjRzZiAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2xvYWR1X3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2xvYWR1cHMyNTZfbWFzayAoKF9fdjhzZiAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbG9hZHVfcHMgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfbG9hZHVwczI1Nl9tYXNrICgoX192OHNmICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N0b3JlX3BkICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JlYXBkMTI4X21hc2sgKChfX3YyZGYgKikgX19QLAorICAgICAgICAgICAoX192MmRmKSBfX0EsCisgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N0b3JlX3BkICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JlYXBkMjU2X21hc2sgKChfX3Y0ZGYgKikgX19QLAorICAgICAgICAgICAoX192NGRmKSBfX0EsCisgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N0b3JlX3BzICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVhcHMxMjhfbWFzayAoKF9fdjRzZiAqKSBfX1AsCisgICAgICAgICAgIChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3RvcmVfcHMgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20yNTYgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZWFwczI1Nl9tYXNrICgoX192OHNmICopIF9fUCwKKyAgICAgICAgICAgKF9fdjhzZikgX19BLAorICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdG9yZXVfZXBpNjQgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVkcXVkaTEyOF9tYXNrICgoX192MmRpICopIF9fUCwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3RvcmV1X2VwaTY0ICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JlZHF1ZGkyNTZfbWFzayAoKF9fdjRkaSAqKSBfX1AsCisgICAgICAgICAgICAgKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3N0b3JldV9lcGkzMiAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZWRxdXNpMTI4X21hc2sgKChfX3Y0c2kgKikgX19QLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zdG9yZXVfZXBpMzIgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVkcXVzaTI1Nl9tYXNrICgoX192OHNpICopIF9fUCwKKyAgICAgICAgICAgICAoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3RvcmV1X3BkICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBkMTI4X21hc2sgKChfX3YyZGYgKikgX19QLAorICAgICAgICAgICAoX192MmRmKSBfX0EsCisgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N0b3JldV9wZCAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZXVwZDI1Nl9tYXNrICgoX192NGRmICopIF9fUCwKKyAgICAgICAgICAgKF9fdjRkZikgX19BLAorICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdG9yZXVfcHMgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZXVwczEyOF9tYXNrICgoX192NHNmICopIF9fUCwKKyAgICAgICAgICAgKF9fdjRzZikgX19BLAorICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zdG9yZXVfcHMgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20yNTYgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZXVwczI1Nl9tYXNrICgoX192OHNmICopIF9fUCwKKyAgICAgICAgICAgKF9fdjhzZikgX19BLAorICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3VucGFja2hpX3BkKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3VucGFja2hpX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfdW5wYWNraGlfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV91bnBhY2toaV9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3VucGFja2hpX3BkKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3VucGFja2hpX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfdW5wYWNraGlfcGQoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl91bnBhY2toaV9wZChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19wZCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdW5wYWNraGlfcHMoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3VucGFja2hpX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3VucGFja2hpX3BzKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV91bnBhY2toaV9wcyhfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza191bnBhY2toaV9wcyhfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3VucGFja2hpX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel91bnBhY2toaV9wcyhfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3VucGFja2hpX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdW5wYWNrbG9fcGQoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fdW5wYWNrbG9fcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel91bnBhY2tsb19wZChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3VucGFja2xvX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfdW5wYWNrbG9fcGQoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfdW5wYWNrbG9fcGQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel91bnBhY2tsb19wZChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3VucGFja2xvX3BkKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza191bnBhY2tsb19wcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fdW5wYWNrbG9fcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfdW5wYWNrbG9fcHMoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3VucGFja2xvX3BzKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3VucGFja2xvX3BzKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfdW5wYWNrbG9fcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3VucGFja2xvX3BzKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfdW5wYWNrbG9fcHMoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcmNwMTRfcGQgKF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3JjcDE0cGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19yY3AxNF9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcmNwMTRwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9yY3AxNF9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9yY3AxNHBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9yY3AxNF9wZCAoX19tMjU2ZCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfcmNwMTRwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3JjcDE0X3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9yY3AxNHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3JjcDE0X3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3JjcDE0cGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcmNwMTRfcHMgKF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9yY3AxNHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19yY3AxNF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfcmNwMTRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9yY3AxNF9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfcmNwMTRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9yY3AxNF9wcyAoX19tMjU2IF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3JjcDE0cHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3JjcDE0X3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9yY3AxNHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3JjcDE0X3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9yY3AxNHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2YpCisgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworI2RlZmluZSBfbW1fbWFza19wZXJtdXRlX3BkKFcsIFUsIFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fcGVybXV0ZV9wZCgoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFcpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcGVybXV0ZV9wZChVLCBYLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMTI4KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3Blcm11dGVfcGQoKFgpLCAoQykpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3Blcm11dGVfcGQoVywgVSwgWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9wZXJtdXRlX3BkKChYKSwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoVykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9wZXJtdXRlX3BkKFUsIFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8yNTYoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfcGVybXV0ZV9wZCgoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcGVybXV0ZV9wcyhXLCBVLCBYLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9wZXJtdXRlX3BzKChYKSwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFcpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcGVybXV0ZV9wcyhVLCBYLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9wZXJtdXRlX3BzKChYKSwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3Blcm11dGVfcHMoVywgVSwgWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfcGVybXV0ZV9wcygoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShXKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X3Blcm11dGVfcHMoVSwgWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfcGVybXV0ZV9wcygoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2V0emVyb19wcygpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3Blcm11dGV2YXJfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLAorICAgICAgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBkX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19DLAorICAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9wZXJtdXRldmFyX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhpIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92cGVybWlsdmFycGRfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRpKSBfX0MsCisgICAgICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wZXJtdXRldmFyX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwKKyAgICAgICAgIF9fbTI1NmkgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaWx2YXJwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQywKKyAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcGVybXV0ZXZhcl9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2aSBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19DLAorICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19wZXJtdXRldmFyX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsCisgICAgICBfX20xMjhpIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaWx2YXJwc19tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19DLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9wZXJtdXRldmFyX3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOGkgX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBzX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKSBfX0MsCisgICAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3Blcm11dGV2YXJfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwKKyAgICAgICAgIF9fbTI1NmkgX19DKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX0MsCisgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3Blcm11dGV2YXJfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2aSBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92cGVybWlsdmFycHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQywKKyAgICAgICAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdGVzdF9lcGkzMl9tYXNrIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bWQxMjggKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza190ZXN0X2VwaTMyX21hc2sgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG1kMTI4ICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdGVzdF9lcGkzMl9tYXNrIChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bWQyNTYgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza190ZXN0X2VwaTMyX21hc2sgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG1kMjU2ICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdGVzdF9lcGk2NF9tYXNrIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bXExMjggKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza190ZXN0X2VwaTY0X21hc2sgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG1xMTI4ICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdGVzdF9lcGk2NF9tYXNrIChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bXEyNTYgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza190ZXN0X2VwaTY0X21hc2sgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG1xMjU2ICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdGVzdG5fZXBpMzJfbWFzayAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tZDEyOCAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdGVzdG5fZXBpMzJfbWFzayAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bm1kMTI4ICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAoX192NHNpKSBfX0IsIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Rlc3RuX2VwaTMyX21hc2sgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrOCkgX19idWlsdGluX2lhMzJfcHRlc3RubWQyNTYgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3Rlc3RuX2VwaTMyX21hc2sgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tZDI1NiAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgKF9fdjhzaSkgX19CLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV90ZXN0bl9lcGk2NF9tYXNrIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bm1xMTI4ICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza190ZXN0bl9lcGk2NF9tYXNrIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrOCkgX19idWlsdGluX2lhMzJfcHRlc3RubXExMjggKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgIChfX3YyZGkpIF9fQiwgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdGVzdG5fZXBpNjRfbWFzayAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbW1hc2s4KSBfX2J1aWx0aW5faWEzMl9wdGVzdG5tcTI1NiAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfdGVzdG5fZXBpNjRfbWFzayAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tbWFzazgpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bm1xMjU2ICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAoX192NGRpKSBfX0IsIF9fVSk7Cit9CisKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdW5wYWNraGlfZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV91bnBhY2toaV9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3VucGFja2hpX2VwaTMyKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV91bnBhY2toaV9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3VucGFja2hpX2VwaTMyKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfdW5wYWNraGlfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel91bnBhY2toaV9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfdW5wYWNraGlfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza191bnBhY2toaV9lcGk2NChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3VucGFja2hpX2VwaTY0KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfdW5wYWNraGlfZXBpNjQoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3VucGFja2hpX2VwaTY0KF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXR6ZXJvX2RpKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfdW5wYWNraGlfZXBpNjQoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl91bnBhY2toaV9lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3VucGFja2hpX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl91bnBhY2toaV9lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3VucGFja2xvX2VwaTMyKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fdW5wYWNrbG9fZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel91bnBhY2tsb19lcGkzMihfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMTI4KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fdW5wYWNrbG9fZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza191bnBhY2tsb19lcGkzMihfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3VucGFja2xvX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfdW5wYWNrbG9fZXBpMzIoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3VucGFja2xvX2VwaTMyKF9fQSwgX19CKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdW5wYWNrbG9fZXBpNjQoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV91bnBhY2tsb19lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3VucGFja2xvX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV91bnBhY2tsb19lcGk2NChfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0emVyb19kaSgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3VucGFja2xvX2VwaTY0KF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfdW5wYWNrbG9fZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel91bnBhY2tsb19lcGk2NChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHFfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfdW5wYWNrbG9fZXBpNjQoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zcmFfZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NyYV9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3JhX2VwaTMyKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NyYV9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3JhX2VwaTMyKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zcmFfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfX1cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NyYV9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOClfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zcmFfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NyYWlfZXBpMzIoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIGludCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc3JhaV9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3JhaV9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBpbnQgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NyYWlfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fc2V0emVyb19zaTEyOCgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NyYWlfZXBpMzIoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIGludCBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc3JhaV9lcGkzMihfX0EsIF9fQiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3JhaV9lcGkzMihfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBpbnQgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NyYWlfZXBpMzIoX19BLCBfX0IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmFfZXBpNjQgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JhcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgX21tX3NldHplcm9fZGkgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zcmFfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JhcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3JhX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3JhcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgX21tX3NldHplcm9fZGkgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NyYV9lcGk2NCAoX19tMjU2aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzcmFxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NyYV9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzcmFxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zcmFfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzcmFxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tX3NyYWlfZXBpNjQoQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNyYXFpMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSlfbW1fc2V0emVyb19kaSgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfc3JhaV9lcGk2NChXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JhcWkxMjhfbWFzaygoX192MmRpKShfX20xMjhpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfc3JhaV9lcGk2NChVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JhcWkxMjhfbWFzaygoX192MmRpKShfX20xMjhpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXR6ZXJvX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3NyYWlfZXBpNjQoQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNyYXFpMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoQSksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfc3JhaV9lcGk2NChXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JhcWkyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfc3JhaV9lcGk2NChVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JhcWkyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShBKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX3Rlcm5hcnlsb2dpY19lcGkzMihBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wdGVybmxvZ2QxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3Rlcm5hcnlsb2dpY19lcGkzMihBLCBVLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wdGVybmxvZ2QxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfdGVybmFyeWxvZ2ljX2VwaTMyKFUsIEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3B0ZXJubG9nZDEyOF9tYXNreigoX192NHNpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfdGVybmFyeWxvZ2ljX2VwaTMyKEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3B0ZXJubG9nZDI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfdGVybmFyeWxvZ2ljX2VwaTMyKEEsIFUsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3B0ZXJubG9nZDI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel90ZXJuYXJ5bG9naWNfZXBpMzIoVSwgQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHRlcm5sb2dkMjU2X21hc2t6KChfX3Y4c2kpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV90ZXJuYXJ5bG9naWNfZXBpNjQoQSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHRlcm5sb2dxMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza190ZXJuYXJ5bG9naWNfZXBpNjQoQSwgVSwgQiwgQywgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHRlcm5sb2dxMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQyksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3Rlcm5hcnlsb2dpY19lcGk2NChVLCBBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wdGVybmxvZ3ExMjhfbWFza3ooKF9fdjJkaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3Rlcm5hcnlsb2dpY19lcGk2NChBLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wdGVybmxvZ3EyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3Rlcm5hcnlsb2dpY19lcGk2NChBLCBVLCBCLCBDLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wdGVybmxvZ3EyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShDKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfdGVybmFyeWxvZ2ljX2VwaTY0KFUsIEEsIEIsIEMsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3B0ZXJubG9ncTI1Nl9tYXNreigoX192NGRpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKEMpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworCisKKyNkZWZpbmUgX21tMjU2X3NodWZmbGVfZjMyeDQoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zaHVmX2YzMng0XzI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19zaHVmZmxlX2YzMng0KFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfc2h1Zl9mMzJ4NF8yNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfc2h1ZmZsZV9mMzJ4NChVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NodWZfZjMyeDRfMjU2X21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfc2h1ZmZsZV9mNjR4MihBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zaHVmX2Y2NHgyXzI1Nl9tYXNrKChfX3Y0ZGYpKF9fbTI1NmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19zaHVmZmxlX2Y2NHgyKFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NodWZfZjY0eDJfMjU2X21hc2soKF9fdjRkZikoX19tMjU2ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9zaHVmZmxlX2Y2NHgyKFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NodWZfZjY0eDJfMjU2X21hc2soKF9fdjRkZikoX19tMjU2ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfc2h1ZmZsZV9pMzJ4NChBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zaHVmX2kzMng0XzI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19zaHVmZmxlX2kzMng0KFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NodWZfaTMyeDRfMjU2X21hc2soKF9fdjhzaSkoX19tMjU2aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9zaHVmZmxlX2kzMng0KFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NodWZfaTMyeDRfMjU2X21hc2soKF9fdjhzaSkoX19tMjU2aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfc2h1ZmZsZV9pNjR4MihBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zaHVmX2k2NHgyXzI1Nl9tYXNrKChfX3Y0ZGkpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19zaHVmZmxlX2k2NHgyKFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NodWZfaTY0eDJfMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9zaHVmZmxlX2k2NHgyKFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NodWZfaTY0eDJfMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19zaHVmZmxlX3BkKFcsIFUsIEEsIEIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2h1ZmZsZV9wZCgoQSksIChCKSwgKE0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVykpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9zaHVmZmxlX3BkKFUsIEEsIEIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2h1ZmZsZV9wZCgoQSksIChCKSwgKE0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19zaHVmZmxlX3BkKFcsIFUsIEEsIEIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8yNTYoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2h1ZmZsZV9wZCgoQSksIChCKSwgKE0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoVykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9zaHVmZmxlX3BkKFUsIEEsIEIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zZWxlY3RwZF8yNTYoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2h1ZmZsZV9wZCgoQSksIChCKSwgKE0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19wZCgpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19zaHVmZmxlX3BzKFcsIFUsIEEsIEIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzEyOCgoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NodWZmbGVfcHMoKEEpLCAoQiksIChNKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShXKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3NodWZmbGVfcHMoVSwgQSwgQiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2h1ZmZsZV9wcygoQSksIChCKSwgKE0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3NodWZmbGVfcHMoVywgVSwgQSwgQiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2h1ZmZsZV9wcygoQSksIChCKSwgKE0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKFcpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfc2h1ZmZsZV9wcyhVLCBBLCBCLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zaHVmZmxlX3BzKChBKSwgKEIpLCAoTSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcnNxcnQxNF9wZCAoX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcnNxcnQxNHBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcnNxcnQxNF9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcnNxcnQxNHBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcnNxcnQxNF9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9yc3FydDE0cGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3JzcXJ0MTRfcGQgKF9fbTI1NmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3JzcXJ0MTRfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3JzcXJ0MTRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfcnNxcnQxNHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3JzcXJ0MTRfcHMgKF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9yc3FydDE0cHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3JzcXJ0MTRfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3JzcXJ0MTRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9yc3FydDE0X3BzIChfX20yNTYgX19BKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfcnNxcnQxNHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19yc3FydDE0X3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9yc3FydDE0cHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9yc3FydDE0X3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9yc3FydDE0cHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpCisgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0X2YzMng0IChfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjMyeDRfMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl91bmRlZmluZWRfcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Jyb2FkY2FzdF9mMzJ4NCAoX19tMjU2IF9fTywgX19tbWFzazggX19NLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjMyeDRfMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfX08sCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Jyb2FkY2FzdF9mMzJ4NCAoX19tbWFzazggX19NLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0ZjMyeDRfMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdF9pMzJ4NCAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTMyeDRfMjU2X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfdW5kZWZpbmVkX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Jyb2FkY2FzdF9pMzJ4NCAoX19tMjU2aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfYnJvYWRjYXN0aTMyeDRfMjU2X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgICAgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Jyb2FkY2FzdF9pMzJ4NCAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3RpMzJ4NF8yNTZfbWFzayAoKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Jyb2FkY2FzdHNkX3BkIChfX20yNTZkIF9fTywgX19tbWFzazggX19NLCBfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX21tMjU2X2Jyb2FkY2FzdHNkX3BkKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19PKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9icm9hZGNhc3RzZF9wZCAoX19tbWFzazggX19NLCBfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX21tMjU2X2Jyb2FkY2FzdHNkX3BkKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX21tMjU2X3NldHplcm9fcGQoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2Jyb2FkY2FzdHNzX3BzIChfX20xMjggX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzEyOChfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fYnJvYWRjYXN0c3NfcHMoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fTyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9icm9hZGNhc3Rzc19wcyAoX19tbWFzazggX19NLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX2Jyb2FkY2FzdHNzX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYnJvYWRjYXN0c3NfcHMgKF9fbTI1NiBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KF9fTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9icm9hZGNhc3Rzc19wcyhfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19PKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Jyb2FkY2FzdHNzX3BzIChfX21tYXNrOCBfX00sIF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfbW0yNTZfYnJvYWRjYXN0c3NfcHMoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYnJvYWRjYXN0ZF9lcGkzMiAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOChfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKSBfbW1fYnJvYWRjYXN0ZF9lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19PKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9icm9hZGNhc3RkX2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX21tX2Jyb2FkY2FzdGRfZXBpMzIoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYnJvYWRjYXN0ZF9lcGkzMiAoX19tMjU2aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfYnJvYWRjYXN0ZF9lcGkzMihfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19PKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9icm9hZGNhc3RkX2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX21tMjU2X2Jyb2FkY2FzdGRfZXBpMzIoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYnJvYWRjYXN0cV9lcGk2NCAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzEyOChfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fYnJvYWRjYXN0cV9lcGk2NChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19PKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9icm9hZGNhc3RxX2VwaTY0IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8xMjgoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX2Jyb2FkY2FzdHFfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYnJvYWRjYXN0cV9lcGk2NCAoX19tMjU2aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NihfX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfYnJvYWRjYXN0cV9lcGk2NChfX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19PKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9icm9hZGNhc3RxX2VwaTY0IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0cV8yNTYoX19NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X2Jyb2FkY2FzdHFfZXBpNjQoX19BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNlcGkzMl9lcGk4IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c2RiMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0c2VwaTMyX2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZGIxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRzZXBpMzJfZXBpOCAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c2RiMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRzZXBpMzJfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZGIxMjhtZW1fbWFzayAoKF9fdjE2cWkgKikgX19QLCAoX192NHNpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0c2VwaTMyX2VwaTggKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZGIyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRzZXBpMzJfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNkYjI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHNlcGkzMl9lcGk4IChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZGIyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHNlcGkzMl9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnNkYjI1Nm1lbV9tYXNrICgoX192MTZxaSAqKSBfX1AsIChfX3Y4c2kpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzZXBpMzJfZXBpMTYgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZHcxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0c2VwaTMyX2VwaTE2IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c2R3MTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpX19PLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRzZXBpMzJfZXBpMTYgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNkdzEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRzZXBpMzJfc3RvcmV1X2VwaTE2ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92c2R3MTI4bWVtX21hc2sgKChfX3Y4aGkgKikgX19QLCAoX192NHNpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0c2VwaTMyX2VwaTE2IChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c2R3MjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRzZXBpMzJfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZHcyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHNlcGkzMl9lcGkxNiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c2R3MjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHNlcGkzMl9zdG9yZXVfZXBpMTYgKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZzZHcyNTZtZW1fbWFzayAoKF9fdjhoaSAqKSBfX1AsIChfX3Y4c2kpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzZXBpNjRfZXBpOCAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNxYjEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHNlcGk2NF9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3FiMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0c2VwaTY0X2VwaTggKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNxYjEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0c2VwaTY0X3N0b3JldV9lcGk4ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92c3FiMTI4bWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjJkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHNlcGk2NF9lcGk4IChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3FiMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0c2VwaTY0X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWIyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRzZXBpNjRfZXBpOCAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3FiMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRzZXBpNjRfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWIyNTZtZW1fbWFzayAoKF9fdjE2cWkgKikgX19QLCAoX192NGRpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2VwaTY0X2VwaTMyIChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3FkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRzZXBpNjRfZXBpMzIgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWQxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHNlcGk2NF9lcGkzMiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3FkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2kpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHNlcGk2NF9zdG9yZXVfZXBpMzIgKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWQxMjhtZW1fbWFzayAoKF9fdjRzaSAqKSBfX1AsIChfX3YyZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRzZXBpNjRfZXBpMzIgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHNlcGk2NF9lcGkzMiAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNxZDI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNpKV9fTywKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0c2VwaTY0X2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcWQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0c2VwaTY0X3N0b3JldV9lcGkzMiAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnNxZDI1Nm1lbV9tYXNrICgoX192NHNpICopIF9fUCwgKF9fdjRkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNlcGk2NF9lcGkxNiAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNxdzEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0c2VwaTY0X2VwaTE2IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3F3MTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRzZXBpNjRfZXBpMTYgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnNxdzEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRzZXBpNjRfc3RvcmV1X2VwaTE2ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92c3F3MTI4bWVtX21hc2sgKChfX3Y4aGkgKikgX19QLCAoX192MmRpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0c2VwaTY0X2VwaTE2IChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3F3MjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRzZXBpNjRfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcXcyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHNlcGk2NF9lcGkxNiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92c3F3MjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHNlcGk2NF9zdG9yZXVfZXBpMTYgKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZzcXcyNTZtZW1fbWFzayAoKF9fdjhoaSAqKSBfX1AsIChfX3Y0ZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR1c2VwaTMyX2VwaTggKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2RiMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnR1c2VwaTMyX2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2RiMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX19PLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0dXNlcGkzMl9lcGk4IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2RiMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHVzZXBpMzJfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2RiMTI4bWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjRzaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHVzZXBpMzJfZXBpOCAoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzZGIyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHVzZXBpMzJfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzZGIyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnR1c2VwaTMyX2VwaTggKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzZGIyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0dXNlcGkzMl9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnVzZGIyNTZtZW1fbWFzayAoKF9fdjE2cWkqKSBfX1AsIChfX3Y4c2kpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR1c2VwaTMyX2VwaTE2IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNkdzEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnR1c2VwaTMyX2VwaTE2IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNkdzEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhoaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHVzZXBpMzJfZXBpMTYgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzZHcxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnR1c2VwaTMyX3N0b3JldV9lcGkxNiAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnVzZHcxMjhtZW1fbWFzayAoKF9fdjhoaSAqKSBfX1AsIChfX3Y0c2kpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnR1c2VwaTMyX2VwaTE2IChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNkdzI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0dXNlcGkzMl9lcGkxNiAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzZHcyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnR1c2VwaTMyX2VwaTE2IChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2R3MjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0dXNlcGkzMl9zdG9yZXVfZXBpMTYgKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c2R3MjU2bWVtX21hc2sgKChfX3Y4aGkgKikgX19QLCAoX192OHNpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dXNlcGk2NF9lcGk4IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxYjEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0dXNlcGk2NF9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxYjEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHVzZXBpNjRfZXBpOCAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxYjEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnR1c2VwaTY0X3N0b3JldV9lcGk4ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92dXNxYjEyOG1lbV9tYXNrICgoX192MTZxaSAqKSBfX1AsIChfX3YyZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnR1c2VwaTY0X2VwaTggKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FiMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnR1c2VwaTY0X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FiMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX19PLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0dXNlcGk2NF9lcGk4IChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FiMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHVzZXBpNjRfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FiMjU2bWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjRkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHVzZXBpNjRfZXBpMzIgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHVzZXBpNjRfZXBpMzIgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0dXNlcGk2NF9lcGkzMiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxZDEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHVzZXBpNjRfc3RvcmV1X2VwaTMyICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92dXNxZDEyOG1lbV9tYXNrICgoX192NHNpICopIF9fUCwgKF9fdjJkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHVzZXBpNjRfZXBpMzIgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FkMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHVzZXBpNjRfZXBpMzIgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3FkMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0dXNlcGk2NF9lcGkzMiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxZDI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHVzZXBpNjRfc3RvcmV1X2VwaTMyICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92dXNxZDI1Nm1lbV9tYXNrICgoX192NHNpICopIF9fUCwgKF9fdjRkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHVzZXBpNjRfZXBpMTYgKF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3F3MTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGhpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHVzZXBpNjRfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3F3MTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGhpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0dXNlcGk2NF9lcGkxNiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxdzEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHVzZXBpNjRfc3RvcmV1X2VwaTE2ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92dXNxdzEyOG1lbV9tYXNrICgoX192OGhpICopIF9fUCwgKF9fdjJkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHVzZXBpNjRfZXBpMTYgKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3F3MjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGhpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHVzZXBpNjRfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3F3MjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGhpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0dXNlcGk2NF9lcGkxNiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXNxdzI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHVzZXBpNjRfc3RvcmV1X2VwaTE2ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcG1vdnVzcXcyNTZtZW1fbWFzayAoKF9fdjhoaSAqKSBfX1AsIChfX3Y0ZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcGkzMl9lcGk4IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92ZGIxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZxaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpMzJfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdmRiMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcGkzMl9lcGk4IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZkYjEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnFpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwaTMyX3N0b3JldV9lcGk4ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92ZGIxMjhtZW1fbWFzayAoKF9fdjE2cWkgKikgX19QLCAoX192NHNpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXBpMzJfZXBpOCAoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdmRiMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwaTMyX2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZkYjI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpMzJfZXBpOCAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92ZGIyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGkzMl9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdmRiMjU2bWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjhzaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaTMyX2VwaTE2IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92ZHcxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcGkzMl9lcGkxNiAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdmR3MTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhoaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTMyX2VwaTE2IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZkdzEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpMzJfc3RvcmV1X2VwaTE2ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92ZHcxMjhtZW1fbWFzayAoKF9fdjhoaSAqKSBfX1AsIChfX3Y0c2kpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGkzMl9lcGkxNiAoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdmR3MjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGkzMl9lcGkxNiAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdmR3MjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhoaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dGVwaTMyX2VwaTE2IChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZkdzI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXBpMzJfc3RvcmV1X2VwaTE2ICh2b2lkICogIF9fUCwgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdmR3MjU2bWVtX21hc2sgKChfX3Y4aGkgKikgX19QLCAoX192OHNpKSBfX0EsIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXBpNjRfZXBpOCAoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnFiMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcGk2NF9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92cWIxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZxaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTY0X2VwaTggKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnFiMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpNjRfc3RvcmV1X2VwaTggKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZxYjEyOG1lbV9tYXNrICgoX192MTZxaSAqKSBfX1AsIChfX3YyZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGk2NF9lcGk4IChfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92cWIyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwaTY0X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxYjI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpNjRfZXBpOCAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92cWIyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGk2NF9zdG9yZXVfZXBpOCAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnFiMjU2bWVtX21hc2sgKChfX3YxNnFpICopIF9fUCwgKF9fdjRkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaTY0X2VwaTMyIChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92cWQxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcGk2NF9lcGkzMiAoX19tMTI4aSBfX08sIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnFkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19PLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTY0X2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxZDEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpNjRfc3RvcmV1X2VwaTMyICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92cWQxMjhtZW1fbWFzayAoKF9fdjRzaSAqKSBfX1AsIChfX3YyZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGk2NF9lcGkzMiAoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnFkMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX21tX3VuZGVmaW5lZF9zaTEyOCgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwaTY0X2VwaTMyIChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92cWQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKSBfX08sIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpNjRfZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnFkMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGk2NF9zdG9yZXVfZXBpMzIgKHZvaWQgKiBfX1AsIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Btb3ZxZDI1Nm1lbV9tYXNrICgoX192NHNpICopIF9fUCwgKF9fdjRkaSkgX19BLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaTY0X2VwaTE2IChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92cXcxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192OGhpKSBfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpNjRfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxdzEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4aGkpX19PLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTY0X2VwaTE2IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxdzEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpNjRfc3RvcmV1X2VwaTE2ICh2b2lkICogX19QLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9wbW92cXcxMjhtZW1fbWFzayAoKF9fdjhoaSAqKSBfX1AsIChfX3YyZGkpIF9fQSwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGk2NF9lcGkxNiAoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnF3MjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXBpNjRfZXBpMTYgKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3ZxdzI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4aGkpIF9fTywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRlcGk2NF9lcGkxNiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92cXcyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwaTY0X3N0b3JldV9lcGkxNiAodm9pZCAqIF9fUCwgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfcG1vdnF3MjU2bWVtX21hc2sgKChfX3Y4aGkgKikgX19QLCAoX192NGRpKSBfX0EsIF9fTSk7Cit9CisKKyNkZWZpbmUgX21tMjU2X2V4dHJhY3RmMzJ4NF9wcyhBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2YpKF9fbTI1NikoQSksICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAxKSA/IDQgOiAwLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDEpID8gNSA6IDEsICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMSkgPyA2IDogMiwgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAxKSA/IDcgOiAzKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19leHRyYWN0ZjMyeDRfcHMoVywgVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbTI1Nl9leHRyYWN0ZjMyeDRfcHMoKEEpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoVykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9leHRyYWN0ZjMyeDRfcHMoVSwgQSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbTI1Nl9leHRyYWN0ZjMyeDRfcHMoKEEpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfZXh0cmFjdGkzMng0X2VwaTMyKEEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2kpKF9fbTI1NikoQSksICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3VuZGVmaW5lZF9zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDEpID8gNCA6IDAsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDEpID8gNSA6IDEsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDEpID8gNiA6IDIsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDEpID8gNyA6IDMpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2V4dHJhY3RpMzJ4NF9lcGkzMihXLCBVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tMjU2X2V4dHJhY3RpMzJ4NF9lcGkzMigoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShXKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X2V4dHJhY3RpMzJ4NF9lcGkzMihVLCBBLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tMjU2X2V4dHJhY3RpMzJ4NF9lcGkzMigoQSksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pbnNlcnRmMzJ4NChBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2YpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfY2FzdHBzMTI4X3BzMjU2KChfX20xMjgpKEIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAgMCA6ICA4LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/ICAxIDogIDksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gIDIgOiAxMCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAgMyA6IDExLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/ICA4IDogIDQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gIDkgOiAgNSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAxMCA6ICA2LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/IDExIDogIDcpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2luc2VydGYzMng0KFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMjU2KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9pbnNlcnRmMzJ4NCgoQSksIChCKSwgKGltbSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoVykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9pbnNlcnRmMzJ4NChVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfaW5zZXJ0ZjMyeDQoKEEpLCAoQiksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2luc2VydGkzMng0KEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2kpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9jYXN0c2kxMjhfc2kyNTYoKF9fbTEyOGkpKEIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/ICAwIDogIDgsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAgMSA6ICA5LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gIDIgOiAxMCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/ICAzIDogMTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAgOCA6ICA0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDEpID8gIDkgOiAgNSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgxKSA/IDEwIDogIDYsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MSkgPyAxMSA6ICA3KTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pbnNlcnRpMzJ4NChXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfaW5zZXJ0aTMyeDQoKEEpLCAoQiksIChpbW0pKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKFcpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfaW5zZXJ0aTMyeDQoVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8yNTYoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X2luc2VydGkzMng0KChBKSwgKEIpLCAoaW1tKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOyB9KQorCisjZGVmaW5lIF9tbV9nZXRtYW50X3BkKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18oe1wKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZ2V0bWFudHBkMTI4X21hc2soKF9fdjJkZikoX19tMTI4ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8MikgfCAoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2dldG1hbnRfcGQoVywgVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nZXRtYW50cGQxMjhfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2dldG1hbnRfcGQoVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nZXRtYW50cGQxMjhfbWFzaygoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9nZXRtYW50X3BkKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9nZXRtYW50cGQyNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfZ2V0bWFudF9wZChXLCBVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfZ2V0bWFudHBkMjU2X21hc2soKF9fdjRkZikoX19tMjU2ZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8MikgfCAoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9nZXRtYW50X3BkKFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9nZXRtYW50cGQyNTZfbWFzaygoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbV9nZXRtYW50X3BzKEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dldG1hbnRwczEyOF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2dldG1hbnRfcHMoVywgVSwgQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZ2V0bWFudHBzMTI4X21hc2soKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoQyk8PDIpIHwgKEIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfZ2V0bWFudF9wcyhVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9nZXRtYW50cHMxMjhfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8MikgfCAoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2dldG1hbnRfcHMoQSwgQiwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfZ2V0bWFudHBzMjU2X21hc2soKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCgoQyk8PDIpIHwgKEIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfZ2V0bWFudF9wcyhXLCBVLCBBLCBCLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9nZXRtYW50cHMyNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKChDKTw8MikgfCAoQikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9nZXRtYW50X3BzKFUsIEEsIEIsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2dldG1hbnRwczI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgoKEMpPDwyKSB8IChCKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbW1hc2tfaTY0Z2F0aGVyX3BkKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nYXRoZXIzZGl2MmRmKChfX3YyZGYpKF9fbTEyOGQpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbW1hc2tfaTY0Z2F0aGVyX2VwaTY0KHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXIzZGl2MmRpKChfX3YyZGkpKF9fbTEyOGkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbW1hc2tfaTY0Z2F0aGVyX3BkKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9nYXRoZXIzZGl2NGRmKChfX3Y0ZGYpKF9fbTI1NmQpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbW1hc2tfaTY0Z2F0aGVyX2VwaTY0KHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9nYXRoZXIzZGl2NGRpKChfX3Y0ZGkpKF9fbTI1NmkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbW1hc2tfaTY0Z2F0aGVyX3BzKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dhdGhlcjNkaXY0c2YoKF9fdjRzZikoX19tMTI4KSh2MV9vbGQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbW1hc2tfaTY0Z2F0aGVyX2VwaTMyKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXIzZGl2NHNpKChfX3Y0c2kpKF9fbTEyOGkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbW1hc2tfaTY0Z2F0aGVyX3BzKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dhdGhlcjNkaXY4c2YoKF9fdjRzZikoX19tMTI4KSh2MV9vbGQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbW1hc2tfaTY0Z2F0aGVyX2VwaTMyKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXIzZGl2OHNpKChfX3Y0c2kpKF9fbTEyOGkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbW1hc2tfaTMyZ2F0aGVyX3BkKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nYXRoZXIzc2l2MmRmKChfX3YyZGYpKF9fbTEyOGQpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbW1hc2tfaTMyZ2F0aGVyX2VwaTY0KHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXIzc2l2MmRpKChfX3YyZGkpKF9fbTEyOGkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbW1hc2tfaTMyZ2F0aGVyX3BkKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9nYXRoZXIzc2l2NGRmKChfX3Y0ZGYpKF9fbTI1NmQpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbW1hc2tfaTMyZ2F0aGVyX2VwaTY0KHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9nYXRoZXIzc2l2NGRpKChfX3Y0ZGkpKF9fbTI1NmkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbW1hc2tfaTMyZ2F0aGVyX3BzKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2dhdGhlcjNzaXY0c2YoKF9fdjRzZikoX19tMTI4KSh2MV9vbGQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW1fbW1hc2tfaTMyZ2F0aGVyX2VwaTMyKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXIzc2l2NHNpKChfX3Y0c2kpKF9fbTEyOGkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbW1hc2tfaTMyZ2F0aGVyX3BzKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2dhdGhlcjNzaXY4c2YoKF9fdjhzZikoX19tMjU2KSh2MV9vbGQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikoYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGluZGV4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbW1hc2tfaTMyZ2F0aGVyX2VwaTMyKHYxX29sZCwgbWFzaywgaW5kZXgsIGFkZHIsIHNjYWxlKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9nYXRoZXIzc2l2OHNpKChfX3Y4c2kpKF9fbTI1NmkpKHYxX29sZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoaW5kZXgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShtYXNrKSwgKGludCkoc2NhbGUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfcGVybXV0ZXhfcGQoWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0ZGYpKF9fbTI1NmQpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQykgPj4gMCkgJiAweDMsICgoQykgPj4gMikgJiAweDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDKSA+PiA0KSAmIDB4MywgKChDKSA+PiA2KSAmIDB4Myk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfcGVybXV0ZXhfcGQoVywgVSwgWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9wZXJtdXRleF9wZCgoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKFcpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfcGVybXV0ZXhfcGQoVSwgWCwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9wZXJtdXRleF9wZCgoWCksIChDKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3NldHplcm9fcGQoKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3Blcm11dGV4X2VwaTY0KFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRpKShfX20yNTZpKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEMpID4+IDApICYgMHgzLCAoKEMpID4+IDIpICYgMHgzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQykgPj4gNCkgJiAweDMsICgoQykgPj4gNikgJiAweDMpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3Blcm11dGV4X2VwaTY0KFcsIFUsIFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3Blcm11dGV4X2VwaTY0KChYKSwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShXKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X3Blcm11dGV4X2VwaTY0KFUsIFgsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RxXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3Blcm11dGV4X2VwaTY0KChYKSwgKEMpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Blcm11dGV4dmFyX3BkIChfX20yNTZpIF9fWCwgX19tMjU2ZCBfX1kpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfcGVybXZhcmRmMjU2X21hc2sgKChfX3Y0ZGYpIF9fWSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19YLAorICAgICAgICAgICAgICAgICAoX192NGRmKSBfbW0yNTZfdW5kZWZpbmVkX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3Blcm11dGV4dmFyX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fWCwKKyAgICAgICAgICBfX20yNTZkIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyZGYyNTZfbWFzayAoKF9fdjRkZikgX19ZLAorICAgICAgICAgICAgICAgICAoX192NGRpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3Blcm11dGV4dmFyX3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19YLCBfX20yNTZkIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyZGYyNTZfbWFzayAoKF9fdjRkZikgX19ZLAorICAgICAgICAgICAgICAgICAoX192NGRpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcGVybXV0ZXh2YXJfZXBpNjQgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJkaTI1Nl9tYXNrICgoX192NGRpKSBfX1ksCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWCwKKyAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9wZXJtdXRleHZhcl9lcGk2NCAoIF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyZGkyNTZfbWFzayAoKF9fdjRkaSkgX19ZLAorICAgICAgICAgICAgICAgICAoX192NGRpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl91bmRlZmluZWRfc2kyNTYgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfcGVybXV0ZXh2YXJfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19YLAorICAgICAgICAgICAgIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJkaTI1Nl9tYXNrICgoX192NGRpKSBfX1ksCisgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fWCwKKyAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wZXJtdXRleHZhcl9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fWCwKKyAgICAgICAgICBfX20yNTYgX19ZKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfcGVybXZhcnNmMjU2X21hc2sgKChfX3Y4c2YpIF9fWSwKKyAgICAgICAgICAgICAgICAoX192OHNpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3Blcm11dGV4dmFyX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19YLCBfX20yNTYgX19ZKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfcGVybXZhcnNmMjU2X21hc2sgKChfX3Y4c2YpIF9fWSwKKyAgICAgICAgICAgICAgICAoX192OHNpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGVybXV0ZXh2YXJfcHMgKF9fbTI1NmkgX19YLCBfX20yNTYgX19ZKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfcGVybXZhcnNmMjU2X21hc2sgKChfX3Y4c2YpIF9fWSwKKyAgICAgICAgICAgICAgICAoX192OHNpKSBfX1gsCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3VuZGVmaW5lZF9zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9wZXJtdXRleHZhcl9lcGkzMiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGVybXZhcnNpMjU2X21hc2sgKChfX3Y4c2kpIF9fWSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19YLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3Blcm11dGV4dmFyX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19NLCBfX20yNTZpIF9fWCwKKyAgICAgICAgICAgICBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyc2kyNTZfbWFzayAoKF9fdjhzaSkgX19ZLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Blcm11dGV4dmFyX2VwaTMyIChfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGVybXZhcnNpMjU2X21hc2sgKChfX3Y4c2kpIF9fWSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19YLAorICAgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfdW5kZWZpbmVkX3NpMjU2KCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCisjZGVmaW5lIF9tbV9hbGlnbnJfZXBpMzIoQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfYWxpZ25kMTI4X21hc2soKF9fdjRzaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19hbGlnbnJfZXBpMzIoVywgVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfYWxpZ25kMTI4X21hc2soKF9fdjRzaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoVyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2FsaWducl9lcGkzMihVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9hbGlnbmQxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShVKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2FsaWducl9lcGkzMihBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9hbGlnbmQyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl91bmRlZmluZWRfc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2FsaWducl9lcGkzMihXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9hbGlnbmQyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfYWxpZ25yX2VwaTMyKFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2FsaWduZDI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fYWxpZ25yX2VwaTY0KEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2FsaWducTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldHplcm9fZGkoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2FsaWducl9lcGk2NChXLCBVLCBBLCBCLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9hbGlnbnExMjhfbWFzaygoX192MmRpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShCKSwgKGludCkoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfYWxpZ25yX2VwaTY0KFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2FsaWducTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldHplcm9fZGkoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfYWxpZ25yX2VwaTY0KEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2FsaWducTI1Nl9tYXNrKChfX3Y0ZGkpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfYWxpZ25yX2VwaTY0KFcsIFUsIEEsIEIsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2FsaWducTI1Nl9tYXNrKChfX3Y0ZGkpKF9fbTI1NmkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKEIpLCAoaW50KShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKFcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9hbGlnbnJfZXBpNjQoVSwgQSwgQiwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfYWxpZ25xMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoQiksIChpbnQpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoVSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tb3ZlaGR1cF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX21vdmVoZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tb3ZlaGR1cF9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX21vdmVoZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tb3ZlaGR1cF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X21vdmVoZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tb3ZlaGR1cF9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X21vdmVoZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tb3ZlbGR1cF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX21vdmVsZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tb3ZlbGR1cF9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18xMjgoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX21vdmVsZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tb3ZlbGR1cF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X21vdmVsZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tb3ZlbGR1cF9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zZWxlY3Rwc18yNTYoKF9fbW1hc2s4KV9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X21vdmVsZHVwX3BzKF9fQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKV9tbTI1Nl9zZXR6ZXJvX3BzKCkpOworfQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3NodWZmbGVfZXBpMzIoVywgVSwgQSwgSSkgX19leHRlbnNpb25fXyh7XAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzI1NigoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpX21tMjU2X3NodWZmbGVfZXBpMzIoKEEpLCAoSSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKFcpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfc2h1ZmZsZV9lcGkzMihVLCBBLCBJKSBfX2V4dGVuc2lvbl9fKHtcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3NlbGVjdGRfMjU2KChfX21tYXNrOCkoVSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2h1ZmZsZV9lcGkzMigoQSksIChJKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19zaHVmZmxlX2VwaTMyKFcsIFUsIEEsIEkpIF9fZXh0ZW5zaW9uX18oe1wKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2VsZWN0ZF8xMjgoKF9fbW1hc2s4KShVKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zaHVmZmxlX2VwaTMyKChBKSwgKEkpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShXKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3NodWZmbGVfZXBpMzIoVSwgQSwgSSkgX19leHRlbnNpb25fXyh7XAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zZWxlY3RkXzEyOCgoX19tbWFzazgpKFUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NodWZmbGVfZXBpMzIoKEEpLCAoSSkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpX21tX3NldHplcm9fc2kxMjgoKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tb3ZfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzEyOCAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgIChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkZikgX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tb3ZfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMTI4ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCAoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tb3ZfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHBkXzI1NiAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkZikgX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tb3ZfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfc2VsZWN0cGRfMjU2ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAoX192NGRmKSBfbW0yNTZfc2V0emVyb19wZCAoKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21vdl9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzZikgX19XKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21vdl9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc2VsZWN0cHNfMTI4ICgoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMgKCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tb3ZfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NiAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgKF9fdjhzZikgX19BLAorICAgICAgICAgICAgIChfX3Y4c2YpIF9fVyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tb3ZfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3NlbGVjdHBzXzI1NiAoKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgKF9fdjhzZikgX19BLAorICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzICgpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0cGhfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Y3Z0cGgycHNfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRwaF9wcyAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZjdnRwaDJwc19tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHBoX3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmN2dHBoMnBzMjU2X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0cGhfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Y3Z0cGgycHMyNTZfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpCisgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHBzX3BoIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZjdnRwczJwaF9tYXNrICgoX192NHNmKSBfX0EsIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHBzX3BoIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdmN2dHBzMnBoX21hc2sgKChfX3Y0c2YpIF9fQSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCisjZGVmaW5lIF9tbV9tYXNrX2N2dF9yb3VuZHBzX3BoKFcsIFUsIEEsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92Y3Z0cHMycGhfbWFzaygoX192NHNmKShfX20xMjgpKEEpLCAoaW50KShJKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKShfX20xMjhpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfY3Z0X3JvdW5kcHNfcGgoVSwgQSwgSSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZjdnRwczJwaF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoQSksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NldHplcm9fc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRwc19waCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92Y3Z0cHMycGgyNTZfbWFzayAoKF9fdjhzZikgX19BLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHBzX3BoICggX19tbWFzazggX19VLCBfX20yNTYgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZjdnRwczJwaDI1Nl9tYXNrICgoX192OHNmKSBfX0EsIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisjZGVmaW5lIF9tbTI1Nl9tYXNrX2N2dF9yb3VuZHBzX3BoKFcsIFUsIEEsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92Y3Z0cHMycGgyNTZfbWFzaygoX192OHNmKShfX20yNTYpKEEpLCAoaW50KShJKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKShfX20xMjhpKShXKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza3pfY3Z0X3JvdW5kcHNfcGgoVSwgQSwgSSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZjdnRwczJwaDI1Nl9tYXNrKChfX3Y4c2YpKF9fbTI1NikoQSksIChpbnQpKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NldHplcm9fc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKFUpKTsgfSkKKworCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX0FWWDUxMlZMSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvYXZ4aW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZTg1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2F2eGludHJpbi5oCkBAIC0wLDAgKzEsMjkyOCBAQAorLyo9PT0tLS0tIGF2eGludHJpbi5oIC0gQVZYIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4aW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0FWWElOVFJJTl9ICisjZGVmaW5lIF9fQVZYSU5UUklOX0gKKwordHlwZWRlZiBkb3VibGUgX192NGRmIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDMyKSkpOwordHlwZWRlZiBmbG9hdCBfX3Y4c2YgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMzIpKSk7Cit0eXBlZGVmIGxvbmcgbG9uZyBfX3Y0ZGkgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMzIpKSk7Cit0eXBlZGVmIGludCBfX3Y4c2kgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMzIpKSk7Cit0eXBlZGVmIHNob3J0IF9fdjE2aGkgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMzIpKSk7Cit0eXBlZGVmIGNoYXIgX192MzJxaSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgzMikpKTsKKworLyogVW5zaWduZWQgdHlwZXMgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdjRkdSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgzMikpKTsKK3R5cGVkZWYgdW5zaWduZWQgaW50IF9fdjhzdSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgzMikpKTsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX192MTZodSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgzMikpKTsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3YzMnF1IF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDMyKSkpOworCisvKiBXZSBuZWVkIGFuIGV4cGxpY2l0bHkgc2lnbmVkIHZhcmlhbnQgZm9yIGNoYXIuIE5vdGUgdGhhdCB0aGlzIHNob3VsZG4ndAorICogYXBwZWFyIGluIHRoZSBpbnRlcmZhY2UgdGhvdWdoLiAqLwordHlwZWRlZiBzaWduZWQgY2hhciBfX3YzMnFzIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygzMikpKTsKKwordHlwZWRlZiBmbG9hdCBfX20yNTYgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMzIpKSk7Cit0eXBlZGVmIGRvdWJsZSBfX20yNTZkIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygzMikpKTsKK3R5cGVkZWYgbG9uZyBsb25nIF9fbTI1NmkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDMyKSkpOworCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImF2eCIpKSkKKworLyogQXJpdGhtZXRpYyAqLworLy8vIFxicmllZiBBZGRzIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzQgeCBkb3VibGVdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZBRERQRCAvIEFERFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgc3VtcyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hZGRfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpKChfX3Y0ZGYpX19hKyhfX3Y0ZGYpX19iKTsKK30KKworLy8vIFxicmllZiBBZGRzIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzggeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkFERFBTIC8gQUREUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBzdW1zIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWRkX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiAoX19tMjU2KSgoX192OHNmKV9fYSsoX192OHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzQgeCBkb3VibGVdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZTVUJQRCAvIFNVQlBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHN1YnRyYWhlbmQuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbgorLy8vICAgIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdWJfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpKChfX3Y0ZGYpX19hLShfX3Y0ZGYpX19iKTsKK30KKworLy8vIFxicmllZiBTdWJ0cmFjdHMgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbOCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWU1VCUFMgLyBTVUJQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgc3VidHJhaGVuZC4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4KKy8vLyAgICBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdWJfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTYpKChfX3Y4c2YpX19hLShfX3Y4c2YpX19iKTsKK30KKworLy8vIFxicmllZiBBZGRzIHRoZSBldmVuLWluZGV4ZWQgdmFsdWVzIGFuZCBzdWJ0cmFjdHMgdGhlIG9kZC1pbmRleGVkIHZhbHVlcyBvZgorLy8vICAgIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzQgeCBkb3VibGVdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZBRERTVUJQRCAvIEFERFNVQlBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGxlZnQgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHJpZ2h0IHNvdXJjZSBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGFsdGVybmF0aW5nIHN1bXMKKy8vLyAgICBhbmQgZGlmZmVyZW5jZXMgYmV0d2VlbiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWRkc3ViX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2FkZHN1YnBkMjU2KChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQWRkcyB0aGUgZXZlbi1pbmRleGVkIHZhbHVlcyBhbmQgc3VidHJhY3RzIHRoZSBvZGQtaW5kZXhlZCB2YWx1ZXMgb2YKKy8vLyAgICB0d28gMjU2LWJpdCB2ZWN0b3JzIG9mIFs4IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZBRERTVUJQUyAvIEFERFNVQlBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgbGVmdCBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSByaWdodCBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGFsdGVybmF0aW5nIHN1bXMgYW5kCisvLy8gICAgZGlmZmVyZW5jZXMgYmV0d2VlbiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hZGRzdWJfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfYWRkc3VicHMyNTYoKF9fdjhzZilfX2EsIChfX3Y4c2YpX19iKTsKK30KKworLy8vIFxicmllZiBEaXZpZGVzIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzQgeCBkb3VibGVdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZESVZQRCAvIERJVlBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGRpdmlkZW5kLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBkaXZpc29yLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHF1b3RpZW50cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9kaXZfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpKChfX3Y0ZGYpX19hLyhfX3Y0ZGYpX19iKTsKK30KKworLy8vIFxicmllZiBEaXZpZGVzIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzggeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkRJVlBTIC8gRElWUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBkaXZpZGVuZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBkaXZpc29yLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgcXVvdGllbnRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZGl2X3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiAoX19tMjU2KSgoX192OHNmKV9fYS8oX192OHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbNCB4IGRvdWJsZV0gYW5kIHJldHVybnMgdGhlIGdyZWF0ZXIKKy8vLyAgICBvZiBlYWNoIHBhaXIgb2YgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNQVhQRCAvIE1BWFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIG1heGltdW0gdmFsdWVzCisvLy8gICAgYmV0d2VlbiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWF4X3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX21heHBkMjU2KChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbOCB4IGZsb2F0XSBhbmQgcmV0dXJucyB0aGUgZ3JlYXRlcgorLy8vICAgIG9mIGVhY2ggcGFpciBvZiB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1BWFBTIC8gTUFYUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgbWF4aW11bSB2YWx1ZXMKKy8vLyAgICBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21heF9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9tYXhwczI1NigoX192OHNmKV9fYSwgKF9fdjhzZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzQgeCBkb3VibGVdIGFuZCByZXR1cm5zIHRoZSBsZXNzZXIKKy8vLyAgICBvZiBlYWNoIHBhaXIgb2YgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNSU5QRCAvIE1JTlBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIG1pbmltdW0gdmFsdWVzCisvLy8gICAgYmV0d2VlbiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWluX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX21pbnBkMjU2KChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbOCB4IGZsb2F0XSBhbmQgcmV0dXJucyB0aGUgbGVzc2VyCisvLy8gICAgb2YgZWFjaCBwYWlyIG9mIHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTUlOUFMgLyBNSU5QUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBtaW5pbXVtIHZhbHVlcworLy8vICAgIGJldHdlZW4gYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWluX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX21pbnBzMjU2KChfX3Y4c2YpX19hLCAoX192OHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgTXVsdGlwbGllcyB0d28gMjU2LWJpdCB2ZWN0b3JzIG9mIFs0IHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTVVMUEQgLyBNVUxQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBwcm9kdWN0cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tdWxfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpKChfX3Y0ZGYpX19hICogKF9fdjRkZilfX2IpOworfQorCisvLy8gXGJyaWVmIE11bHRpcGxpZXMgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbOCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTVVMUFMgLyBNVUxQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBwcm9kdWN0cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X211bF9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQoreworICByZXR1cm4gKF9fbTI1NikoKF9fdjhzZilfX2EgKiAoX192OHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ2FsY3VsYXRlcyB0aGUgc3F1YXJlIHJvb3RzIG9mIHRoZSB2YWx1ZXMgaW4gYSAyNTYtYml0IHZlY3RvciBvZgorLy8vICAgIFs0IHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWU1FSVFBEIC8gU1FSVFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHNxdWFyZSByb290cyBvZiB0aGUKKy8vLyAgICB2YWx1ZXMgaW4gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zcXJ0X3BkKF9fbTI1NmQgX19hKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfc3FydHBkMjU2KChfX3Y0ZGYpX19hKTsKK30KKworLy8vIFxicmllZiBDYWxjdWxhdGVzIHRoZSBzcXVhcmUgcm9vdHMgb2YgdGhlIHZhbHVlcyBpbiBhIDI1Ni1iaXQgdmVjdG9yIG9mCisvLy8gICAgWzggeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlNRUlRQUyAvIFNRUlRQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgc3F1YXJlIHJvb3RzIG9mIHRoZQorLy8vICAgIHZhbHVlcyBpbiB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3FydF9wcyhfX20yNTYgX19hKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9zcXJ0cHMyNTYoKF9fdjhzZilfX2EpOworfQorCisvLy8gXGJyaWVmIENhbGN1bGF0ZXMgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3RzIG9mIHRoZSB2YWx1ZXMgaW4gYSAyNTYtYml0CisvLy8gICAgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZSU1FSVFBTIC8gUlNRUlRQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgcmVjaXByb2NhbCBzcXVhcmUKKy8vLyAgICByb290cyBvZiB0aGUgdmFsdWVzIGluIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9yc3FydF9wcyhfX20yNTYgX19hKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9yc3FydHBzMjU2KChfX3Y4c2YpX19hKTsKK30KKworLy8vIFxicmllZiBDYWxjdWxhdGVzIHRoZSByZWNpcHJvY2FscyBvZiB0aGUgdmFsdWVzIGluIGEgMjU2LWJpdCB2ZWN0b3Igb2YKKy8vLyAgICBbOCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUkNQUFMgLyBSQ1BQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgcmVjaXByb2NhbHMgb2YgdGhlCisvLy8gICAgdmFsdWVzIGluIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9yY3BfcHMoX19tMjU2IF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfcmNwcHMyNTYoKF9fdjhzZilfX2EpOworfQorCisvLy8gXGJyaWVmIFJvdW5kcyB0aGUgdmFsdWVzIGluIGEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGFzIHNwZWNpZmllZAorLy8vICAgIGJ5IHRoZSBieXRlIG9wZXJhbmQuIFRoZSBzb3VyY2UgdmFsdWVzIGFyZSByb3VuZGVkIHRvIGludGVnZXIgdmFsdWVzIGFuZAorLy8vICAgIHJldHVybmVkIGFzIDY0LWJpdCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMjU2ZCBfbW0yNTZfcm91bmRfcGQoX19tMjU2ZCBWLCBjb25zdCBpbnQgTSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUk9VTkRQRCAvIFJPVU5EUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gVgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBNCisvLy8gICAgQW4gaW50ZWdlciB2YWx1ZSB0aGF0IHNwZWNpZmllcyB0aGUgcm91bmRpbmcgb3BlcmF0aW9uLgorLy8vICAgIEJpdHMgWzc6NF0gYXJlIHJlc2VydmVkLgorLy8vICAgIEJpdCBbM10gaXMgYSBwcmVjaXNpb24gZXhjZXB0aW9uIHZhbHVlOgorLy8vICAgIDA6IEEgbm9ybWFsIFBFIGV4Y2VwdGlvbiBpcyB1c2VkLgorLy8vICAgIDE6IFRoZSBQRSBmaWVsZCBpcyBub3QgdXBkYXRlZC4KKy8vLyAgICBCaXQgWzJdIGlzIHRoZSByb3VuZGluZyBjb250cm9sIHNvdXJjZToKKy8vLyAgICAwOiBVc2UgYml0cyBbMTowXSBvZiBNLgorLy8vICAgIDE6IFVzZSB0aGUgY3VycmVudCBNWENTUiBzZXR0aW5nLgorLy8vICAgIEJpdHMgWzE6MF0gY29udGFpbiB0aGUgcm91bmRpbmcgY29udHJvbCBkZWZpbml0aW9uOgorLy8vICAgIDAwOiBOZWFyZXN0LgorLy8vICAgIDAxOiBEb3dud2FyZCAodG93YXJkIG5lZ2F0aXZlIGluZmluaXR5KS4KKy8vLyAgICAxMDogVXB3YXJkICh0b3dhcmQgcG9zaXRpdmUgaW5maW5pdHkpLgorLy8vICAgIDExOiBUcnVuY2F0ZWQuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgcm91bmRlZCB2YWx1ZXMuCisjZGVmaW5lIF9tbTI1Nl9yb3VuZF9wZChWLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9yb3VuZHBkMjU2KChfX3Y0ZGYpKF9fbTI1NmQpKFYpLCAoTSkpOyB9KQorCisvLy8gXGJyaWVmIFJvdW5kcyB0aGUgdmFsdWVzIHN0b3JlZCBpbiBhIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGFzCisvLy8gICAgc3BlY2lmaWVkIGJ5IHRoZSBieXRlIG9wZXJhbmQuIFRoZSBzb3VyY2UgdmFsdWVzIGFyZSByb3VuZGVkIHRvIGludGVnZXIKKy8vLyAgICB2YWx1ZXMgYW5kIHJldHVybmVkIGFzIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMjU2IF9tbTI1Nl9yb3VuZF9wcyhfX20yNTYgViwgY29uc3QgaW50IE0pOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlJPVU5EUFMgLyBST1VORFBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIFYKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vIFxwYXJhbSBNCisvLy8gICAgQW4gaW50ZWdlciB2YWx1ZSB0aGF0IHNwZWNpZmllcyB0aGUgcm91bmRpbmcgb3BlcmF0aW9uLgorLy8vICAgIEJpdHMgWzc6NF0gYXJlIHJlc2VydmVkLgorLy8vICAgIEJpdCBbM10gaXMgYSBwcmVjaXNpb24gZXhjZXB0aW9uIHZhbHVlOgorLy8vICAgIDA6IEEgbm9ybWFsIFBFIGV4Y2VwdGlvbiBpcyB1c2VkLgorLy8vICAgIDE6IFRoZSBQRSBmaWVsZCBpcyBub3QgdXBkYXRlZC4KKy8vLyAgICBCaXQgWzJdIGlzIHRoZSByb3VuZGluZyBjb250cm9sIHNvdXJjZToKKy8vLyAgICAwOiBVc2UgYml0cyBbMTowXSBvZiBNLgorLy8vICAgIDE6IFVzZSB0aGUgY3VycmVudCBNWENTUiBzZXR0aW5nLgorLy8vICAgIEJpdHMgWzE6MF0gY29udGFpbiB0aGUgcm91bmRpbmcgY29udHJvbCBkZWZpbml0aW9uOgorLy8vICAgIDAwOiBOZWFyZXN0LgorLy8vICAgIDAxOiBEb3dud2FyZCAodG93YXJkIG5lZ2F0aXZlIGluZmluaXR5KS4KKy8vLyAgICAxMDogVXB3YXJkICh0b3dhcmQgcG9zaXRpdmUgaW5maW5pdHkpLgorLy8vICAgIDExOiBUcnVuY2F0ZWQuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSByb3VuZGVkIHZhbHVlcy4KKyNkZWZpbmUgX21tMjU2X3JvdW5kX3BzKFYsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3JvdW5kcHMyNTYoKF9fdjhzZikoX19tMjU2KShWKSwgKE0pKTsgfSkKKworLy8vIFxicmllZiBSb3VuZHMgdXAgdGhlIHZhbHVlcyBzdG9yZWQgaW4gYSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0uIFRoZQorLy8vICAgIHNvdXJjZSB2YWx1ZXMgYXJlIHJvdW5kZWQgdXAgdG8gaW50ZWdlciB2YWx1ZXMgYW5kIHJldHVybmVkIGFzIDY0LWJpdAorLy8vICAgIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20yNTZkIF9tbTI1Nl9jZWlsX3BkKF9fbTI1NmQgVik7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUk9VTkRQRCAvIFJPVU5EUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gVgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHJvdW5kZWQgdXAgdmFsdWVzLgorI2RlZmluZSBfbW0yNTZfY2VpbF9wZChWKSAgX21tMjU2X3JvdW5kX3BkKChWKSwgX01NX0ZST1VORF9DRUlMKQorCisvLy8gXGJyaWVmIFJvdW5kcyBkb3duIHRoZSB2YWx1ZXMgc3RvcmVkIGluIGEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vICAgIFRoZSBzb3VyY2UgdmFsdWVzIGFyZSByb3VuZGVkIGRvd24gdG8gaW50ZWdlciB2YWx1ZXMgYW5kIHJldHVybmVkIGFzCisvLy8gICAgNjQtYml0IGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20yNTZkIF9tbTI1Nl9mbG9vcl9wZChfX20yNTZkIFYpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlJPVU5EUEQgLyBST1VORFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIFYKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSByb3VuZGVkIGRvd24KKy8vLyAgICB2YWx1ZXMuCisjZGVmaW5lIF9tbTI1Nl9mbG9vcl9wZChWKSBfbW0yNTZfcm91bmRfcGQoKFYpLCBfTU1fRlJPVU5EX0ZMT09SKQorCisvLy8gXGJyaWVmIFJvdW5kcyB1cCB0aGUgdmFsdWVzIHN0b3JlZCBpbiBhIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLiBUaGUKKy8vLyAgICBzb3VyY2UgdmFsdWVzIGFyZSByb3VuZGVkIHVwIHRvIGludGVnZXIgdmFsdWVzIGFuZCByZXR1cm5lZCBhcworLy8vICAgIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMjU2IF9tbTI1Nl9jZWlsX3BzKF9fbTI1NiBWKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZST1VORFBTIC8gUk9VTkRQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBWCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHJvdW5kZWQgdXAgdmFsdWVzLgorI2RlZmluZSBfbW0yNTZfY2VpbF9wcyhWKSAgX21tMjU2X3JvdW5kX3BzKChWKSwgX01NX0ZST1VORF9DRUlMKQorCisvLy8gXGJyaWVmIFJvdW5kcyBkb3duIHRoZSB2YWx1ZXMgc3RvcmVkIGluIGEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0uIFRoZQorLy8vICAgIHNvdXJjZSB2YWx1ZXMgYXJlIHJvdW5kZWQgZG93biB0byBpbnRlZ2VyIHZhbHVlcyBhbmQgcmV0dXJuZWQgYXMKKy8vLyAgICBmbG9hdGluZy1wb2ludCB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTI1NiBfbW0yNTZfZmxvb3JfcHMoX19tMjU2IFYpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlJPVU5EUFMgLyBST1VORFBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIFYKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgcm91bmRlZCBkb3duIHZhbHVlcy4KKyNkZWZpbmUgX21tMjU2X2Zsb29yX3BzKFYpIF9tbTI1Nl9yb3VuZF9wcygoViksIF9NTV9GUk9VTkRfRkxPT1IpCisKKy8qIExvZ2ljYWwgKi8KKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiB0d28gMjU2LWJpdCB2ZWN0b3JzIG9mIFs0IHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQU5EUEQgLyBBTkRQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgQU5EIG9mIHRoZQorLy8vICAgIHZhbHVlcyBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hbmRfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpKChfX3Y0ZHUpX19hICYgKF9fdjRkdSlfX2IpOworfQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIGEgYml0d2lzZSBBTkQgb2YgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbOCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQU5EUFMgLyBBTkRQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgQU5EIG9mIHRoZQorLy8vICAgIHZhbHVlcyBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FuZF9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQoreworICByZXR1cm4gKF9fbTI1NikoKF9fdjhzdSlfX2EgJiAoX192OHN1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiB0d28gMjU2LWJpdCB2ZWN0b3JzIG9mIFs0IHggZG91YmxlXSwgdXNpbmcKKy8vLyAgICB0aGUgb25lJ3MgY29tcGxlbWVudCBvZiB0aGUgdmFsdWVzIGNvbnRhaW5lZCBpbiB0aGUgZmlyc3Qgc291cmNlIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkFORE5QRCAvIEFORE5QRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBsZWZ0IHNvdXJjZSBvcGVyYW5kLiBUaGUKKy8vLyAgICBvbmUncyBjb21wbGVtZW50IG9mIHRoaXMgdmFsdWUgaXMgdXNlZCBpbiB0aGUgYml0d2lzZSBBTkQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHJpZ2h0IHNvdXJjZSBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgQU5EIG9mIHRoZQorLy8vICAgIHZhbHVlcyBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgYW5kIHRoZSBvbmUncyBjb21wbGVtZW50IG9mIHRoZSBmaXJzdAorLy8vICAgIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hbmRub3RfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpKH4oX192NGR1KV9fYSAmIChfX3Y0ZHUpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhIGJpdHdpc2UgQU5EIG9mIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzggeCBmbG9hdF0sIHVzaW5nCisvLy8gICAgdGhlIG9uZSdzIGNvbXBsZW1lbnQgb2YgdGhlIHZhbHVlcyBjb250YWluZWQgaW4gdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZBTkROUFMgLyBBTkROUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBsZWZ0IHNvdXJjZSBvcGVyYW5kLiBUaGUKKy8vLyAgICBvbmUncyBjb21wbGVtZW50IG9mIHRoaXMgdmFsdWUgaXMgdXNlZCBpbiB0aGUgYml0d2lzZSBBTkQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgcmlnaHQgc291cmNlIG9wZXJhbmQuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBiaXR3aXNlIEFORCBvZiB0aGUKKy8vLyAgICB2YWx1ZXMgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGFuZCB0aGUgb25lJ3MgY29tcGxlbWVudCBvZiB0aGUgZmlyc3QKKy8vLyAgICBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hbmRub3RfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTYpKH4oX192OHN1KV9fYSAmIChfX3Y4c3UpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhIGJpdHdpc2UgT1Igb2YgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbNCB4IGRvdWJsZV0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk9SUEQgLyBPUlBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgYml0d2lzZSBPUiBvZiB0aGUKKy8vLyAgICB2YWx1ZXMgYmV0d2VlbiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfb3JfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpKChfX3Y0ZHUpX19hIHwgKF9fdjRkdSlfX2IpOworfQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIGEgYml0d2lzZSBPUiBvZiB0d28gMjU2LWJpdCB2ZWN0b3JzIG9mIFs4IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZPUlBTIC8gT1JQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgT1Igb2YgdGhlCisvLy8gICAgdmFsdWVzIGJldHdlZW4gYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfb3JfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTYpKChfX3Y4c3UpX19hIHwgKF9fdjhzdSlfX2IpOworfQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIGEgYml0d2lzZSBYT1Igb2YgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbNCB4IGRvdWJsZV0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlhPUlBEIC8gWE9SUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBiaXR3aXNlIFhPUiBvZiB0aGUKKy8vLyAgICB2YWx1ZXMgYmV0d2VlbiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfeG9yX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZkKSgoX192NGR1KV9fYSBeIChfX3Y0ZHUpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhIGJpdHdpc2UgWE9SIG9mIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzggeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlhPUlBTIC8gWE9SUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBiaXR3aXNlIFhPUiBvZiB0aGUKKy8vLyAgICB2YWx1ZXMgYmV0d2VlbiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl94b3JfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTYpKChfX3Y4c3UpX19hIF4gKF9fdjhzdSlfX2IpOworfQorCisvKiBIb3Jpem9udGFsIGFyaXRobWV0aWMgKi8KKy8vLyBcYnJpZWYgSG9yaXpvbnRhbGx5IGFkZHMgdGhlIGFkamFjZW50IHBhaXJzIG9mIHZhbHVlcyBjb250YWluZWQgaW4gdHdvCisvLy8gICAgMjU2LWJpdCB2ZWN0b3JzIG9mIFs0IHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWSEFERFBEIC8gSEFERFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gICAgVGhlIGhvcml6b250YWwgc3VtcyBvZiB0aGUgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiB0aGUgZXZlbi1pbmRleGVkCisvLy8gICAgZWxlbWVudHMgb2YgYSB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vICAgIFRoZSBob3Jpem9udGFsIHN1bXMgb2YgdGhlIHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4gdGhlIG9kZC1pbmRleGVkCisvLy8gICAgZWxlbWVudHMgb2YgYSB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGhvcml6b250YWwgc3VtcyBvZgorLy8vICAgIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9oYWRkX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2hhZGRwZDI1NigoX192NGRmKV9fYSwgKF9fdjRkZilfX2IpOworfQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBhZGRzIHRoZSBhZGphY2VudCBwYWlycyBvZiB2YWx1ZXMgY29udGFpbmVkIGluIHR3bworLy8vICAgIDI1Ni1iaXQgdmVjdG9ycyBvZiBbOCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWSEFERFBTIC8gSEFERFBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgaG9yaXpvbnRhbCBzdW1zIG9mIHRoZSB2YWx1ZXMgYXJlIHJldHVybmVkIGluIHRoZSBlbGVtZW50cyB3aXRoCisvLy8gICAgaW5kZXggMCwgMSwgNCwgNSBvZiBhIHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vICAgIFRoZSBob3Jpem9udGFsIHN1bXMgb2YgdGhlIHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4gdGhlIGVsZW1lbnRzIHdpdGgKKy8vLyAgICBpbmRleCAyLCAzLCA2LCA3IG9mIGEgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbCBzdW1zIG9mCisvLy8gICAgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfaGFkZF9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9oYWRkcHMyNTYoKF9fdjhzZilfX2EsIChfX3Y4c2YpX19iKTsKK30KKworLy8vIFxicmllZiBIb3Jpem9udGFsbHkgc3VidHJhY3RzIHRoZSBhZGphY2VudCBwYWlycyBvZiB2YWx1ZXMgY29udGFpbmVkIGluIHR3bworLy8vICAgIDI1Ni1iaXQgdmVjdG9ycyBvZiBbNCB4IGRvdWJsZV0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkhTVUJQRCAvIEhTVUJQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vICAgIFRoZSBob3Jpem9udGFsIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4gdGhlCisvLy8gICAgZXZlbi1pbmRleGVkIGVsZW1lbnRzIG9mIGEgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHJldHVybmVkIGluIHRoZQorLy8vICAgIG9kZC1pbmRleGVkIGVsZW1lbnRzIG9mIGEgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBob3Jpem9udGFsCisvLy8gICAgZGlmZmVyZW5jZXMgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2hzdWJfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfaHN1YnBkMjU2KChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgSG9yaXpvbnRhbGx5IHN1YnRyYWN0cyB0aGUgYWRqYWNlbnQgcGFpcnMgb2YgdmFsdWVzIGNvbnRhaW5lZCBpbiB0d28KKy8vLyAgICAyNTYtYml0IHZlY3RvcnMgb2YgWzggeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkhTVUJQUyAvIEhTVUJQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gICAgVGhlIGhvcml6b250YWwgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiB0aGUKKy8vLyAgICBlbGVtZW50cyB3aXRoIGluZGV4IDAsIDEsIDQsIDUgb2YgYSB2ZWN0b3Igb2YgWzggeCBmbG9hdF0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHJldHVybmVkIGluIHRoZQorLy8vICAgIGVsZW1lbnRzIHdpdGggaW5kZXggMiwgMywgNiwgNyBvZiBhIHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGhvcml6b250YWwKKy8vLyAgICBkaWZmZXJlbmNlcyBvZiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9oc3ViX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2hzdWJwczI1NigoX192OHNmKV9fYSwgKF9fdjhzZilfX2IpOworfQorCisvKiBWZWN0b3IgcGVybXV0YXRpb25zICovCisvLy8gXGJyaWVmIENvcGllcyB0aGUgdmFsdWVzIGluIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGFzIHNwZWNpZmllZAorLy8vICAgIGJ5IHRoZSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBFUk1JTFBEIC8gUEVSTUlMUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIF9fYworLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kIHNwZWNpZnlpbmcgaG93IHRoZSB2YWx1ZXMgYXJlIHRvIGJlCisvLy8gICAgY29waWVkLgorLy8vICAgIEJpdCBbMV06CisvLy8gICAgMDogQml0cyBbNjM6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjBdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxOiBCaXRzIFsxMjc6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0IFs2NV06CisvLy8gICAgMDogQml0cyBbNjM6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDE6IEJpdHMgWzEyNzo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGNvcGllZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9wZXJtdXRldmFyX3BkKF9fbTEyOGQgX19hLCBfX20xMjhpIF9fYykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZwZXJtaWx2YXJwZCgoX192MmRmKV9fYSwgKF9fdjJkaSlfX2MpOworfQorCisvLy8gXGJyaWVmIENvcGllcyB0aGUgdmFsdWVzIGluIGEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGFzCisvLy8gICAgc3BlY2lmaWVkIGJ5IHRoZSAyNTYtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBFUk1JTFBEIC8gUEVSTUlMUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIF9fYworLy8vICAgIEEgMjU2LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kIHNwZWNpZnlpbmcgaG93IHRoZSB2YWx1ZXMgYXJlIHRvIGJlCisvLy8gICAgY29waWVkLgorLy8vICAgIEJpdCBbMV06CisvLy8gICAgMDogQml0cyBbNjM6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjBdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxOiBCaXRzIFsxMjc6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0IFs2NV06CisvLy8gICAgMDogQml0cyBbNjM6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDE6IEJpdHMgWzEyNzo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdCBbMTI5XToKKy8vLyAgICAwOiBCaXRzIFsxOTE6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTkxOjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDE6IEJpdHMgWzI1NToxOTJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxOTE6MTI4XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0IFsxOTNdOgorLy8vICAgIDA6IEJpdHMgWzE5MToxMjhdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsyNTU6MTkyXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTogQml0cyBbMjU1OjE5Ml0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzI1NToxOTJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBjb3BpZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGVybXV0ZXZhcl9wZChfX20yNTZkIF9fYSwgX19tMjU2aSBfX2MpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92cGVybWlsdmFycGQyNTYoKF9fdjRkZilfX2EsIChfX3Y0ZGkpX19jKTsKK30KKworLy8vIFxicmllZiBDb3BpZXMgdGhlIHZhbHVlcyBzdG9yZWQgaW4gYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBhcworLy8vICAgIHNwZWNpZmllZCBieSB0aGUgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQRVJNSUxQUyAvIFBFUk1JTFBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIF9fYworLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kIHNwZWNpZnlpbmcgaG93IHRoZSB2YWx1ZXMgYXJlIHRvIGJlCisvLy8gICAgY29waWVkLgorLy8vICAgIEJpdHMgWzE6MF06CisvLy8gICAgMDA6IEJpdHMgWzMxOjBdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFszMTowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMDE6IEJpdHMgWzYzOjMyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMzE6MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzMxOjBdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMTogQml0cyBbMTI3Ojk2XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMzE6MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzMzOjMyXToKKy8vLyAgICAwMDogQml0cyBbMzE6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjMyXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMDE6IEJpdHMgWzYzOjMyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbNjM6MzJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMDogQml0cyBbOTU6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzozMl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsxMjc6OTZdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzozMl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzY1OjY0XToKKy8vLyAgICAwMDogQml0cyBbMzE6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzk1OjY0XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMDE6IEJpdHMgWzYzOjMyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbOTU6NjRdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMDogQml0cyBbOTU6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs5NTo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsxMjc6OTZdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs5NTo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzk3Ojk2XToKKy8vLyAgICAwMDogQml0cyBbMzE6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFs2MzozMl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsxMjc6OTZdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6OTZdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvcGllZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Blcm11dGV2YXJfcHMoX19tMTI4IF9fYSwgX19tMTI4aSBfX2MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZwZXJtaWx2YXJwcygoX192NHNmKV9fYSwgKF9fdjRzaSlfX2MpOworfQorCisvLy8gXGJyaWVmIENvcGllcyB0aGUgdmFsdWVzIHN0b3JlZCBpbiBhIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGFzCisvLy8gICAgc3BlY2lmaWVkIGJ5IHRoZSAyNTYtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBFUk1JTFBTIC8gUEVSTUlMUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19jCisvLy8gICAgQSAyNTYtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQgc3BlY2lmeWluZyBob3cgdGhlIHZhbHVlcyBhcmUgdG8gYmUKKy8vLyAgICBjb3BpZWQuCisvLy8gICAgQml0cyBbMTowXToKKy8vLyAgICAwMDogQml0cyBbMzE6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzMxOjBdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAwMTogQml0cyBbNjM6MzJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFszMTowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTA6IEJpdHMgWzk1OjY0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMzE6MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsxMjc6OTZdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFszMTowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0cyBbMzM6MzJdOgorLy8vICAgIDAwOiBCaXRzIFszMTowXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbNjM6MzJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAwMTogQml0cyBbNjM6MzJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzozMl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjMyXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTE6IEJpdHMgWzEyNzo5Nl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjMyXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0cyBbNjU6NjRdOgorLy8vICAgIDAwOiBCaXRzIFszMTowXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbOTU6NjRdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAwMTogQml0cyBbNjM6MzJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs5NTo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzk1OjY0XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTE6IEJpdHMgWzEyNzo5Nl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzk1OjY0XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0cyBbOTc6OTZdOgorLy8vICAgIDAwOiBCaXRzIFszMTowXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3Ojk2XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMDE6IEJpdHMgWzYzOjMyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3Ojk2XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTA6IEJpdHMgWzk1OjY0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3Ojk2XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTE6IEJpdHMgWzEyNzo5Nl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzEyOToxMjhdOgorLy8vICAgIDAwOiBCaXRzIFsxNTk6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTU5OjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFsxOTE6MTYwXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTU5OjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFsyMjM6MTkyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTU5OjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsyNTU6MjI0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTU5OjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzE2MToxNjBdOgorLy8vICAgIDAwOiBCaXRzIFsxNTk6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTkxOjE2MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFsxOTE6MTYwXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTkxOjE2MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFsyMjM6MTkyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTkxOjE2MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsyNTU6MjI0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTkxOjE2MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzE5MzoxOTJdOgorLy8vICAgIDAwOiBCaXRzIFsxNTk6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjIzOjE5Ml0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFsxOTE6MTYwXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjIzOjE5Ml0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFsyMjM6MTkyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjIzOjE5Ml0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsyNTU6MjI0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjIzOjE5Ml0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzIyNToyMjRdOgorLy8vICAgIDAwOiBCaXRzIFsxNTk6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjIyNF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFsxOTE6MTYwXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjIyNF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFsyMjM6MTkyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjIyNF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsyNTU6MjI0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjIyNF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29waWVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGVybXV0ZXZhcl9wcyhfX20yNTYgX19hLCBfX20yNTZpIF9fYykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBzMjU2KChfX3Y4c2YpX19hLCAoX192OHNpKV9fYyk7Cit9CisKKy8vLyBcYnJpZWYgQ29waWVzIHRoZSB2YWx1ZXMgaW4gYSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gYXMKKy8vLyAgICBzcGVjaWZpZWQgYnkgdGhlIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTEyOGQgX21tX3Blcm11dGVfcGQoX19tMTI4ZCBBLCBjb25zdCBpbnQgQyk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEVSTUlMUEQgLyBQRVJNSUxQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBBCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIEMKKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kIHNwZWNpZnlpbmcgaG93IHRoZSB2YWx1ZXMgYXJlIHRvIGJlIGNvcGllZC4KKy8vLyAgICBCaXQgWzBdOgorLy8vICAgIDA6IEJpdHMgWzYzOjBdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTogQml0cyBbMTI3OjY0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbNjM6MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdCBbMV06CisvLy8gICAgMDogQml0cyBbNjM6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDE6IEJpdHMgWzEyNzo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGNvcGllZCB2YWx1ZXMuCisjZGVmaW5lIF9tbV9wZXJtdXRlX3BkKEEsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV91bmRlZmluZWRfcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEMpID4+IDApICYgMHgxLCAoKEMpID4+IDEpICYgMHgxKTsgfSkKKworLy8vIFxicmllZiBDb3BpZXMgdGhlIHZhbHVlcyBpbiBhIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBhcworLy8vICAgIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMjU2ZCBfbW0yNTZfcGVybXV0ZV9wZChfX20yNTZkIEEsIGNvbnN0IGludCBDKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQRVJNSUxQRCAvIFBFUk1JTFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIEEKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccGFyYW0gQworLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQgc3BlY2lmeWluZyBob3cgdGhlIHZhbHVlcyBhcmUgdG8gYmUgY29waWVkLgorLy8vICAgIEJpdCBbMF06CisvLy8gICAgMDogQml0cyBbNjM6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjBdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxOiBCaXRzIFsxMjc6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0IFsxXToKKy8vLyAgICAwOiBCaXRzIFs2MzowXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3OjY0XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTogQml0cyBbMTI3OjY0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3OjY0XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0IFsyXToKKy8vLyAgICAwOiBCaXRzIFsxOTE6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTkxOjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDE6IEJpdHMgWzI1NToxOTJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxOTE6MTI4XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0IFszXToKKy8vLyAgICAwOiBCaXRzIFsxOTE6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjE5Ml0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDE6IEJpdHMgWzI1NToxOTJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsyNTU6MTkyXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgY29waWVkIHZhbHVlcy4KKyNkZWZpbmUgX21tMjU2X3Blcm11dGVfcGQoQSwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0ZGYpKF9fbTI1NmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpX21tMjU2X3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChDKSA+PiAwKSAmIDB4MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKEMpID4+IDEpICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICsgKCgoQykgPj4gMikgJiAweDEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKyAoKChDKSA+PiAzKSAmIDB4MSkpOyB9KQorCisvLy8gXGJyaWVmIENvcGllcyB0aGUgdmFsdWVzIGluIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gYXMKKy8vLyAgICBzcGVjaWZpZWQgYnkgdGhlIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTEyOCBfbW1fcGVybXV0ZV9wcyhfX20xMjggQSwgY29uc3QgaW50IEMpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBFUk1JTFBTIC8gUEVSTUlMUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gQQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIEMKKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kIHNwZWNpZnlpbmcgaG93IHRoZSB2YWx1ZXMgYXJlIHRvIGJlIGNvcGllZC4KKy8vLyAgICBCaXRzIFsxOjBdOgorLy8vICAgIDAwOiBCaXRzIFszMTowXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMzE6MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFs2MzozMl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzMxOjBdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMDogQml0cyBbOTU6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFszMTowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTE6IEJpdHMgWzEyNzo5Nl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzMxOjBdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICBCaXRzIFszOjJdOgorLy8vICAgIDAwOiBCaXRzIFszMTowXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbNjM6MzJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAwMTogQml0cyBbNjM6MzJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzozMl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjMyXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTE6IEJpdHMgWzEyNzo5Nl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjMyXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0cyBbNTo0XToKKy8vLyAgICAwMDogQml0cyBbMzE6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzk1OjY0XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMDE6IEJpdHMgWzYzOjMyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbOTU6NjRdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMDogQml0cyBbOTU6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs5NTo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsxMjc6OTZdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs5NTo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzc6Nl06CisvLy8gICAgMDA6IEJpdHMgWzMxOjBdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6OTZdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAwMTogQml0cyBbNjM6MzJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6OTZdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMDogQml0cyBbOTU6NjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6OTZdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMTogQml0cyBbMTI3Ojk2XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3Ojk2XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb3BpZWQgdmFsdWVzLgorI2RlZmluZSBfbW1fcGVybXV0ZV9wcyhBLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEMpID4+IDApICYgMHgzLCAoKEMpID4+IDIpICYgMHgzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDKSA+PiA0KSAmIDB4MywgKChDKSA+PiA2KSAmIDB4Myk7IH0pCisKKy8vLyBcYnJpZWYgQ29waWVzIHRoZSB2YWx1ZXMgaW4gYSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBhcworLy8vICAgIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMjU2IF9tbTI1Nl9wZXJtdXRlX3BzKF9fbTI1NiBBLCBjb25zdCBpbnQgQyk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEVSTUlMUFMgLyBQRVJNSUxQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBBCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gQworLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQgc3BlY2lmeWluZyBob3cgdGhlIHZhbHVlcyBhcmUgdG8gYmUgY29waWVkLgorLy8vICAgIEJpdHMgWzE6MF06CisvLy8gICAgMDA6IEJpdHMgWzMxOjBdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFszMTowXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMDE6IEJpdHMgWzYzOjMyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMzE6MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzMxOjBdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMTogQml0cyBbMTI3Ojk2XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMzE6MF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzM6Ml06CisvLy8gICAgMDA6IEJpdHMgWzMxOjBdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs2MzozMl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFs2MzozMl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjMyXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTA6IEJpdHMgWzk1OjY0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbNjM6MzJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMTogQml0cyBbMTI3Ojk2XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbNjM6MzJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICBCaXRzIFs1OjRdOgorLy8vICAgIDAwOiBCaXRzIFszMTowXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbOTU6NjRdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAwMTogQml0cyBbNjM6MzJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFs5NTo2NF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzk1OjY0XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTE6IEJpdHMgWzEyNzo5Nl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzk1OjY0XSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0cyBbNzo2XToKKy8vLyAgICAwMDogQml0cyBbMzE6MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFs2MzozMl0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsxMjc6OTZdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6OTZdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICBCaXRzIFsxOjBdOgorLy8vICAgIDAwOiBCaXRzIFsxNTk6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTU5OjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFsxOTE6MTYwXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTU5OjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFsyMjM6MTkyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTU5OjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsyNTU6MjI0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMTU5OjEyOF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIEJpdHMgWzM6Ml06CisvLy8gICAgMDA6IEJpdHMgWzE1OToxMjhdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxOTE6MTYwXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMDE6IEJpdHMgWzE5MToxNjBdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxOTE6MTYwXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTA6IEJpdHMgWzIyMzoxOTJdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxOTE6MTYwXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgMTE6IEJpdHMgWzI1NToyMjRdIG9mIHRoZSBzb3VyY2UgYXJlIGNvcGllZCB0byBiaXRzIFsxOTE6MTYwXSBvZiB0aGUKKy8vLyAgICByZXR1cm5lZCB2ZWN0b3IuCisvLy8gICAgQml0cyBbNTo0XToKKy8vLyAgICAwMDogQml0cyBbMTU5OjEyOF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzIyMzoxOTJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAwMTogQml0cyBbMTkxOjE2MF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzIyMzoxOTJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMDogQml0cyBbMjIzOjE5Ml0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzIyMzoxOTJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICAxMTogQml0cyBbMjU1OjIyNF0gb2YgdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGJpdHMgWzIyMzoxOTJdIG9mIHRoZQorLy8vICAgIHJldHVybmVkIHZlY3Rvci4KKy8vLyAgICBCaXRzIFs3OjZdOgorLy8vICAgIDAwOiBCaXRzIFsxNTk6MTI4XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjIyNF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDAxOiBCaXRzIFsxOTE6MTYwXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjIyNF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDEwOiBCaXRzIFsyMjM6MTkyXSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjIyNF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vICAgIDExOiBCaXRzIFsyNTU6MjI0XSBvZiB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjIyNF0gb2YgdGhlCisvLy8gICAgcmV0dXJuZWQgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29waWVkIHZhbHVlcy4KKyNkZWZpbmUgX21tMjU2X3Blcm11dGVfcHMoQSwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhzZikoX19tMjU2KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKEMpID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChDKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgoQykgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKEMpID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChDKSA+PiAwKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoQykgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKEMpID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChDKSA+PiA2KSAmIDB4MykpOyB9KQorCisvLy8gXGJyaWVmIFBlcm11dGVzIDEyOC1iaXQgZGF0YSB2YWx1ZXMgc3RvcmVkIGluIHR3byAyNTYtYml0IHZlY3RvcnMgb2YKKy8vLyAgICBbNCB4IGRvdWJsZV0sIGFzIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMjU2ZCBfbW0yNTZfcGVybXV0ZTJmMTI4X3BkKF9fbTI1NmQgVjEsIF9fbTI1NmQgVjIsIGNvbnN0IGludCBNKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQRVJNMkYxMjggLyBQRVJNMkYxMjggaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gVjEKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccGFyYW0gVjIKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlLgorLy8vIFxwYXJhbSBNCisvLy8gICAgQW4gaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZCBzcGVjaWZ5aW5nIGhvdyB0aGUgdmFsdWVzIGFyZSB0byBiZQorLy8vICAgIHBlcm11dGVkLgorLy8vICAgIEJpdHMgWzE6MF06CisvLy8gICAgMDA6IEJpdHMgWzEyNzowXSBvZiBvcGVyYW5kIFYxIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3OjBdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIDAxOiBCaXRzIFsyNTU6MTI4XSBvZiBvcGVyYW5kIFYxIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3OjBdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIDEwOiBCaXRzIFsxMjc6MF0gb2Ygb3BlcmFuZCBWMiBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzowXSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICAxMTogQml0cyBbMjU1OjEyOF0gb2Ygb3BlcmFuZCBWMiBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzowXSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXRzIFs1OjRdOgorLy8vICAgIDAwOiBCaXRzIFsxMjc6MF0gb2Ygb3BlcmFuZCBWMSBhcmUgY29waWVkIHRvIGJpdHMgWzI1NToxMjhdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIDAxOiBCaXRzIFsyNTU6MTI4XSBvZiBvcGVyYW5kIFYxIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjEyOF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgMTA6IEJpdHMgWzEyNzowXSBvZiBvcGVyYW5kIFYyIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjEyOF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgMTE6IEJpdHMgWzI1NToxMjhdIG9mIG9wZXJhbmQgVjIgYXJlIGNvcGllZCB0byBiaXRzIFsyNTU6MTI4XSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBjb3BpZWQgdmFsdWVzLgorI2RlZmluZSBfbW0yNTZfcGVybXV0ZTJmMTI4X3BkKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3ZwZXJtMmYxMjhfcGQyNTYoKF9fdjRkZikoX19tMjU2ZCkoVjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoVjIpLCAoTSkpOyB9KQorCisvLy8gXGJyaWVmIFBlcm11dGVzIDEyOC1iaXQgZGF0YSB2YWx1ZXMgc3RvcmVkIGluIHR3byAyNTYtYml0IHZlY3RvcnMgb2YKKy8vLyAgICBbOCB4IGZsb2F0XSwgYXMgc3BlY2lmaWVkIGJ5IHRoZSBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20yNTYgX21tMjU2X3Blcm11dGUyZjEyOF9wcyhfX20yNTYgVjEsIF9fbTI1NiBWMiwgY29uc3QgaW50IE0pOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBFUk0yRjEyOCAvIFBFUk0yRjEyOCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBWMQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0uCisvLy8gXHBhcmFtIFYyCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gTQorLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQgc3BlY2lmeWluZyBob3cgdGhlIHZhbHVlcyBhcmUgdG8gYmUKKy8vLyAgICBwZXJtdXRlZC4KKy8vLyAgICBCaXRzIFsxOjBdOgorLy8vICAgIDAwOiBCaXRzIFsxMjc6MF0gb2Ygb3BlcmFuZCBWMSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzowXSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICAwMTogQml0cyBbMjU1OjEyOF0gb2Ygb3BlcmFuZCBWMSBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzowXSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICAxMDogQml0cyBbMTI3OjBdIG9mIG9wZXJhbmQgVjIgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6MF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgMTE6IEJpdHMgWzI1NToxMjhdIG9mIG9wZXJhbmQgVjIgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6MF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbNTo0XToKKy8vLyAgICAwMDogQml0cyBbMTI3OjBdIG9mIG9wZXJhbmQgVjEgYXJlIGNvcGllZCB0byBiaXRzIFsyNTU6MTI4XSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICAwMTogQml0cyBbMjU1OjEyOF0gb2Ygb3BlcmFuZCBWMSBhcmUgY29waWVkIHRvIGJpdHMgWzI1NToxMjhdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIDEwOiBCaXRzIFsxMjc6MF0gb2Ygb3BlcmFuZCBWMiBhcmUgY29waWVkIHRvIGJpdHMgWzI1NToxMjhdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIDExOiBCaXRzIFsyNTU6MTI4XSBvZiBvcGVyYW5kIFYyIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjEyOF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb3BpZWQgdmFsdWVzLgorI2RlZmluZSBfbW0yNTZfcGVybXV0ZTJmMTI4X3BzKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfdnBlcm0yZjEyOF9wczI1NigoX192OHNmKShfX20yNTYpKFYxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShWMiksIChNKSk7IH0pCisKKy8vLyBcYnJpZWYgUGVybXV0ZXMgMTI4LWJpdCBkYXRhIHZhbHVlcyBzdG9yZWQgaW4gdHdvIDI1Ni1iaXQgaW50ZWdlciB2ZWN0b3JzLAorLy8vICAgIGFzIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMjU2aSBfbW0yNTZfcGVybXV0ZTJmMTI4X3NpMjU2KF9fbTI1NmkgVjEsIF9fbTI1NmkgVjIsIGNvbnN0IGludCBNKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQRVJNMkYxMjggLyBQRVJNMkYxMjggaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gVjEKKy8vLyAgICBBIDI1Ni1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHBhcmFtIFYyCisvLy8gICAgQSAyNTYtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxwYXJhbSBNCisvLy8gICAgQW4gaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZCBzcGVjaWZ5aW5nIGhvdyB0aGUgdmFsdWVzIGFyZSB0byBiZSBjb3BpZWQuCisvLy8gICAgQml0cyBbMTowXToKKy8vLyAgICAwMDogQml0cyBbMTI3OjBdIG9mIG9wZXJhbmQgVjEgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6MF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgMDE6IEJpdHMgWzI1NToxMjhdIG9mIG9wZXJhbmQgVjEgYXJlIGNvcGllZCB0byBiaXRzIFsxMjc6MF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgMTA6IEJpdHMgWzEyNzowXSBvZiBvcGVyYW5kIFYyIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3OjBdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIDExOiBCaXRzIFsyNTU6MTI4XSBvZiBvcGVyYW5kIFYyIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3OjBdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIEJpdHMgWzU6NF06CisvLy8gICAgMDA6IEJpdHMgWzEyNzowXSBvZiBvcGVyYW5kIFYxIGFyZSBjb3BpZWQgdG8gYml0cyBbMjU1OjEyOF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgMDE6IEJpdHMgWzI1NToxMjhdIG9mIG9wZXJhbmQgVjEgYXJlIGNvcGllZCB0byBiaXRzIFsyNTU6MTI4XSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICAxMDogQml0cyBbMTI3OjBdIG9mIG9wZXJhbmQgVjIgYXJlIGNvcGllZCB0byBiaXRzIFsyNTU6MTI4XSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICAxMTogQml0cyBbMjU1OjEyOF0gb2Ygb3BlcmFuZCBWMiBhcmUgY29waWVkIHRvIGJpdHMgWzI1NToxMjhdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb3BpZWQgdmFsdWVzLgorI2RlZmluZSBfbW0yNTZfcGVybXV0ZTJmMTI4X3NpMjU2KFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3ZwZXJtMmYxMjhfc2kyNTYoKF9fdjhzaSkoX19tMjU2aSkoVjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoVjIpLCAoTSkpOyB9KQorCisvKiBWZWN0b3IgQmxlbmQgKi8KKy8vLyBcYnJpZWYgTWVyZ2VzIDY0LWJpdCBkb3VibGUtcHJlY2lzaW9uIGRhdGEgdmFsdWVzIHN0b3JlZCBpbiBlaXRoZXIgb2YgdGhlCisvLy8gICAgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbNCB4IGRvdWJsZV0sIGFzIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlCisvLy8gICAgaW50ZWdlciBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20yNTZkIF9tbTI1Nl9ibGVuZF9wZChfX20yNTZkIFYxLCBfX20yNTZkIFYyLCBjb25zdCBpbnQgTSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQkxFTkRQRCAvIEJMRU5EUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gVjEKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccGFyYW0gVjIKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccGFyYW0gTQorLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQsIHdpdGggbWFzayBiaXRzIFszOjBdIHNwZWNpZnlpbmcgaG93IHRoZQorLy8vICAgIHZhbHVlcyBhcmUgdG8gYmUgY29waWVkLiBUaGUgcG9zaXRpb24gb2YgdGhlIG1hc2sgYml0IGNvcnJlc3BvbmRzIHRvIHRoZQorLy8vICAgIGluZGV4IG9mIGEgY29waWVkIHZhbHVlLiBXaGVuIGEgbWFzayBiaXQgaXMgMCwgdGhlIGNvcnJlc3BvbmRpbmcgNjQtYml0CisvLy8gICAgZWxlbWVudCBpbiBvcGVyYW5kIFYxIGlzIGNvcGllZCB0byB0aGUgc2FtZSBwb3NpdGlvbiBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgV2hlbiBhIG1hc2sgYml0IGlzIDEsIHRoZSBjb3JyZXNwb25kaW5nIDY0LWJpdCBlbGVtZW50IGluIG9wZXJhbmQgVjIgaXMKKy8vLyAgICBjb3BpZWQgdG8gdGhlIHNhbWUgcG9zaXRpb24gaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGNvcGllZCB2YWx1ZXMuCisjZGVmaW5lIF9tbTI1Nl9ibGVuZF9wZChWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRmKShfX20yNTZkKShWMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoVjIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMSkgPyA0IDogMCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAyKSA/IDUgOiAxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDQpID8gNiA6IDIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwOCkgPyA3IDogMykpOyB9KQorCisvLy8gXGJyaWVmIE1lcmdlcyAzMi1iaXQgc2luZ2xlLXByZWNpc2lvbiBkYXRhIHZhbHVlcyBzdG9yZWQgaW4gZWl0aGVyIG9mIHRoZQorLy8vICAgIHR3byAyNTYtYml0IHZlY3RvcnMgb2YgWzggeCBmbG9hdF0sIGFzIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlCisvLy8gICAgaW50ZWdlciBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20yNTYgX21tMjU2X2JsZW5kX3BzKF9fbTI1NiBWMSwgX19tMjU2IFYyLCBjb25zdCBpbnQgTSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQkxFTkRQUyAvIEJMRU5EUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gVjEKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vIFxwYXJhbSBWMgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0uCisvLy8gXHBhcmFtIE0KKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kLCB3aXRoIG1hc2sgYml0cyBbNzowXSBzcGVjaWZ5aW5nIGhvdyB0aGUKKy8vLyAgICB2YWx1ZXMgYXJlIHRvIGJlIGNvcGllZC4gVGhlIHBvc2l0aW9uIG9mIHRoZSBtYXNrIGJpdCBjb3JyZXNwb25kcyB0byB0aGUKKy8vLyAgICBpbmRleCBvZiBhIGNvcGllZCB2YWx1ZS4gV2hlbiBhIG1hc2sgYml0IGlzIDAsIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdAorLy8vICAgIGVsZW1lbnQgaW4gb3BlcmFuZCBWMSBpcyBjb3BpZWQgdG8gdGhlIHNhbWUgcG9zaXRpb24gaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIFdoZW4gYSBtYXNrIGJpdCBpcyAxLCB0aGUgY29ycmVzcG9uZGluZyAzMi1iaXQgZWxlbWVudCBpbiBvcGVyYW5kIFYyIGlzCisvLy8gICAgY29waWVkIHRvIHRoZSBzYW1lIHBvc2l0aW9uIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvcGllZCB2YWx1ZXMuCisjZGVmaW5lIF9tbTI1Nl9ibGVuZF9wcyhWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2YpKF9fbTI1NikoVjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShWMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDEpID8gIDggOiAwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMikgPyAgOSA6IDEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA0KSA/IDEwIDogMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDgpID8gMTEgOiAzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgxMCkgPyAxMiA6IDQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDIwKSA/IDEzIDogNSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4NDApID8gMTQgOiA2KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHg4MCkgPyAxNSA6IDcpKTsgfSkKKworLy8vIFxicmllZiBNZXJnZXMgNjQtYml0IGRvdWJsZS1wcmVjaXNpb24gZGF0YSB2YWx1ZXMgc3RvcmVkIGluIGVpdGhlciBvZiB0aGUKKy8vLyAgICB0d28gMjU2LWJpdCB2ZWN0b3JzIG9mIFs0IHggZG91YmxlXSwgYXMgc3BlY2lmaWVkIGJ5IHRoZSAyNTYtYml0IHZlY3RvcgorLy8vICAgIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkJMRU5EVlBEIC8gQkxFTkRWUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBfX2MKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9wZXJhbmQsIHdpdGggbWFzayBiaXRzIDI1NSwgMTkxLCAxMjcsIGFuZCA2MyBzcGVjaWZ5aW5nCisvLy8gICAgaG93IHRoZSB2YWx1ZXMgYXJlIHRvIGJlIGNvcGllZC4gVGhlIHBvc2l0aW9uIG9mIHRoZSBtYXNrIGJpdCBjb3JyZXNwb25kcworLy8vICAgIHRvIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiBhIGNvcGllZCB2YWx1ZS4gV2hlbiBhIG1hc2sgYml0IGlzIDAsIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgNjQtYml0IGVsZW1lbnQgaW4gb3BlcmFuZCBfX2EgaXMgY29waWVkIHRvIHRoZSBzYW1lCisvLy8gICAgcG9zaXRpb24gaW4gdGhlIGRlc3RpbmF0aW9uLiBXaGVuIGEgbWFzayBiaXQgaXMgMSwgdGhlIGNvcnJlc3BvbmRpbmcKKy8vLyAgICA2NC1iaXQgZWxlbWVudCBpbiBvcGVyYW5kIF9fYiBpcyBjb3BpZWQgdG8gdGhlIHNhbWUgcG9zaXRpb24gaW4gdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgY29waWVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2JsZW5kdl9wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IsIF9fbTI1NmQgX19jKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfYmxlbmR2cGQyNTYoCisgICAgKF9fdjRkZilfX2EsIChfX3Y0ZGYpX19iLCAoX192NGRmKV9fYyk7Cit9CisKKy8vLyBcYnJpZWYgTWVyZ2VzIDMyLWJpdCBzaW5nbGUtcHJlY2lzaW9uIGRhdGEgdmFsdWVzIHN0b3JlZCBpbiBlaXRoZXIgb2YgdGhlCisvLy8gICAgdHdvIDI1Ni1iaXQgdmVjdG9ycyBvZiBbOCB4IGZsb2F0XSwgYXMgc3BlY2lmaWVkIGJ5IHRoZSAyNTYtYml0IHZlY3RvcgorLy8vICAgIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkJMRU5EVlBTIC8gQkxFTkRWUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19jCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvcGVyYW5kLCB3aXRoIG1hc2sgYml0cyAyNTUsIDIyMywgMTkxLCAxNTksIDEyNywgOTUsIDYzLAorLy8vICAgIGFuZCAzMSBzcGVjaWZ5aW5nIGhvdyB0aGUgdmFsdWVzIGFyZSB0byBiZSBjb3BpZWQuIFRoZSBwb3NpdGlvbiBvZiB0aGUKKy8vLyAgICBtYXNrIGJpdCBjb3JyZXNwb25kcyB0byB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgYSBjb3BpZWQgdmFsdWUuIFdoZW4KKy8vLyAgICBhIG1hc2sgYml0IGlzIDAsIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdCBlbGVtZW50IGluIG9wZXJhbmQgX19hIGlzCisvLy8gICAgY29waWVkIHRvIHRoZSBzYW1lIHBvc2l0aW9uIGluIHRoZSBkZXN0aW5hdGlvbi4gV2hlbiBhIG1hc2sgYml0IGlzIDEsIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgMzItYml0IGVsZW1lbnQgaW4gb3BlcmFuZCBfX2IgaXMgY29waWVkIHRvIHRoZSBzYW1lCisvLy8gICAgcG9zaXRpb24gaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29waWVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYmxlbmR2X3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IsIF9fbTI1NiBfX2MpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2JsZW5kdnBzMjU2KAorICAgIChfX3Y4c2YpX19hLCAoX192OHNmKV9fYiwgKF9fdjhzZilfX2MpOworfQorCisvKiBWZWN0b3IgRG90IFByb2R1Y3QgKi8KKy8vLyBcYnJpZWYgQ29tcHV0ZXMgdHdvIGRvdCBwcm9kdWN0cyBpbiBwYXJhbGxlbCwgdXNpbmcgdGhlIGxvd2VyIGFuZCB1cHBlcgorLy8vICAgIGhhbHZlcyBvZiB0d28gWzggeCBmbG9hdF0gdmVjdG9ycyBhcyBpbnB1dCB0byB0aGUgdHdvIGNvbXB1dGF0aW9ucywgYW5kCisvLy8gICAgcmV0dXJuaW5nIHRoZSB0d28gZG90IHByb2R1Y3RzIGluIHRoZSBsb3dlciBhbmQgdXBwZXIgaGFsdmVzIG9mIHRoZQorLy8vICAgIFs4IHggZmxvYXRdIHJlc3VsdC4gVGhlIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQgY29udHJvbHMgd2hpY2gKKy8vLyAgICBpbnB1dCBlbGVtZW50cyB3aWxsIGNvbnRyaWJ1dGUgdG8gdGhlIGRvdCBwcm9kdWN0LCBhbmQgd2hlcmUgdGhlIGZpbmFsCisvLy8gICAgcmVzdWx0cyBhcmUgcmV0dXJuZWQuIEluIGdlbmVyYWwsIGZvciBlYWNoIGRvdCBwcm9kdWN0LCB0aGUgZm91cgorLy8vICAgIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhlIGlucHV0IHZlY3RvcnMgYXJlIG11bHRpcGxpZWQ7IHRoZSBmaXJzdAorLy8vICAgIHR3byBhbmQgc2Vjb25kIHR3byBwcm9kdWN0cyBhcmUgc3VtbWVkLCB0aGVuIHRoZSB0d28gc3VtcyBhcmUgYWRkZWQgdG8KKy8vLyAgICBmb3JtIHRoZSBmaW5hbCByZXN1bHQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTI1NiBfbW0yNTZfZHBfcHMoX19tMjU2IFYxLCBfX20yNTYgVjIsIGNvbnN0IGludCBNKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZEUFBTIC8gRFBQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBWMQorLy8vICAgIEEgdmVjdG9yIG9mIFs4IHggZmxvYXRdIHZhbHVlcywgdHJlYXRlZCBhcyB0d28gWzQgeCBmbG9hdF0gdmVjdG9ycy4KKy8vLyBccGFyYW0gVjIKKy8vLyAgICBBIHZlY3RvciBvZiBbOCB4IGZsb2F0XSB2YWx1ZXMsIHRyZWF0ZWQgYXMgdHdvIFs0IHggZmxvYXRdIHZlY3RvcnMuCisvLy8gXHBhcmFtIE0KKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBhcmd1bWVudC4gQml0cyBbNzo0XSBkZXRlcm1pbmUgd2hpY2ggZWxlbWVudHMgb2YKKy8vLyAgICB0aGUgaW5wdXQgdmVjdG9ycyBhcmUgdXNlZCwgd2l0aCBiaXQgWzRdIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxvd2VzdAorLy8vICAgIGVsZW1lbnQgYW5kIGJpdCBbN10gY29ycmVzcG9uZGluZyB0byB0aGUgaGlnaGVzdCBlbGVtZW50IG9mIGVhY2ggWzQgeAorLy8vICAgIGZsb2F0XSBzdWJ2ZWN0b3IuIElmIGEgYml0IGlzIHNldCwgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgZnJvbSB0aGUKKy8vLyAgICB0d28gaW5wdXQgdmVjdG9ycyBhcmUgdXNlZCBhcyBhbiBpbnB1dCBmb3IgZG90IHByb2R1Y3Q7IG90aGVyd2lzZSB0aGF0CisvLy8gICAgaW5wdXQgaXMgdHJlYXRlZCBhcyB6ZXJvLiBCaXRzIFszOjBdIGRldGVybWluZSB3aGljaCBlbGVtZW50cyBvZiB0aGUKKy8vLyAgICByZXN1bHQgd2lsbCByZWNlaXZlIGEgY29weSBvZiB0aGUgZmluYWwgZG90IHByb2R1Y3QsIHdpdGggYml0IFswXQorLy8vICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxvd2VzdCBlbGVtZW50IGFuZCBiaXQgWzNdIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisvLy8gICAgaGlnaGVzdCBlbGVtZW50IG9mIGVhY2ggWzQgeCBmbG9hdF0gc3VidmVjdG9yLiBJZiBhIGJpdCBpcyBzZXQsIHRoZSBkb3QKKy8vLyAgICBwcm9kdWN0IGlzIHJldHVybmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQ7IG90aGVyd2lzZSB0aGF0IGVsZW1lbnQKKy8vLyAgICBpcyBzZXQgdG8gemVyby4gVGhlIGJpdG1hc2sgaXMgYXBwbGllZCBpbiB0aGUgc2FtZSB3YXkgdG8gZWFjaCBvZiB0aGUKKy8vLyAgICB0d28gcGFyYWxsZWwgZG90IHByb2R1Y3QgY29tcHV0YXRpb25zLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgdHdvIGRvdCBwcm9kdWN0cy4KKyNkZWZpbmUgX21tMjU2X2RwX3BzKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfZHBwczI1NigoX192OHNmKShfX20yNTYpKFYxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShWMiksIChNKSk7IH0pCisKKy8qIFZlY3RvciBzaHVmZmxlICovCisvLy8gXGJyaWVmIFNlbGVjdHMgOCBmbG9hdCB2YWx1ZXMgZnJvbSB0aGUgMjU2LWJpdCBvcGVyYW5kcyBvZiBbOCB4IGZsb2F0XSwgYXMKKy8vLyAgICBzcGVjaWZpZWQgYnkgdGhlIGltbWVkaWF0ZSB2YWx1ZSBvcGVyYW5kLiBUaGUgZm91ciBzZWxlY3RlZCBlbGVtZW50cyBpbgorLy8vICAgIGVhY2ggb3BlcmFuZCBhcmUgY29waWVkIHRvIHRoZSBkZXN0aW5hdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGJpdHMKKy8vLyAgICBzcGVjaWZpZWQgaW4gdGhlIGltbWVkaWF0ZSBvcGVyYW5kLiBUaGUgc2VsZWN0ZWQgZWxlbWVudHMgZnJvbSB0aGUgZmlyc3QKKy8vLyAgICAyNTYtYml0IG9wZXJhbmQgYXJlIGNvcGllZCB0byBiaXRzIFs2MzowXSBhbmQgYml0cyBbMTkxOjEyOF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24sIGFuZCB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgZnJvbSB0aGUgc2Vjb25kIDI1Ni1iaXQgb3BlcmFuZAorLy8vICAgIGFyZSBjb3BpZWQgdG8gYml0cyBbMTI3OjY0XSBhbmQgYml0cyBbMjU1OjE5Ml0gb2YgdGhlIGRlc3RpbmF0aW9uLiBGb3IKKy8vLyAgICBleGFtcGxlLCBpZiBiaXRzIFs3OjBdIG9mIHRoZSBpbW1lZGlhdGUgb3BlcmFuZCBjb250YWluIGEgdmFsdWUgb2YgMHhGRiwKKy8vLyAgICB0aGUgMjU2LWJpdCBkZXN0aW5hdGlvbiB2ZWN0b3Igd291bGQgY29udGFpbiB0aGUgZm9sbG93aW5nIHZhbHVlczogYls3XSwKKy8vLyAgICBiWzddLCBhWzddLCBhWzddLCBiWzNdLCBiWzNdLCBhWzNdLCBhWzNdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20yNTYgX21tMjU2X3NodWZmbGVfcHMoX19tMjU2IGEsIF9fbTI1NiBiLCBjb25zdCBpbnQgbWFzayk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWU0hVRlBTIC8gU0hVRlBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLiBUaGUgZm91ciBzZWxlY3RlZCBlbGVtZW50cyBpbiB0aGlzCisvLy8gICAgb3BlcmFuZCBhcmUgY29waWVkIHRvIGJpdHMgWzYzOjBdIGFuZCBiaXRzIFsxOTE6MTI4XSBpbiB0aGUgZGVzdGluYXRpb24sCisvLy8gICAgYWNjb3JkaW5nIHRvIHRoZSBiaXRzIHNwZWNpZmllZCBpbiB0aGUgaW1tZWRpYXRlIG9wZXJhbmQuCisvLy8gXHBhcmFtIGIKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLiBUaGUgZm91ciBzZWxlY3RlZCBlbGVtZW50cyBpbiB0aGlzCisvLy8gICAgb3BlcmFuZCBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo2NF0gYW5kIGJpdHMgWzI1NToxOTJdIGluIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLCBhY2NvcmRpbmcgdG8gdGhlIGJpdHMgc3BlY2lmaWVkIGluIHRoZSBpbW1lZGlhdGUgb3BlcmFuZC4KKy8vLyBccGFyYW0gbWFzaworLy8vICAgIEFuIGltbWVkaWF0ZSB2YWx1ZSBjb250YWluaW5nIGFuIDgtYml0IHZhbHVlIHNwZWNpZnlpbmcgd2hpY2ggZWxlbWVudHMgdG8KKy8vLyAgICBjb3B5IGZyb20gYSBhbmQgYi4gQml0cyBbMzowXSBzcGVjaWZ5IHRoZSB2YWx1ZXMgY29waWVkIGZyb20gb3BlcmFuZCBhLgorLy8vICAgIEJpdHMgWzc6NF0gc3BlY2lmeSB0aGUgdmFsdWVzIGNvcGllZCBmcm9tIG9wZXJhbmQgYi4KKy8vLyAgICBUaGUgZGVzdGluYXRpb25zIHdpdGhpbiB0aGUgMjU2LWJpdCBkZXN0aW5hdGlvbiBhcmUgYXNzaWduZWQgdmFsdWVzIGFzCisvLy8gICAgZm9sbG93cywgYWNjb3JkaW5nIHRvIHRoZSBiaXQgdmFsdWUgYXNzaWdubWVudHMgZGVzY3JpYmVkIGJlbG93OgorLy8vICAgIEJpdHMgWzE6MF0gYXJlIHVzZWQgdG8gYXNzaWduIHZhbHVlcyB0byBiaXRzIFszMTowXSBhbmQgWzE1OToxMjhdIGluIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIEJpdHMgWzM6Ml0gYXJlIHVzZWQgdG8gYXNzaWduIHZhbHVlcyB0byBiaXRzIFs2MzozMl0gYW5kIFsxOTE6MTYwXSBpbiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXRzIFs1OjRdIGFyZSB1c2VkIHRvIGFzc2lnbiB2YWx1ZXMgdG8gYml0cyBbOTU6NjRdIGFuZCBbMjIzOjE5Ml0gaW4gdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbNzo2XSBhcmUgdXNlZCB0byBhc3NpZ24gdmFsdWVzIHRvIGJpdHMgWzEyNzo5Nl0gYW5kIFsyNTU6MjI0XSBpbgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXQgdmFsdWUgYXNzaWdubWVudHM6CisvLy8gICAgMDA6IEJpdHMgWzMxOjBdIGFuZCBbMTU5OjEyOF0gYXJlIGNvcGllZCBmcm9tIHRoZSBzZWxlY3RlZCBvcGVyYW5kLgorLy8vICAgIDAxOiBCaXRzIFs2MzozMl0gYW5kIFsxOTE6MTYwXSBhcmUgY29waWVkIGZyb20gdGhlIHNlbGVjdGVkIG9wZXJhbmQuCisvLy8gICAgMTA6IEJpdHMgWzk1OjY0XSBhbmQgWzIyMzoxOTJdIGFyZSBjb3BpZWQgZnJvbSB0aGUgc2VsZWN0ZWQgb3BlcmFuZC4KKy8vLyAgICAxMTogQml0cyBbMTI3Ojk2XSBhbmQgWzI1NToyMjRdIGFyZSBjb3BpZWQgZnJvbSB0aGUgc2VsZWN0ZWQgb3BlcmFuZC4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHNodWZmbGVkIHZhbHVlcy4KKyNkZWZpbmUgX21tMjU2X3NodWZmbGVfcHMoYSwgYiwgbWFzaykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhzZikoX19tMjU2KShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICArICgoKG1hc2spID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICsgKCgobWFzaykgPj4gMikgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgKyAoKChtYXNrKSA+PiA0KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICArICgoKG1hc2spID4+IDYpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgICsgKCgobWFzaykgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgKyAoKChtYXNrKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKG1hc2spID4+IDQpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICsgKCgobWFzaykgPj4gNikgJiAweDMpKTsgfSkKKworLy8vIFxicmllZiBTZWxlY3RzIGZvdXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZXMgZnJvbSB0aGUgMjU2LWJpdCBvcGVyYW5kcyBvZgorLy8vICAgIFs0IHggZG91YmxlXSwgYXMgc3BlY2lmaWVkIGJ5IHRoZSBpbW1lZGlhdGUgdmFsdWUgb3BlcmFuZC4gVGhlIHNlbGVjdGVkCisvLy8gICAgZWxlbWVudHMgZnJvbSB0aGUgZmlyc3QgMjU2LWJpdCBvcGVyYW5kIGFyZSBjb3BpZWQgdG8gYml0cyBbNjM6MF0gYW5kCisvLy8gICAgYml0cyBbMTkxOjEyOF0gaW4gdGhlIGRlc3RpbmF0aW9uLCBhbmQgdGhlIHNlbGVjdGVkIGVsZW1lbnRzIGZyb20gdGhlCisvLy8gICAgc2Vjb25kIDI1Ni1iaXQgb3BlcmFuZCBhcmUgY29waWVkIHRvIGJpdHMgWzEyNzo2NF0gYW5kIGJpdHMgWzI1NToxOTJdIGluCisvLy8gICAgdGhlIGRlc3RpbmF0aW9uLiBGb3IgZXhhbXBsZSwgaWYgYml0cyBbMzowXSBvZiB0aGUgaW1tZWRpYXRlIG9wZXJhbmQKKy8vLyAgICBjb250YWluIGEgdmFsdWUgb2YgMHhGLCB0aGUgMjU2LWJpdCBkZXN0aW5hdGlvbiB2ZWN0b3Igd291bGQgY29udGFpbiB0aGUKKy8vLyAgICBmb2xsb3dpbmcgdmFsdWVzOiBiWzNdLCBhWzNdLCBiWzFdLCBhWzFdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20yNTZkIF9tbTI1Nl9zaHVmZmxlX3BkKF9fbTI1NmQgYSwgX19tMjU2ZCBiLCBjb25zdCBpbnQgbWFzayk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWU0hVRlBEIC8gU0hVRlBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccGFyYW0gYgorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBtYXNrCisvLy8gICAgQW4gaW1tZWRpYXRlIHZhbHVlIGNvbnRhaW5pbmcgOC1iaXQgdmFsdWVzIHNwZWNpZnlpbmcgd2hpY2ggZWxlbWVudHMgdG8KKy8vLyAgICBjb3B5IGZyb20gYSBhbmQgYjoKKy8vLyAgICBCaXQgWzBdPTA6IEJpdHMgWzYzOjBdIGFyZSBjb3BpZWQgZnJvbSBhIHRvIGJpdHMgWzYzOjBdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIEJpdCBbMF09MTogQml0cyBbMTI3OjY0XSBhcmUgY29waWVkIGZyb20gYSB0byBiaXRzIFs2MzowXSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXQgWzFdPTA6IEJpdHMgWzYzOjBdIGFyZSBjb3BpZWQgZnJvbSBiIHRvIGJpdHMgWzEyNzo2NF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgQml0IFsxXT0xOiBCaXRzIFsxMjc6NjRdIGFyZSBjb3BpZWQgZnJvbSBiIHRvIGJpdHMgWzEyNzo2NF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgQml0IFsyXT0wOiBCaXRzIFsxOTE6MTI4XSBhcmUgY29waWVkIGZyb20gYSB0byBiaXRzIFsxOTE6MTI4XSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXQgWzJdPTE6IEJpdHMgWzI1NToxOTJdIGFyZSBjb3BpZWQgZnJvbSBhIHRvIGJpdHMgWzE5MToxMjhdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIEJpdCBbM109MDogQml0cyBbMTkxOjEyOF0gYXJlIGNvcGllZCBmcm9tIGIgdG8gYml0cyBbMjU1OjE5Ml0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgQml0IFszXT0xOiBCaXRzIFsyNTU6MTkyXSBhcmUgY29waWVkIGZyb20gYiB0byBiaXRzIFsyNTU6MTkyXSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBzaHVmZmxlZCB2YWx1ZXMuCisjZGVmaW5lIF9tbTI1Nl9zaHVmZmxlX3BkKGEsIGIsIG1hc2spIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRmKShfX20yNTZkKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKCgobWFzaykgPj4gMCkgJiAweDEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChtYXNrKSA+PiAxKSAmIDB4MSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiArICgoKG1hc2spID4+IDIpICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICsgKCgobWFzaykgPj4gMykgJiAweDEpKTsgfSkKKworLyogQ29tcGFyZSAqLworI2RlZmluZSBfQ01QX0VRX09RICAgIDB4MDAgLyogRXF1YWwgKG9yZGVyZWQsIG5vbi1zaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX0xUX09TICAgIDB4MDEgLyogTGVzcy10aGFuIChvcmRlcmVkLCBzaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX0xFX09TICAgIDB4MDIgLyogTGVzcy10aGFuLW9yLWVxdWFsIChvcmRlcmVkLCBzaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX1VOT1JEX1EgIDB4MDMgLyogVW5vcmRlcmVkIChub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9ORVFfVVEgICAweDA0IC8qIE5vdC1lcXVhbCAodW5vcmRlcmVkLCBub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9OTFRfVVMgICAweDA1IC8qIE5vdC1sZXNzLXRoYW4gKHVub3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9OTEVfVVMgICAweDA2IC8qIE5vdC1sZXNzLXRoYW4tb3ItZXF1YWwgKHVub3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9PUkRfUSAgICAweDA3IC8qIE9yZGVyZWQgKG5vbnNpZ25hbGluZykgICAqLworI2RlZmluZSBfQ01QX0VRX1VRICAgIDB4MDggLyogRXF1YWwgKHVub3JkZXJlZCwgbm9uLXNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfTkdFX1VTICAgMHgwOSAvKiBOb3QtZ3JlYXRlci10aGFuLW9yLWVxdWFsICh1bm9yZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9OR1RfVVMgICAweDBhIC8qIE5vdC1ncmVhdGVyLXRoYW4gKHVub3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9GQUxTRV9PUSAweDBiIC8qIEZhbHNlIChvcmRlcmVkLCBub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9ORVFfT1EgICAweDBjIC8qIE5vdC1lcXVhbCAob3JkZXJlZCwgbm9uLXNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfR0VfT1MgICAgMHgwZCAvKiBHcmVhdGVyLXRoYW4tb3ItZXF1YWwgKG9yZGVyZWQsIHNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfR1RfT1MgICAgMHgwZSAvKiBHcmVhdGVyLXRoYW4gKG9yZGVyZWQsIHNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfVFJVRV9VUSAgMHgwZiAvKiBUcnVlICh1bm9yZGVyZWQsIG5vbi1zaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX0VRX09TICAgIDB4MTAgLyogRXF1YWwgKG9yZGVyZWQsIHNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfTFRfT1EgICAgMHgxMSAvKiBMZXNzLXRoYW4gKG9yZGVyZWQsIG5vbi1zaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX0xFX09RICAgIDB4MTIgLyogTGVzcy10aGFuLW9yLWVxdWFsIChvcmRlcmVkLCBub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9VTk9SRF9TICAweDEzIC8qIFVub3JkZXJlZCAoc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9ORVFfVVMgICAweDE0IC8qIE5vdC1lcXVhbCAodW5vcmRlcmVkLCBzaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX05MVF9VUSAgIDB4MTUgLyogTm90LWxlc3MtdGhhbiAodW5vcmRlcmVkLCBub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9OTEVfVVEgICAweDE2IC8qIE5vdC1sZXNzLXRoYW4tb3ItZXF1YWwgKHVub3JkLCBub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9PUkRfUyAgICAweDE3IC8qIE9yZGVyZWQgKHNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfRVFfVVMgICAgMHgxOCAvKiBFcXVhbCAodW5vcmRlcmVkLCBzaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX05HRV9VUSAgIDB4MTkgLyogTm90LWdyZWF0ZXItdGhhbi1vci1lcXVhbCAodW5vcmQsIG5vbi1zaWduKSAgKi8KKyNkZWZpbmUgX0NNUF9OR1RfVVEgICAweDFhIC8qIE5vdC1ncmVhdGVyLXRoYW4gKHVub3JkZXJlZCwgbm9uLXNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfRkFMU0VfT1MgMHgxYiAvKiBGYWxzZSAob3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9ORVFfT1MgICAweDFjIC8qIE5vdC1lcXVhbCAob3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9HRV9PUSAgICAweDFkIC8qIEdyZWF0ZXItdGhhbi1vci1lcXVhbCAob3JkZXJlZCwgbm9uLXNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfR1RfT1EgICAgMHgxZSAvKiBHcmVhdGVyLXRoYW4gKG9yZGVyZWQsIG5vbi1zaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX1RSVUVfVVMgIDB4MWYgLyogVHJ1ZSAodW5vcmRlcmVkLCBzaWduYWxpbmcpICAqLworCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgZG91YmxlLXByZWNpc2lvbiB2YWx1ZXMgb2YgdHdvCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSwgdXNpbmcgdGhlIG9wZXJhdGlvbiBzcGVjaWZpZWQgYnkgdGhlCisvLy8gICAgaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZC4gUmV0dXJucyBhIFsyIHggZG91YmxlXSB2ZWN0b3IgY29uc2lzdGluZyBvZgorLy8vICAgIHR3byBkb3VibGVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR3byBjb21wYXJpc29uIHJlc3VsdHM6IHplcm8gaWYgdGhlCisvLy8gICAgY29tcGFyaXNvbiBpcyBmYWxzZSwgYW5kIGFsbCAxJ3MgaWYgdGhlIGNvbXBhcmlzb24gaXMgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMTI4ZCBfbW1fY21wX3BkKF9fbTEyOGQgYSwgX19tMTI4ZCBiLCBjb25zdCBpbnQgYyk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QUEQgLyBDTVBQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIGIKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLyBccGFyYW0gYworLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQsIHdpdGggYml0cyBbNDowXSBzcGVjaWZ5aW5nIHdoaWNoIGNvbXBhcmlzb24KKy8vLyAgICBvcGVyYXRpb24gdG8gdXNlOgorLy8vICAgIDAwaCwgMDhoLCAxMGgsIDE4aDogRXF1YWwKKy8vLyAgICAwMWgsIDA5aCwgMTFoLCAxOWg6IExlc3MgdGhhbgorLy8vICAgIDAyaCwgMEFoLCAxMmgsIDFBaDogTGVzcyB0aGFuIG9yIGVxdWFsIC8gR3JlYXRlciB0aGFuIG9yIGVxdWFsIChzd2FwcGVkCisvLy8gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kcykKKy8vLyAgICAwM2gsIDBCaCwgMTNoLCAxQmg6IFVub3JkZXJlZAorLy8vICAgIDA0aCwgMENoLCAxNGgsIDFDaDogTm90IGVxdWFsCisvLy8gICAgMDVoLCAwRGgsIDE1aCwgMURoOiBOb3QgbGVzcyB0aGFuIC8gTm90IGdyZWF0ZXIgdGhhbiAoc3dhcHBlZCBvcGVyYW5kcykKKy8vLyAgICAwNmgsIDBFaCwgMTZoLCAxRWg6IE5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgLyBOb3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsCisvLy8gICAgICAgICAgICAgICAgICAgICAgICAoc3dhcHBlZCBvcGVyYW5kcykKKy8vLyAgICAwN2gsIDBGaCwgMTdoLCAxRmg6IE9yZGVyZWQKKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCisjZGVmaW5lIF9tbV9jbXBfcGQoYSwgYiwgYykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcHBkKChfX3YyZGYpKF9fbTEyOGQpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKGIpLCAoYykpOyB9KQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIG9mIHR3byAxMjgtYml0IHZlY3RvcnMgb2YKKy8vLyAgICBbNCB4IGZsb2F0XSwgdXNpbmcgdGhlIG9wZXJhdGlvbiBzcGVjaWZpZWQgYnkgdGhlIGltbWVkaWF0ZSBpbnRlZ2VyCisvLy8gICAgb3BlcmFuZC4gUmV0dXJucyBhIFs0IHggZmxvYXRdIHZlY3RvciBjb25zaXN0aW5nIG9mIGZvdXIgZmxvYXRzCisvLy8gICAgY29ycmVzcG9uZGluZyB0byB0aGUgZm91ciBjb21wYXJpc29uIHJlc3VsdHM6IHplcm8gaWYgdGhlIGNvbXBhcmlzb24gaXMKKy8vLyAgICBmYWxzZSwgYW5kIGFsbCAxJ3MgaWYgdGhlIGNvbXBhcmlzb24gaXMgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMTI4IF9tbV9jbXBfcHMoX19tMTI4IGEsIF9fbTEyOCBiLCBjb25zdCBpbnQgYyk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QUFMgLyBDTVBQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIGMKKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kLCB3aXRoIGJpdHMgWzQ6MF0gc3BlY2lmeWluZyB3aGljaCBjb21wYXJpc29uCisvLy8gICAgb3BlcmF0aW9uIHRvIHVzZToKKy8vLyAgICAwMGgsIDA4aCwgMTBoLCAxOGg6IEVxdWFsCisvLy8gICAgMDFoLCAwOWgsIDExaCwgMTloOiBMZXNzIHRoYW4KKy8vLyAgICAwMmgsIDBBaCwgMTJoLCAxQWg6IExlc3MgdGhhbiBvciBlcXVhbCAvIEdyZWF0ZXIgdGhhbiBvciBlcXVhbCAoc3dhcHBlZAorLy8vICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZHMpCisvLy8gICAgMDNoLCAwQmgsIDEzaCwgMUJoOiBVbm9yZGVyZWQKKy8vLyAgICAwNGgsIDBDaCwgMTRoLCAxQ2g6IE5vdCBlcXVhbAorLy8vICAgIDA1aCwgMERoLCAxNWgsIDFEaDogTm90IGxlc3MgdGhhbiAvIE5vdCBncmVhdGVyIHRoYW4gKHN3YXBwZWQgb3BlcmFuZHMpCisvLy8gICAgMDZoLCAwRWgsIDE2aCwgMUVoOiBOb3QgbGVzcyB0aGFuIG9yIGVxdWFsIC8gTm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbAorLy8vICAgICAgICAgICAgICAgICAgICAgICAoc3dhcHBlZCBvcGVyYW5kcykKKy8vLyAgICAwN2gsIDBGaCwgMTdoLCAxRmg6IE9yZGVyZWQKKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KKyNkZWZpbmUgX21tX2NtcF9wcyhhLCBiLCBjKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBwcygoX192NHNmKShfX20xMjgpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShiKSwgKGMpKTsgfSkKKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzIG9mIHR3bworLy8vICAgIDI1Ni1iaXQgdmVjdG9ycyBvZiBbNCB4IGRvdWJsZV0sIHVzaW5nIHRoZSBvcGVyYXRpb24gc3BlY2lmaWVkIGJ5IHRoZQorLy8vICAgIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQuIFJldHVybnMgYSBbNCB4IGRvdWJsZV0gdmVjdG9yIGNvbnNpc3Rpbmcgb2YKKy8vLyAgICBmb3VyIGRvdWJsZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZm91ciBjb21wYXJpc29uIHJlc3VsdHM6IHplcm8gaWYgdGhlCisvLy8gICAgY29tcGFyaXNvbiBpcyBmYWxzZSwgYW5kIGFsbCAxJ3MgaWYgdGhlIGNvbXBhcmlzb24gaXMgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMjU2ZCBfbW0yNTZfY21wX3BkKF9fbTI1NmQgYSwgX19tMjU2ZCBiLCBjb25zdCBpbnQgYyk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QUEQgLyBDTVBQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbNCB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIGIKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLyBccGFyYW0gYworLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQsIHdpdGggYml0cyBbNDowXSBzcGVjaWZ5aW5nIHdoaWNoIGNvbXBhcmlzb24KKy8vLyAgICBvcGVyYXRpb24gdG8gdXNlOgorLy8vICAgIDAwaCwgMDhoLCAxMGgsIDE4aDogRXF1YWwKKy8vLyAgICAwMWgsIDA5aCwgMTFoLCAxOWg6IExlc3MgdGhhbgorLy8vICAgIDAyaCwgMEFoLCAxMmgsIDFBaDogTGVzcyB0aGFuIG9yIGVxdWFsIC8gR3JlYXRlciB0aGFuIG9yIGVxdWFsIChzd2FwcGVkCisvLy8gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kcykKKy8vLyAgICAwM2gsIDBCaCwgMTNoLCAxQmg6IFVub3JkZXJlZAorLy8vICAgIDA0aCwgMENoLCAxNGgsIDFDaDogTm90IGVxdWFsCisvLy8gICAgMDVoLCAwRGgsIDE1aCwgMURoOiBOb3QgbGVzcyB0aGFuIC8gTm90IGdyZWF0ZXIgdGhhbiAoc3dhcHBlZCBvcGVyYW5kcykKKy8vLyAgICAwNmgsIDBFaCwgMTZoLCAxRWg6IE5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgLyBOb3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsCisvLy8gICAgICAgICAgICAgICAgICAgICAgICAoc3dhcHBlZCBvcGVyYW5kcykKKy8vLyAgICAwN2gsIDBGaCwgMTdoLCAxRmg6IE9yZGVyZWQKKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs0IHggZG91YmxlXSBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCisjZGVmaW5lIF9tbTI1Nl9jbXBfcGQoYSwgYiwgYykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2NtcHBkMjU2KChfX3Y0ZGYpKF9fbTI1NmQpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKGIpLCAoYykpOyB9KQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIG9mIHR3byAyNTYtYml0IHZlY3RvcnMgb2YKKy8vLyAgICBbOCB4IGZsb2F0XSwgdXNpbmcgdGhlIG9wZXJhdGlvbiBzcGVjaWZpZWQgYnkgdGhlIGltbWVkaWF0ZSBpbnRlZ2VyCisvLy8gICAgb3BlcmFuZC4gUmV0dXJucyBhIFs4IHggZmxvYXRdIHZlY3RvciBjb25zaXN0aW5nIG9mIGVpZ2h0IGZsb2F0cworLy8vICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGVpZ2h0IGNvbXBhcmlzb24gcmVzdWx0czogemVybyBpZiB0aGUgY29tcGFyaXNvbiBpcworLy8vICAgIGZhbHNlLCBhbmQgYWxsIDEncyBpZiB0aGUgY29tcGFyaXNvbiBpcyB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20yNTYgX21tMjU2X2NtcF9wcyhfX20yNTYgYSwgX19tMjU2IGIsIGNvbnN0IGludCBjKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBQUyAvIENNUFBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vIFxwYXJhbSBiCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gYworLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQsIHdpdGggYml0cyBbNDowXSBzcGVjaWZ5aW5nIHdoaWNoIGNvbXBhcmlzb24KKy8vLyAgICBvcGVyYXRpb24gdG8gdXNlOgorLy8vICAgIDAwaCwgMDhoLCAxMGgsIDE4aDogRXF1YWwKKy8vLyAgICAwMWgsIDA5aCwgMTFoLCAxOWg6IExlc3MgdGhhbgorLy8vICAgIDAyaCwgMEFoLCAxMmgsIDFBaDogTGVzcyB0aGFuIG9yIGVxdWFsIC8gR3JlYXRlciB0aGFuIG9yIGVxdWFsIChzd2FwcGVkCisvLy8gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kcykKKy8vLyAgICAwM2gsIDBCaCwgMTNoLCAxQmg6IFVub3JkZXJlZAorLy8vICAgIDA0aCwgMENoLCAxNGgsIDFDaDogTm90IGVxdWFsCisvLy8gICAgMDVoLCAwRGgsIDE1aCwgMURoOiBOb3QgbGVzcyB0aGFuIC8gTm90IGdyZWF0ZXIgdGhhbiAoc3dhcHBlZCBvcGVyYW5kcykKKy8vLyAgICAwNmgsIDBFaCwgMTZoLCAxRWg6IE5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgLyBOb3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsCisvLy8gICAgICAgICAgICAgICAgICAgICAgIChzd2FwcGVkIG9wZXJhbmRzKQorLy8vICAgIDA3aCwgMEZoLCAxN2gsIDFGaDogT3JkZXJlZAorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorI2RlZmluZSBfbW0yNTZfY21wX3BzKGEsIGIsIGMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2NtcHBzMjU2KChfX3Y4c2YpKF9fbTI1NikoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKGIpLCAoYykpOyB9KQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2NhbGFyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzIG9mCisvLy8gICAgdHdvIDEyOC1iaXQgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0sIHVzaW5nIHRoZSBvcGVyYXRpb24gc3BlY2lmaWVkIGJ5IHRoZQorLy8vICAgIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQuIElmIHRoZSByZXN1bHQgaXMgdHJ1ZSwgYWxsIDY0IGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24gdmVjdG9yIGFyZSBzZXQ7IG90aGVyd2lzZSB0aGV5IGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20xMjhkIF9tbV9jbXBfc2QoX19tMTI4ZCBhLCBfX20xMjhkIGIsIGNvbnN0IGludCBjKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBTRCAvIENNUFNEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLyBccGFyYW0gYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBjCisvLy8gICAgQW4gaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZCwgd2l0aCBiaXRzIFs0OjBdIHNwZWNpZnlpbmcgd2hpY2ggY29tcGFyaXNvbgorLy8vICAgIG9wZXJhdGlvbiB0byB1c2U6CisvLy8gICAgMDBoLCAwOGgsIDEwaCwgMThoOiBFcXVhbAorLy8vICAgIDAxaCwgMDloLCAxMWgsIDE5aDogTGVzcyB0aGFuCisvLy8gICAgMDJoLCAwQWgsIDEyaCwgMUFoOiBMZXNzIHRoYW4gb3IgZXF1YWwgLyBHcmVhdGVyIHRoYW4gb3IgZXF1YWwgKHN3YXBwZWQKKy8vLyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRzKQorLy8vICAgIDAzaCwgMEJoLCAxM2gsIDFCaDogVW5vcmRlcmVkCisvLy8gICAgMDRoLCAwQ2gsIDE0aCwgMUNoOiBOb3QgZXF1YWwKKy8vLyAgICAwNWgsIDBEaCwgMTVoLCAxRGg6IE5vdCBsZXNzIHRoYW4gLyBOb3QgZ3JlYXRlciB0aGFuIChzd2FwcGVkIG9wZXJhbmRzKQorLy8vICAgIDA2aCwgMEVoLCAxNmgsIDFFaDogTm90IGxlc3MgdGhhbiBvciBlcXVhbCAvIE5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwKKy8vLyAgICAgICAgICAgICAgICAgICAgICAgKHN3YXBwZWQgb3BlcmFuZHMpCisvLy8gICAgMDdoLCAwRmgsIDE3aCwgMUZoOiBPcmRlcmVkCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorI2RlZmluZSBfbW1fY21wX3NkKGEsIGIsIGMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBzZCgoX192MmRmKShfX20xMjhkKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShiKSwgKGMpKTsgfSkKKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNjYWxhciB2YWx1ZXMgb2YgdHdvIDEyOC1iaXQKKy8vLyAgICB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdLCB1c2luZyB0aGUgb3BlcmF0aW9uIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlCisvLy8gICAgaW50ZWdlciBvcGVyYW5kLiBJZiB0aGUgcmVzdWx0IGlzIHRydWUsIGFsbCAzMiBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbgorLy8vICAgIHZlY3RvciBhcmUgc2V0OyBvdGhlcndpc2UgdGhleSBhcmUgY2xlYXJlZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMTI4IF9tbV9jbXBfc3MoX19tMTI4IGEsIF9fbTEyOCBiLCBjb25zdCBpbnQgYyk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QU1MgLyBDTVBTUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIGMKKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kLCB3aXRoIGJpdHMgWzQ6MF0gc3BlY2lmeWluZyB3aGljaCBjb21wYXJpc29uCisvLy8gICAgb3BlcmF0aW9uIHRvIHVzZToKKy8vLyAgICAwMGgsIDA4aCwgMTBoLCAxOGg6IEVxdWFsCisvLy8gICAgMDFoLCAwOWgsIDExaCwgMTloOiBMZXNzIHRoYW4KKy8vLyAgICAwMmgsIDBBaCwgMTJoLCAxQWg6IExlc3MgdGhhbiBvciBlcXVhbCAvIEdyZWF0ZXIgdGhhbiBvciBlcXVhbCAoc3dhcHBlZAorLy8vICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZHMpCisvLy8gICAgMDNoLCAwQmgsIDEzaCwgMUJoOiBVbm9yZGVyZWQKKy8vLyAgICAwNGgsIDBDaCwgMTRoLCAxQ2g6IE5vdCBlcXVhbAorLy8vICAgIDA1aCwgMERoLCAxNWgsIDFEaDogTm90IGxlc3MgdGhhbiAvIE5vdCBncmVhdGVyIHRoYW4gKHN3YXBwZWQgb3BlcmFuZHMpCisvLy8gICAgMDZoLCAwRWgsIDE2aCwgMUVoOiBOb3QgbGVzcyB0aGFuIG9yIGVxdWFsIC8gTm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbAorLy8vICAgICAgICAgICAgICAgICAgICAgICAoc3dhcHBlZCBvcGVyYW5kcykKKy8vLyAgICAwN2gsIDBGaCwgMTdoLCAxRmg6IE9yZGVyZWQKKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KKyNkZWZpbmUgX21tX2NtcF9zcyhhLCBiLCBjKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBzcygoX192NHNmKShfX20xMjgpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShiKSwgKGMpKTsgfSkKKworLy8vIFxicmllZiBUYWtlcyBhIFs4IHggaTMyXSB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIHZlY3RvciBlbGVtZW50IHZhbHVlCisvLy8gICAgaW5kZXhlZCBieSB0aGUgaW1tZWRpYXRlIGNvbnN0YW50IG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkVYVFJBQ1RGMTI4K0NPTVBPU0lURSAvCisvLy8gICBFWFRSQUNURjEyOCtDT01QT1NJVEUgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGkzMl0uCisvLy8gXHBhcmFtIF9faW1tCisvLy8gICAgQW4gaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZCB3aXRoIGJpdHMgWzI6MF0gZGV0ZXJtaW5pbmcgd2hpY2ggdmVjdG9yCisvLy8gICAgZWxlbWVudCBpcyBleHRyYWN0ZWQgYW5kIHJldHVybmVkLgorLy8vIFxyZXR1cm5zIEEgMzItYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgZXh0cmFjdGVkIDMyIGJpdHMgb2YgZXh0ZW5kZWQKKy8vLyAgICBwYWNrZWQgZGF0YS4KK3N0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZXh0cmFjdF9lcGkzMihfX20yNTZpIF9fYSwgY29uc3QgaW50IF9faW1tKQoreworICBfX3Y4c2kgX19iID0gKF9fdjhzaSlfX2E7CisgIHJldHVybiBfX2JbX19pbW0gJiA3XTsKK30KKworLy8vIFxicmllZiBUYWtlcyBhIFsxNiB4IGkxNl0gdmVjdG9yIGFuZCByZXR1cm5zIHRoZSB2ZWN0b3IgZWxlbWVudCB2YWx1ZQorLy8vICAgIGluZGV4ZWQgYnkgdGhlIGltbWVkaWF0ZSBjb25zdGFudCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZFWFRSQUNURjEyOCtDT01QT1NJVEUgLworLy8vICAgIEVYVFJBQ1RGMTI4K0NPTVBPU0lURSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDI1Ni1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzE2IHggaTE2XS4KKy8vLyBccGFyYW0gX19pbW0KKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kIHdpdGggYml0cyBbMzowXSBkZXRlcm1pbmluZyB3aGljaCB2ZWN0b3IKKy8vLyAgICBlbGVtZW50IGlzIGV4dHJhY3RlZCBhbmQgcmV0dXJuZWQuCisvLy8gXHJldHVybnMgQSAzMi1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBleHRyYWN0ZWQgMTYgYml0cyBvZiB6ZXJvIGV4dGVuZGVkCisvLy8gICAgcGFja2VkIGRhdGEuCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2V4dHJhY3RfZXBpMTYoX19tMjU2aSBfX2EsIGNvbnN0IGludCBfX2ltbSkKK3sKKyAgX192MTZoaSBfX2IgPSAoX192MTZoaSlfX2E7CisgIHJldHVybiAodW5zaWduZWQgc2hvcnQpX19iW19faW1tICYgMTVdOworfQorCisvLy8gXGJyaWVmIFRha2VzIGEgWzMyIHggaThdIHZlY3RvciBhbmQgcmV0dXJucyB0aGUgdmVjdG9yIGVsZW1lbnQgdmFsdWUKKy8vLyAgICBpbmRleGVkIGJ5IHRoZSBpbW1lZGlhdGUgY29uc3RhbnQgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWRVhUUkFDVEYxMjgrQ09NUE9TSVRFIC8KKy8vLyAgICBFWFRSQUNURjEyOCtDT01QT1NJVEUgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IGludGVnZXIgdmVjdG9yIG9mIFszMiB4IGk4XS4KKy8vLyBccGFyYW0gX19pbW0KKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kIHdpdGggYml0cyBbNDowXSBkZXRlcm1pbmluZyB3aGljaCB2ZWN0b3IKKy8vLyAgICBlbGVtZW50IGlzIGV4dHJhY3RlZCBhbmQgcmV0dXJuZWQuCisvLy8gXHJldHVybnMgQSAzMi1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBleHRyYWN0ZWQgOCBiaXRzIG9mIHplcm8gZXh0ZW5kZWQKKy8vLyAgICBwYWNrZWQgZGF0YS4KK3N0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZXh0cmFjdF9lcGk4KF9fbTI1NmkgX19hLCBjb25zdCBpbnQgX19pbW0pCit7CisgIF9fdjMycWkgX19iID0gKF9fdjMycWkpX19hOworICByZXR1cm4gKHVuc2lnbmVkIGNoYXIpX19iW19faW1tICYgMzFdOworfQorCisjaWZkZWYgX194ODZfNjRfXworLy8vIFxicmllZiBUYWtlcyBhIFs0IHggaTY0XSB2ZWN0b3IgYW5kIHJldHVybnMgdGhlIHZlY3RvciBlbGVtZW50IHZhbHVlCisvLy8gICAgaW5kZXhlZCBieSB0aGUgaW1tZWRpYXRlIGNvbnN0YW50IG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkVYVFJBQ1RGMTI4K0NPTVBPU0lURSAvCisvLy8gICAgRVhUUkFDVEYxMjgrQ09NUE9TSVRFIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGk2NF0uCisvLy8gXHBhcmFtIF9faW1tCisvLy8gICAgQW4gaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZCB3aXRoIGJpdHMgWzE6MF0gZGV0ZXJtaW5pbmcgd2hpY2ggdmVjdG9yCisvLy8gICAgZWxlbWVudCBpcyBleHRyYWN0ZWQgYW5kIHJldHVybmVkLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgZXh0cmFjdGVkIDY0IGJpdHMgb2YgZXh0ZW5kZWQKKy8vLyAgICBwYWNrZWQgZGF0YS4KK3N0YXRpYyBfX2lubGluZSBsb25nIGxvbmcgIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2V4dHJhY3RfZXBpNjQoX19tMjU2aSBfX2EsIGNvbnN0IGludCBfX2ltbSkKK3sKKyAgX192NGRpIF9fYiA9IChfX3Y0ZGkpX19hOworICByZXR1cm4gX19iW19faW1tICYgM107Cit9CisjZW5kaWYKKworLy8vIFxicmllZiBUYWtlcyBhIFs4IHggaTMyXSB2ZWN0b3IgYW5kIHJlcGxhY2VzIHRoZSB2ZWN0b3IgZWxlbWVudCB2YWx1ZQorLy8vICAgIGluZGV4ZWQgYnkgdGhlIGltbWVkaWF0ZSBjb25zdGFudCBvcGVyYW5kIGJ5IGEgbmV3IHZhbHVlLiBSZXR1cm5zIHRoZQorLy8vICAgIG1vZGlmaWVkIHZlY3Rvci4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWSU5TRVJURjEyOCtDT01QT1NJVEUgLworLy8vICAgIElOU0VSVEYxMjgrQ09NUE9TSVRFIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgdmVjdG9yIG9mIFs4IHggaTMyXSB0byBiZSB1c2VkIGJ5IHRoZSBpbnNlcnQgb3BlcmF0aW9uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBbiBpbnRlZ2VyIHZhbHVlLiBUaGUgcmVwbGFjZW1lbnQgdmFsdWUgZm9yIHRoZSBpbnNlcnQgb3BlcmF0aW9uLgorLy8vIFxwYXJhbSBfX2ltbQorLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIGluZGV4IG9mIHRoZSB2ZWN0b3IgZWxlbWVudCB0byBiZQorLy8vICAgIHJlcGxhY2VkLgorLy8vIFxyZXR1cm5zIEEgY29weSBvZiB2ZWN0b3IgX19hLCBhZnRlciByZXBsYWNpbmcgaXRzIGVsZW1lbnQgaW5kZXhlZCBieSBfX2ltbQorLy8vICAgICB3aXRoIF9fYi4KK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2luc2VydF9lcGkzMihfX20yNTZpIF9fYSwgaW50IF9fYiwgaW50IGNvbnN0IF9faW1tKQoreworICBfX3Y4c2kgX19jID0gKF9fdjhzaSlfX2E7CisgIF9fY1tfX2ltbSAmIDddID0gX19iOworICByZXR1cm4gKF9fbTI1NmkpX19jOworfQorCisKKy8vLyBcYnJpZWYgVGFrZXMgYSBbMTYgeCBpMTZdIHZlY3RvciBhbmQgcmVwbGFjZXMgdGhlIHZlY3RvciBlbGVtZW50IHZhbHVlCisvLy8gICAgaW5kZXhlZCBieSB0aGUgaW1tZWRpYXRlIGNvbnN0YW50IG9wZXJhbmQgd2l0aCBhIG5ldyB2YWx1ZS4gUmV0dXJucyB0aGUKKy8vLyAgICBtb2RpZmllZCB2ZWN0b3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVklOU0VSVEYxMjgrQ09NUE9TSVRFIC8KKy8vLyAgICBJTlNFUlRGMTI4K0NPTVBPU0lURSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIHZlY3RvciBvZiBbMTYgeCBpMTZdIHRvIGJlIHVzZWQgYnkgdGhlIGluc2VydCBvcGVyYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEFuIGkxNiBpbnRlZ2VyIHZhbHVlLiBUaGUgcmVwbGFjZW1lbnQgdmFsdWUgZm9yIHRoZSBpbnNlcnQgb3BlcmF0aW9uLgorLy8vIFxwYXJhbSBfX2ltbQorLy8vICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIGluZGV4IG9mIHRoZSB2ZWN0b3IgZWxlbWVudCB0byBiZQorLy8vICAgIHJlcGxhY2VkLgorLy8vIFxyZXR1cm5zIEEgY29weSBvZiB2ZWN0b3IgX19hLCBhZnRlciByZXBsYWNpbmcgaXRzIGVsZW1lbnQgaW5kZXhlZCBieSBfX2ltbQorLy8vICAgICB3aXRoIF9fYi4KK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2luc2VydF9lcGkxNihfX20yNTZpIF9fYSwgaW50IF9fYiwgaW50IGNvbnN0IF9faW1tKQoreworICBfX3YxNmhpIF9fYyA9IChfX3YxNmhpKV9fYTsKKyAgX19jW19faW1tICYgMTVdID0gX19iOworICByZXR1cm4gKF9fbTI1NmkpX19jOworfQorCisvLy8gXGJyaWVmIFRha2VzIGEgWzMyIHggaThdIHZlY3RvciBhbmQgcmVwbGFjZXMgdGhlIHZlY3RvciBlbGVtZW50IHZhbHVlCisvLy8gICAgaW5kZXhlZCBieSB0aGUgaW1tZWRpYXRlIGNvbnN0YW50IG9wZXJhbmQgd2l0aCBhIG5ldyB2YWx1ZS4gUmV0dXJucyB0aGUKKy8vLyAgICBtb2RpZmllZCB2ZWN0b3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVklOU0VSVEYxMjgrQ09NUE9TSVRFIC8KKy8vLyAgICBJTlNFUlRGMTI4K0NPTVBPU0lURSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIHZlY3RvciBvZiBbMzIgeCBpOF0gdG8gYmUgdXNlZCBieSB0aGUgaW5zZXJ0IG9wZXJhdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQW4gaTggaW50ZWdlciB2YWx1ZS4gVGhlIHJlcGxhY2VtZW50IHZhbHVlIGZvciB0aGUgaW5zZXJ0IG9wZXJhdGlvbi4KKy8vLyBccGFyYW0gX19pbW0KKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBzcGVjaWZ5aW5nIHRoZSBpbmRleCBvZiB0aGUgdmVjdG9yIGVsZW1lbnQgdG8gYmUKKy8vLyAgICByZXBsYWNlZC4KKy8vLyBccmV0dXJucyBBIGNvcHkgb2YgdmVjdG9yIF9fYSwgYWZ0ZXIgcmVwbGFjaW5nIGl0cyBlbGVtZW50IGluZGV4ZWQgYnkgX19pbW0KKy8vLyAgICB3aXRoIF9fYi4KK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2luc2VydF9lcGk4KF9fbTI1NmkgX19hLCBpbnQgX19iLCBpbnQgY29uc3QgX19pbW0pCit7CisgIF9fdjMycWkgX19jID0gKF9fdjMycWkpX19hOworICBfX2NbX19pbW0gJiAzMV0gPSBfX2I7CisgIHJldHVybiAoX19tMjU2aSlfX2M7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCisvLy8gXGJyaWVmIFRha2VzIGEgWzQgeCBpNjRdIHZlY3RvciBhbmQgcmVwbGFjZXMgdGhlIHZlY3RvciBlbGVtZW50IHZhbHVlCisvLy8gICAgaW5kZXhlZCBieSB0aGUgaW1tZWRpYXRlIGNvbnN0YW50IG9wZXJhbmQgd2l0aCBhIG5ldyB2YWx1ZS4gUmV0dXJucyB0aGUKKy8vLyAgICBtb2RpZmllZCB2ZWN0b3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVklOU0VSVEYxMjgrQ09NUE9TSVRFIC8KKy8vLyAgICBJTlNFUlRGMTI4K0NPTVBPU0lURSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIHZlY3RvciBvZiBbNCB4IGk2NF0gdG8gYmUgdXNlZCBieSB0aGUgaW5zZXJ0IG9wZXJhdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2YWx1ZS4gVGhlIHJlcGxhY2VtZW50IHZhbHVlIGZvciB0aGUgaW5zZXJ0IG9wZXJhdGlvbi4KKy8vLyBccGFyYW0gX19pbW0KKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBzcGVjaWZ5aW5nIHRoZSBpbmRleCBvZiB0aGUgdmVjdG9yIGVsZW1lbnQgdG8gYmUKKy8vLyAgICByZXBsYWNlZC4KKy8vLyBccmV0dXJucyBBIGNvcHkgb2YgdmVjdG9yIF9fYSwgYWZ0ZXIgcmVwbGFjaW5nIGl0cyBlbGVtZW50IGluZGV4ZWQgYnkgX19pbW0KKy8vLyAgICAgd2l0aCBfX2IuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9pbnNlcnRfZXBpNjQoX19tMjU2aSBfX2EsIGxvbmcgbG9uZyBfX2IsIGludCBjb25zdCBfX2ltbSkKK3sKKyAgX192NGRpIF9fYyA9IChfX3Y0ZGkpX19hOworICBfX2NbX19pbW0gJiAzXSA9IF9fYjsKKyAgcmV0dXJuIChfX20yNTZpKV9fYzsKK30KKyNlbmRpZgorCisvKiBDb252ZXJzaW9uICovCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgdmVjdG9yIG9mIFs0IHggaTMyXSBpbnRvIGEgdmVjdG9yIG9mIFs0IHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZURFEyUEQgLyBDVlREUTJQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMzJdLgorLy8vIFxyZXR1cm5zIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGkzMl9wZChfX20xMjhpIF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKChfX3Y0c2kpX19hLCBfX3Y0ZGYpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgdmVjdG9yIG9mIFs4IHggaTMyXSBpbnRvIGEgdmVjdG9yIG9mIFs4IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlREUTJQUyAvIENWVERRMlBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgdmVjdG9yIG9mIFs4IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwaTMyX3BzKF9fbTI1NmkgX19hKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9jdnRkcTJwczI1NigoX192OHNpKSBfX2EpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdIGludG8gYSAxMjgtYml0IHZlY3RvciBvZgorLy8vICAgIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlRQRDJQUyAvIENWVFBEMlBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMjU2LWJpdCB2ZWN0b3Igb2YgWzQgeCBkb3VibGVdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0cGRfcHMoX19tMjU2ZCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzMjU2KChfX3Y0ZGYpIF9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgYSB2ZWN0b3Igb2YgWzggeCBmbG9hdF0gaW50byBhIHZlY3RvciBvZiBbOCB4IGkzMl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFBTMkRRIC8gQ1ZUUFMyRFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAyNTYtYml0IHZlY3RvciBvZiBbOCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDI1Ni1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHBzX2VwaTMyKF9fbTI1NiBfX2EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9jdnRwczJkcTI1NigoX192OHNmKSBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRwc19wZChfX20xMjggX19hKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoKF9fdjRzZilfX2EsIF9fdjRkZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHRwZF9lcGkzMihfX20yNTZkIF9fYSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTI1NigoX192NGRmKSBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRwZF9lcGkzMihfX20yNTZkIF9fYSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxMjU2KChfX3Y0ZGYpIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHRwc19lcGkzMihfX20yNTYgX19hKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfY3Z0dHBzMmRxMjU2KChfX3Y4c2YpIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBkb3VibGUgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0c2RfZjY0KF9fbTI1NmQgX19hKQoreworIHJldHVybiBfX2FbMF07Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0c2kyNTZfc2kzMihfX20yNTZpIF9fYSkKK3sKKyBfX3Y4c2kgX19iID0gKF9fdjhzaSlfX2E7CisgcmV0dXJuIF9fYlswXTsKK30KKworc3RhdGljIF9faW5saW5lIGZsb2F0IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHNzX2YzMihfX20yNTYgX19hKQoreworIHJldHVybiBfX2FbMF07Cit9CisKKy8qIFZlY3RvciByZXBsaWNhdGUgKi8KK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbW92ZWhkdXBfcHMoX19tMjU2IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2YpX19hLCAoX192OHNmKV9fYSwgMSwgMSwgMywgMywgNSwgNSwgNywgNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbW92ZWxkdXBfcHMoX19tMjU2IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2YpX19hLCAoX192OHNmKV9fYSwgMCwgMCwgMiwgMiwgNCwgNCwgNiwgNik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21vdmVkdXBfcGQoX19tMjU2ZCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRmKV9fYSwgKF9fdjRkZilfX2EsIDAsIDAsIDIsIDIpOworfQorCisvKiBVbnBhY2sgYW5kIEludGVybGVhdmUgKi8KK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3VucGFja2hpX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYiwgMSwgNSwgMSsyLCA1KzIpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bnBhY2tsb19wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRmKV9fYSwgKF9fdjRkZilfX2IsIDAsIDQsIDArMiwgNCsyKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bnBhY2toaV9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhzZilfX2EsIChfX3Y4c2YpX19iLCAyLCAxMCwgMisxLCAxMCsxLCA2LCAxNCwgNisxLCAxNCsxKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bnBhY2tsb19wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhzZilfX2EsIChfX3Y4c2YpX19iLCAwLCA4LCAwKzEsIDgrMSwgNCwgMTIsIDQrMSwgMTIrMSk7Cit9CisKKy8qIEJpdCBUZXN0ICovCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Rlc3R6X3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Z0ZXN0enBkKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdGVzdGNfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdnRlc3RjcGQoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV90ZXN0bnpjX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Z0ZXN0bnpjcGQoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV90ZXN0el9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdnRlc3R6cHMoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV90ZXN0Y19wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdnRlc3RjcHMoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV90ZXN0bnpjX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdG56Y3BzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdGVzdHpfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdnRlc3R6cGQyNTYoKF9fdjRkZilfX2EsIChfX3Y0ZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl90ZXN0Y19wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdGNwZDI1NigoX192NGRmKV9fYSwgKF9fdjRkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Rlc3RuemNfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdnRlc3RuemNwZDI1NigoX192NGRmKV9fYSwgKF9fdjRkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Rlc3R6X3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdHpwczI1NigoX192OHNmKV9fYSwgKF9fdjhzZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Rlc3RjX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdGNwczI1NigoX192OHNmKV9fYSwgKF9fdjhzZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Rlc3RuemNfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Z0ZXN0bnpjcHMyNTYoKF9fdjhzZilfX2EsIChfX3Y4c2YpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl90ZXN0el9zaTI1NihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wdGVzdHoyNTYoKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl90ZXN0Y19zaTI1NihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wdGVzdGMyNTYoKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl90ZXN0bnpjX3NpMjU2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bnpjMjU2KChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYik7Cit9CisKKy8qIFZlY3RvciBleHRyYWN0IHNpZ24gbWFzayAqLworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tb3ZlbWFza19wZChfX20yNTZkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21vdm1za3BkMjU2KChfX3Y0ZGYpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tb3ZlbWFza19wcyhfX20yNTYgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfbW92bXNrcHMyNTYoKF9fdjhzZilfX2EpOworfQorCisvKiBWZWN0b3IgX196ZXJvICovCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl96ZXJvYWxsKHZvaWQpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Z6ZXJvYWxsKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3plcm91cHBlcih2b2lkKQoreworICBfX2J1aWx0aW5faWEzMl92emVyb3VwcGVyKCk7Cit9CisKKy8qIFZlY3RvciBsb2FkIHdpdGggYnJvYWRjYXN0ICovCitzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Jyb2FkY2FzdF9zcyhmbG9hdCBjb25zdCAqX19hKQoreworICBmbG9hdCBfX2YgPSAqX19hOworICByZXR1cm4gKF9fbTEyOCkoX192NHNmKXsgX19mLCBfX2YsIF9fZiwgX19mIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdF9zZChkb3VibGUgY29uc3QgKl9fYSkKK3sKKyAgZG91YmxlIF9fZCA9ICpfX2E7CisgIHJldHVybiAoX19tMjU2ZCkoX192NGRmKXsgX19kLCBfX2QsIF9fZCwgX19kIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0X3NzKGZsb2F0IGNvbnN0ICpfX2EpCit7CisgIGZsb2F0IF9fZiA9ICpfX2E7CisgIHJldHVybiAoX19tMjU2KShfX3Y4c2YpeyBfX2YsIF9fZiwgX19mLCBfX2YsIF9fZiwgX19mLCBfX2YsIF9fZiB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9icm9hZGNhc3RfcGQoX19tMTI4ZCBjb25zdCAqX19hKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmJyb2FkY2FzdGYxMjhfcGQyNTYoKF9fdjJkZiBjb25zdCAqKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0X3BzKF9fbTEyOCBjb25zdCAqX19hKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92YnJvYWRjYXN0ZjEyOF9wczI1NigoX192NHNmIGNvbnN0ICopX19hKTsKK30KKworLyogU0lNRCBsb2FkIG9wcyAqLworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbG9hZF9wZChkb3VibGUgY29uc3QgKl9fcCkKK3sKKyAgcmV0dXJuICooX19tMjU2ZCAqKV9fcDsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9sb2FkX3BzKGZsb2F0IGNvbnN0ICpfX3ApCit7CisgIHJldHVybiAqKF9fbTI1NiAqKV9fcDsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbG9hZHVfcGQoZG91YmxlIGNvbnN0ICpfX3ApCit7CisgIHN0cnVjdCBfX2xvYWR1X3BkIHsKKyAgICBfX20yNTZkIF9fdjsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIHJldHVybiAoKHN0cnVjdCBfX2xvYWR1X3BkKilfX3ApLT5fX3Y7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbG9hZHVfcHMoZmxvYXQgY29uc3QgKl9fcCkKK3sKKyAgc3RydWN0IF9fbG9hZHVfcHMgeworICAgIF9fbTI1NiBfX3Y7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICByZXR1cm4gKChzdHJ1Y3QgX19sb2FkdV9wcyopX19wKS0+X192OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9sb2FkX3NpMjU2KF9fbTI1NmkgY29uc3QgKl9fcCkKK3sKKyAgcmV0dXJuICpfX3A7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2xvYWR1X3NpMjU2KF9fbTI1NmkgY29uc3QgKl9fcCkKK3sKKyAgc3RydWN0IF9fbG9hZHVfc2kyNTYgeworICAgIF9fbTI1NmkgX192OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgcmV0dXJuICgoc3RydWN0IF9fbG9hZHVfc2kyNTYqKV9fcCktPl9fdjsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbGRkcXVfc2kyNTYoX19tMjU2aSBjb25zdCAqX19wKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfbGRkcXUyNTYoKGNoYXIgY29uc3QgKilfX3ApOworfQorCisvKiBTSU1EIHN0b3JlIG9wcyAqLworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3RvcmVfcGQoZG91YmxlICpfX3AsIF9fbTI1NmQgX19hKQoreworICAqKF9fbTI1NmQgKilfX3AgPSBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N0b3JlX3BzKGZsb2F0ICpfX3AsIF9fbTI1NiBfX2EpCit7CisgICooX19tMjU2ICopX19wID0gX19hOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdG9yZXVfcGQoZG91YmxlICpfX3AsIF9fbTI1NmQgX19hKQoreworICBzdHJ1Y3QgX19zdG9yZXVfcGQgeworICAgIF9fbTI1NmQgX192OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgKChzdHJ1Y3QgX19zdG9yZXVfcGQqKV9fcCktPl9fdiA9IF9fYTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3RvcmV1X3BzKGZsb2F0ICpfX3AsIF9fbTI1NiBfX2EpCit7CisgIHN0cnVjdCBfX3N0b3JldV9wcyB7CisgICAgX19tMjU2IF9fdjsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgICgoc3RydWN0IF9fc3RvcmV1X3BzKilfX3ApLT5fX3YgPSBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N0b3JlX3NpMjU2KF9fbTI1NmkgKl9fcCwgX19tMjU2aSBfX2EpCit7CisgICpfX3AgPSBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N0b3JldV9zaTI1NihfX20yNTZpICpfX3AsIF9fbTI1NmkgX19hKQoreworICBzdHJ1Y3QgX19zdG9yZXVfc2kyNTYgeworICAgIF9fbTI1NmkgX192OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgKChzdHJ1Y3QgX19zdG9yZXVfc2kyNTYqKV9fcCktPl9fdiA9IF9fYTsKK30KKworLyogQ29uZGl0aW9uYWwgbG9hZCBvcHMgKi8KK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tsb2FkX3BkKGRvdWJsZSBjb25zdCAqX19wLCBfX20xMjhpIF9fbSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX21hc2tsb2FkcGQoKGNvbnN0IF9fdjJkZiAqKV9fcCwgKF9fdjJkaSlfX20pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrbG9hZF9wZChkb3VibGUgY29uc3QgKl9fcCwgX19tMjU2aSBfX20pCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9tYXNrbG9hZHBkMjU2KChjb25zdCBfX3Y0ZGYgKilfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX19tKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrbG9hZF9wcyhmbG9hdCBjb25zdCAqX19wLCBfX20xMjhpIF9fbSkKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfbWFza2xvYWRwcygoY29uc3QgX192NHNmICopX19wLCAoX192NHNpKV9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza2xvYWRfcHMoZmxvYXQgY29uc3QgKl9fcCwgX19tMjU2aSBfX20pCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX21hc2tsb2FkcHMyNTYoKGNvbnN0IF9fdjhzZiAqKV9fcCwgKF9fdjhzaSlfX20pOworfQorCisvKiBDb25kaXRpb25hbCBzdG9yZSBvcHMgKi8KK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tzdG9yZV9wcyhmbG9hdCAqX19wLCBfX20yNTZpIF9fbSwgX19tMjU2IF9fYSkKK3sKKyAgX19idWlsdGluX2lhMzJfbWFza3N0b3JlcHMyNTYoKF9fdjhzZiAqKV9fcCwgKF9fdjhzaSlfX20sIChfX3Y4c2YpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3N0b3JlX3BkKGRvdWJsZSAqX19wLCBfX20xMjhpIF9fbSwgX19tMTI4ZCBfX2EpCit7CisgIF9fYnVpbHRpbl9pYTMyX21hc2tzdG9yZXBkKChfX3YyZGYgKilfX3AsIChfX3YyZGkpX19tLCAoX192MmRmKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tzdG9yZV9wZChkb3VibGUgKl9fcCwgX19tMjU2aSBfX20sIF9fbTI1NmQgX19hKQoreworICBfX2J1aWx0aW5faWEzMl9tYXNrc3RvcmVwZDI1NigoX192NGRmICopX19wLCAoX192NGRpKV9fbSwgKF9fdjRkZilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrc3RvcmVfcHMoZmxvYXQgKl9fcCwgX19tMTI4aSBfX20sIF9fbTEyOCBfX2EpCit7CisgIF9fYnVpbHRpbl9pYTMyX21hc2tzdG9yZXBzKChfX3Y0c2YgKilfX3AsIChfX3Y0c2kpX19tLCAoX192NHNmKV9fYSk7Cit9CisKKy8qIENhY2hlYWJpbGl0eSBzdXBwb3J0IG9wcyAqLworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3RyZWFtX3NpMjU2KF9fbTI1NmkgKl9fYSwgX19tMjU2aSBfX2IpCit7CisgIF9fYnVpbHRpbl9ub250ZW1wb3JhbF9zdG9yZSgoX192NGRpKV9fYiwgKF9fdjRkaSopX19hKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3RyZWFtX3BkKGRvdWJsZSAqX19hLCBfX20yNTZkIF9fYikKK3sKKyAgX19idWlsdGluX25vbnRlbXBvcmFsX3N0b3JlKChfX3Y0ZGYpX19iLCAoX192NGRmKilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdHJlYW1fcHMoZmxvYXQgKl9fcCwgX19tMjU2IF9fYSkKK3sKKyAgX19idWlsdGluX25vbnRlbXBvcmFsX3N0b3JlKChfX3Y4c2YpX19hLCAoX192OHNmKilfX3ApOworfQorCisvKiBDcmVhdGUgdmVjdG9ycyAqLworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bmRlZmluZWRfcGQodm9pZCkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3VuZGVmMjU2KCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bmRlZmluZWRfcHModm9pZCkKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdW5kZWYyNTYoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bmRlZmluZWRfc2kyNTYodm9pZCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3VuZGVmMjU2KCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldF9wZChkb3VibGUgX19hLCBkb3VibGUgX19iLCBkb3VibGUgX19jLCBkb3VibGUgX19kKQoreworICByZXR1cm4gKF9fbTI1NmQpeyBfX2QsIF9fYywgX19iLCBfX2EgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXRfcHMoZmxvYXQgX19hLCBmbG9hdCBfX2IsIGZsb2F0IF9fYywgZmxvYXQgX19kLAorICAgICAgICAgICAgICBmbG9hdCBfX2UsIGZsb2F0IF9fZiwgZmxvYXQgX19nLCBmbG9hdCBfX2gpCit7CisgIHJldHVybiAoX19tMjU2KXsgX19oLCBfX2csIF9fZiwgX19lLCBfX2QsIF9fYywgX19iLCBfX2EgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0X2VwaTMyKGludCBfX2kwLCBpbnQgX19pMSwgaW50IF9faTIsIGludCBfX2kzLAorICAgICAgICAgICAgICAgICBpbnQgX19pNCwgaW50IF9faTUsIGludCBfX2k2LCBpbnQgX19pNykKK3sKKyAgcmV0dXJuIChfX20yNTZpKShfX3Y4c2kpeyBfX2k3LCBfX2k2LCBfX2k1LCBfX2k0LCBfX2kzLCBfX2kyLCBfX2kxLCBfX2kwIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldF9lcGkxNihzaG9ydCBfX3cxNSwgc2hvcnQgX193MTQsIHNob3J0IF9fdzEzLCBzaG9ydCBfX3cxMiwKKyAgICAgICAgICAgICAgICAgc2hvcnQgX193MTEsIHNob3J0IF9fdzEwLCBzaG9ydCBfX3cwOSwgc2hvcnQgX193MDgsCisgICAgICAgICAgICAgICAgIHNob3J0IF9fdzA3LCBzaG9ydCBfX3cwNiwgc2hvcnQgX193MDUsIHNob3J0IF9fdzA0LAorICAgICAgICAgICAgICAgICBzaG9ydCBfX3cwMywgc2hvcnQgX193MDIsIHNob3J0IF9fdzAxLCBzaG9ydCBfX3cwMCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKShfX3YxNmhpKXsgX193MDAsIF9fdzAxLCBfX3cwMiwgX193MDMsIF9fdzA0LCBfX3cwNSwgX193MDYsCisgICAgX193MDcsIF9fdzA4LCBfX3cwOSwgX193MTAsIF9fdzExLCBfX3cxMiwgX193MTMsIF9fdzE0LCBfX3cxNSB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXRfZXBpOChjaGFyIF9fYjMxLCBjaGFyIF9fYjMwLCBjaGFyIF9fYjI5LCBjaGFyIF9fYjI4LAorICAgICAgICAgICAgICAgIGNoYXIgX19iMjcsIGNoYXIgX19iMjYsIGNoYXIgX19iMjUsIGNoYXIgX19iMjQsCisgICAgICAgICAgICAgICAgY2hhciBfX2IyMywgY2hhciBfX2IyMiwgY2hhciBfX2IyMSwgY2hhciBfX2IyMCwKKyAgICAgICAgICAgICAgICBjaGFyIF9fYjE5LCBjaGFyIF9fYjE4LCBjaGFyIF9fYjE3LCBjaGFyIF9fYjE2LAorICAgICAgICAgICAgICAgIGNoYXIgX19iMTUsIGNoYXIgX19iMTQsIGNoYXIgX19iMTMsIGNoYXIgX19iMTIsCisgICAgICAgICAgICAgICAgY2hhciBfX2IxMSwgY2hhciBfX2IxMCwgY2hhciBfX2IwOSwgY2hhciBfX2IwOCwKKyAgICAgICAgICAgICAgICBjaGFyIF9fYjA3LCBjaGFyIF9fYjA2LCBjaGFyIF9fYjA1LCBjaGFyIF9fYjA0LAorICAgICAgICAgICAgICAgIGNoYXIgX19iMDMsIGNoYXIgX19iMDIsIGNoYXIgX19iMDEsIGNoYXIgX19iMDApCit7CisgIHJldHVybiAoX19tMjU2aSkoX192MzJxaSl7CisgICAgX19iMDAsIF9fYjAxLCBfX2IwMiwgX19iMDMsIF9fYjA0LCBfX2IwNSwgX19iMDYsIF9fYjA3LAorICAgIF9fYjA4LCBfX2IwOSwgX19iMTAsIF9fYjExLCBfX2IxMiwgX19iMTMsIF9fYjE0LCBfX2IxNSwKKyAgICBfX2IxNiwgX19iMTcsIF9fYjE4LCBfX2IxOSwgX19iMjAsIF9fYjIxLCBfX2IyMiwgX19iMjMsCisgICAgX19iMjQsIF9fYjI1LCBfX2IyNiwgX19iMjcsIF9fYjI4LCBfX2IyOSwgX19iMzAsIF9fYjMxCisgIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldF9lcGk2NHgobG9uZyBsb25nIF9fYSwgbG9uZyBsb25nIF9fYiwgbG9uZyBsb25nIF9fYywgbG9uZyBsb25nIF9fZCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKShfX3Y0ZGkpeyBfX2QsIF9fYywgX19iLCBfX2EgfTsKK30KKworLyogQ3JlYXRlIHZlY3RvcnMgd2l0aCBlbGVtZW50cyBpbiByZXZlcnNlIG9yZGVyICovCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXRyX3BkKGRvdWJsZSBfX2EsIGRvdWJsZSBfX2IsIGRvdWJsZSBfX2MsIGRvdWJsZSBfX2QpCit7CisgIHJldHVybiAoX19tMjU2ZCl7IF9fYSwgX19iLCBfX2MsIF9fZCB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldHJfcHMoZmxvYXQgX19hLCBmbG9hdCBfX2IsIGZsb2F0IF9fYywgZmxvYXQgX19kLAorICAgICAgICAgICAgICAgZmxvYXQgX19lLCBmbG9hdCBfX2YsIGZsb2F0IF9fZywgZmxvYXQgX19oKQoreworICByZXR1cm4gKF9fbTI1Nil7IF9fYSwgX19iLCBfX2MsIF9fZCwgX19lLCBfX2YsIF9fZywgX19oIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldHJfZXBpMzIoaW50IF9faTAsIGludCBfX2kxLCBpbnQgX19pMiwgaW50IF9faTMsCisgICAgICAgICAgICAgICAgICBpbnQgX19pNCwgaW50IF9faTUsIGludCBfX2k2LCBpbnQgX19pNykKK3sKKyAgcmV0dXJuIChfX20yNTZpKShfX3Y4c2kpeyBfX2kwLCBfX2kxLCBfX2kyLCBfX2kzLCBfX2k0LCBfX2k1LCBfX2k2LCBfX2k3IH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldHJfZXBpMTYoc2hvcnQgX193MTUsIHNob3J0IF9fdzE0LCBzaG9ydCBfX3cxMywgc2hvcnQgX193MTIsCisgICAgICAgc2hvcnQgX193MTEsIHNob3J0IF9fdzEwLCBzaG9ydCBfX3cwOSwgc2hvcnQgX193MDgsCisgICAgICAgc2hvcnQgX193MDcsIHNob3J0IF9fdzA2LCBzaG9ydCBfX3cwNSwgc2hvcnQgX193MDQsCisgICAgICAgc2hvcnQgX193MDMsIHNob3J0IF9fdzAyLCBzaG9ydCBfX3cwMSwgc2hvcnQgX193MDApCit7CisgIHJldHVybiAoX19tMjU2aSkoX192MTZoaSl7IF9fdzE1LCBfX3cxNCwgX193MTMsIF9fdzEyLCBfX3cxMSwgX193MTAsIF9fdzA5LAorICAgIF9fdzA4LCBfX3cwNywgX193MDYsIF9fdzA1LCBfX3cwNCwgX193MDMsIF9fdzAyLCBfX3cwMSwgX193MDAgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0cl9lcGk4KGNoYXIgX19iMzEsIGNoYXIgX19iMzAsIGNoYXIgX19iMjksIGNoYXIgX19iMjgsCisgICAgICAgICAgICAgICAgIGNoYXIgX19iMjcsIGNoYXIgX19iMjYsIGNoYXIgX19iMjUsIGNoYXIgX19iMjQsCisgICAgICAgICAgICAgICAgIGNoYXIgX19iMjMsIGNoYXIgX19iMjIsIGNoYXIgX19iMjEsIGNoYXIgX19iMjAsCisgICAgICAgICAgICAgICAgIGNoYXIgX19iMTksIGNoYXIgX19iMTgsIGNoYXIgX19iMTcsIGNoYXIgX19iMTYsCisgICAgICAgICAgICAgICAgIGNoYXIgX19iMTUsIGNoYXIgX19iMTQsIGNoYXIgX19iMTMsIGNoYXIgX19iMTIsCisgICAgICAgICAgICAgICAgIGNoYXIgX19iMTEsIGNoYXIgX19iMTAsIGNoYXIgX19iMDksIGNoYXIgX19iMDgsCisgICAgICAgICAgICAgICAgIGNoYXIgX19iMDcsIGNoYXIgX19iMDYsIGNoYXIgX19iMDUsIGNoYXIgX19iMDQsCisgICAgICAgICAgICAgICAgIGNoYXIgX19iMDMsIGNoYXIgX19iMDIsIGNoYXIgX19iMDEsIGNoYXIgX19iMDApCit7CisgIHJldHVybiAoX19tMjU2aSkoX192MzJxaSl7CisgICAgX19iMzEsIF9fYjMwLCBfX2IyOSwgX19iMjgsIF9fYjI3LCBfX2IyNiwgX19iMjUsIF9fYjI0LAorICAgIF9fYjIzLCBfX2IyMiwgX19iMjEsIF9fYjIwLCBfX2IxOSwgX19iMTgsIF9fYjE3LCBfX2IxNiwKKyAgICBfX2IxNSwgX19iMTQsIF9fYjEzLCBfX2IxMiwgX19iMTEsIF9fYjEwLCBfX2IwOSwgX19iMDgsCisgICAgX19iMDcsIF9fYjA2LCBfX2IwNSwgX19iMDQsIF9fYjAzLCBfX2IwMiwgX19iMDEsIF9fYjAwIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldHJfZXBpNjR4KGxvbmcgbG9uZyBfX2EsIGxvbmcgbG9uZyBfX2IsIGxvbmcgbG9uZyBfX2MsIGxvbmcgbG9uZyBfX2QpCit7CisgIHJldHVybiAoX19tMjU2aSkoX192NGRpKXsgX19hLCBfX2IsIF9fYywgX19kIH07Cit9CisKKy8qIENyZWF0ZSB2ZWN0b3JzIHdpdGggcmVwZWF0ZWQgZWxlbWVudHMgKi8KK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldDFfcGQoZG91YmxlIF9fdykKK3sKKyAgcmV0dXJuIChfX20yNTZkKXsgX193LCBfX3csIF9fdywgX193IH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0MV9wcyhmbG9hdCBfX3cpCit7CisgIHJldHVybiAoX19tMjU2KXsgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3cgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0MV9lcGkzMihpbnQgX19pKQoreworICByZXR1cm4gKF9fbTI1NmkpKF9fdjhzaSl7IF9faSwgX19pLCBfX2ksIF9faSwgX19pLCBfX2ksIF9faSwgX19pIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldDFfZXBpMTYoc2hvcnQgX193KQoreworICByZXR1cm4gKF9fbTI1NmkpKF9fdjE2aGkpeyBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csCisgICAgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdyB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXQxX2VwaTgoY2hhciBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoX192MzJxaSl7IF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwKKyAgICBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLAorICAgIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXQxX2VwaTY0eChsb25nIGxvbmcgX19xKQoreworICByZXR1cm4gKF9fbTI1NmkpKF9fdjRkaSl7IF9fcSwgX19xLCBfX3EsIF9fcSB9OworfQorCisvKiBDcmVhdGUgX196ZXJvZWQgdmVjdG9ycyAqLworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0emVyb19wZCh2b2lkKQoreworICByZXR1cm4gKF9fbTI1NmQpeyAwLCAwLCAwLCAwIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0emVyb19wcyh2b2lkKQoreworICByZXR1cm4gKF9fbTI1Nil7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0emVyb19zaTI1Nih2b2lkKQoreworICByZXR1cm4gKF9fbTI1NmkpeyAwTEwsIDBMTCwgMExMLCAwTEwgfTsKK30KKworLyogQ2FzdCBiZXR3ZWVuIHZlY3RvciB0eXBlcyAqLworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jYXN0cGRfcHMoX19tMjU2ZCBfX2EpCit7CisgIHJldHVybiAoX19tMjU2KV9fYTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY2FzdHBkX3NpMjU2KF9fbTI1NmQgX19hKQoreworICByZXR1cm4gKF9fbTI1NmkpX19hOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jYXN0cHNfcGQoX19tMjU2IF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY2FzdHBzX3NpMjU2KF9fbTI1NiBfX2EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY2FzdHNpMjU2X3BzKF9fbTI1NmkgX19hKQoreworICByZXR1cm4gKF9fbTI1NilfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Nhc3RzaTI1Nl9wZChfX20yNTZpIF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY2FzdHBkMjU2X3BkMTI4KF9fbTI1NmQgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRkZilfX2EsIChfX3Y0ZGYpX19hLCAwLCAxKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jYXN0cHMyNTZfcHMxMjgoX19tMjU2IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2YpX19hLCAoX192OHNmKV9fYSwgMCwgMSwgMiwgMyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Nhc3RzaTI1Nl9zaTEyOChfX20yNTZpIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYSwgMCwgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Nhc3RwZDEyOF9wZDI1NihfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YyZGYpX19hLCAoX192MmRmKV9fYSwgMCwgMSwgLTEsIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jYXN0cHMxMjhfcHMyNTYoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYSwgMCwgMSwgMiwgMywgLTEsIC0xLCAtMSwgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jYXN0c2kxMjhfc2kyNTYoX19tMTI4aSBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRpKV9fYSwgKF9fdjJkaSlfX2EsIDAsIDEsIC0xLCAtMSk7Cit9CisKKy8qCisgICBWZWN0b3IgaW5zZXJ0LgorICAgV2UgdXNlIG1hY3JvcyByYXRoZXIgdGhhbiBpbmxpbmVzIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRvIGFjY2VwdAorICAgaW52b2NhdGlvbnMgd2hlcmUgdGhlIGltbWVkaWF0ZSBNIGlzIGEgY29uc3RhbnQgZXhwcmVzc2lvbi4KKyovCisjZGVmaW5lIF9tbTI1Nl9pbnNlcnRmMTI4X3BzKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoIFwKKyAgICAoX192OHNmKShfX20yNTYpKFYxKSwgXAorICAgIChfX3Y4c2YpX21tMjU2X2Nhc3RwczEyOF9wczI1NigoX19tMTI4KShWMikpLCBcCisgICAgKCgoTSkgJiAxKSA/ICAwIDogIDgpLCBcCisgICAgKCgoTSkgJiAxKSA/ICAxIDogIDkpLCBcCisgICAgKCgoTSkgJiAxKSA/ICAyIDogMTApLCBcCisgICAgKCgoTSkgJiAxKSA/ICAzIDogMTEpLCBcCisgICAgKCgoTSkgJiAxKSA/ICA4IDogIDQpLCBcCisgICAgKCgoTSkgJiAxKSA/ICA5IDogIDUpLCBcCisgICAgKCgoTSkgJiAxKSA/IDEwIDogIDYpLCBcCisgICAgKCgoTSkgJiAxKSA/IDExIDogIDcpICk7fSkKKworI2RlZmluZSBfbW0yNTZfaW5zZXJ0ZjEyOF9wZChWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggXAorICAgIChfX3Y0ZGYpKF9fbTI1NmQpKFYxKSwgXAorICAgIChfX3Y0ZGYpX21tMjU2X2Nhc3RwZDEyOF9wZDI1NigoX19tMTI4ZCkoVjIpKSwgXAorICAgICgoKE0pICYgMSkgPyAwIDogNCksIFwKKyAgICAoKChNKSAmIDEpID8gMSA6IDUpLCBcCisgICAgKCgoTSkgJiAxKSA/IDQgOiAyKSwgXAorICAgICgoKE0pICYgMSkgPyA1IDogMykgKTt9KQorCisjZGVmaW5lIF9tbTI1Nl9pbnNlcnRmMTI4X3NpMjU2KFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCBcCisgICAgKF9fdjRkaSkoX19tMjU2aSkoVjEpLCBcCisgICAgKF9fdjRkaSlfbW0yNTZfY2FzdHNpMTI4X3NpMjU2KChfX20xMjhpKShWMikpLCBcCisgICAgKCgoTSkgJiAxKSA/IDAgOiA0KSwgXAorICAgICgoKE0pICYgMSkgPyAxIDogNSksIFwKKyAgICAoKChNKSAmIDEpID8gNCA6IDIpLCBcCisgICAgKCgoTSkgJiAxKSA/IDUgOiAzKSApO30pCisKKy8qCisgICBWZWN0b3IgZXh0cmFjdC4KKyAgIFdlIHVzZSBtYWNyb3MgcmF0aGVyIHRoYW4gaW5saW5lcyBiZWNhdXNlIHdlIG9ubHkgd2FudCB0byBhY2NlcHQKKyAgIGludm9jYXRpb25zIHdoZXJlIHRoZSBpbW1lZGlhdGUgTSBpcyBhIGNvbnN0YW50IGV4cHJlc3Npb24uCisqLworI2RlZmluZSBfbW0yNTZfZXh0cmFjdGYxMjhfcHMoViwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoIFwKKyAgICAoX192OHNmKShfX20yNTYpKFYpLCBcCisgICAgKF9fdjhzZikoX21tMjU2X3VuZGVmaW5lZF9wcygpKSwgXAorICAgICgoKE0pICYgMSkgPyA0IDogMCksIFwKKyAgICAoKChNKSAmIDEpID8gNSA6IDEpLCBcCisgICAgKCgoTSkgJiAxKSA/IDYgOiAyKSwgXAorICAgICgoKE0pICYgMSkgPyA3IDogMykgKTt9KQorCisjZGVmaW5lIF9tbTI1Nl9leHRyYWN0ZjEyOF9wZChWLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoIFwKKyAgICAoX192NGRmKShfX20yNTZkKShWKSwgXAorICAgIChfX3Y0ZGYpKF9tbTI1Nl91bmRlZmluZWRfcGQoKSksIFwKKyAgICAoKChNKSAmIDEpID8gMiA6IDApLCBcCisgICAgKCgoTSkgJiAxKSA/IDMgOiAxKSApO30pCisKKyNkZWZpbmUgX21tMjU2X2V4dHJhY3RmMTI4X3NpMjU2KFYsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggXAorICAgIChfX3Y0ZGkpKF9fbTI1NmkpKFYpLCBcCisgICAgKF9fdjRkaSkoX21tMjU2X3VuZGVmaW5lZF9zaTI1NigpKSwgXAorICAgICgoKE0pICYgMSkgPyAyIDogMCksIFwKKyAgICAoKChNKSAmIDEpID8gMyA6IDEpICk7fSkKKworLyogU0lNRCBsb2FkIG9wcyAodW5hbGlnbmVkKSAqLworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9sb2FkdTJfbTEyOChmbG9hdCBjb25zdCAqX19hZGRyX2hpLCBmbG9hdCBjb25zdCAqX19hZGRyX2xvKQoreworICBfX20yNTYgX192MjU2ID0gX21tMjU2X2Nhc3RwczEyOF9wczI1NihfbW1fbG9hZHVfcHMoX19hZGRyX2xvKSk7CisgIHJldHVybiBfbW0yNTZfaW5zZXJ0ZjEyOF9wcyhfX3YyNTYsIF9tbV9sb2FkdV9wcyhfX2FkZHJfaGkpLCAxKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbG9hZHUyX20xMjhkKGRvdWJsZSBjb25zdCAqX19hZGRyX2hpLCBkb3VibGUgY29uc3QgKl9fYWRkcl9sbykKK3sKKyAgX19tMjU2ZCBfX3YyNTYgPSBfbW0yNTZfY2FzdHBkMTI4X3BkMjU2KF9tbV9sb2FkdV9wZChfX2FkZHJfbG8pKTsKKyAgcmV0dXJuIF9tbTI1Nl9pbnNlcnRmMTI4X3BkKF9fdjI1NiwgX21tX2xvYWR1X3BkKF9fYWRkcl9oaSksIDEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9sb2FkdTJfbTEyOGkoX19tMTI4aSBjb25zdCAqX19hZGRyX2hpLCBfX20xMjhpIGNvbnN0ICpfX2FkZHJfbG8pCit7CisgIF9fbTI1NmkgX192MjU2ID0gX21tMjU2X2Nhc3RzaTEyOF9zaTI1NihfbW1fbG9hZHVfc2kxMjgoX19hZGRyX2xvKSk7CisgIHJldHVybiBfbW0yNTZfaW5zZXJ0ZjEyOF9zaTI1NihfX3YyNTYsIF9tbV9sb2FkdV9zaTEyOChfX2FkZHJfaGkpLCAxKTsKK30KKworLyogU0lNRCBzdG9yZSBvcHMgKHVuYWxpZ25lZCkgKi8KK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N0b3JldTJfbTEyOChmbG9hdCAqX19hZGRyX2hpLCBmbG9hdCAqX19hZGRyX2xvLCBfX20yNTYgX19hKQoreworICBfX20xMjggX192MTI4OworCisgIF9fdjEyOCA9IF9tbTI1Nl9jYXN0cHMyNTZfcHMxMjgoX19hKTsKKyAgX21tX3N0b3JldV9wcyhfX2FkZHJfbG8sIF9fdjEyOCk7CisgIF9fdjEyOCA9IF9tbTI1Nl9leHRyYWN0ZjEyOF9wcyhfX2EsIDEpOworICBfbW1fc3RvcmV1X3BzKF9fYWRkcl9oaSwgX192MTI4KTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3RvcmV1Ml9tMTI4ZChkb3VibGUgKl9fYWRkcl9oaSwgZG91YmxlICpfX2FkZHJfbG8sIF9fbTI1NmQgX19hKQoreworICBfX20xMjhkIF9fdjEyODsKKworICBfX3YxMjggPSBfbW0yNTZfY2FzdHBkMjU2X3BkMTI4KF9fYSk7CisgIF9tbV9zdG9yZXVfcGQoX19hZGRyX2xvLCBfX3YxMjgpOworICBfX3YxMjggPSBfbW0yNTZfZXh0cmFjdGYxMjhfcGQoX19hLCAxKTsKKyAgX21tX3N0b3JldV9wZChfX2FkZHJfaGksIF9fdjEyOCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N0b3JldTJfbTEyOGkoX19tMTI4aSAqX19hZGRyX2hpLCBfX20xMjhpICpfX2FkZHJfbG8sIF9fbTI1NmkgX19hKQoreworICBfX20xMjhpIF9fdjEyODsKKworICBfX3YxMjggPSBfbW0yNTZfY2FzdHNpMjU2X3NpMTI4KF9fYSk7CisgIF9tbV9zdG9yZXVfc2kxMjgoX19hZGRyX2xvLCBfX3YxMjgpOworICBfX3YxMjggPSBfbW0yNTZfZXh0cmFjdGYxMjhfc2kyNTYoX19hLCAxKTsKKyAgX21tX3N0b3JldV9zaTEyOChfX2FkZHJfaGksIF9fdjEyOCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0X20xMjggKF9fbTEyOCBfX2hpLCBfX20xMjggX19sbykgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX2xvLCAoX192NHNmKV9faGksIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXRfbTEyOGQgKF9fbTEyOGQgX19oaSwgX19tMTI4ZCBfX2xvKSB7CisgIHJldHVybiAoX19tMjU2ZClfbW0yNTZfc2V0X20xMjgoKF9fbTEyOClfX2hpLCAoX19tMTI4KV9fbG8pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXRfbTEyOGkgKF9fbTEyOGkgX19oaSwgX19tMTI4aSBfX2xvKSB7CisgIHJldHVybiAoX19tMjU2aSlfbW0yNTZfc2V0X20xMjgoKF9fbTEyOClfX2hpLCAoX19tMTI4KV9fbG8pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldHJfbTEyOCAoX19tMTI4IF9fbG8sIF9fbTEyOCBfX2hpKSB7CisgIHJldHVybiBfbW0yNTZfc2V0X20xMjgoX19oaSwgX19sbyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldHJfbTEyOGQgKF9fbTEyOGQgX19sbywgX19tMTI4ZCBfX2hpKSB7CisgIHJldHVybiAoX19tMjU2ZClfbW0yNTZfc2V0X20xMjgoKF9fbTEyOClfX2hpLCAoX19tMTI4KV9fbG8pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXRyX20xMjhpIChfX20xMjhpIF9fbG8sIF9fbTEyOGkgX19oaSkgeworICByZXR1cm4gKF9fbTI1NmkpX21tMjU2X3NldF9tMTI4KChfX20xMjgpX19oaSwgKF9fbTEyOClfX2xvKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19BVlhJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9ibWkyaW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2JtaTJpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGFlODJjCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9ibWkyaW50cmluLmgKQEAgLTAsMCArMSw5NSBAQAorLyo9PT0tLS0tIGJtaTJpbnRyaW4uaCAtIEJNSTIgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmICFkZWZpbmVkIF9fWDg2SU5UUklOX0ggJiYgIWRlZmluZWQgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGJtaTJpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHg4NmludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQk1JMklOVFJJTl9ICisjZGVmaW5lIF9fQk1JMklOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYm1pMiIpKSkKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX2J6aGlfdTMyKHVuc2lnbmVkIGludCBfX1gsIHVuc2lnbmVkIGludCBfX1kpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9iemhpX3NpKF9fWCwgX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX3BkZXBfdTMyKHVuc2lnbmVkIGludCBfX1gsIHVuc2lnbmVkIGludCBfX1kpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wZGVwX3NpKF9fWCwgX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX3BleHRfdTMyKHVuc2lnbmVkIGludCBfX1gsIHVuc2lnbmVkIGludCBfX1kpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wZXh0X3NpKF9fWCwgX19ZKTsKK30KKworI2lmZGVmICBfX3g4Nl82NF9fCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19iemhpX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19YLCB1bnNpZ25lZCBsb25nIGxvbmcgX19ZKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfYnpoaV9kaShfX1gsIF9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19wZGVwX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19YLCB1bnNpZ25lZCBsb25nIGxvbmcgX19ZKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcGRlcF9kaShfX1gsIF9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19wZXh0X3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19YLCB1bnNpZ25lZCBsb25nIGxvbmcgX19ZKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcGV4dF9kaShfX1gsIF9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19tdWx4X3U2NCAodW5zaWduZWQgbG9uZyBsb25nIF9fWCwgdW5zaWduZWQgbG9uZyBsb25nIF9fWSwKKwkgICB1bnNpZ25lZCBsb25nIGxvbmcgKl9fUCkKK3sKKyAgdW5zaWduZWQgX19pbnQxMjggX19yZXMgPSAodW5zaWduZWQgX19pbnQxMjgpIF9fWCAqIF9fWTsKKyAgKl9fUCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIChfX3JlcyA+PiA2NCk7CisgIHJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKSBfX3JlczsKK30KKworI2Vsc2UgLyogIV9feDg2XzY0X18gKi8KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX211bHhfdTMyICh1bnNpZ25lZCBpbnQgX19YLCB1bnNpZ25lZCBpbnQgX19ZLCB1bnNpZ25lZCBpbnQgKl9fUCkKK3sKKyAgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgX19YICogX19ZOworICAqX19QID0gKHVuc2lnbmVkIGludCkgKF9fcmVzID4+IDMyKTsKKyAgcmV0dXJuICh1bnNpZ25lZCBpbnQpIF9fcmVzOworfQorCisjZW5kaWYgLyogIV9feDg2XzY0X18gICovCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fQk1JMklOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2JtaWludHJpbi5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9ibWlpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGFjZmFlCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9ibWlpbnRyaW4uaApAQCAtMCwwICsxLDU0OCBAQAorLyo9PT0tLS0tIGJtaWludHJpbi5oIC0gQk1JIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmICFkZWZpbmVkIF9fWDg2SU5UUklOX0ggJiYgIWRlZmluZWQgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGJtaWludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8eDg2aW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19CTUlJTlRSSU5fSAorI2RlZmluZSBfX0JNSUlOVFJJTl9ICisKKy8vLyBcYnJpZWYgQ291bnRzIHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVybyBiaXRzIGluIHRoZSBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyB1bnNpZ25lZCBzaG9ydCBfdHpjbnRfdTE2KHVuc2lnbmVkIHNob3J0IGEpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVFpDTlQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEFuIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyIHdob3NlIHRyYWlsaW5nIHplcm9zIGFyZSB0byBiZSBjb3VudGVkLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvCisvLy8gICAgYml0cyBpbiB0aGUgb3BlcmFuZC4KKyNkZWZpbmUgX3R6Y250X3UxNihhKSAgICAgKF9fdHpjbnRfdTE2KChhKSkpCisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgd2l0aCB0aGUgb25lJ3MKKy8vLyAgICBjb21wbGVtZW50IG9mIHRoZSBmaXJzdCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyB1bnNpZ25lZCBpbnQgX2FuZG5fdTMyKHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYik7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBBTkROIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBbiB1bnNpZ25lZCBpbnRlZ2VyIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gYgorLy8vICAgIEFuIHVuc2lnbmVkIGludGVnZXIgY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIGludGVnZXIgY29udGFpbmluZyB0aGUgYml0d2lzZSBBTkQgb2YgdGhlIHNlY29uZAorLy8vICAgIG9wZXJhbmQgd2l0aCB0aGUgb25lJ3MgY29tcGxlbWVudCBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4KKyNkZWZpbmUgX2FuZG5fdTMyKGEsIGIpICAgKF9fYW5kbl91MzIoKGEpLCAoYikpKQorCisvKiBfYmV4dHJfdTMyICE9IF9fYmV4dHJfdTMyICovCisvLy8gXGJyaWVmIENsZWFycyBhbGwgYml0cyBpbiB0aGUgc291cmNlIGV4Y2VwdCBmb3IgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdAorLy8vICAgIGNvbnRhaW5pbmcgYSB2YWx1ZSBvZiAxIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIHVuc2lnbmVkIGludCBfYmxzaV91MzIodW5zaWduZWQgaW50IGEpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQkxTSSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQW4gdW5zaWduZWQgaW50ZWdlciB3aG9zZSBiaXRzIGFyZSB0byBiZSBjbGVhcmVkLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIGludGVnZXIgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGNsZWFyaW5nIHRoZSBiaXRzIGZyb20KKy8vLyAgICB0aGUgc291cmNlIG9wZXJhbmQuCisjZGVmaW5lIF9ibHNpX3UzMihhKSAgICAgIChfX2Jsc2lfdTMyKChhKSkpCisKKy8vLyBcYnJpZWYgQ3JlYXRlcyBhIG1hc2sgd2hvc2UgYml0cyBhcmUgc2V0IHRvIDEsIHVzaW5nIGJpdCAwIHVwIHRvIGFuZAorLy8vICAgIGluY2x1ZGluZyB0aGUgbGVhc3Qgc2lnaW5pZmljYW50IGJpdCB0aGF0IGlzIHNldCB0byAxIGluIHRoZSBzb3VyY2UKKy8vLyAgICBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIHVuc2lnbmVkIGludCBfYmxzbXNrX3UzMih1bnNpZ25lZCBpbnQgYSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBCTFNNU0sgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEFuIHVuc2lnbmVkIGludGVnZXIgdXNlZCB0byBjcmVhdGUgdGhlIG1hc2suCisvLy8gXHJldHVybnMgQW4gdW5zaWduZWQgaW50ZWdlciBjb250YWluaW5nIHRoZSBuZXdseSBjcmVhdGVkIG1hc2suCisjZGVmaW5lIF9ibHNtc2tfdTMyKGEpICAgIChfX2Jsc21za191MzIoKGEpKSkKKworLy8vIFxicmllZiBDbGVhcnMgdGhlIGxlYXN0IHNpZ2luaWZpY2FudCBiaXQgdGhhdCBpcyBzZXQgdG8gMSBpbiB0aGUgc291cmNlCisvLy8gICAgb3BlcmFuZCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyB1bnNpZ25lZCBpbnQgX2Jsc3JfdTMyKHVuc2lnbmVkIGludCBhKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEJMU1IgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEFuIHVuc2lnbmVkIGludGVnZXIgY29udGFpbmluZyB0aGUgb3BlcmFuZCB0byBiZSBjbGVhcmVkLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIGludGVnZXIgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGNsZWFyaW5nIHRoZSBzb3VyY2UKKy8vLyAgICBvcGVyYW5kLgorI2RlZmluZSBfYmxzcl91MzIoYSkgICAgICAoX19ibHNyX3UzMigoYSkpKQorCisvLy8gXGJyaWVmIENvdW50cyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm8gYml0cyBpbiB0aGUgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gdW5zaWduZWQgaW50IF90emNudF91MzIodW5zaWduZWQgaW50IGEpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVFpDTlQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIHdob3NlIHRyYWlsaW5nIHplcm9zIGFyZSB0byBiZSBjb3VudGVkLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvCisvLy8gICAgYml0cyBpbiB0aGUgb3BlcmFuZC4KKyNkZWZpbmUgX3R6Y250X3UzMihhKSAgICAgKF9fdHpjbnRfdTMyKChhKSkpCisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYm1pIikpKQorCisvKiBBbGxvdyB1c2luZyB0aGUgdHpjbnQgaW50cmluc2ljcyBldmVuIGZvciBub24tQk1JIHRhcmdldHMuIFNpbmNlIHRoZSBUWkNOVAorICAgaW5zdHJ1Y3Rpb24gYmVoYXZlcyBhcyBCU0Ygb24gbm9uLUJNSSB0YXJnZXRzLCB0aGVyZSBpcyBjb2RlIHRoYXQgZXhwZWN0cworICAgdG8gdXNlIGl0IGFzIGEgcG90ZW50aWFsbHkgZmFzdGVyIHZlcnNpb24gb2YgQlNGLiAqLworI2RlZmluZSBfX1JFTEFYRURfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKKworLy8vIFxicmllZiBDb3VudHMgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvIGJpdHMgaW4gdGhlIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVFpDTlQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19YCisvLy8gICAgQW4gdW5zaWduZWQgMTYtYml0IGludGVnZXIgd2hvc2UgdHJhaWxpbmcgemVyb3MgYXJlIHRvIGJlIGNvdW50ZWQuCisvLy8gXHJldHVybnMgQW4gdW5zaWduZWQgMTYtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm8KKy8vLyAgICBiaXRzIGluIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgX19SRUxBWEVEX0ZOX0FUVFJTCitfX3R6Y250X3UxNih1bnNpZ25lZCBzaG9ydCBfX1gpCit7CisgIHJldHVybiBfX1ggPyBfX2J1aWx0aW5fY3R6cyhfX1gpIDogMTY7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgd2l0aCB0aGUgb25lJ3MKKy8vLyAgICBjb21wbGVtZW50IG9mIHRoZSBmaXJzdCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEFORE4gaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19YCisvLy8gICAgQW4gdW5zaWduZWQgaW50ZWdlciBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fWQorLy8vICAgIEFuIHVuc2lnbmVkIGludGVnZXIgY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIGludGVnZXIgY29udGFpbmluZyB0aGUgYml0d2lzZSBBTkQgb2YgdGhlIHNlY29uZAorLy8vICAgIG9wZXJhbmQgd2l0aCB0aGUgb25lJ3MgY29tcGxlbWVudCBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYW5kbl91MzIodW5zaWduZWQgaW50IF9fWCwgdW5zaWduZWQgaW50IF9fWSkKK3sKKyAgcmV0dXJuIH5fX1ggJiBfX1k7Cit9CisKKy8qIEFNRC1zcGVjaWZpZWQsIGRvdWJsZS1sZWFkaW5nLXVuZGVyc2NvcmUgdmVyc2lvbiBvZiBCRVhUUiAqLworLy8vIFxicmllZiBFeHRyYWN0cyB0aGUgc3BlY2lmaWVkIGJpdHMgZnJvbSB0aGUgZmlyc3Qgb3BlcmFuZCBhbmQgcmV0dXJucyB0aGVtCisvLy8gICAgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIHJlc3VsdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBCRVhUUiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX1gKKy8vLyAgICBBbiB1bnNpZ25lZCBpbnRlZ2VyIHdob3NlIGJpdHMgYXJlIHRvIGJlIGV4dHJhY3RlZC4KKy8vLyBccGFyYW0gX19ZCisvLy8gICAgQW4gdW5zaWduZWQgaW50ZWdlciB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggYml0cyBhcmUgZXh0cmFjdGVkLiBCaXRzIFs3OjBdCisvLy8gICAgc3BlY2lmeSB0aGUgaW5kZXggb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gQml0cyBbMTU6OF0gc3BlY2lmeSB0aGUKKy8vLyAgICBudW1iZXIgb2YgYml0cyB0byBiZSBleHRyYWN0ZWQuCisvLy8gXHJldHVybnMgQW4gdW5zaWduZWQgaW50ZWdlciB3aG9zZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgZXh0cmFjdGVkIGJpdHMuCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2JleHRyX3UzMih1bnNpZ25lZCBpbnQgX19YLCB1bnNpZ25lZCBpbnQgX19ZKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfYmV4dHJfdTMyKF9fWCwgX19ZKTsKK30KKworLyogSW50ZWwtc3BlY2lmaWVkLCBzaW5nbGUtbGVhZGluZy11bmRlcnNjb3JlIHZlcnNpb24gb2YgQkVYVFIgKi8KKy8vLyBcYnJpZWYgRXh0cmFjdHMgdGhlIHNwZWNpZmllZCBiaXRzIGZyb20gdGhlIGZpcnN0IG9wZXJhbmQgYW5kIHJldHVybnMgdGhlbQorLy8vICAgIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQkVYVFIgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19YCisvLy8gICAgQW4gdW5zaWduZWQgaW50ZWdlciB3aG9zZSBiaXRzIGFyZSB0byBiZSBleHRyYWN0ZWQuCisvLy8gXHBhcmFtIF9fWQorLy8vICAgIEFuIHVuc2lnbmVkIGludGVnZXIgdXNlZCB0byBzcGVjaWZ5IHRoZSBpbmRleCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQKKy8vLyAgICBiaXQgZm9yIHRoZSBiaXRzIHRvIGJlIGV4dHJhY3RlZC4gQml0cyBbNzowXSBzcGVjaWZ5IHRoZSBpbmRleC4KKy8vLyBccGFyYW0gX19aCisvLy8gICAgQW4gdW5zaWduZWQgaW50ZWdlciB1c2VkIHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiBiaXRzIHRvIGJlIGV4dHJhY3RlZC4KKy8vLyAgICBCaXRzIFs3OjBdIHNwZWNpZnkgdGhlIG51bWJlciBvZiBiaXRzLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIGludGVnZXIgd2hvc2UgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBjb250YWluIHRoZQorLy8vICAgIGV4dHJhY3RlZCBiaXRzLgorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX2JleHRyX3UzMih1bnNpZ25lZCBpbnQgX19YLCB1bnNpZ25lZCBpbnQgX19ZLCB1bnNpZ25lZCBpbnQgX19aKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfYmV4dHJfdTMyIChfX1gsICgoX19ZICYgMHhmZikgfCAoKF9fWiAmIDB4ZmYpIDw8IDgpKSk7Cit9CisKKy8vLyBcYnJpZWYgQ2xlYXJzIGFsbCBiaXRzIGluIHRoZSBzb3VyY2UgZXhjZXB0IGZvciB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0CisvLy8gICAgY29udGFpbmluZyBhIHZhbHVlIG9mIDEgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBCTFNJIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fWAorLy8vICAgIEFuIHVuc2lnbmVkIGludGVnZXIgd2hvc2UgYml0cyBhcmUgdG8gYmUgY2xlYXJlZC4KKy8vLyBccmV0dXJucyBBbiB1bnNpZ25lZCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBjbGVhcmluZyB0aGUgYml0cyBmcm9tCisvLy8gICAgdGhlIHNvdXJjZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19ibHNpX3UzMih1bnNpZ25lZCBpbnQgX19YKQoreworICByZXR1cm4gX19YICYgLV9fWDsKK30KKworLy8vIFxicmllZiBDcmVhdGVzIGEgbWFzayB3aG9zZSBiaXRzIGFyZSBzZXQgdG8gMSwgdXNpbmcgYml0IDAgdXAgdG8gYW5kCisvLy8gICAgaW5jbHVkaW5nIHRoZSBsZWFzdCBzaWdpbmlmaWNhbnQgYml0IHRoYXQgaXMgc2V0IHRvIDEgaW4gdGhlIHNvdXJjZQorLy8vICAgIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBCTFNNU0sgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19YCisvLy8gICAgQW4gdW5zaWduZWQgaW50ZWdlciB1c2VkIHRvIGNyZWF0ZSB0aGUgbWFzay4KKy8vLyBccmV0dXJucyBBbiB1bnNpZ25lZCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG5ld2x5IGNyZWF0ZWQgbWFzay4KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxzbXNrX3UzMih1bnNpZ25lZCBpbnQgX19YKQoreworICByZXR1cm4gX19YIF4gKF9fWCAtIDEpOworfQorCisvLy8gXGJyaWVmIENsZWFycyB0aGUgbGVhc3Qgc2lnaW5pZmljYW50IGJpdCB0aGF0IGlzIHNldCB0byAxIGluIHRoZSBzb3VyY2UKKy8vLyAgICBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQkxTUiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX1gKKy8vLyAgICBBbiB1bnNpZ25lZCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG9wZXJhbmQgdG8gYmUgY2xlYXJlZC4KKy8vLyBccmV0dXJucyBBbiB1bnNpZ25lZCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBjbGVhcmluZyB0aGUgc291cmNlCisvLy8gICAgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxzcl91MzIodW5zaWduZWQgaW50IF9fWCkKK3sKKyAgcmV0dXJuIF9fWCAmIChfX1ggLSAxKTsKK30KKworLy8vIFxicmllZiBDb3VudHMgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvIGJpdHMgaW4gdGhlIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVFpDTlQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19YCisvLy8gICAgQW4gdW5zaWduZWQgMzItYml0IGludGVnZXIgd2hvc2UgdHJhaWxpbmcgemVyb3MgYXJlIHRvIGJlIGNvdW50ZWQuCisvLy8gXHJldHVybnMgQW4gdW5zaWduZWQgMzItYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm8KKy8vLyAgICBiaXRzIGluIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fUkVMQVhFRF9GTl9BVFRSUworX190emNudF91MzIodW5zaWduZWQgaW50IF9fWCkKK3sKKyAgcmV0dXJuIF9fWCA/IF9fYnVpbHRpbl9jdHooX19YKSA6IDMyOworfQorCisvLy8gXGJyaWVmIENvdW50cyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm8gYml0cyBpbiB0aGUgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBUWkNOVCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX1gKKy8vLyAgICBBbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciB3aG9zZSB0cmFpbGluZyB6ZXJvcyBhcmUgdG8gYmUgY291bnRlZC4KKy8vLyBccmV0dXJucyBBbiAzMi1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVybworLy8vICAgIGJpdHMgaW4gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19SRUxBWEVEX0ZOX0FUVFJTCitfbW1fdHpjbnRfMzIodW5zaWduZWQgaW50IF9fWCkKK3sKKyAgcmV0dXJuIF9fWCA/IF9fYnVpbHRpbl9jdHooX19YKSA6IDMyOworfQorCisjaWZkZWYgX194ODZfNjRfXworCisvLy8gXGJyaWVmIFBlcmZvcm1zIGEgYml0d2lzZSBBTkQgb2YgdGhlIHNlY29uZCBvcGVyYW5kIHdpdGggdGhlIG9uZSdzCisvLy8gICAgY29tcGxlbWVudCBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gdW5zaWduZWQgbG9uZyBsb25nIF9hbmRuX3U2NCAodW5zaWduZWQgbG9uZyBsb25nIGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBiKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEFORE4gaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gYgorLy8vICAgIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBiaXR3aXNlIEFORCBvZiB0aGUgc2Vjb25kCisvLy8gICAgb3BlcmFuZCB3aXRoIHRoZSBvbmUncyBjb21wbGVtZW50IG9mIHRoZSBmaXJzdCBvcGVyYW5kLgorI2RlZmluZSBfYW5kbl91NjQoYSwgYikgICAoX19hbmRuX3U2NCgoYSksIChiKSkpCisKKy8qIF9iZXh0cl91NjQgIT0gX19iZXh0cl91NjQgKi8KKy8vLyBcYnJpZWYgQ2xlYXJzIGFsbCBiaXRzIGluIHRoZSBzb3VyY2UgZXhjZXB0IGZvciB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0CisvLy8gICAgY29udGFpbmluZyBhIHZhbHVlIG9mIDEgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gdW5zaWduZWQgbG9uZyBsb25nIF9ibHNpX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgYSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBCTFNJIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB3aG9zZSBiaXRzIGFyZSB0byBiZSBjbGVhcmVkLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBjbGVhcmluZyB0aGUKKy8vLyAgICBiaXRzIGZyb20gdGhlIHNvdXJjZSBvcGVyYW5kLgorI2RlZmluZSBfYmxzaV91NjQoYSkgICAgICAoX19ibHNpX3U2NCgoYSkpKQorCisvLy8gXGJyaWVmIENyZWF0ZXMgYSBtYXNrIHdob3NlIGJpdHMgYXJlIHNldCB0byAxLCB1c2luZyBiaXQgMCB1cCB0byBhbmQKKy8vLyAgICBpbmNsdWRpbmcgdGhlIGxlYXN0IHNpZ2luaWZpY2FudCBiaXQgdGhhdCBpcyBzZXQgdG8gMSBpbiB0aGUgc291cmNlCisvLy8gICAgb3BlcmFuZCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyB1bnNpZ25lZCBsb25nIGxvbmcgX2Jsc21za191NjQodW5zaWduZWQgbG9uZyBsb25nIGEpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQkxTTVNLIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB1c2VkIHRvIGNyZWF0ZSB0aGUgbWFzay4KKy8vLyBccmV0dXJucyBBIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG5ld2x5IGNyZWF0ZWQgbWFzay4KKyNkZWZpbmUgX2Jsc21za191NjQoYSkgICAgKF9fYmxzbXNrX3U2NCgoYSkpKQorCisvLy8gXGJyaWVmIENsZWFycyB0aGUgbGVhc3Qgc2lnaW5pZmljYW50IGJpdCB0aGF0IGlzIHNldCB0byAxIGluIHRoZSBzb3VyY2UKKy8vLyAgICBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIHVuc2lnbmVkIGxvbmcgbG9uZyBfYmxzcl91NjQodW5zaWduZWQgbG9uZyBsb25nIGEpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQkxTUiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgb3BlcmFuZCB0byBiZSBjbGVhcmVkLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBjbGVhcmluZyB0aGUKKy8vLyAgICBzb3VyY2Ugb3BlcmFuZC4KKyNkZWZpbmUgX2Jsc3JfdTY0KGEpICAgICAgKF9fYmxzcl91NjQoKGEpKSkKKworLy8vIFxicmllZiBDb3VudHMgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvIGJpdHMgaW4gdGhlIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIHVuc2lnbmVkIGxvbmcgbG9uZyBfdHpjbnRfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBhKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFRaQ05UIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB3aG9zZSB0cmFpbGluZyB6ZXJvcyBhcmUgdG8gYmUgY291bnRlZC4KKy8vLyBccmV0dXJucyBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVybworLy8vICAgIGJpdHMgaW4gdGhlIG9wZXJhbmQuCisjZGVmaW5lIF90emNudF91NjQoYSkgICAgIChfX3R6Y250X3U2NCgoYSkpKQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIGEgYml0d2lzZSBBTkQgb2YgdGhlIHNlY29uZCBvcGVyYW5kIHdpdGggdGhlIG9uZSdzCisvLy8gICAgY29tcGxlbWVudCBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBBTkROIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fWAorLy8vICAgIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19ZCisvLy8gICAgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgQU5EIG9mIHRoZSBzZWNvbmQKKy8vLyAgICBvcGVyYW5kIHdpdGggdGhlIG9uZSdzIGNvbXBsZW1lbnQgb2YgdGhlIGZpcnN0IG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2FuZG5fdTY0ICh1bnNpZ25lZCBsb25nIGxvbmcgX19YLCB1bnNpZ25lZCBsb25nIGxvbmcgX19ZKQoreworICByZXR1cm4gfl9fWCAmIF9fWTsKK30KKworLyogQU1ELXNwZWNpZmllZCwgZG91YmxlLWxlYWRpbmctdW5kZXJzY29yZSB2ZXJzaW9uIG9mIEJFWFRSICovCisvLy8gXGJyaWVmIEV4dHJhY3RzIHRoZSBzcGVjaWZpZWQgYml0cyBmcm9tIHRoZSBmaXJzdCBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZW0KKy8vLyAgICBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEJFWFRSIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fWAorLy8vICAgIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHdob3NlIGJpdHMgYXJlIHRvIGJlIGV4dHJhY3RlZC4KKy8vLyBccGFyYW0gX19ZCisvLy8gICAgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIGJpdHMgYXJlIGV4dHJhY3RlZC4gQml0cworLy8vICAgIFs3OjBdIHNwZWNpZnkgdGhlIGluZGV4IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuIEJpdHMgWzE1OjhdIHNwZWNpZnkKKy8vLyAgICB0aGUgbnVtYmVyIG9mIGJpdHMgdG8gYmUgZXh0cmFjdGVkLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHdob3NlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgY29udGFpbiB0aGUKKy8vLyAgICBleHRyYWN0ZWQgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmV4dHJfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX1kpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9iZXh0cl91NjQoX19YLCBfX1kpOworfQorCisvKiBJbnRlbC1zcGVjaWZpZWQsIHNpbmdsZS1sZWFkaW5nLXVuZGVyc2NvcmUgdmVyc2lvbiBvZiBCRVhUUiAqLworLy8vIFxicmllZiBFeHRyYWN0cyB0aGUgc3BlY2lmaWVkIGJpdHMgZnJvbSB0aGUgZmlyc3Qgb3BlcmFuZCBhbmQgcmV0dXJucyB0aGVtCisvLy8gICAgIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQkVYVFIgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19YCisvLy8gICAgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgd2hvc2UgYml0cyBhcmUgdG8gYmUgZXh0cmFjdGVkLgorLy8vIFxwYXJhbSBfX1kKKy8vLyAgICBBbiB1bnNpZ25lZCBpbnRlZ2VyIHVzZWQgdG8gc3BlY2lmeSB0aGUgaW5kZXggb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50CisvLy8gICAgYml0IGZvciB0aGUgYml0cyB0byBiZSBleHRyYWN0ZWQuIEJpdHMgWzc6MF0gc3BlY2lmeSB0aGUgaW5kZXguCisvLy8gXHBhcmFtIF9fWgorLy8vICAgIEFuIHVuc2lnbmVkIGludGVnZXIgdXNlZCB0byBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgYml0cyB0byBiZSBleHRyYWN0ZWQuCisvLy8gICAgQml0cyBbNzowXSBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgYml0cy4KKy8vLyBccmV0dXJucyBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB3aG9zZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgZXh0cmFjdGVkIGJpdHMuCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfYmV4dHJfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gsIHVuc2lnbmVkIGludCBfX1ksIHVuc2lnbmVkIGludCBfX1opCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9iZXh0cl91NjQgKF9fWCwgKChfX1kgJiAweGZmKSB8ICgoX19aICYgMHhmZikgPDwgOCkpKTsKK30KKworLy8vIFxicmllZiBDbGVhcnMgYWxsIGJpdHMgaW4gdGhlIHNvdXJjZSBleGNlcHQgZm9yIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQKKy8vLyAgICBjb250YWluaW5nIGEgdmFsdWUgb2YgMSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEJMU0kgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19YCisvLy8gICAgQW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgd2hvc2UgYml0cyBhcmUgdG8gYmUgY2xlYXJlZC4KKy8vLyBccmV0dXJucyBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgY2xlYXJpbmcgdGhlCisvLy8gICAgYml0cyBmcm9tIHRoZSBzb3VyY2Ugb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxzaV91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCkKK3sKKyAgcmV0dXJuIF9fWCAmIC1fX1g7Cit9CisKKy8vLyBcYnJpZWYgQ3JlYXRlcyBhIG1hc2sgd2hvc2UgYml0cyBhcmUgc2V0IHRvIDEsIHVzaW5nIGJpdCAwIHVwIHRvIGFuZAorLy8vICAgIGluY2x1ZGluZyB0aGUgbGVhc3Qgc2lnaW5pZmljYW50IGJpdCB0aGF0IGlzIHNldCB0byAxIGluIHRoZSBzb3VyY2UKKy8vLyAgICBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQkxTTVNLIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fWAorLy8vICAgIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHVzZWQgdG8gY3JlYXRlIHRoZSBtYXNrLgorLy8vIFxyZXR1cm5zIEEgdW5zaWduZWQgNjQtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgbmV3bHkgY3JlYXRlZCBtYXNrLgorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19ibHNtc2tfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gpCit7CisgIHJldHVybiBfX1ggXiAoX19YIC0gMSk7Cit9CisKKy8vLyBcYnJpZWYgQ2xlYXJzIHRoZSBsZWFzdCBzaWdpbmlmaWNhbnQgYml0IHRoYXQgaXMgc2V0IHRvIDEgaW4gdGhlIHNvdXJjZQorLy8vICAgIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBCTFNSIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fWAorLy8vICAgIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG9wZXJhbmQgdG8gYmUgY2xlYXJlZC4KKy8vLyBccmV0dXJucyBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgY2xlYXJpbmcgdGhlCisvLy8gICAgc291cmNlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2Jsc3JfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gpCit7CisgIHJldHVybiBfX1ggJiAoX19YIC0gMSk7Cit9CisKKy8vLyBcYnJpZWYgQ291bnRzIHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVybyBiaXRzIGluIHRoZSBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFRaQ05UIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fWAorLy8vICAgIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHdob3NlIHRyYWlsaW5nIHplcm9zIGFyZSB0byBiZSBjb3VudGVkLgorLy8vIFxyZXR1cm5zIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvCisvLy8gICAgYml0cyBpbiB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX1JFTEFYRURfRk5fQVRUUlMKK19fdHpjbnRfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gpCit7CisgIHJldHVybiBfX1ggPyBfX2J1aWx0aW5fY3R6bGwoX19YKSA6IDY0OworfQorCisvLy8gXGJyaWVmIENvdW50cyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm8gYml0cyBpbiB0aGUgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBUWkNOVCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX1gKKy8vLyAgICBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB3aG9zZSB0cmFpbGluZyB6ZXJvcyBhcmUgdG8gYmUgY291bnRlZC4KKy8vLyBccmV0dXJucyBBbiA2NC1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVybworLy8vICAgIGJpdHMgaW4gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgX19SRUxBWEVEX0ZOX0FUVFJTCitfbW1fdHpjbnRfNjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCkKK3sKKyAgcmV0dXJuIF9fWCA/IF9fYnVpbHRpbl9jdHpsbChfX1gpIDogNjQ7Cit9CisKKyNlbmRpZiAvKiBfX3g4Nl82NF9fICovCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKyN1bmRlZiBfX1JFTEFYRURfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fQk1JSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvY2xmbHVzaG9wdGludHJpbi5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9jbGZsdXNob3B0aW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlMGVhZAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvY2xmbHVzaG9wdGludHJpbi5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qPT09LS0tLSBjbGZsdXNob3B0aW50cmluLmggLSBDTEZMVVNIT1BUIGludHJpbnNpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGNsZmx1c2hvcHRpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQ0xGTFVTSE9QVElOVFJJTl9ICisjZGVmaW5lIF9fQ0xGTFVTSE9QVElOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgIF9fdGFyZ2V0X18oImNsZmx1c2hvcHQiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY2xmbHVzaG9wdChjaGFyICogX19tKSB7CisgIF9fYnVpbHRpbl9pYTMyX2NsZmx1c2hvcHQoX19tKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvY3B1aWQuaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvY3B1aWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDBkY2ZhCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9jcHVpZC5oCkBAIC0wLDAgKzEsMjE1IEBACisvKj09PS0tLS0gY3B1aWQuaCAtIFg4NiBjcHUgbW9kZWwgZGV0ZWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWYgIShfX3g4Nl82NF9fIHx8IF9faTM4Nl9fKQorI2Vycm9yIHRoaXMgaGVhZGVyIGlzIGZvciB4ODYgb25seQorI2VuZGlmCisKKy8qIFJlc3BvbnNlcyBpZGVudGlmaWNhdGlvbiByZXF1ZXN0IHdpdGggJWVheCAwICovCisvKiBBTUQ6ICAgICAiQXV0aGVudGljQU1EIiAqLworI2RlZmluZSBzaWduYXR1cmVfQU1EX2VieCAweDY4NzQ3NTQxCisjZGVmaW5lIHNpZ25hdHVyZV9BTURfZWR4IDB4Njk3NDZlNjUKKyNkZWZpbmUgc2lnbmF0dXJlX0FNRF9lY3ggMHg0NDRkNDE2MworLyogQ0VOVEFVUjogIkNlbnRhdXJIYXVscyIgKi8KKyNkZWZpbmUgc2lnbmF0dXJlX0NFTlRBVVJfZWJ4IDB4NzQ2ZTY1NDMKKyNkZWZpbmUgc2lnbmF0dXJlX0NFTlRBVVJfZWR4IDB4NDg3Mjc1NjEKKyNkZWZpbmUgc2lnbmF0dXJlX0NFTlRBVVJfZWN4IDB4NzM2Yzc1NjEKKy8qIENZUklYOiAgICJDeXJpeEluc3RlYWQiICovCisjZGVmaW5lIHNpZ25hdHVyZV9DWVJJWF9lYnggMHg2OTcyNzk0MworI2RlZmluZSBzaWduYXR1cmVfQ1lSSVhfZWR4IDB4NzM2ZTQ5NzgKKyNkZWZpbmUgc2lnbmF0dXJlX0NZUklYX2VjeCAweDY0NjE2NTc0CisvKiBJTlRFTDogICAiR2VudWluZUludGVsIiAqLworI2RlZmluZSBzaWduYXR1cmVfSU5URUxfZWJ4IDB4NzU2ZTY1NDcKKyNkZWZpbmUgc2lnbmF0dXJlX0lOVEVMX2VkeCAweDQ5NjU2ZTY5CisjZGVmaW5lIHNpZ25hdHVyZV9JTlRFTF9lY3ggMHg2YzY1NzQ2ZQorLyogVE0xOiAgICAgIlRyYW5zbWV0YUNQVSIgKi8KKyNkZWZpbmUgc2lnbmF0dXJlX1RNMV9lYnggMHg2ZTYxNzI1NAorI2RlZmluZSBzaWduYXR1cmVfVE0xX2VkeCAweDc0NjU2ZDczCisjZGVmaW5lIHNpZ25hdHVyZV9UTTFfZWN4IDB4NTU1MDQzNjEKKy8qIFRNMjogICAgICJHZW51aW5lVE14ODYiICovCisjZGVmaW5lIHNpZ25hdHVyZV9UTTJfZWJ4IDB4NzU2ZTY1NDcKKyNkZWZpbmUgc2lnbmF0dXJlX1RNMl9lZHggMHg1NDY1NmU2OQorI2RlZmluZSBzaWduYXR1cmVfVE0yX2VjeCAweDM2Mzg3ODRkCisvKiBOU0M6ICAgICAiR2VvZGUgYnkgTlNDIiAqLworI2RlZmluZSBzaWduYXR1cmVfTlNDX2VieCAweDY0NmY2NTQ3CisjZGVmaW5lIHNpZ25hdHVyZV9OU0NfZWR4IDB4NDM1MzRlMjAKKyNkZWZpbmUgc2lnbmF0dXJlX05TQ19lY3ggMHg3OTYyMjA2NQorLyogTkVYR0VOOiAgIk5leEdlbkRyaXZlbiIgKi8KKyNkZWZpbmUgc2lnbmF0dXJlX05FWEdFTl9lYnggMHg0Nzc4NjU0ZQorI2RlZmluZSBzaWduYXR1cmVfTkVYR0VOX2VkeCAweDcyNDQ2ZTY1CisjZGVmaW5lIHNpZ25hdHVyZV9ORVhHRU5fZWN4IDB4NmU2NTc2NjkKKy8qIFJJU0U6ICAgICJSaXNlUmlzZVJpc2UiICovCisjZGVmaW5lIHNpZ25hdHVyZV9SSVNFX2VieCAweDY1NzM2OTUyCisjZGVmaW5lIHNpZ25hdHVyZV9SSVNFX2VkeCAweDY1NzM2OTUyCisjZGVmaW5lIHNpZ25hdHVyZV9SSVNFX2VjeCAweDY1NzM2OTUyCisvKiBTSVM6ICAgICAiU2lTIFNpUyBTaVMgIiAqLworI2RlZmluZSBzaWduYXR1cmVfU0lTX2VieCAweDIwNTM2OTUzCisjZGVmaW5lIHNpZ25hdHVyZV9TSVNfZWR4IDB4MjA1MzY5NTMKKyNkZWZpbmUgc2lnbmF0dXJlX1NJU19lY3ggMHgyMDUzNjk1MworLyogVU1DOiAgICAgIlVNQyBVTUMgVU1DICIgKi8KKyNkZWZpbmUgc2lnbmF0dXJlX1VNQ19lYnggMHgyMDQzNGQ1NQorI2RlZmluZSBzaWduYXR1cmVfVU1DX2VkeCAweDIwNDM0ZDU1CisjZGVmaW5lIHNpZ25hdHVyZV9VTUNfZWN4IDB4MjA0MzRkNTUKKy8qIFZJQTogICAgICJWSUEgVklBIFZJQSAiICovCisjZGVmaW5lIHNpZ25hdHVyZV9WSUFfZWJ4IDB4MjA0MTQ5NTYKKyNkZWZpbmUgc2lnbmF0dXJlX1ZJQV9lZHggMHgyMDQxNDk1NgorI2RlZmluZSBzaWduYXR1cmVfVklBX2VjeCAweDIwNDE0OTU2CisvKiBWT1JURVg6ICAiVm9ydGV4ODYgU29DIiAqLworI2RlZmluZSBzaWduYXR1cmVfVk9SVEVYX2VieCAweDc0NzI2ZjU2CisjZGVmaW5lIHNpZ25hdHVyZV9WT1JURVhfZWR4IDB4MzYzODc4NjUKKyNkZWZpbmUgc2lnbmF0dXJlX1ZPUlRFWF9lY3ggMHg0MzZmNTMyMAorCisvKiBGZWF0dXJlcyBpbiAlZWN4IGZvciBsZXZlbCAxICovCisjZGVmaW5lIGJpdF9TU0UzICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIGJpdF9QQ0xNVUxRRFEgICAweDAwMDAwMDAyCisjZGVmaW5lIGJpdF9QQ0xNVUwgICAgICBiaXRfUENMTVVMUURRICAgLyogZm9yIGdjYyBjb21wYXQgKi8KKyNkZWZpbmUgYml0X0RURVM2NCAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgYml0X01PTklUT1IgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgYml0X0RTQ1BMICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgYml0X1ZNWCAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgYml0X1NNWCAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgYml0X0VJU1QgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgYml0X1RNMiAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgYml0X1NTU0UzICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgYml0X0NOWFRJRCAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgYml0X0ZNQSAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgYml0X0NNUFhDSEcxNkIgIDB4MDAwMDIwMDAKKyNkZWZpbmUgYml0X3hUUFIgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgYml0X1BEQ00gICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgYml0X1BDSUQgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgYml0X0RDQSAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgYml0X1NTRTQxICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgYml0X1NTRTRfMSAgICAgIGJpdF9TU0U0MSAgICAgICAvKiBmb3IgZ2NjIGNvbXBhdCAqLworI2RlZmluZSBiaXRfU1NFNDIgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBiaXRfU1NFNF8yICAgICAgYml0X1NTRTQyICAgICAgIC8qIGZvciBnY2MgY29tcGF0ICovCisjZGVmaW5lIGJpdF94MkFQSUMgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIGJpdF9NT1ZCRSAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIGJpdF9QT1BDTlQgICAgICAweDAwODAwMDAwCisjZGVmaW5lIGJpdF9UU0NEZWFkbGluZSAweDAxMDAwMDAwCisjZGVmaW5lIGJpdF9BRVNOSSAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIGJpdF9BRVMgICAgICAgICBiaXRfQUVTTkkgICAgICAgLyogZm9yIGdjYyBjb21wYXQgKi8KKyNkZWZpbmUgYml0X1hTQVZFICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgYml0X09TWFNBVkUgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgYml0X0FWWCAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgYml0X0YxNkMgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgYml0X1JEUk5EICAgICAgIDB4NDAwMDAwMDAKKworLyogRmVhdHVyZXMgaW4gJWVkeCBmb3IgbGV2ZWwgMSAqLworI2RlZmluZSBiaXRfRlBVICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBiaXRfVk1FICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBiaXRfREUgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBiaXRfUFNFICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBiaXRfVFNDICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBiaXRfTVNSICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBiaXRfUEFFICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBiaXRfTUNFICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBiaXRfQ1g4ICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBiaXRfQ01QWENIRzhCICAgYml0X0NYOCAgICAgICAgIC8qIGZvciBnY2MgY29tcGF0ICovCisjZGVmaW5lIGJpdF9BUElDICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIGJpdF9TRVAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIGJpdF9NVFJSICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIGJpdF9QR0UgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIGJpdF9NQ0EgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIGJpdF9DTU9WICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIGJpdF9QQVQgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIGJpdF9QU0UzNiAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIGJpdF9QU04gICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIGJpdF9DTEZTSCAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIGJpdF9EUyAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIGJpdF9BQ1BJICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIGJpdF9NTVggICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIGJpdF9GWFNSICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIGJpdF9GWFNBVkUgICAgICBiaXRfRlhTUiAgICAgICAgLyogZm9yIGdjYyBjb21wYXQgKi8KKyNkZWZpbmUgYml0X1NTRSAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgYml0X1NTRTIgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgYml0X1NTICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgYml0X0hUVCAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgYml0X1RNICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgYml0X1BCRSAgICAgICAgIDB4ODAwMDAwMDAKKworLyogRmVhdHVyZXMgaW4gJWVieCBmb3IgbGV2ZWwgNyBzdWItbGVhZiAwICovCisjZGVmaW5lIGJpdF9GU0dTQkFTRSAgICAweDAwMDAwMDAxCisjZGVmaW5lIGJpdF9TTUVQICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIGJpdF9FTkhfTU9WU0IgICAweDAwMDAwMjAwCisKKyNpZiBfX2kzODZfXworI2RlZmluZSBfX2NwdWlkKF9fbGV2ZWwsIF9fZWF4LCBfX2VieCwgX19lY3gsIF9fZWR4KSBcCisgICAgX19hc20oImNwdWlkIiA6ICI9YSIoX19lYXgpLCAiPWIiIChfX2VieCksICI9YyIoX19lY3gpLCAiPWQiKF9fZWR4KSBcCisgICAgICAgICAgICAgICAgICA6ICIwIihfX2xldmVsKSkKKworI2RlZmluZSBfX2NwdWlkX2NvdW50KF9fbGV2ZWwsIF9fY291bnQsIF9fZWF4LCBfX2VieCwgX19lY3gsIF9fZWR4KSBcCisgICAgX19hc20oImNwdWlkIiA6ICI9YSIoX19lYXgpLCAiPWIiIChfX2VieCksICI9YyIoX19lY3gpLCAiPWQiKF9fZWR4KSBcCisgICAgICAgICAgICAgICAgICA6ICIwIihfX2xldmVsKSwgIjIiKF9fY291bnQpKQorI2Vsc2UKKy8qIHg4Ni02NCB1c2VzICVyYnggYXMgdGhlIGJhc2UgcmVnaXN0ZXIsIHNvIHByZXNlcnZlIGl0LiAqLworI2RlZmluZSBfX2NwdWlkKF9fbGV2ZWwsIF9fZWF4LCBfX2VieCwgX19lY3gsIF9fZWR4KSBcCisgICAgX19hc20oIiAgeGNoZ3EgICUlcmJ4LCVxMVxuIiBcCisgICAgICAgICAgIiAgY3B1aWRcbiIgXAorICAgICAgICAgICIgIHhjaGdxICAlJXJieCwlcTEiIFwKKyAgICAgICAgOiAiPWEiKF9fZWF4KSwgIj1yIiAoX19lYngpLCAiPWMiKF9fZWN4KSwgIj1kIihfX2VkeCkgXAorICAgICAgICA6ICIwIihfX2xldmVsKSkKKworI2RlZmluZSBfX2NwdWlkX2NvdW50KF9fbGV2ZWwsIF9fY291bnQsIF9fZWF4LCBfX2VieCwgX19lY3gsIF9fZWR4KSBcCisgICAgX19hc20oIiAgeGNoZ3EgICUlcmJ4LCVxMVxuIiBcCisgICAgICAgICAgIiAgY3B1aWRcbiIgXAorICAgICAgICAgICIgIHhjaGdxICAlJXJieCwlcTEiIFwKKyAgICAgICAgOiAiPWEiKF9fZWF4KSwgIj1yIiAoX19lYngpLCAiPWMiKF9fZWN4KSwgIj1kIihfX2VkeCkgXAorICAgICAgICA6ICIwIihfX2xldmVsKSwgIjIiKF9fY291bnQpKQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19nZXRfY3B1aWQgKHVuc2lnbmVkIGludCBfX2xldmVsLCB1bnNpZ25lZCBpbnQgKl9fZWF4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2VieCwgdW5zaWduZWQgaW50ICpfX2VjeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19lZHgpIHsKKyAgICBfX2NwdWlkKF9fbGV2ZWwsICpfX2VheCwgKl9fZWJ4LCAqX19lY3gsICpfX2VkeCk7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19nZXRfY3B1aWRfbWF4ICh1bnNpZ25lZCBpbnQgX19sZXZlbCwgdW5zaWduZWQgaW50ICpfX3NpZykKK3sKKyAgICB1bnNpZ25lZCBpbnQgX19lYXgsIF9fZWJ4LCBfX2VjeCwgX19lZHg7CisjaWYgX19pMzg2X18KKyAgICBpbnQgX19jcHVpZF9zdXBwb3J0ZWQ7CisKKyAgICBfX2FzbSgiICBwdXNoZmxcbiIKKyAgICAgICAgICAiICBwb3BsICAgJSVlYXhcbiIKKyAgICAgICAgICAiICBtb3ZsICAgJSVlYXgsJSVlY3hcbiIKKyAgICAgICAgICAiICB4b3JsICAgJDB4MDAyMDAwMDAsJSVlYXhcbiIKKyAgICAgICAgICAiICBwdXNobCAgJSVlYXhcbiIKKyAgICAgICAgICAiICBwb3BmbFxuIgorICAgICAgICAgICIgIHB1c2hmbFxuIgorICAgICAgICAgICIgIHBvcGwgICAlJWVheFxuIgorICAgICAgICAgICIgIG1vdmwgICAkMCwlMFxuIgorICAgICAgICAgICIgIGNtcGwgICAlJWVheCwlJWVjeFxuIgorICAgICAgICAgICIgIGplICAgICAxZlxuIgorICAgICAgICAgICIgIG1vdmwgICAkMSwlMFxuIgorICAgICAgICAgICIxOiIKKyAgICAgICAgOiAiPXIiIChfX2NwdWlkX3N1cHBvcnRlZCkgOiA6ICJlYXgiLCAiZWN4Iik7CisgICAgaWYgKCFfX2NwdWlkX3N1cHBvcnRlZCkKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKworICAgIF9fY3B1aWQoX19sZXZlbCwgX19lYXgsIF9fZWJ4LCBfX2VjeCwgX19lZHgpOworICAgIGlmIChfX3NpZykKKyAgICAgICAgKl9fc2lnID0gX19lYng7CisgICAgcmV0dXJuIF9fZWF4OworfQpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9jdWRhX3dyYXBwZXJzL2FsZ29yaXRobSBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvY3VkYV93cmFwcGVycy9hbGdvcml0aG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVkOWJlYgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvY3VkYV93cmFwcGVycy9hbGdvcml0aG0KQEAgLTAsMCArMSw5NiBAQAorLyo9PT0tLS0tIGNvbXBsZXggLSBDVURBIHdyYXBwZXIgZm9yIDxhbGdvcml0aG0+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19DTEFOR19DVURBX1dSQVBQRVJTX0FMR09SSVRITQorI2RlZmluZSBfX0NMQU5HX0NVREFfV1JBUFBFUlNfQUxHT1JJVEhNCisKKy8vIFRoaXMgaGVhZGVyIGRlZmluZXMgX19kZXZpY2VfXyBvdmVybG9hZHMgb2Ygc3RkOjptaW4vbWF4LCBidXQgb25seSBpZiB3ZSdyZQorLy8gPD0gQysrMTEuICBJbiBDKysxNCwgdGhlc2UgZnVuY3Rpb25zIGFyZSBjb25zdGV4cHIsIGFuZCBzbyBhcmUgaW1wbGljaXRseQorLy8gX19ob3N0X18gX19kZXZpY2VfXy4KKy8vCisvLyBXZSBkb24ndCBzdXBwb3J0IHRoZSBpbml0aWFsaXplcl9saXN0IG92ZXJsb2FkcyBiZWNhdXNlCisvLyBpbml0aWFsaXplcl9saXN0OjpiZWdpbigpIGFuZCBlbmQoKSBhcmUgbm90IF9faG9zdF9fIF9fZGV2aWNlX18gZnVuY3Rpb25zLgorLy8KKy8vIFdoZW4gY29tcGlsaW5nIGluIEMrKzE0IG1vZGUsIHdlIGNvdWxkIGZvcmNlIHN0ZDo6bWluL21heCB0byBoYXZlIGRpZmZlcmVudAorLy8gaW1wbGVtZW50YXRpb25zIGZvciBob3N0IGFuZCBkZXZpY2UsIGJ5IGRlY2xhcmluZyB0aGUgZGV2aWNlIG92ZXJsb2FkcworLy8gYmVmb3JlIHRoZSBjb25zdGV4cHIgb3ZlcmxvYWRzIGFwcGVhci4gIFdlIGNob29zZSBub3QgdG8gZG8gdGhpcyBiZWNhdXNlCisKKy8vICBhKSB3aHkgd3JpdGUgb3VyIG93biBpbXBsZW1lbnRhdGlvbiB3aGVuIHdlIGNhbiB1c2Ugb25lIGZyb20gdGhlIHN0YW5kYXJkCisvLyAgICAgbGlicmFyeT8gYW5kCisvLyAgYikgbGlic3RkYysrIGlzIGV2aWwgYW5kIGRlY2xhcmVzIG1pbi9tYXggaW5zaWRlIGEgaGVhZGVyIHRoYXQgaXMgaW5jbHVkZWQKKy8vICAgICAqYmVmb3JlKiB3ZSBpbmNsdWRlIDxhbGdvcml0aG0+LiAgU28gd2UnZCBoYXZlIHRvIHVuY29uZGl0aW9uYWxseQorLy8gICAgIGRlY2xhcmUgb3VyIF9fZGV2aWNlX18gb3ZlcmxvYWRzIG9mIG1pbi9tYXgsIGJ1dCB0aGF0IHdvdWxkIHBvbGx1dGUKKy8vICAgICB0aGluZ3MgZm9yIHBlb3BsZSB3aG8gY2hvb3NlIG5vdCB0byBpbmNsdWRlIDxhbGdvcml0aG0+LgorCisjaW5jbHVkZV9uZXh0IDxhbGdvcml0aG0+CisKKyNpZiBfX2NwbHVzcGx1cyA8PSAyMDExMDNMCisKKy8vIFdlIG5lZWQgdG8gZGVmaW5lIHRoZXNlIG92ZXJsb2FkcyBpbiBleGFjdGx5IHRoZSBuYW1lc3BhY2Ugb3VyIHN0YW5kYXJkCisvLyBsaWJyYXJ5IHVzZXMgKGluY2x1ZGluZyB0aGUgcmlnaHQgaW5saW5lIG5hbWVzcGFjZSksIG90aGVyd2lzZSB0aGV5IHdvbid0IGJlCisvLyBwaWNrZWQgdXAgYnkgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IChlLmcuIGZ1bmN0aW9ucyBpbgorLy8gPGNvbXBsZXg+KS4gIFRodXMgdGhlIHVnbGluZXNzIGJlbG93LgorI2lmZGVmIF9MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX1NURAorX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfU1RECisjZWxzZQorbmFtZXNwYWNlIHN0ZCB7CisjaWZkZWYgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisjZW5kaWYKKyNlbmRpZgorCit0ZW1wbGF0ZSA8Y2xhc3MgX19ULCBjbGFzcyBfX0NtcD4KK2lubGluZSBfX2RldmljZV9fIGNvbnN0IF9fVCAmCittYXgoY29uc3QgX19UICZfX2EsIGNvbnN0IF9fVCAmX19iLCBfX0NtcCBfX2NtcCkgeworICByZXR1cm4gX19jbXAoX19hLCBfX2IpID8gX19iIDogX19hOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgX19UPgoraW5saW5lIF9fZGV2aWNlX18gY29uc3QgX19UICYKK21heChjb25zdCBfX1QgJl9fYSwgY29uc3QgX19UICZfX2IpIHsKKyAgcmV0dXJuIF9fYSA8IF9fYiA/IF9fYiA6IF9fYTsKK30KKwordGVtcGxhdGUgPGNsYXNzIF9fVCwgY2xhc3MgX19DbXA+CitpbmxpbmUgX19kZXZpY2VfXyBjb25zdCBfX1QgJgorbWluKGNvbnN0IF9fVCAmX19hLCBjb25zdCBfX1QgJl9fYiwgX19DbXAgX19jbXApIHsKKyAgcmV0dXJuIF9fY21wKF9fYiwgX19hKSA/IF9fYiA6IF9fYTsKK30KKwordGVtcGxhdGUgPGNsYXNzIF9fVD4KK2lubGluZSBfX2RldmljZV9fIGNvbnN0IF9fVCAmCittaW4oY29uc3QgX19UICZfX2EsIGNvbnN0IF9fVCAmX19iKSB7CisgIHJldHVybiBfX2EgPCBfX2IgPyBfX2IgOiBfX2E7Cit9CisKKyNpZmRlZiBfTElCQ1BQX0VORF9OQU1FU1BBQ0VfU1RECitfTElCQ1BQX0VORF9OQU1FU1BBQ0VfU1RECisjZWxzZQorI2lmZGVmIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyNlbmRpZgorfSAvLyBuYW1lc3BhY2Ugc3RkCisjZW5kaWYKKworI2VuZGlmIC8vIF9fY3BsdXNwbHVzIDw9IDIwMTEwM0wKKyNlbmRpZiAvLyBfX0NMQU5HX0NVREFfV1JBUFBFUlNfQUxHT1JJVEhNCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2N1ZGFfd3JhcHBlcnMvY29tcGxleCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvY3VkYV93cmFwcGVycy9jb21wbGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZDQwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2N1ZGFfd3JhcHBlcnMvY29tcGxleApAQCAtMCwwICsxLDgyIEBACisvKj09PS0tLS0gY29tcGxleCAtIENVREEgd3JhcHBlciBmb3IgPGNvbXBsZXg+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0NMQU5HX0NVREFfV1JBUFBFUlNfQ09NUExFWAorI2RlZmluZSBfX0NMQU5HX0NVREFfV1JBUFBFUlNfQ09NUExFWAorCisvLyBXcmFwcGVyIGFyb3VuZCA8Y29tcGxleD4gdGhhdCBmb3JjZXMgaXRzIGZ1bmN0aW9ucyB0byBiZSBfX2hvc3RfXworLy8gX19kZXZpY2VfXy4KKworLy8gRmlyc3QsIGluY2x1ZGUgaG9zdC1vbmx5IGhlYWRlcnMgd2UgdGhpbmsgYXJlIGxpa2VseSB0byBiZSBpbmNsdWRlZCBieQorLy8gPGNvbXBsZXg+LCBzbyB0aGF0IHRoZSBwcmFnbWEgYmVsb3cgb25seSBhcHBsaWVzIHRvIDxjb21wbGV4PiBpdHNlbGYuCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkZXhjZXB0PgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKy8vIE5leHQsIGluY2x1ZGUgb3VyIDxhbGdvcml0aG0+IHdyYXBwZXIsIHRvIGVuc3VyZSB0aGF0IGRldmljZSBvdmVybG9hZHMgb2YKKy8vIHN0ZDo6bWluL21heCBhcmUgYXZhaWxhYmxlLgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworI3ByYWdtYSBjbGFuZyBmb3JjZV9jdWRhX2hvc3RfZGV2aWNlIGJlZ2luCisKKy8vIFdoZW4gY29tcGlsaW5nIGZvciBkZXZpY2UsIGFzayBsaWJzdGRjKysgdG8gdXNlIGl0cyBvd24gaW1wbGVtZW50cyBvZgorLy8gY29tcGxleCBmdW5jdGlvbnMsIHJhdGhlciB0aGFuIGNhbGxpbmcgYnVpbHRpbnMgKHdoaWNoIHJlc29sdmUgdG8gbGlicmFyeQorLy8gZnVuY3Rpb25zIHRoYXQgZG9uJ3QgZXhpc3Qgd2hlbiBjb21waWxpbmcgQ1VEQSBkZXZpY2UgY29kZSkuCisvLworLy8gVGhpcyBpcyBhIGxpdHRsZSBkaWNleSwgYmVjYXVzZSBpdCBjYXVzZXMgbGlic3RkYysrIHRvIGRlZmluZSBhIGRpZmZlcmVudAorLy8gc2V0IG9mIG92ZXJsb2FkcyBvbiBob3N0IGFuZCBkZXZpY2UuCisvLworLy8gICAvLyBQcmVzZW50IG9ubHkgd2hlbiBjb21waWxpbmcgZm9yIGhvc3QuCisvLyAgIF9faG9zdF9fIF9fZGV2aWNlX18gdm9pZCBjb21wbGV4PGZsb2F0PiBzaW4oY29uc3QgY29tcGxleDxmbG9hdD4mIHgpIHsKKy8vICAgICByZXR1cm4gX19idWlsdGluX2NzaW5mKHgpOworLy8gICB9CisvLworLy8gICAvLyBQcmVzZW50IHdoZW4gY29tcGlsaW5nIGZvciBob3N0IGFuZCBmb3IgZGV2aWNlLgorLy8gICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy8vICAgdm9pZCBfX2hvc3RfXyBfX2RldmljZV9fIGNvbXBsZXg8VD4gc2luKGNvbnN0IGNvbXBsZXg8VD4mIHgpIHsKKy8vICAgICByZXR1cm4gY29tcGxleDxUPihzaW4oeC5yZWFsKCkpICogY29zaCh4LmltYWcoKSksCisvLyAgICAgICAgICAgICAgICAgICAgICAgY29zKHgucmVhbCgpKSwgc2luaCh4LmltYWcoKSkpOworLy8gICB9CisvLworLy8gVGhpcyBpcyBzYWZlIGJlY2F1c2Ugd2hlbiBjb21waWxpbmcgZm9yIGRldmljZSwgYWxsIGZ1bmN0aW9uIGNhbGxzIGluCisvLyBfX2hvc3RfXyBjb2RlIHRvIHNpbigpIHdpbGwgc3RpbGwgcmVzb2x2ZSB0byAqc29tZXRoaW5nKiwgZXZlbiBpZiB0aGV5IGRvbid0CisvLyByZXNvbHZlIHRvIHRoZSBzYW1lIGZ1bmN0aW9uIGFzIHRoZXkgcmVzb2x2ZSB0byB3aGVuIGNvbXBpbGluZyBmb3IgaG9zdC4gIFdlCisvLyBkb24ndCBjYXJlIHRoYXQgdGhleSBkb24ndCByZXNvbHZlIHRvIHRoZSByaWdodCBmdW5jdGlvbiBiZWNhdXNlIHdlIHdvbid0CisvLyBjb2RlZ2VuIHRoaXMgaG9zdCBjb2RlIHdoZW4gY29tcGlsaW5nIGZvciBkZXZpY2UuCisKKyNwcmFnbWEgcHVzaF9tYWNybygiX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYIikKKyNwcmFnbWEgcHVzaF9tYWNybygiX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYX1RSMSIpCisjZGVmaW5lIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWCAwCisjZGVmaW5lIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWF9UUjEgMAorCisjaW5jbHVkZV9uZXh0IDxjb21wbGV4PgorCisjcHJhZ21hIHBvcF9tYWNybygiX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYX1RSMSIpCisjcHJhZ21hIHBvcF9tYWNybygiX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYIikKKworI3ByYWdtYSBjbGFuZyBmb3JjZV9jdWRhX2hvc3RfZGV2aWNlIGVuZAorCisjZW5kaWYgLy8gaW5jbHVkZSBndWFyZApkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9jdWRhX3dyYXBwZXJzL25ldyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvY3VkYV93cmFwcGVycy9uZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc3MTMxYQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvY3VkYV93cmFwcGVycy9uZXcKQEAgLTAsMCArMSw0NyBAQAorLyo9PT0tLS0tIGNvbXBsZXggLSBDVURBIHdyYXBwZXIgZm9yIDxuZXc+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0NMQU5HX0NVREFfV1JBUFBFUlNfTkVXCisjZGVmaW5lIF9fQ0xBTkdfQ1VEQV9XUkFQUEVSU19ORVcKKworI2luY2x1ZGVfbmV4dCA8bmV3PgorCisvLyBEZXZpY2Ugb3ZlcnJpZGVzIGZvciBwbGFjZW1lbnQgbmV3IGFuZCBkZWxldGUuCisjcHJhZ21hIHB1c2hfbWFjcm8oIkNVREFfTk9FWENFUFQiKQorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNkZWZpbmUgQ1VEQV9OT0VYQ0VQVCBub2V4Y2VwdAorI2Vsc2UKKyNkZWZpbmUgQ1VEQV9OT0VYQ0VQVAorI2VuZGlmCisKK19fZGV2aWNlX18gaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ldyhfX1NJWkVfVFlQRV9fLCB2b2lkICpfX3B0cikgQ1VEQV9OT0VYQ0VQVCB7CisgIHJldHVybiBfX3B0cjsKK30KK19fZGV2aWNlX18gaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKF9fU0laRV9UWVBFX18sIHZvaWQgKl9fcHRyKSBDVURBX05PRVhDRVBUIHsKKyAgcmV0dXJuIF9fcHRyOworfQorX19kZXZpY2VfXyBpbmxpbmUgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqLCB2b2lkICopIENVREFfTk9FWENFUFQge30KK19fZGV2aWNlX18gaW5saW5lIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqLCB2b2lkICopIENVREFfTk9FWENFUFQge30KKyNwcmFnbWEgcG9wX21hY3JvKCJDVURBX05PRVhDRVBUIikKKworI2VuZGlmIC8vIGluY2x1ZGUgZ3VhcmQKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvZW1taW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2VtbWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYTEwYWMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2VtbWludHJpbi5oCkBAIC0wLDAgKzEsNDc3MSBAQAorLyo9PT0tLS0tIGVtbWludHJpbi5oIC0gU1NFMiBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0VNTUlOVFJJTl9ICisjZGVmaW5lIF9fRU1NSU5UUklOX0gKKworI2luY2x1ZGUgPHhtbWludHJpbi5oPgorCit0eXBlZGVmIGRvdWJsZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNikpKTsKK3R5cGVkZWYgbG9uZyBsb25nIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOworCisvKiBUeXBlIGRlZmluZXMuICAqLwordHlwZWRlZiBkb3VibGUgX192MmRmIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiBsb25nIGxvbmcgX192MmRpIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiBzaG9ydCBfX3Y4aGkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOwordHlwZWRlZiBjaGFyIF9fdjE2cWkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOworCisvKiBVbnNpZ25lZCB0eXBlcyAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX192MmR1IF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Y4aHUgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdjE2cXUgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOworCisvKiBXZSBuZWVkIGFuIGV4cGxpY2l0bHkgc2lnbmVkIHZhcmlhbnQgZm9yIGNoYXIuIE5vdGUgdGhhdCB0aGlzIHNob3VsZG4ndAorICogYXBwZWFyIGluIHRoZSBpbnRlcmZhY2UgdGhvdWdoLiAqLwordHlwZWRlZiBzaWduZWQgY2hhciBfX3YxNnFzIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNikpKTsKKworI2luY2x1ZGUgPGYxNmNpbnRyaW4uaD4KKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJzc2UyIikpKQorCisvLy8gXGJyaWVmIEFkZHMgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZXMgaW4gYm90aCBvcGVyYW5kcyBhbmQgcmV0dXJucyB0aGUKKy8vLyAgICBzdW0gaW4gdGhlIGxvd2VyIDY0IGJpdHMgb2YgdGhlIHJlc3VsdC4gVGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhlIHJlc3VsdAorLy8vICAgIGFyZSBjb3BpZWQgZnJvbSB0aGUgdXBwZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQUREU0QgLyBBRERTRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIHdob3NlIGxvd2VyIDY0IGJpdHMgY29udGFpbiB0aGUKKy8vLyAgICBzdW0gb2YgdGhlIGxvd2VyIDY0IGJpdHMgb2YgYm90aCBvcGVyYW5kcy4gVGhlIHVwcGVyIDY0IGJpdHMgYXJlIGNvcGllZAorLy8vICAgIGZyb20gdGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICBfX2FbMF0gKz0gX19iWzBdOworICByZXR1cm4gX19hOworfQorCisvLy8gXGJyaWVmIEFkZHMgdHdvIDEyOC1iaXQgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkFERFBEIC8gQUREUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBzdW1zIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKSgoX192MmRmKV9fYSArIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBTdWJ0cmFjdHMgdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgdGhlIHNlY29uZCBvcGVyYW5kCisvLy8gICAgZnJvbSB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiB0aGUgZmlyc3Qgb3BlcmFuZCBhbmQgcmV0dXJucworLy8vICAgIHRoZSBkaWZmZXJlbmNlIGluIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZSByZXN1bHQuIFRoZSB1cHBlciA2NCBiaXRzIG9mCisvLy8gICAgdGhlIHJlc3VsdCBhcmUgY29waWVkIGZyb20gdGhlIHVwcGVyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgdGhlIGZpcnN0CisvLy8gICAgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWU1VCU0QgLyBTVUJTRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBtaW51ZW5kLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBzdWJ0cmFoZW5kLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIHdob3NlIGxvd2VyIDY0IGJpdHMgY29udGFpbiB0aGUKKy8vLyAgICBkaWZmZXJlbmNlIG9mIHRoZSBsb3dlciA2NCBiaXRzIG9mIGJvdGggb3BlcmFuZHMuIFRoZSB1cHBlciA2NCBiaXRzIGFyZQorLy8vICAgIGNvcGllZCBmcm9tIHRoZSB1cHBlciA2NCBiaXRzIG9mIHRoZSBmaXJzdCBzb3VyY2Ugb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3ViX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgX19hWzBdIC09IF9fYlswXTsKKyAgcmV0dXJuIF9fYTsKK30KKworLy8vIFxicmllZiBTdWJ0cmFjdHMgdHdvIDEyOC1iaXQgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlNVQlBEIC8gU1VCUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgbWludWVuZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgc3VidHJhaGVuZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuCisvLy8gICAgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3ViX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKSgoX192MmRmKV9fYSAtIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBNdWx0aXBsaWVzIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzIGluIGJvdGggb3BlcmFuZHMgYW5kIHJldHVybnMKKy8vLyAgICB0aGUgcHJvZHVjdCBpbiB0aGUgbG93ZXIgNjQgYml0cyBvZiB0aGUgcmVzdWx0LiBUaGUgdXBwZXIgNjQgYml0cyBvZiB0aGUKKy8vLyAgICByZXN1bHQgYXJlIGNvcGllZCBmcm9tIHRoZSB1cHBlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIHRoZSBmaXJzdAorLy8vICAgIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1VTFNEIC8gTVVMU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSB3aG9zZSBsb3dlciA2NCBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgcHJvZHVjdCBvZiB0aGUgbG93ZXIgNjQgYml0cyBvZiBib3RoIG9wZXJhbmRzLiBUaGUgdXBwZXIgNjQgYml0cyBhcmUKKy8vLyAgICBjb3BpZWQgZnJvbSB0aGUgdXBwZXIgNjQgYml0cyBvZiB0aGUgZmlyc3Qgc291cmNlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX211bF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIF9fYVswXSAqPSBfX2JbMF07CisgIHJldHVybiBfX2E7Cit9CisKKy8vLyBcYnJpZWYgTXVsdGlwbGllcyB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTVVMUEQgLyBNVUxQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBwcm9kdWN0cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX211bF9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZCkoKF9fdjJkZilfX2EgKiAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgRGl2aWRlcyB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiB0aGUgZmlyc3Qgb3BlcmFuZCBieSB0aGUKKy8vLyAgICBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIHRoZSBzZWNvbmQgb3BlcmFuZCBhbmQgcmV0dXJucyB0aGUKKy8vLyAgICBxdW90aWVudCBpbiB0aGUgbG93ZXIgNjQgYml0cyBvZiB0aGUgcmVzdWx0LiBUaGUgdXBwZXIgNjQgYml0cyBvZiB0aGUKKy8vLyAgICByZXN1bHQgYXJlIGNvcGllZCBmcm9tIHRoZSB1cHBlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIHRoZSBmaXJzdAorLy8vICAgIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkRJVlNEIC8gRElWU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgZGl2aWRlbmQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgZGl2aXNvci4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSB3aG9zZSBsb3dlciA2NCBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgcXVvdGllbnQgb2YgdGhlIGxvd2VyIDY0IGJpdHMgb2YgYm90aCBvcGVyYW5kcy4gVGhlIHVwcGVyIDY0IGJpdHMgYXJlCisvLy8gICAgY29waWVkIGZyb20gdGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9kaXZfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICBfX2FbMF0gLz0gX19iWzBdOworICByZXR1cm4gX19hOworfQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIGFuIGVsZW1lbnQtYnktZWxlbWVudCBkaXZpc2lvbiBvZiB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mCisvLy8gICAgWzIgeCBkb3VibGVdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZESVZQRCAvIERJVlBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGRpdmlkZW5kLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBkaXZpc29yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHF1b3RpZW50cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Rpdl9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZCkoKF9fdjJkZilfX2EgLyAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ2FsY3VsYXRlcyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YKKy8vLyAgICB0aGUgc2Vjb25kIG9wZXJhbmQgYW5kIHJldHVybnMgaXQgaW4gdGhlIGxvd2VyIDY0IGJpdHMgb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBUaGUgdXBwZXIgNjQgYml0cyBvZiB0aGUgcmVzdWx0IGFyZSBjb3BpZWQgZnJvbSB0aGUgdXBwZXIgZG91YmxlLQorLy8vICAgIHByZWNpc2lvbiB2YWx1ZSBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWU1FSVFNEIC8gU1FSVFNEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgdXBwZXIgNjQgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIGNvcGllZCB0byB0aGUgdXBwZXIgNjQgYml0cyBvZiB0aGUKKy8vLyAgICByZXN1bHQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgc3F1YXJlIHJvb3QgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgbG93ZXIgNjQgYml0cyBvZiB0aGlzIG9wZXJhbmQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gd2hvc2UgbG93ZXIgNjQgYml0cyBjb250YWluIHRoZQorLy8vICAgIHNxdWFyZSByb290IG9mIHRoZSBsb3dlciA2NCBiaXRzIG9mIG9wZXJhbmQgX19iLCBhbmQgd2hvc2UgdXBwZXIgNjQgYml0cworLy8vICAgIGFyZSBjb3BpZWQgZnJvbSB0aGUgdXBwZXIgNjQgYml0cyBvZiBvcGVyYW5kIF9fYS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3FydF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIF9fbTEyOGQgX19jID0gX19idWlsdGluX2lhMzJfc3FydHNkKChfX3YyZGYpX19iKTsKKyAgcmV0dXJuIChfX20xMjhkKSB7IF9fY1swXSwgX19hWzFdIH07Cit9CisKKy8vLyBcYnJpZWYgQ2FsY3VsYXRlcyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIGVhY2ggb2YgdHdvIHZhbHVlcyBzdG9yZWQgaW4gYQorLy8vICAgIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWU1FSVFBEIC8gU1FSVFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHNxdWFyZSByb290cyBvZiB0aGUKKy8vLyAgICB2YWx1ZXMgaW4gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NxcnRfcGQoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9zcXJ0cGQoKF9fdjJkZilfX2EpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGxvd2VyIDY0LWJpdCBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcyBvZiBib3RoIG9wZXJhbmRzLCBhbmQKKy8vLyAgICByZXR1cm5zIHRoZSBsZXNzZXIgb2YgdGhlIHBhaXIgb2YgdmFsdWVzIGluIHRoZSBsb3dlciA2NC1iaXRzIG9mIHRoZQorLy8vICAgIHJlc3VsdC4gVGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhlIHJlc3VsdCBhcmUgY29waWVkIGZyb20gdGhlIHVwcGVyIGRvdWJsZS0KKy8vLyAgICBwcmVjaXNpb24gdmFsdWUgb2YgdGhlIGZpcnN0IG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1JTlNEIC8gTUlOU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUKKy8vLyAgICBsb3dlciA2NCBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUKKy8vLyAgICBsb3dlciA2NCBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSB3aG9zZSBsb3dlciA2NCBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgbWluaW11bSB2YWx1ZSBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuIFRoZSB1cHBlciA2NCBiaXRzIGFyZSBjb3BpZWQgZnJvbQorLy8vICAgIHRoZSB1cHBlciA2NCBiaXRzIG9mIHRoZSBmaXJzdCBzb3VyY2Ugb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21pbnNkKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgZWxlbWVudC1ieS1lbGVtZW50IGNvbXBhcmlzb24gb2YgdGhlIHR3byAxMjgtYml0IHZlY3RvcnMgb2YKKy8vLyAgICBbMiB4IGRvdWJsZV0gYW5kIHJldHVybnMgdGhlIHZlY3RvciBjb250YWluaW5nIHRoZSBsZXNzZXIgb2YgZWFjaCBwYWlyIG9mCisvLy8gICAgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNSU5QRCAvIE1JTlBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIG1pbmltdW0gdmFsdWVzCisvLy8gICAgYmV0d2VlbiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9taW5fcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfbWlucGQoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBsb3dlciA2NC1iaXRzIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzIG9mIGJvdGggb3BlcmFuZHMsIGFuZAorLy8vICAgIHJldHVybnMgdGhlIGdyZWF0ZXIgb2YgdGhlIHBhaXIgb2YgdmFsdWVzIGluIHRoZSBsb3dlciA2NC1iaXRzIG9mIHRoZQorLy8vICAgIHJlc3VsdC4gVGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhlIHJlc3VsdCBhcmUgY29waWVkIGZyb20gdGhlIHVwcGVyIGRvdWJsZS0KKy8vLyAgICBwcmVjaXNpb24gdmFsdWUgb2YgdGhlIGZpcnN0IG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1BWFNEIC8gTUFYU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUKKy8vLyAgICBsb3dlciA2NCBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUKKy8vLyAgICBsb3dlciA2NCBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSB3aG9zZSBsb3dlciA2NCBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgbWF4aW11bSB2YWx1ZSBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuIFRoZSB1cHBlciA2NCBiaXRzIGFyZSBjb3BpZWQgZnJvbQorLy8vICAgIHRoZSB1cHBlciA2NCBiaXRzIG9mIHRoZSBmaXJzdCBzb3VyY2Ugb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWF4X3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21heHNkKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgZWxlbWVudC1ieS1lbGVtZW50IGNvbXBhcmlzb24gb2YgdGhlIHR3byAxMjgtYml0IHZlY3RvcnMgb2YKKy8vLyAgICBbMiB4IGRvdWJsZV0gYW5kIHJldHVybnMgdGhlIHZlY3RvciBjb250YWluaW5nIHRoZSBncmVhdGVyIG9mIGVhY2ggcGFpcgorLy8vICAgIG9mIHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTUFYUEQgLyBNQVhQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBtYXhpbXVtIHZhbHVlcworLy8vICAgIGJldHdlZW4gYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWF4X3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21heHBkKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEFORCAvIFBBTkQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBiaXR3aXNlIEFORCBvZiB0aGUKKy8vLyAgICB2YWx1ZXMgYmV0d2VlbiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hbmRfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpKChfX3YyZHUpX19hICYgKF9fdjJkdSlfX2IpOworfQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIGEgYml0d2lzZSBBTkQgb2YgdHdvIDEyOC1iaXQgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0sIHVzaW5nCisvLy8gICAgdGhlIG9uZSdzIGNvbXBsZW1lbnQgb2YgdGhlIHZhbHVlcyBjb250YWluZWQgaW4gdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQQU5ETiAvIFBBTkROIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGxlZnQgc291cmNlIG9wZXJhbmQuIFRoZQorLy8vICAgIG9uZSdzIGNvbXBsZW1lbnQgb2YgdGhpcyB2YWx1ZSBpcyB1c2VkIGluIHRoZSBiaXR3aXNlIEFORC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgcmlnaHQgc291cmNlIG9wZXJhbmQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgYml0d2lzZSBBTkQgb2YgdGhlCisvLy8gICAgdmFsdWVzIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBhbmQgdGhlIG9uZSdzIGNvbXBsZW1lbnQgb2YgdGhlIGZpcnN0CisvLy8gICAgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYW5kbm90X3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKSh+KF9fdjJkdSlfX2EgJiAoX192MmR1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIE9SIG9mIHR3byAxMjgtYml0IHZlY3RvcnMgb2YgWzIgeCBkb3VibGVdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQT1IgLyBQT1IgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBiaXR3aXNlIE9SIG9mIHRoZQorLy8vICAgIHZhbHVlcyBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX29yX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKSgoX192MmR1KV9fYSB8IChfX3YyZHUpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhIGJpdHdpc2UgWE9SIG9mIHR3byAxMjgtYml0IHZlY3RvcnMgb2YgWzIgeCBkb3VibGVdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQWE9SIC8gUFhPUiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgWE9SIG9mIHRoZQorLy8vICAgIHZhbHVlcyBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3hvcl9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZCkoKF9fdjJkdSlfX2EgXiAoX192MmR1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcyBvZiB0aGUKKy8vLyAgICAxMjgtYml0IHZlY3RvcnMgb2YgWzIgeCBkb3VibGVdIGZvciBlcXVhbGl0eS4gRWFjaCBjb21wYXJpc29uIHlpZWxkcyAwaAorLy8vICAgIGZvciBmYWxzZSwgRkZGRkZGRkZGRkZGRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUEVRUEQgLyBDTVBFUVBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wZXFwZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgZG91YmxlLXByZWNpc2lvbiB2YWx1ZXMgb2YgdGhlCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3QKKy8vLyAgICBvcGVyYW5kIGFyZSBsZXNzIHRoYW4gdGhvc2UgaW4gdGhlIHNlY29uZCBvcGVyYW5kLiBFYWNoIGNvbXBhcmlzb24KKy8vLyAgICB5aWVsZHMgMGggZm9yIGZhbHNlLCBGRkZGRkZGRkZGRkZGRkZGaCBmb3IgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QTFRQRCAvIENNUExUUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBsdHBkKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcyBvZiB0aGUKKy8vLyAgICAxMjgtYml0IHZlY3RvcnMgb2YgWzIgeCBkb3VibGVdIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBmaXJzdAorLy8vICAgIG9wZXJhbmQgYXJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aG9zZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQuIEVhY2gKKy8vLyAgICBjb21wYXJpc29uIHlpZWxkcyAwaCBmb3IgZmFsc2UsIEZGRkZGRkZGRkZGRkZGRkZoIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBMRVBEIC8gQ01QTEVQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGxlX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcGxlcGQoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0gdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZXMgaW4gdGhlIGZpcnN0CisvLy8gICAgb3BlcmFuZCBhcmUgZ3JlYXRlciB0aGFuIHRob3NlIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4gRWFjaCBjb21wYXJpc29uCisvLy8gICAgeWllbGRzIDBoIGZvciBmYWxzZSwgRkZGRkZGRkZGRkZGRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUExUUEQgLyBDTVBMVFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbHRwZCgoX192MmRmKV9fYiwgKF9fdjJkZilfX2EpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgZG91YmxlLXByZWNpc2lvbiB2YWx1ZXMgb2YgdGhlCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3QKKy8vLyAgICBvcGVyYW5kIGFyZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIHNlY29uZCBvcGVyYW5kLiBFYWNoCisvLy8gICAgY29tcGFyaXNvbiB5aWVsZHMgMGggZm9yIGZhbHNlLCBGRkZGRkZGRkZGRkZGRkZGaCBmb3IgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QTEVQRCAvIENNUExFUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBnZV9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBsZXBkKChfX3YyZGYpX19iLCAoX192MmRmKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcyBvZiB0aGUKKy8vLyAgICAxMjgtYml0IHZlY3RvcnMgb2YgWzIgeCBkb3VibGVdIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBmaXJzdAorLy8vICAgIG9wZXJhbmQgYXJlIG9yZGVyZWQgd2l0aCByZXNwZWN0IHRvIHRob3NlIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4gQSBwYWlyCisvLy8gICAgb2YgZG91YmxlLXByZWNpc2lvbiB2YWx1ZXMgYXJlICJvcmRlcmVkIiB3aXRoIHJlc3BlY3QgdG8gZWFjaCBvdGhlciBpZgorLy8vICAgIG5laXRoZXIgdmFsdWUgaXMgYSBOYU4uIEVhY2ggY29tcGFyaXNvbiB5aWVsZHMgMGggZm9yIGZhbHNlLAorLy8vICAgIEZGRkZGRkZGRkZGRkZGRkZoIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBPUkRQRCAvIENNUE9SRFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wb3JkX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcG9yZHBkKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcyBvZiB0aGUKKy8vLyAgICAxMjgtYml0IHZlY3RvcnMgb2YgWzIgeCBkb3VibGVdIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBmaXJzdAorLy8vICAgIG9wZXJhbmQgYXJlIHVub3JkZXJlZCB3aXRoIHJlc3BlY3QgdG8gdGhvc2UgaW4gdGhlIHNlY29uZCBvcGVyYW5kLiBBIHBhaXIKKy8vLyAgICBvZiBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcyBhcmUgInVub3JkZXJlZCIgd2l0aCByZXNwZWN0IHRvIGVhY2ggb3RoZXIgaWYKKy8vLyAgICBvbmUgb3IgYm90aCB2YWx1ZXMgYXJlIE5hTi4gRWFjaCBjb21wYXJpc29uIHlpZWxkcyAwaCBmb3IgZmFsc2UsCisvLy8gICAgRkZGRkZGRkZGRkZGRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUFVOT1JEUEQgLyBDTVBVTk9SRFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wdW5vcmRfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wdW5vcmRwZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgZG91YmxlLXByZWNpc2lvbiB2YWx1ZXMgb2YgdGhlCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3QKKy8vLyAgICBvcGVyYW5kIGFyZSB1bmVxdWFsIHRvIHRob3NlIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4gRWFjaCBjb21wYXJpc29uCisvLy8gICAgeWllbGRzIDBoIGZvciBmYWxzZSwgRkZGRkZGRkZGRkZGRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUE5FUVBEIC8gQ01QTkVRUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZXFfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbmVxcGQoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0gdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZXMgaW4gdGhlIGZpcnN0CisvLy8gICAgb3BlcmFuZCBhcmUgbm90IGxlc3MgdGhhbiB0aG9zZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQuIEVhY2ggY29tcGFyaXNvbgorLy8vICAgIHlpZWxkcyAwaCBmb3IgZmFsc2UsIEZGRkZGRkZGRkZGRkZGRkZoIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBOTFRQRCAvIENNUE5MVFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmx0X3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcG5sdHBkKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcyBvZiB0aGUKKy8vLyAgICAxMjgtYml0IHZlY3RvcnMgb2YgWzIgeCBkb3VibGVdIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBmaXJzdAorLy8vICAgIG9wZXJhbmQgYXJlIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIHNlY29uZCBvcGVyYW5kLiBFYWNoCisvLy8gICAgY29tcGFyaXNvbiB5aWVsZHMgMGggZm9yIGZhbHNlLCBGRkZGRkZGRkZGRkZGRkZGaCBmb3IgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QTkxFUEQgLyBDTVBOTEVQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5sZV9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBubGVwZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgZG91YmxlLXByZWNpc2lvbiB2YWx1ZXMgb2YgdGhlCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3QKKy8vLyAgICBvcGVyYW5kIGFyZSBub3QgZ3JlYXRlciB0aGFuIHRob3NlIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4gRWFjaAorLy8vICAgIGNvbXBhcmlzb24geWllbGRzIDBoIGZvciBmYWxzZSwgRkZGRkZGRkZGRkZGRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUE5MVFBEIC8gQ01QTkxUUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZ3RfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbmx0cGQoKF9fdjJkZilfX2IsIChfX3YyZGYpX19hKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0gdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZXMgaW4gdGhlIGZpcnN0CisvLy8gICAgb3BlcmFuZCBhcmUgbm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aG9zZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQuCisvLy8gICAgRWFjaCBjb21wYXJpc29uIHlpZWxkcyAwaCBmb3IgZmFsc2UsIEZGRkZGRkZGRkZGRkZGRkZoIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBOTEVQRCAvIENNUE5MRVBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmdlX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcG5sZXBkKChfX3YyZGYpX19iLCAoX192MmRmKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzIGluIGVhY2ggb2YKKy8vLyAgICB0aGUgdHdvIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0gZm9yIGVxdWFsaXR5LiBUaGUKKy8vLyAgICBjb21wYXJpc29uIHlpZWxkcyAwaCBmb3IgZmFsc2UsIEZGRkZGRkZGRkZGRkZGRkZoIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBFUVNEIC8gQ01QRVFTRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpcworLy8vICAgIGNvbXBhcmVkIHRvIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIF9fYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yLiBUaGUgbG93ZXIgNjQgYml0cyBjb250YWlucyB0aGUgY29tcGFyaXNvbgorLy8vICAgIHJlc3VsdHMuIFRoZSB1cHBlciA2NCBiaXRzIGFyZSBjb3BpZWQgZnJvbSB0aGUgdXBwZXIgNjQgYml0cyBvZiBfX2EuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGVxX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcGVxc2QoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgaW4gZWFjaCBvZgorLy8vICAgIHRoZSB0d28gMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSB0byBkZXRlcm1pbmUgaWYKKy8vLyAgICB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBsZXNzIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4KKy8vLyAgICB0aGUgc2Vjb25kIHBhcmFtZXRlci4gVGhlIGNvbXBhcmlzb24geWllbGRzIDBoIGZvciBmYWxzZSwKKy8vLyAgICBGRkZGRkZGRkZGRkZGRkZGaCBmb3IgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QTFRTRCAvIENNUExUU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGlzCisvLy8gICAgY29tcGFyZWQgdG8gdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgX19iLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2EuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3Rvci4gVGhlIGxvd2VyIDY0IGJpdHMgY29udGFpbnMgdGhlIGNvbXBhcmlzb24KKy8vLyAgICByZXN1bHRzLiBUaGUgdXBwZXIgNjQgYml0cyBhcmUgY29waWVkIGZyb20gdGhlIHVwcGVyIDY0IGJpdHMgb2YgX19hLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBsdHNkKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzIGluIGVhY2ggb2YKKy8vLyAgICB0aGUgdHdvIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0gdG8gZGV0ZXJtaW5lIGlmCisvLy8gICAgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXIuIFRoZSBjb21wYXJpc29uIHlpZWxkcyAwaCBmb3IKKy8vLyAgICBmYWxzZSwgRkZGRkZGRkZGRkZGRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUExFU0QgLyBDTVBMRVNEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpcworLy8vICAgIGNvbXBhcmVkIHRvIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIF9fYi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGlzCisvLy8gICAgY29tcGFyZWQgdG8gdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgX19hLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3IuIFRoZSBsb3dlciA2NCBiaXRzIGNvbnRhaW5zIHRoZSBjb21wYXJpc29uCisvLy8gICAgcmVzdWx0cy4gVGhlIHVwcGVyIDY0IGJpdHMgYXJlIGNvcGllZCBmcm9tIHRoZSB1cHBlciA2NCBiaXRzIG9mIF9fYS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbGVfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbGVzZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCisvLy8gXGJyaWVmICBDb21wYXJlcyB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgaW4gZWFjaAorLy8vICAgIG9mIHRoZSB0d28gMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSB0byBkZXRlcm1pbmUKKy8vLyAgICBpZiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBncmVhdGVyIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcKKy8vLyAgICB2YWx1ZSBpbiB0aGUgc2Vjb25kIHBhcmFtZXRlci4gVGhlIGNvbXBhcmlzb24geWllbGRzIDBoIGZvciBmYWxzZSwKKy8vLyAgICBGRkZGRkZGRkZGRkZGRkZGaCBmb3IgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QTFRTRCAvIENNUExUU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpcworLy8vICAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICAgY29tcGFyZWQgdG8gdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgX19hLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3IuIFRoZSBsb3dlciA2NCBiaXRzIGNvbnRhaW5zIHRoZSBjb21wYXJpc29uCisvLy8gICAgIHJlc3VsdHMuIFRoZSB1cHBlciA2NCBiaXRzIGFyZSBjb3BpZWQgZnJvbSB0aGUgdXBwZXIgNjQgYml0cyBvZiBfX2EuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGd0X3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgX19tMTI4ZCBfX2MgPSBfX2J1aWx0aW5faWEzMl9jbXBsdHNkKChfX3YyZGYpX19iLCAoX192MmRmKV9fYSk7CisgIHJldHVybiAoX19tMTI4ZCkgeyBfX2NbMF0sIF9fYVsxXSB9OworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBpbiBlYWNoIG9mCisvLy8gICAgdGhlIHR3byAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvcnMgb2YgWzIgeCBkb3VibGVdIHRvIGRldGVybWluZSBpZgorLy8vICAgIHRoZSB2YWx1ZSBpbiB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUKKy8vLyAgICBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBzZWNvbmQgcGFyYW1ldGVyLiBUaGUgY29tcGFyaXNvbiB5aWVsZHMgMGggZm9yCisvLy8gICAgZmFsc2UsIEZGRkZGRkZGRkZGRkZGRkZoIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBMRVNEIC8gQ01QTEVTRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpcworLy8vICAgIGNvbXBhcmVkIHRvIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIF9fYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yLiBUaGUgbG93ZXIgNjQgYml0cyBjb250YWlucyB0aGUgY29tcGFyaXNvbgorLy8vICAgIHJlc3VsdHMuIFRoZSB1cHBlciA2NCBiaXRzIGFyZSBjb3BpZWQgZnJvbSB0aGUgdXBwZXIgNjQgYml0cyBvZiBfX2EuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGdlX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgX19tMTI4ZCBfX2MgPSBfX2J1aWx0aW5faWEzMl9jbXBsZXNkKChfX3YyZGYpX19iLCAoX192MmRmKV9fYSk7CisgIHJldHVybiAoX19tMTI4ZCkgeyBfX2NbMF0sIF9fYVsxXSB9OworfQorCisvLy8gXGJyaWVmICBDb21wYXJlcyB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgaW4gZWFjaAorLy8vICAgIG9mIHRoZSB0d28gMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSB0byBkZXRlcm1pbmUKKy8vLyAgICBpZiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IHBhcmFtZXRlciBpcyAib3JkZXJlZCIgd2l0aCByZXNwZWN0IHRvIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXIuIFRoZSBjb21wYXJpc29uIHlpZWxkcyAwaCBmb3IKKy8vLyAgICBmYWxzZSwgRkZGRkZGRkZGRkZGRkZGRmggZm9yIHRydWUuIEEgcGFpciBvZiBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcyBhcmUKKy8vLyAgICAib3JkZXJlZCIgd2l0aCByZXNwZWN0IHRvIGVhY2ggb3RoZXIgaWYgbmVpdGhlciB2YWx1ZSBpcyBhIE5hTi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QT1JEU0QgLyBDTVBPUkRTRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpcworLy8vICAgIGNvbXBhcmVkIHRvIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIF9fYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yLiBUaGUgbG93ZXIgNjQgYml0cyBjb250YWlucyB0aGUgY29tcGFyaXNvbgorLy8vICAgIHJlc3VsdHMuIFRoZSB1cHBlciA2NCBiaXRzIGFyZSBjb3BpZWQgZnJvbSB0aGUgdXBwZXIgNjQgYml0cyBvZiBfX2EuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG9yZF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBvcmRzZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCisvLy8gXGJyaWVmICBDb21wYXJlcyB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgaW4gZWFjaAorLy8vICAgIG9mIHRoZSB0d28gMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSB0byBkZXRlcm1pbmUKKy8vLyAgICBpZiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IHBhcmFtZXRlciBpcyAidW5vcmRlcmVkIiB3aXRoIHJlc3BlY3QgdG8gdGhlCisvLy8gICAgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgc2Vjb25kIHBhcmFtZXRlci4gVGhlIGNvbXBhcmlzb24geWllbGRzIDBoCisvLy8gICAgZm9yIGZhbHNlLCBGRkZGRkZGRkZGRkZGRkZGaCBmb3IgdHJ1ZS4gQSBwYWlyIG9mIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzCisvLy8gICAgYXJlICJ1bm9yZGVyZWQiIHdpdGggcmVzcGVjdCB0byBlYWNoIG90aGVyIGlmIG9uZSBvciBib3RoIHZhbHVlcyBhcmUgTmFOLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBVTk9SRFNEIC8gQ01QVU5PUkRTRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpcworLy8vICAgIGNvbXBhcmVkIHRvIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIF9fYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yLiBUaGUgbG93ZXIgNjQgYml0cyBjb250YWlucyB0aGUgY29tcGFyaXNvbgorLy8vICAgIHJlc3VsdHMuIFRoZSB1cHBlciA2NCBiaXRzIGFyZSBjb3BpZWQgZnJvbSB0aGUgdXBwZXIgNjQgYml0cyBvZiBfX2EuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcHVub3JkX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcHVub3Jkc2QoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgaW4gZWFjaCBvZgorLy8vICAgIHRoZSB0d28gMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSB0byBkZXRlcm1pbmUgaWYKKy8vLyAgICB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IHBhcmFtZXRlciBpcyB1bmVxdWFsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluCisvLy8gICAgdGhlIHNlY29uZCBwYXJhbWV0ZXIuIFRoZSBjb21wYXJpc29uIHlpZWxkcyAwaCBmb3IgZmFsc2UsCisvLy8gICAgRkZGRkZGRkZGRkZGRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUE5FUVNEIC8gQ01QTkVRU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGlzCisvLy8gICAgY29tcGFyZWQgdG8gdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgX19iLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2EuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3Rvci4gVGhlIGxvd2VyIDY0IGJpdHMgY29udGFpbnMgdGhlIGNvbXBhcmlzb24KKy8vLyAgICByZXN1bHRzLiBUaGUgdXBwZXIgNjQgYml0cyBhcmUgY29waWVkIGZyb20gdGhlIHVwcGVyIDY0IGJpdHMgb2YgX19hLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZXFfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbmVxc2QoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgaW4gZWFjaCBvZgorLy8vICAgIHRoZSB0d28gMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSB0byBkZXRlcm1pbmUgaWYKKy8vLyAgICB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBub3QgbGVzcyB0aGFuIHRoZSBjb3JyZXNwb25kaW5nCisvLy8gICAgdmFsdWUgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXIuIFRoZSBjb21wYXJpc29uIHlpZWxkcyAwaCBmb3IgZmFsc2UsCisvLy8gICAgRkZGRkZGRkZGRkZGRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUE5MVFNEIC8gQ01QTkxUU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGlzCisvLy8gICAgY29tcGFyZWQgdG8gdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgX19iLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2EuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3Rvci4gVGhlIGxvd2VyIDY0IGJpdHMgY29udGFpbnMgdGhlIGNvbXBhcmlzb24KKy8vLyAgICByZXN1bHRzLiBUaGUgdXBwZXIgNjQgYml0cyBhcmUgY29waWVkIGZyb20gdGhlIHVwcGVyIDY0IGJpdHMgb2YgX19hLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBubHRfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbmx0c2QoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgaW4gZWFjaCBvZgorLy8vICAgIHRoZSB0d28gMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSB0byBkZXRlcm1pbmUgaWYKKy8vLyAgICB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXIuIFRoZSBjb21wYXJpc29uIHlpZWxkcyAwaAorLy8vICAgIGZvciBmYWxzZSwgRkZGRkZGRkZGRkZGRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUE5MRVNEIC8gQ01QTkxFU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGlzCisvLy8gICAgY29tcGFyZWQgdG8gdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgX19iLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2EuCisvLy8gXHJldHVybnMgIEEgMTI4LWJpdCB2ZWN0b3IuIFRoZSBsb3dlciA2NCBiaXRzIGNvbnRhaW5zIHRoZSBjb21wYXJpc29uCisvLy8gICAgcmVzdWx0cy4gVGhlIHVwcGVyIDY0IGJpdHMgYXJlIGNvcGllZCBmcm9tIHRoZSB1cHBlciA2NCBiaXRzIG9mIF9fYS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmxlX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcG5sZXNkKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzIGluIGVhY2ggb2YKKy8vLyAgICB0aGUgdHdvIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0gdG8gZGV0ZXJtaW5lIGlmCisvLy8gICAgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgY29ycmVzcG9uZGluZworLy8vICAgIHZhbHVlIGluIHRoZSBzZWNvbmQgcGFyYW1ldGVyLiBUaGUgY29tcGFyaXNvbiB5aWVsZHMgMGggZm9yIGZhbHNlLAorLy8vICAgIEZGRkZGRkZGRkZGRkZGRkZoIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBOTFRTRCAvIENNUE5MVFNEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpcworLy8vICAgIGNvbXBhcmVkIHRvIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIF9fYi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGlzCisvLy8gICAgY29tcGFyZWQgdG8gdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgX19hLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3IuIFRoZSBsb3dlciA2NCBiaXRzIGNvbnRhaW5zIHRoZSBjb21wYXJpc29uCisvLy8gICAgcmVzdWx0cy4gVGhlIHVwcGVyIDY0IGJpdHMgYXJlIGNvcGllZCBmcm9tIHRoZSB1cHBlciA2NCBiaXRzIG9mIF9fYS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmd0X3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgX19tMTI4ZCBfX2MgPSBfX2J1aWx0aW5faWEzMl9jbXBubHRzZCgoX192MmRmKV9fYiwgKF9fdjJkZilfX2EpOworICByZXR1cm4gKF9fbTEyOGQpIHsgX19jWzBdLCBfX2FbMV0gfTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgaW4gZWFjaCBvZgorLy8vICAgIHRoZSB0d28gMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSB0byBkZXRlcm1pbmUgaWYKKy8vLyAgICB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBub3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXIuIFRoZSBjb21wYXJpc29uIHlpZWxkcyAwaAorLy8vICAgIGZvciBmYWxzZSwgRkZGRkZGRkZGRkZGRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUE5MRVNEIC8gQ01QTkxFU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGlzCisvLy8gICAgY29tcGFyZWQgdG8gdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgX19iLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2EuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3Rvci4gVGhlIGxvd2VyIDY0IGJpdHMgY29udGFpbnMgdGhlIGNvbXBhcmlzb24KKy8vLyAgICByZXN1bHRzLiBUaGUgdXBwZXIgNjQgYml0cyBhcmUgY29waWVkIGZyb20gdGhlIHVwcGVyIDY0IGJpdHMgb2YgX19hLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZ2Vfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICBfX20xMjhkIF9fYyA9IF9fYnVpbHRpbl9pYTMyX2NtcG5sZXNkKChfX3YyZGYpX19iLCAoX192MmRmKV9fYSk7CisgIHJldHVybiAoX19tMTI4ZCkgeyBfX2NbMF0sIF9fYVsxXSB9OworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBpbiBlYWNoIG9mCisvLy8gICAgdGhlIHR3byAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvcnMgb2YgWzIgeCBkb3VibGVdIGZvciBlcXVhbGl0eS4gVGhlCisvLy8gICAgY29tcGFyaXNvbiB5aWVsZHMgMCBmb3IgZmFsc2UsIDEgZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNPTUlTRCAvIENPTUlTRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpcworLy8vICAgIGNvbXBhcmVkIHRvIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIF9fYS4KKy8vLyBccmV0dXJucyBBbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21pZXFfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taXNkZXEoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgaW4gZWFjaCBvZgorLy8vICAgIHRoZSB0d28gMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSB0byBkZXRlcm1pbmUgaWYKKy8vLyAgICB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBsZXNzIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4KKy8vLyAgICB0aGUgc2Vjb25kIHBhcmFtZXRlci4gVGhlIGNvbXBhcmlzb24geWllbGRzIDAgZm9yIGZhbHNlLCAxIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDT01JU0QgLyBDT01JU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGlzCisvLy8gICAgY29tcGFyZWQgdG8gdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgX19iLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2EuCisvLy8gXHJldHVybnMgQW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29taWx0X3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWlzZGx0KChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzIGluIGVhY2ggb2YKKy8vLyAgICB0aGUgdHdvIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0gdG8gZGV0ZXJtaW5lIGlmCisvLy8gICAgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXIuIFRoZSBjb21wYXJpc29uIHlpZWxkcyAwIGZvcgorLy8vICAgIGZhbHNlLCAxIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDT01JU0QgLyBDT01JU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGlzCisvLy8gICAgY29tcGFyZWQgdG8gdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgX19iLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGlzCisvLy8gICAgIGNvbXBhcmVkIHRvIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIF9fYS4KKy8vLyBccmV0dXJucyBBbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21pbGVfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taXNkbGUoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgaW4gZWFjaCBvZgorLy8vICAgIHRoZSB0d28gMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSB0byBkZXRlcm1pbmUgaWYKKy8vLyAgICB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBncmVhdGVyIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUKKy8vLyAgICBpbiB0aGUgc2Vjb25kIHBhcmFtZXRlci4gVGhlIGNvbXBhcmlzb24geWllbGRzIDAgZm9yIGZhbHNlLCAxIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDT01JU0QgLyBDT01JU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGlzCisvLy8gICAgY29tcGFyZWQgdG8gdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgX19iLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2EuCisvLy8gXHJldHVybnMgQW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29taWd0X3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWlzZGd0KChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzIGluIGVhY2ggb2YKKy8vLyAgICB0aGUgdHdvIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0gdG8gZGV0ZXJtaW5lIGlmCisvLy8gICAgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXIuIFRoZSBjb21wYXJpc29uIHlpZWxkcyAwIGZvcgorLy8vICAgIGZhbHNlLCAxIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDT01JU0QgLyBDT01JU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGlzCisvLy8gICAgY29tcGFyZWQgdG8gdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgX19iLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2EuCisvLy8gXHJldHVybnMgQW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29taWdlX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWlzZGdlKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzIGluIGVhY2ggb2YKKy8vLyAgICB0aGUgdHdvIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0gdG8gZGV0ZXJtaW5lIGlmCisvLy8gICAgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdW5lcXVhbCB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbgorLy8vICAgIHRoZSBzZWNvbmQgcGFyYW1ldGVyLiBUaGUgY29tcGFyaXNvbiB5aWVsZHMgMCBmb3IgZmFsc2UsIDEgZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNPTUlTRCAvIENPTUlTRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpcworLy8vICAgIGNvbXBhcmVkIHRvIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIF9fYS4KKy8vLyBccmV0dXJucyBBbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21pbmVxX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWlzZG5lcSgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBpbiBlYWNoIG9mCisvLy8gICAgdGhlIHR3byAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvcnMgb2YgWzIgeCBkb3VibGVdIGZvciBlcXVhbGl0eS4gVGhlCisvLy8gICAgY29tcGFyaXNvbiB5aWVsZHMgMCBmb3IgZmFsc2UsIDEgZm9yIHRydWUuIElmIGVpdGhlciBvZiB0aGUgdHdvIGxvd2VyCisvLy8gICAgZG91YmxlLXByZWNpc2lvbiB2YWx1ZXMgaXMgTmFOLCAxIGlzIHJldHVybmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZVQ09NSVNEIC8gVUNPTUlTRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpcworLy8vICAgIGNvbXBhcmVkIHRvIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIF9fYS4KKy8vLyBccmV0dXJucyBBbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4gSWYgZWl0aGVyIG9mIHRoZSB0d28KKy8vLyAgICBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcyBpcyBOYU4sIDEgaXMgcmV0dXJuZWQuCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdWNvbWllcV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taXNkZXEoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgaW4gZWFjaCBvZgorLy8vICAgIHRoZSB0d28gMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSB0byBkZXRlcm1pbmUgaWYKKy8vLyAgICB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBsZXNzIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4KKy8vLyAgICB0aGUgc2Vjb25kIHBhcmFtZXRlci4gVGhlIGNvbXBhcmlzb24geWllbGRzIDAgZm9yIGZhbHNlLCAxIGZvciB0cnVlLgorLy8vICAgIElmIGVpdGhlciBvZiB0aGUgdHdvIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzIGlzIE5hTiwgMSBpcyByZXR1cm5lZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWVUNPTUlTRCAvIFVDT01JU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGlzCisvLy8gICAgY29tcGFyZWQgdG8gdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgX19iLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2EuCisvLy8gXHJldHVybnMgQW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuIElmIGVpdGhlciBvZiB0aGUgdHdvCisvLy8gICAgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZXMgaXMgTmFOLCAxIGlzIHJldHVybmVkLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Vjb21pbHRfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWlzZGx0KChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzIGluIGVhY2ggb2YKKy8vLyAgICB0aGUgdHdvIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0gdG8gZGV0ZXJtaW5lIGlmCisvLy8gICAgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXIuIFRoZSBjb21wYXJpc29uIHlpZWxkcyAwIGZvcgorLy8vICAgIGZhbHNlLCAxIGZvciB0cnVlLiBJZiBlaXRoZXIgb2YgdGhlIHR3byBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcyBpcworLy8vICAgIE5hTiwgMSBpcyByZXR1cm5lZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWVUNPTUlTRCAvIFVDT01JU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGlzCisvLy8gICAgY29tcGFyZWQgdG8gdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgX19iLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGlzCisvLy8gICAgIGNvbXBhcmVkIHRvIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIF9fYS4KKy8vLyBccmV0dXJucyBBbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4gSWYgZWl0aGVyIG9mIHRoZSB0d28KKy8vLyAgICAgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZXMgaXMgTmFOLCAxIGlzIHJldHVybmVkLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Vjb21pbGVfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWlzZGxlKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzIGluIGVhY2ggb2YKKy8vLyAgICB0aGUgdHdvIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0gdG8gZGV0ZXJtaW5lIGlmCisvLy8gICAgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlCisvLy8gICAgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXIuIFRoZSBjb21wYXJpc29uIHlpZWxkcyAwIGZvciBmYWxzZSwgMSBmb3IgdHJ1ZS4KKy8vLyAgICBJZiBlaXRoZXIgb2YgdGhlIHR3byBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcyBpcyBOYU4sIDAgaXMgcmV0dXJuZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlVDT01JU0QgLyBVQ09NSVNEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpcworLy8vICAgIGNvbXBhcmVkIHRvIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIF9fYi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpcworLy8vICAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2EuCisvLy8gXHJldHVybnMgQW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuIElmIGVpdGhlciBvZiB0aGUgdHdvCisvLy8gICAgIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzIGlzIE5hTiwgMCBpcyByZXR1cm5lZC4KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91Y29taWd0X3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RndCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBpbiBlYWNoIG9mCisvLy8gICAgdGhlIHR3byAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvcnMgb2YgWzIgeCBkb3VibGVdIHRvIGRldGVybWluZSBpZgorLy8vICAgIHRoZSB2YWx1ZSBpbiB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUKKy8vLyAgICBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBzZWNvbmQgcGFyYW1ldGVyLiBUaGUgY29tcGFyaXNvbiB5aWVsZHMgMCBmb3IKKy8vLyAgICBmYWxzZSwgMSBmb3IgdHJ1ZS4gIElmIGVpdGhlciBvZiB0aGUgdHdvIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzCisvLy8gICAgaXMgTmFOLCAwIGlzIHJldHVybmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZVQ09NSVNEIC8gVUNPTUlTRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaXMKKy8vLyAgICBjb21wYXJlZCB0byB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBvZiBfX2IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpcworLy8vICAgIGNvbXBhcmVkIHRvIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIF9fYS4KKy8vLyBccmV0dXJucyBBbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4gSWYgZWl0aGVyIG9mIHRoZSB0d28KKy8vLyAgICBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcyBpcyBOYU4sIDAgaXMgcmV0dXJuZWQuCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdWNvbWlnZV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taXNkZ2UoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0aGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgaW4gZWFjaCBvZgorLy8vICAgIHRoZSB0d28gMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3JzIG9mIFsyIHggZG91YmxlXSB0byBkZXRlcm1pbmUgaWYKKy8vLyAgICB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IHBhcmFtZXRlciBpcyB1bmVxdWFsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluCisvLy8gICAgdGhlIHNlY29uZCBwYXJhbWV0ZXIuIFRoZSBjb21wYXJpc29uIHlpZWxkcyAwIGZvciBmYWxzZSwgMSBmb3IgdHJ1ZS4gSWYKKy8vLyAgICBlaXRoZXIgb2YgdGhlIHR3byBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcyBpcyBOYU4sIDAgaXMgcmV0dXJuZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlVDT01JU0QgLyBVQ09NSVNEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpcworLy8vICAgIGNvbXBhcmVkIHRvIHRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIG9mIF9fYi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGlzCisvLy8gICAgY29tcGFyZWQgdG8gdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgb2YgX19hLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHQuIElmIGVpdGhlciBvZiB0aGUgdHdvCisvLy8gICAgbG93ZXIgZG91YmxlLXByZWNpc2lvbiB2YWx1ZXMgaXMgTmFOLCAwIGlzIHJldHVybmVkLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Vjb21pbmVxX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RuZXEoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyB0aGUgdHdvIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgZWxlbWVudHMgb2YgYQorLy8vICAgIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBpbnRvIHR3byBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50CisvLy8gICAgdmFsdWVzLCByZXR1cm5lZCBpbiB0aGUgbG93ZXIgNjQgYml0cyBvZiBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vICAgIFRoZSB1cHBlciA2NCBiaXRzIG9mIHRoZSByZXN1bHQgdmVjdG9yIGFyZSBzZXQgdG8gemVyby4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZUUEQyUFMgLyBDVlRQRDJQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIHdob3NlIGxvd2VyIDY0IGJpdHMgY29udGFpbiB0aGUKKy8vLyAgICBjb252ZXJ0ZWQgdmFsdWVzLiBUaGUgdXBwZXIgNjQgYml0cyBhcmUgc2V0IHRvIHplcm8uCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cGRfcHMoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRwZDJwcygoX192MmRmKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgdGhlIGxvd2VyIHR3byBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGVsZW1lbnRzIG9mIGEKKy8vLyAgICAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBpbnRvIHR3byBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50CisvLy8gICAgdmFsdWVzLCByZXR1cm5lZCBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIHVwcGVyIHR3bworLy8vICAgIGVsZW1lbnRzIG9mIHRoZSBpbnB1dCB2ZWN0b3IgYXJlIHVudXNlZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZUUFMyUEQgLyBDVlRQUzJQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIgdHdvIHNpbmdsZS1wcmVjaXNpb24KKy8vLyAgICBmbG9hdGluZy1wb2ludCBlbGVtZW50cyBhcmUgY29udmVydGVkIHRvIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzLiBUaGUKKy8vLyAgICB1cHBlciB0d28gZWxlbWVudHMgYXJlIHVudXNlZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwc19wZChfX20xMjggX19hKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKAorICAgICAgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19hLCAwLCAxKSwgX192MmRmKTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyB0aGUgbG93ZXIgdHdvIGludGVnZXIgZWxlbWVudHMgb2YgYSAxMjgtYml0IHZlY3RvciBvZgorLy8vICAgIFs0IHggaTMyXSBpbnRvIHR3byBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlcywgcmV0dXJuZWQgaW4gYQorLy8vICAgIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIHVwcGVyIHR3byBlbGVtZW50cyBvZiB0aGUgaW5wdXQKKy8vLyAgICB2ZWN0b3IgYXJlIHVudXNlZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZURFEyUEQgLyBDVlREUTJQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMzJdLiBUaGUgbG93ZXIgdHdvIGludGVnZXIgZWxlbWVudHMgYXJlCisvLy8gICAgY29udmVydGVkIHRvIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzLiBUaGUgdXBwZXIgdHdvIGVsZW1lbnRzIGFyZSB1bnVzZWQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXBpMzJfcGQoX19tMTI4aSBfX2EpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoCisgICAgICBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNpKV9fYSwgKF9fdjRzaSlfX2EsIDAsIDEpLCBfX3YyZGYpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIHRoZSB0d28gZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBlbGVtZW50cyBvZiBhCisvLy8gICAgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGludG8gdHdvIHNpZ25lZCAzMi1iaXQgaW50ZWdlciB2YWx1ZXMsCisvLy8gICAgcmV0dXJuZWQgaW4gdGhlIGxvd2VyIDY0IGJpdHMgb2YgYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGkzMl0uIFRoZSB1cHBlcgorLy8vICAgIDY0IGJpdHMgb2YgdGhlIHJlc3VsdCB2ZWN0b3IgYXJlIHNldCB0byB6ZXJvLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlRQRDJEUSAvIENWVFBEMkRRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMzJdIHdob3NlIGxvd2VyIDY0IGJpdHMgY29udGFpbiB0aGUKKy8vLyAgICBjb252ZXJ0ZWQgdmFsdWVzLiBUaGUgdXBwZXIgNjQgYml0cyBhcmUgc2V0IHRvIHplcm8uCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBkX2VwaTMyKF9fbTEyOGQgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0cGQyZHEoKF9fdjJkZilfX2EpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIHRoZSBsb3ctb3JkZXIgZWxlbWVudCBvZiBhIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXQorLy8vICAgIGludG8gYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgdmFsdWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFNEMlNJIC8gQ1ZUU0QyU0kgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciA2NCBiaXRzIGFyZSB1c2VkIGluIHRoZQorLy8vICAgIGNvbnZlcnNpb24uCisvLy8gXHJldHVybnMgQSAzMi1iaXQgc2lnbmVkIGludGVnZXIgY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNkX3NpMzIoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRzZDJzaSgoX192MmRmKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgdGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgZWxlbWVudCBvZiBhCisvLy8gICAgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLCBpbiB0aGUgc2Vjb25kIHBhcmFtZXRlciwgaW50byBhCisvLy8gICAgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSwgcmV0dXJuZWQgaW4gdGhlIGxvd2VyIDMyIGJpdHMgb2YgYQorLy8vICAgIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgdXBwZXIgOTYgYml0cyBvZiB0aGUgcmVzdWx0IHZlY3RvciBhcmUKKy8vLyAgICBjb3BpZWQgZnJvbSB0aGUgdXBwZXIgOTYgYml0cyBvZiB0aGUgZmlyc3QgcGFyYW1ldGVyLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlRTRDJTUyAvIENWVFNEMlNTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSB1cHBlciA5NiBiaXRzIG9mIHRoaXMgcGFyYW1ldGVyIGFyZQorLy8vICAgIGNvcGllZCB0byB0aGUgdXBwZXIgOTYgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIGRvdWJsZS1wcmVjaXNpb24KKy8vLyAgICBmbG9hdGluZy1wb2ludCBlbGVtZW50IGlzIHVzZWQgaW4gdGhlIGNvbnZlcnNpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgY29udGFpbiB0aGUKKy8vLyAgICBjb252ZXJ0ZWQgdmFsdWUgZnJvbSB0aGUgc2Vjb25kIHBhcmFtZXRlci4gVGhlIHVwcGVyIDk2IGJpdHMgYXJlIGNvcGllZAorLy8vICAgIGZyb20gdGhlIHVwcGVyIDk2IGJpdHMgb2YgdGhlIGZpcnN0IHBhcmFtZXRlci4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzZF9zcyhfX20xMjggX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY3Z0c2Qyc3MoKF9fdjRzZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciB2YWx1ZSwgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXIsIGludG8KKy8vLyAgICBhIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUsIHJldHVybmVkIGluIHRoZSBsb3dlciA2NCBiaXRzIG9mCisvLy8gICAgYSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSB1cHBlciA2NCBiaXRzIG9mIHRoZSByZXN1bHQgdmVjdG9yCisvLy8gICAgYXJlIGNvcGllZCBmcm9tIHRoZSB1cHBlciA2NCBiaXRzIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFNJMlNEIC8gQ1ZUU0kyU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSB1cHBlciA2NCBiaXRzIG9mIHRoaXMgcGFyYW1ldGVyIGFyZQorLy8vICAgIGNvcGllZCB0byB0aGUgdXBwZXIgNjQgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDMyLWJpdCBzaWduZWQgaW50ZWdlciBjb250YWluaW5nIHRoZSB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciA2NCBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgY29udmVydGVkIHZhbHVlIGZyb20gdGhlIHNlY29uZCBwYXJhbWV0ZXIuIFRoZSB1cHBlciA2NCBiaXRzIGFyZSBjb3BpZWQKKy8vLyAgICBmcm9tIHRoZSB1cHBlciA2NCBiaXRzIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNpMzJfc2QoX19tMTI4ZCBfX2EsIGludCBfX2IpCit7CisgIF9fYVswXSA9IF9fYjsKKyAgcmV0dXJuIF9fYTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyB0aGUgbG93ZXIgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBlbGVtZW50IG9mIGEKKy8vLyAgICAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSwgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXIsIGludG8gYQorLy8vICAgIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUsIHJldHVybmVkIGluIHRoZSBsb3dlciA2NCBiaXRzIG9mCisvLy8gICAgYSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSB1cHBlciA2NCBiaXRzIG9mIHRoZSByZXN1bHQgdmVjdG9yCisvLy8gICAgYXJlIGNvcGllZCBmcm9tIHRoZSB1cHBlciA2NCBiaXRzIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFNTMlNEIC8gQ1ZUU1MyU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSB1cHBlciA2NCBiaXRzIG9mIHRoaXMgcGFyYW1ldGVyIGFyZQorLy8vICAgIGNvcGllZCB0byB0aGUgdXBwZXIgNjQgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIgc2luZ2xlLXByZWNpc2lvbgorLy8vICAgIGZsb2F0aW5nLXBvaW50IGVsZW1lbnQgaXMgdXNlZCBpbiB0aGUgY29udmVyc2lvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIDY0IGJpdHMgY29udGFpbiB0aGUKKy8vLyAgICBjb252ZXJ0ZWQgdmFsdWUgZnJvbSB0aGUgc2Vjb25kIHBhcmFtZXRlci4gVGhlIHVwcGVyIDY0IGJpdHMgYXJlIGNvcGllZAorLy8vICAgIGZyb20gdGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhlIGZpcnN0IHBhcmFtZXRlci4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c3Nfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIF9fYVswXSA9IF9fYlswXTsKKyAgcmV0dXJuIF9fYTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyB0aGUgdHdvIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgZWxlbWVudHMgb2YgYQorLy8vICAgIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBpbnRvIHR3byBzaWduZWQgMzItYml0IGludGVnZXIgdmFsdWVzLAorLy8vICAgIHJldHVybmVkIGluIHRoZSBsb3dlciA2NCBiaXRzIG9mIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMzJdLiBJZiB0aGUKKy8vLyAgICByZXN1bHQgb2YgZWl0aGVyIGNvbnZlcnNpb24gaXMgaW5leGFjdCwgdGhlIHJlc3VsdCBpcyB0cnVuY2F0ZWQgKHJvdW5kZWQKKy8vLyAgICB0b3dhcmRzIHplcm8pIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgTVhDU1Igc2V0dGluZy4gVGhlIHVwcGVyIDY0IGJpdHMKKy8vLyAgICBvZiB0aGUgcmVzdWx0IHZlY3RvciBhcmUgc2V0IHRvIHplcm8uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFRQRDJEUSAvIENWVFRQRDJEUSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggaTMyXSB3aG9zZSBsb3dlciA2NCBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgY29udmVydGVkIHZhbHVlcy4gVGhlIHVwcGVyIDY0IGJpdHMgYXJlIHNldCB0byB6ZXJvLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0cGRfZXBpMzIoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9jdnR0cGQyZHEoKF9fdjJkZilfX2EpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIHRoZSBsb3ctb3JkZXIgZWxlbWVudCBvZiBhIFsyIHggZG91YmxlXSB2ZWN0b3IgaW50byBhIDMyLWJpdAorLy8vICAgIHNpZ25lZCBpbnRlZ2VyIHZhbHVlLCB0cnVuY2F0aW5nIHRoZSByZXN1bHQgd2hlbiBpdCBpcyBpbmV4YWN0LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlRUU0QyU0kgLyBDVlRUU0QyU0kgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciA2NCBiaXRzIGFyZSB1c2VkIGluIHRoZQorLy8vICAgIGNvbnZlcnNpb24uCisvLy8gXHJldHVybnMgQSAzMi1iaXQgc2lnbmVkIGludGVnZXIgY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRzZF9zaTMyKF9fbTEyOGQgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0dHNkMnNpKChfX3YyZGYpX19hKTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyB0aGUgdHdvIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgZWxlbWVudHMgb2YgYQorLy8vICAgIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBpbnRvIHR3byBzaWduZWQgMzItYml0IGludGVnZXIgdmFsdWVzLAorLy8vICAgIHJldHVybmVkIGluIGEgNjQtYml0IHZlY3RvciBvZiBbMiB4IGkzMl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQ1ZUUEQyUEkgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgdmVjdG9yIG9mIFsyIHggaTMyXSBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cGRfcGkzMihfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9jdnRwZDJwaSgoX192MmRmKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgdGhlIHR3byBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGVsZW1lbnRzIG9mIGEKKy8vLyAgICAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gaW50byB0d28gc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIHZhbHVlcywKKy8vLyAgICByZXR1cm5lZCBpbiBhIDY0LWJpdCB2ZWN0b3Igb2YgWzIgeCBpMzJdLiBJZiB0aGUgcmVzdWx0IG9mIGVpdGhlcgorLy8vICAgIGNvbnZlcnNpb24gaXMgaW5leGFjdCwgdGhlIHJlc3VsdCBpcyB0cnVuY2F0ZWQgKHJvdW5kZWQgdG93YXJkcyB6ZXJvKQorLy8vICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgTVhDU1Igc2V0dGluZy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBDVlRUUEQyUEkgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgdmVjdG9yIG9mIFsyIHggaTMyXSBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHBkX3BpMzIoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfY3Z0dHBkMnBpKChfX3YyZGYpX19hKTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyB0aGUgdHdvIHNpZ25lZCAzMi1iaXQgaW50ZWdlciBlbGVtZW50cyBvZiBhIDY0LWJpdCB2ZWN0b3Igb2YKKy8vLyAgICBbMiB4IGkzMl0gaW50byB0d28gZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMsIHJldHVybmVkIGluIGEKKy8vLyAgICAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQ1ZUUEkyUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwaTMyX3BkKF9fbTY0IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHBpMnBkKChfX3Yyc2kpX19hKTsKK30KKworLy8vIFxicmllZiBSZXR1cm5zIHRoZSBsb3ctb3JkZXIgZWxlbWVudCBvZiBhIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBhcworLy8vICAgIGEgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGhhcyBubyBjb3JyZXNwb25kaW5nIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIgNjQgYml0cyBhcmUgcmV0dXJuZWQuCisvLy8gXHJldHVybnMgQSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIGNvcGllZCBmcm9tIHRoZSBsb3dlciA2NAorLy8vICAgIGJpdHMgb2YgX19hLgorc3RhdGljIF9faW5saW5lX18gZG91YmxlIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNkX2Y2NChfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYVswXTsKK30KKworLy8vIFxicmllZiBMb2FkcyBhIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBmcm9tIGFuIGFsaWduZWQKKy8vLyAgICBtZW1vcnkgbG9jYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVkFQRCAvIE1PVkFQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2RwCisvLy8gICAgQSBwb2ludGVyIHRvIGEgMTI4LWJpdCBtZW1vcnkgbG9jYXRpb24uIFRoZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkKKy8vLyAgICBsb2NhdGlvbiBoYXMgdG8gYmUgMTYtYnl0ZSBhbGlnbmVkLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIGxvYWRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWRfcGQoZG91YmxlIGNvbnN0ICpfX2RwKQoreworICByZXR1cm4gKihfX20xMjhkKilfX2RwOworfQorCisvLy8gXGJyaWVmIExvYWRzIGEgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSBmcm9tIGEgc3BlY2lmaWVkIG1lbW9yeQorLy8vICAgIGxvY2F0aW9uIGFuZCBkdXBsaWNhdGVzIGl0IHRvIGJvdGggdmVjdG9yIGVsZW1lbnRzIG9mIGEgMTI4LWJpdCB2ZWN0b3Igb2YKKy8vLyAgICBbMiB4IGRvdWJsZV0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVkREVVAgLyBNT1ZERFVQIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fZHAKKy8vLyAgICBBIHBvaW50ZXIgdG8gYSBtZW1vcnkgbG9jYXRpb24gY29udGFpbmluZyBhIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgbG9hZGVkIGFuZAorLy8vICAgIGR1cGxpY2F0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkMV9wZChkb3VibGUgY29uc3QgKl9fZHApCit7CisgIHN0cnVjdCBfX21tX2xvYWQxX3BkX3N0cnVjdCB7CisgICAgZG91YmxlIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIGRvdWJsZSBfX3UgPSAoKHN0cnVjdCBfX21tX2xvYWQxX3BkX3N0cnVjdCopX19kcCktPl9fdTsKKyAgcmV0dXJuIChfX20xMjhkKXsgX191LCBfX3UgfTsKK30KKworI2RlZmluZSAgICAgICAgX21tX2xvYWRfcGQxKGRwKSAgICAgICAgX21tX2xvYWQxX3BkKGRwKQorCisvLy8gXGJyaWVmIExvYWRzIHR3byBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcywgaW4gcmV2ZXJzZSBvcmRlciwgZnJvbSBhbiBhbGlnbmVkCisvLy8gICAgbWVtb3J5IGxvY2F0aW9uIGludG8gYSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVkFQRCAvIE1PVkFQRCBpbnN0cnVjdGlvbiArIG5lZWRlZAorLy8vIHNodWZmbGluZyBpbnN0cnVjdGlvbnMuIEluIEFWWCBtb2RlLCB0aGUgc2h1ZmZsaW5nIG1heSBiZSBjb21iaW5lZCB3aXRoIHRoZQorLy8vIFxjIFZNT1ZBUEQsIHJlc3VsdGluZyBpbiBvbmx5IGEgXGMgVlBFUk1JTFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fZHAKKy8vLyAgICBBIDE2LWJ5dGUgYWxpZ25lZCBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzIHRvIGJlCisvLy8gICAgbG9hZGVkIGluIHJldmVyc2Ugb3JkZXIuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgcmV2ZXJzZWQgbG9hZGVkCisvLy8gICAgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2Fkcl9wZChkb3VibGUgY29uc3QgKl9fZHApCit7CisgIF9fbTEyOGQgX191ID0gKihfX20xMjhkKilfX2RwOworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjJkZilfX3UsIChfX3YyZGYpX191LCAxLCAwKTsKK30KKworLy8vIFxicmllZiBMb2FkcyBhIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBmcm9tIGFuCisvLy8gICAgdW5hbGlnbmVkIG1lbW9yeSBsb2NhdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WVVBEIC8gTU9WVVBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fZHAKKy8vLyAgICBBIHBvaW50ZXIgdG8gYSAxMjgtYml0IG1lbW9yeSBsb2NhdGlvbi4gVGhlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeQorLy8vICAgIGxvY2F0aW9uIGRvZXMgbm90IGhhdmUgdG8gYmUgYWxpZ25lZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBsb2FkZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkdV9wZChkb3VibGUgY29uc3QgKl9fZHApCit7CisgIHN0cnVjdCBfX2xvYWR1X3BkIHsKKyAgICBfX20xMjhkIF9fdjsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIHJldHVybiAoKHN0cnVjdCBfX2xvYWR1X3BkKilfX2RwKS0+X192OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWR1X3NpNjQodm9pZCBjb25zdCAqX19hKQoreworICBzdHJ1Y3QgX19sb2FkdV9zaTY0IHsKKyAgICBsb25nIGxvbmcgX192OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgbG9uZyBsb25nIF9fdSA9ICgoc3RydWN0IF9fbG9hZHVfc2k2NCopX19hKS0+X192OworICByZXR1cm4gKF9fbTEyOGkpe19fdSwgMEx9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWRfc2QoZG91YmxlIGNvbnN0ICpfX2RwKQoreworICBzdHJ1Y3QgX19tbV9sb2FkX3NkX3N0cnVjdCB7CisgICAgZG91YmxlIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIGRvdWJsZSBfX3UgPSAoKHN0cnVjdCBfX21tX2xvYWRfc2Rfc3RydWN0KilfX2RwKS0+X191OworICByZXR1cm4gKF9fbTEyOGQpeyBfX3UsIDAgfTsKK30KKworLy8vIFxicmllZiBMb2FkcyBhIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgaW50byB0aGUgaGlnaC1vcmRlciBiaXRzIG9mIGEgMTI4LWJpdAorLy8vICAgIHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3ctb3JkZXIgYml0cyBhcmUgY29waWVkIGZyb20gdGhlIGxvdy1vcmRlcgorLy8vICAgIGJpdHMgb2YgdGhlIGZpcnN0IG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVkhQRCAvIE1PVkhQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLyAgICBCaXRzIFs2MzowXSBhcmUgd3JpdHRlbiB0byBiaXRzIFs2MzowXSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2RwCisvLy8gICAgQSBwb2ludGVyIHRvIGEgNjQtYml0IG1lbW9yeSBsb2NhdGlvbiBjb250YWluaW5nIGEgZG91YmxlLXByZWNpc2lvbgorLy8vICAgIGZsb2F0aW5nLXBvaW50IHZhbHVlIHRoYXQgaXMgbG9hZGVkLiBUaGUgbG9hZGVkIHZhbHVlIGlzIHdyaXR0ZW4gdG8gYml0cworLy8vICAgIFsxMjc6NjRdIG9mIHRoZSByZXN1bHQuIFRoZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgbG9jYXRpb24gZG9lcyBub3QgaGF2ZQorLy8vICAgIHRvIGJlIGFsaWduZWQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgbW92ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkaF9wZChfX20xMjhkIF9fYSwgZG91YmxlIGNvbnN0ICpfX2RwKQoreworICBzdHJ1Y3QgX19tbV9sb2FkaF9wZF9zdHJ1Y3QgeworICAgIGRvdWJsZSBfX3U7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICBkb3VibGUgX191ID0gKChzdHJ1Y3QgX19tbV9sb2FkaF9wZF9zdHJ1Y3QqKV9fZHApLT5fX3U7CisgIHJldHVybiAoX19tMTI4ZCl7IF9fYVswXSwgX191IH07Cit9CisKKy8vLyBcYnJpZWYgTG9hZHMgYSBkb3VibGUtcHJlY2lzaW9uIHZhbHVlIGludG8gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGEgMTI4LWJpdAorLy8vICAgIHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBoaWdoLW9yZGVyIGJpdHMgYXJlIGNvcGllZCBmcm9tIHRoZQorLy8vICAgIGhpZ2gtb3JkZXIgYml0cyBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WTFBEIC8gTU9WTFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vICAgIEJpdHMgWzEyNzo2NF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMTI3OjY0XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2RwCisvLy8gICAgQSBwb2ludGVyIHRvIGEgNjQtYml0IG1lbW9yeSBsb2NhdGlvbiBjb250YWluaW5nIGEgZG91YmxlLXByZWNpc2lvbgorLy8vICAgIGZsb2F0aW5nLXBvaW50IHZhbHVlIHRoYXQgaXMgbG9hZGVkLiBUaGUgbG9hZGVkIHZhbHVlIGlzIHdyaXR0ZW4gdG8gYml0cworLy8vICAgIFs2MzowXSBvZiB0aGUgcmVzdWx0LiBUaGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IGxvY2F0aW9uIGRvZXMgbm90IGhhdmUgdG8KKy8vLyAgICBiZSBhbGlnbmVkLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIG1vdmVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbG9hZGxfcGQoX19tMTI4ZCBfX2EsIGRvdWJsZSBjb25zdCAqX19kcCkKK3sKKyAgc3RydWN0IF9fbW1fbG9hZGxfcGRfc3RydWN0IHsKKyAgICBkb3VibGUgX191OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgZG91YmxlIF9fdSA9ICgoc3RydWN0IF9fbW1fbG9hZGxfcGRfc3RydWN0KilfX2RwKS0+X191OworICByZXR1cm4gKF9fbTEyOGQpeyBfX3UsIF9fYVsxXSB9OworfQorCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gd2l0aAorLy8vICAgIHVuc3BlY2lmaWVkIGNvbnRlbnQuIFRoaXMgY291bGQgYmUgdXNlZCBhcyBhbiBhcmd1bWVudCB0byBhbm90aGVyCisvLy8gICAgaW50cmluc2ljIGZ1bmN0aW9uIHdoZXJlIHRoZSBhcmd1bWVudCBpcyByZXF1aXJlZCBidXQgdGhlIHZhbHVlIGlzIG5vdAorLy8vICAgIGFjdHVhbGx5IHVzZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBoYXMgbm8gY29ycmVzcG9uZGluZyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIHdpdGggdW5zcGVjaWZpZWQKKy8vLyAgICBjb250ZW50Lgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bmRlZmluZWRfcGQodm9pZCkKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3VuZGVmMTI4KCk7Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyCisvLy8gICAgNjQgYml0cyBvZiB0aGUgdmVjdG9yIGFyZSBpbml0aWFsaXplZCB3aXRoIHRoZSBzcGVjaWZpZWQgZG91YmxlLXByZWNpc2lvbgorLy8vICAgIGZsb2F0aW5nLXBvaW50IHZhbHVlLiBUaGUgdXBwZXIgNjQgYml0cyBhcmUgc2V0IHRvIHplcm8uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVlEgLyBNT1ZRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fdworLy8vICAgIEEgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGxvd2VyIDY0CisvLy8gICAgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlCisvLy8gICAgbG93ZXIgNjQgYml0cyBjb250YWluIHRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLiBUaGUgdXBwZXIgNjQgYml0cyBhcmUKKy8vLyAgICBzZXQgdG8gemVyby4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0X3NkKGRvdWJsZSBfX3cpCit7CisgIHJldHVybiAoX19tMTI4ZCl7IF9fdywgMCB9OworfQorCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0sIHdpdGggZWFjaAorLy8vICAgIG9mIHRoZSB0d28gZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2ZWN0b3IgZWxlbWVudHMgc2V0IHRvIHRoZQorLy8vICAgIHNwZWNpZmllZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZERFVQIC8gTU9WTEhQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3cKKy8vLyAgICBBIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGVhY2ggdmVjdG9yCisvLy8gICAgZWxlbWVudCBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0MV9wZChkb3VibGUgX193KQoreworICByZXR1cm4gKF9fbTEyOGQpeyBfX3csIF9fdyB9OworfQorCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0KKy8vLyAgICBpbml0aWFsaXplZCB3aXRoIHRoZSBzcGVjaWZpZWQgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlVOUENLTFBEIC8gVU5QQ0tMUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX193CisvLy8gICAgQSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdXBwZXIgNjQKKy8vLyAgICBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9feAorLy8vICAgIEEgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGxvd2VyIDY0CisvLy8gICAgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0X3BkKGRvdWJsZSBfX3csIGRvdWJsZSBfX3gpCit7CisgIHJldHVybiAoX19tMTI4ZCl7IF9feCwgX193IH07Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSwKKy8vLyAgICBpbml0aWFsaXplZCBpbiByZXZlcnNlIG9yZGVyIHdpdGggdGhlIHNwZWNpZmllZCBkb3VibGUtcHJlY2lzaW9uCisvLy8gICAgZmxvYXRpbmctcG9pbnQgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZVTlBDS0xQRCAvIFVOUENLTFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fdworLy8vICAgIEEgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGxvd2VyIDY0CisvLy8gICAgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX3gKKy8vLyAgICBBIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSB1cHBlciA2NAorLy8vICAgIGJpdHMgb2YgdGhlIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldHJfcGQoZG91YmxlIF9fdywgZG91YmxlIF9feCkKK3sKKyAgcmV0dXJuIChfX20xMjhkKXsgX193LCBfX3ggfTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdCisvLy8gICAgaW5pdGlhbGl6ZWQgdG8gemVyby4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWWE9SUFMgLyBYT1JQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSB3aXRoCisvLy8gICAgYWxsIGVsZW1lbnRzIHNldCB0byB6ZXJvLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXR6ZXJvX3BkKHZvaWQpCit7CisgIHJldHVybiAoX19tMTI4ZCl7IDAsIDAgfTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIKKy8vLyAgICA2NCBiaXRzIGFyZSBzZXQgdG8gdGhlIGxvd2VyIDY0IGJpdHMgb2YgdGhlIHNlY29uZCBwYXJhbWV0ZXIuIFRoZSB1cHBlcgorLy8vICAgIDY0IGJpdHMgYXJlIHNldCB0byB0aGUgdXBwZXIgNjQgYml0cyBvZiB0aGUgZmlyc3QgcGFyYW1ldGVyLgorLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkJMRU5EUEQgLyBCTEVORFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgdXBwZXIgNjQgYml0cyBhcmUgd3JpdHRlbiB0byB0aGUKKy8vLyAgICB1cHBlciA2NCBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBUaGUgbG93ZXIgNjQgYml0cyBhcmUgd3JpdHRlbiB0byB0aGUKKy8vLyAgICBsb3dlciA2NCBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgbW92ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKXsgX19iWzBdLCBfX2FbMV0gfTsKK30KKworLy8vIFxicmllZiBTdG9yZXMgdGhlIGxvd2VyIDY0IGJpdHMgb2YgYSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gdG8gYQorLy8vICAgIG1lbW9yeSBsb2NhdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WU0QgLyBNT1ZTRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2RwCisvLy8gICAgQSBwb2ludGVyIHRvIGEgNjQtYml0IG1lbW9yeSBsb2NhdGlvbi4KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgdmFsdWUgdG8gYmUgc3RvcmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZV9zZChkb3VibGUgKl9fZHAsIF9fbTEyOGQgX19hKQoreworICBzdHJ1Y3QgX19tbV9zdG9yZV9zZF9zdHJ1Y3QgeworICAgIGRvdWJsZSBfX3U7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICAoKHN0cnVjdCBfX21tX3N0b3JlX3NkX3N0cnVjdCopX19kcCktPl9fdSA9IF9fYVswXTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZV9wZChkb3VibGUgKl9fZHAsIF9fbTEyOGQgX19hKQoreworICAqKF9fbTEyOGQqKV9fZHAgPSBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmUxX3BkKGRvdWJsZSAqX19kcCwgX19tMTI4ZCBfX2EpCit7CisgIF9fYSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YyZGYpX19hLCAoX192MmRmKV9fYSwgMCwgMCk7CisgIF9tbV9zdG9yZV9wZChfX2RwLCBfX2EpOworfQorCisvLy8gXGJyaWVmIFN0b3JlcyBhIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBpbnRvIGFuIGFsaWduZWQgbWVtb3J5CisvLy8gICAgbG9jYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVkFQRCAvIE1PVkFQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2RwCisvLy8gICAgQSBwb2ludGVyIHRvIGEgMTI4LWJpdCBtZW1vcnkgbG9jYXRpb24uIFRoZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkKKy8vLyAgICBsb2NhdGlvbiBoYXMgdG8gYmUgMTYtYnl0ZSBhbGlnbmVkLgorLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gYmUgc3RvcmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZV9wZDEoZG91YmxlICpfX2RwLCBfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIF9tbV9zdG9yZTFfcGQoX19kcCwgX19hKTsKK30KKworLy8vIFxicmllZiBTdG9yZXMgYSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gaW50byBhbiB1bmFsaWduZWQgbWVtb3J5CisvLy8gICAgbG9jYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVlVQRCAvIE1PVlVQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2RwCisvLy8gICAgQSBwb2ludGVyIHRvIGEgMTI4LWJpdCBtZW1vcnkgbG9jYXRpb24uIFRoZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkKKy8vLyAgICBsb2NhdGlvbiBkb2VzIG5vdCBoYXZlIHRvIGJlIGFsaWduZWQuCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byBiZSBzdG9yZWQuCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0b3JldV9wZChkb3VibGUgKl9fZHAsIF9fbTEyOGQgX19hKQoreworICBzdHJ1Y3QgX19zdG9yZXVfcGQgeworICAgIF9fbTEyOGQgX192OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgKChzdHJ1Y3QgX19zdG9yZXVfcGQqKV9fZHApLT5fX3YgPSBfX2E7Cit9CisKKy8vLyBcYnJpZWYgU3RvcmVzIHR3byBkb3VibGUtcHJlY2lzaW9uIHZhbHVlcywgaW4gcmV2ZXJzZSBvcmRlciwgZnJvbSBhIDEyOC1iaXQKKy8vLyAgICB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIHRvIGEgMTYtYnl0ZSBhbGlnbmVkIG1lbW9yeSBsb2NhdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIGEgc2h1ZmZsaW5nIGluc3RydWN0aW9uIGZvbGxvd2VkIGJ5IGEKKy8vLyBcYyBWTU9WQVBEIC8gTU9WQVBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fZHAKKy8vLyAgICBBIHBvaW50ZXIgdG8gYSAxNi1ieXRlIGFsaWduZWQgbWVtb3J5IGxvY2F0aW9uIHRoYXQgY2FuIHN0b3JlIHR3bworLy8vICAgIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzLgorLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gYmUgcmV2ZXJzZWQgYW5kCisvLy8gICAgc3RvcmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZXJfcGQoZG91YmxlICpfX2RwLCBfX20xMjhkIF9fYSkKK3sKKyAgX19hID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjJkZilfX2EsIChfX3YyZGYpX19hLCAxLCAwKTsKKyAgKihfX20xMjhkICopX19kcCA9IF9fYTsKK30KKworLy8vIFxicmllZiBTdG9yZXMgdGhlIHVwcGVyIDY0IGJpdHMgb2YgYSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gdG8gYQorLy8vICAgIG1lbW9yeSBsb2NhdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WSFBEIC8gTU9WSFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fZHAKKy8vLyAgICBBIHBvaW50ZXIgdG8gYSA2NC1iaXQgbWVtb3J5IGxvY2F0aW9uLgorLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSB2YWx1ZSB0byBiZSBzdG9yZWQuCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0b3JlaF9wZChkb3VibGUgKl9fZHAsIF9fbTEyOGQgX19hKQoreworICBzdHJ1Y3QgX19tbV9zdG9yZWhfcGRfc3RydWN0IHsKKyAgICBkb3VibGUgX191OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgKChzdHJ1Y3QgX19tbV9zdG9yZWhfcGRfc3RydWN0KilfX2RwKS0+X191ID0gX19hWzFdOworfQorCisvLy8gXGJyaWVmIFN0b3JlcyB0aGUgbG93ZXIgNjQgYml0cyBvZiBhIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSB0byBhCisvLy8gICAgbWVtb3J5IGxvY2F0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZMUEQgLyBNT1ZMUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19kcAorLy8vICAgIEEgcG9pbnRlciB0byBhIDY0LWJpdCBtZW1vcnkgbG9jYXRpb24uCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHZhbHVlIHRvIGJlIHN0b3JlZC4KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmVsX3BkKGRvdWJsZSAqX19kcCwgX19tMTI4ZCBfX2EpCit7CisgIHN0cnVjdCBfX21tX3N0b3JlaF9wZF9zdHJ1Y3QgeworICAgIGRvdWJsZSBfX3U7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICAoKHN0cnVjdCBfX21tX3N0b3JlaF9wZF9zdHJ1Y3QqKV9fZHApLT5fX3UgPSBfX2FbMF07Cit9CisKKy8vLyBcYnJpZWYgQWRkcyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mIFsxNiB4IGk4XSwKKy8vLyAgICBzYXZpbmcgdGhlIGxvd2VyIDggYml0cyBvZiBlYWNoIHN1bSBpbiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIGEKKy8vLyAgICAxMjgtYml0IHJlc3VsdCB2ZWN0b3Igb2YgWzE2IHggaThdLiBUaGUgaW50ZWdlciBlbGVtZW50cyBvZiBib3RoCisvLy8gICAgcGFyYW1ldGVycyBjYW4gYmUgZWl0aGVyIHNpZ25lZCBvciB1bnNpZ25lZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEFEREIgLyBQQUREQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsxNiB4IGk4XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMTYgeCBpOF0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMTYgeCBpOF0gY29udGFpbmluZyB0aGUgc3VtcyBvZiBib3RoCisvLy8gICAgcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkX2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3YxNnF1KV9fYSArIChfX3YxNnF1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQWRkcyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mIFs4IHggaTE2XSwKKy8vLyAgICBzYXZpbmcgdGhlIGxvd2VyIDE2IGJpdHMgb2YgZWFjaCBzdW0gaW4gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBhCisvLy8gICAgMTI4LWJpdCByZXN1bHQgdmVjdG9yIG9mIFs4IHggaTE2XS4gVGhlIGludGVnZXIgZWxlbWVudHMgb2YgYm90aAorLy8vICAgIHBhcmFtZXRlcnMgY2FuIGJlIGVpdGhlciBzaWduZWQgb3IgdW5zaWduZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBBRERXIC8gUEFERFcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzggeCBpMTZdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzggeCBpMTZdIGNvbnRhaW5pbmcgdGhlIHN1bXMgb2YgYm90aAorLy8vICAgIHBhcmFtZXRlcnMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZF9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjhodSlfX2EgKyAoX192OGh1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQWRkcyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggaTMyXSwKKy8vLyAgICBzYXZpbmcgdGhlIGxvd2VyIDMyIGJpdHMgb2YgZWFjaCBzdW0gaW4gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBhCisvLy8gICAgMTI4LWJpdCByZXN1bHQgdmVjdG9yIG9mIFs0IHggaTMyXS4gVGhlIGludGVnZXIgZWxlbWVudHMgb2YgYm90aAorLy8vICAgIHBhcmFtZXRlcnMgY2FuIGJlIGVpdGhlciBzaWduZWQgb3IgdW5zaWduZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBBREREIC8gUEFEREQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGkzMl0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMzJdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMzJdIGNvbnRhaW5pbmcgdGhlIHN1bXMgb2YgYm90aAorLy8vICAgIHBhcmFtZXRlcnMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZF9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjRzdSlfX2EgKyAoX192NHN1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQWRkcyB0d28gc2lnbmVkIG9yIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHZhbHVlcywgcmV0dXJuaW5nIHRoZQorLy8vICAgIGxvd2VyIDY0IGJpdHMgb2YgdGhlIHN1bS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQUREUSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgc3VtIG9mIGJvdGggcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZF9zaTY0KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhZGRxKChfX3YxZGkpX19hLCAoX192MWRpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQWRkcyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mIFsyIHggaTY0XSwKKy8vLyAgICBzYXZpbmcgdGhlIGxvd2VyIDY0IGJpdHMgb2YgZWFjaCBzdW0gaW4gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBhCisvLy8gICAgMTI4LWJpdCByZXN1bHQgdmVjdG9yIG9mIFsyIHggaTY0XS4gVGhlIGludGVnZXIgZWxlbWVudHMgb2YgYm90aAorLy8vICAgIHBhcmFtZXRlcnMgY2FuIGJlIGVpdGhlciBzaWduZWQgb3IgdW5zaWduZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBBRERRIC8gUEFERFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGk2NF0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBpNjRdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBpNjRdIGNvbnRhaW5pbmcgdGhlIHN1bXMgb2YgYm90aAorLy8vICAgIHBhcmFtZXRlcnMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZF9lcGk2NChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjJkdSlfX2EgKyAoX192MmR1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQWRkcywgd2l0aCBzYXR1cmF0aW9uLCB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0d28gMTI4LWJpdAorLy8vICAgIHNpZ25lZCBbMTYgeCBpOF0gdmVjdG9ycywgc2F2aW5nIGVhY2ggc3VtIGluIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YKKy8vLyAgICBhIDEyOC1iaXQgcmVzdWx0IHZlY3RvciBvZiBbMTYgeCBpOF0uIFBvc2l0aXZlIHN1bXMgZ3JlYXRlciB0aGFuIDdGaCBhcmUKKy8vLyAgICBzYXR1cmF0ZWQgdG8gN0ZoLiBOZWdhdGl2ZSBzdW1zIGxlc3MgdGhhbiA4MGggYXJlIHNhdHVyYXRlZCB0byA4MGguCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBBRERTQiAvIFBBRERTQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgc2lnbmVkIFsxNiB4IGk4XSB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBzaWduZWQgWzE2IHggaThdIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgc2lnbmVkIFsxNiB4IGk4XSB2ZWN0b3IgY29udGFpbmluZyB0aGUgc2F0dXJhdGVkIHN1bXMgb2YKKy8vLyAgICBib3RoIHBhcmFtZXRlcnMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZHNfZXBpOChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWRkc2IxMjgoKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEFkZHMsIHdpdGggc2F0dXJhdGlvbiwgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdHdvIDEyOC1iaXQKKy8vLyAgICBzaWduZWQgWzggeCBpMTZdIHZlY3RvcnMsIHNhdmluZyBlYWNoIHN1bSBpbiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mCisvLy8gICAgYSAxMjgtYml0IHJlc3VsdCB2ZWN0b3Igb2YgWzggeCBpMTZdLiBQb3NpdGl2ZSBzdW1zIGdyZWF0ZXIgdGhhbiA3RkZGaAorLy8vICAgIGFyZSBzYXR1cmF0ZWQgdG8gN0ZGRmguIE5lZ2F0aXZlIHN1bXMgbGVzcyB0aGFuIDgwMDBoIGFyZSBzYXR1cmF0ZWQgdG8KKy8vLyAgICA4MDAwaC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEFERFNXIC8gUEFERFNXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBzaWduZWQgWzggeCBpMTZdIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHNpZ25lZCBbOCB4IGkxNl0gdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBzaWduZWQgWzggeCBpMTZdIHZlY3RvciBjb250YWluaW5nIHRoZSBzYXR1cmF0ZWQgc3VtcyBvZgorLy8vICAgIGJvdGggcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkc19lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWRkc3cxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKK30KKworLy8vIFxicmllZiBBZGRzLCB3aXRoIHNhdHVyYXRpb24sIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIHR3byAxMjgtYml0CisvLy8gICAgdW5zaWduZWQgWzE2IHggaThdIHZlY3RvcnMsIHNhdmluZyBlYWNoIHN1bSBpbiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50CisvLy8gICAgb2YgYSAxMjgtYml0IHJlc3VsdCB2ZWN0b3Igb2YgWzE2IHggaThdLiBQb3NpdGl2ZSBzdW1zIGdyZWF0ZXIgdGhhbiBGRmgKKy8vLyAgICBhcmUgc2F0dXJhdGVkIHRvIEZGaC4gTmVnYXRpdmUgc3VtcyBhcmUgc2F0dXJhdGVkIHRvIDAwaC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEFERFVTQiAvIFBBRERVU0IgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHVuc2lnbmVkIFsxNiB4IGk4XSB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB1bnNpZ25lZCBbMTYgeCBpOF0gdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB1bnNpZ25lZCBbMTYgeCBpOF0gdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHNhdHVyYXRlZCBzdW1zCisvLy8gICAgb2YgYm90aCBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRzX2VwdTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFkZHVzYjEyOCgoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQWRkcywgd2l0aCBzYXR1cmF0aW9uLCB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0d28gMTI4LWJpdAorLy8vICAgIHVuc2lnbmVkIFs4IHggaTE2XSB2ZWN0b3JzLCBzYXZpbmcgZWFjaCBzdW0gaW4gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudAorLy8vICAgIG9mIGEgMTI4LWJpdCByZXN1bHQgdmVjdG9yIG9mIFs4IHggaTE2XS4gUG9zaXRpdmUgc3VtcyBncmVhdGVyIHRoYW4gRkZGRmgKKy8vLyAgICBhcmUgc2F0dXJhdGVkIHRvIEZGRkZoLiBOZWdhdGl2ZSBzdW1zIGFyZSBzYXR1cmF0ZWQgdG8gMDAwMGguCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBBRERVU0IgLyBQQUREVVNCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB1bnNpZ25lZCBbOCB4IGkxNl0gdmVjdG9yLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdW5zaWduZWQgWzggeCBpMTZdIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdW5zaWduZWQgWzggeCBpMTZdIHZlY3RvciBjb250YWluaW5nIHRoZSBzYXR1cmF0ZWQgc3VtcworLy8vICAgIG9mIGJvdGggcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkc19lcHUxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWRkdXN3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcHV0ZXMgdGhlIHJvdW5kZWQgYXZhcmFnZXMgb2YgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0d28KKy8vLyAgICAxMjgtYml0IHVuc2lnbmVkIFsxNiB4IGk4XSB2ZWN0b3JzLCBzYXZpbmcgZWFjaCByZXN1bHQgaW4gdGhlCisvLy8gICAgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIGEgMTI4LWJpdCByZXN1bHQgdmVjdG9yIG9mIFsxNiB4IGk4XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEFWR0IgLyBQQVZHQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdW5zaWduZWQgWzE2IHggaThdIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHVuc2lnbmVkIFsxNiB4IGk4XSB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHVuc2lnbmVkIFsxNiB4IGk4XSB2ZWN0b3IgY29udGFpbmluZyB0aGUgcm91bmRlZAorLy8vICAgIGF2ZXJhZ2VzIG9mIGJvdGggcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYXZnX2VwdTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGF2Z2IxMjgoKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXB1dGVzIHRoZSByb3VuZGVkIGF2YXJhZ2VzIG9mIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdHdvCisvLy8gICAgMTI4LWJpdCB1bnNpZ25lZCBbOCB4IGkxNl0gdmVjdG9ycywgc2F2aW5nIGVhY2ggcmVzdWx0IGluIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBhIDEyOC1iaXQgcmVzdWx0IHZlY3RvciBvZiBbOCB4IGkxNl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBBVkdXIC8gUEFWR1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHVuc2lnbmVkIFs4IHggaTE2XSB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB1bnNpZ25lZCBbOCB4IGkxNl0gdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB1bnNpZ25lZCBbOCB4IGkxNl0gdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJvdW5kZWQKKy8vLyAgICBhdmVyYWdlcyBvZiBib3RoIHBhcmFtZXRlcnMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2F2Z19lcHUxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYXZndzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIE11bHRpcGxpZXMgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdHdvIDEyOC1iaXQgc2lnbmVkIFs4IHggaTE2XQorLy8vICAgIHZlY3RvcnMsIHByb2R1Y2luZyBlaWdodCBpbnRlcm1lZGlhdGUgMzItYml0IHNpZ25lZCBpbnRlZ2VyIHByb2R1Y3RzLCBhbmQKKy8vLyAgICBhZGRzIHRoZSBjb25zZWN1dGl2ZSBwYWlycyBvZiAzMi1iaXQgcHJvZHVjdHMgdG8gZm9ybSBhIDEyOC1iaXQgc2lnbmVkCisvLy8gICAgWzQgeCBpMzJdIHZlY3Rvci4gRm9yIGV4YW1wbGUsIGJpdHMgWzE1OjBdIG9mIGJvdGggcGFyYW1ldGVycyBhcmUKKy8vLyAgICBtdWx0aXBsaWVkIHByb2R1Y2luZyBhIDMyLWJpdCBwcm9kdWN0LCBiaXRzIFszMToxNl0gb2YgYm90aCBwYXJhbWV0ZXJzCisvLy8gICAgYXJlIG11bHRpcGxpZWQgcHJvZHVjaW5nIGEgMzItYml0IHByb2R1Y3QsIGFuZCB0aGUgc3VtIG9mIHRob3NlIHR3bworLy8vICAgIHByb2R1Y3RzIGJlY29tZXMgYml0cyBbMzE6MF0gb2YgdGhlIHJlc3VsdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUE1BRERXRCAvIFBNQUREV0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHNpZ25lZCBbOCB4IGkxNl0gdmVjdG9yLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgc2lnbmVkIFs4IHggaTE2XSB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHNpZ25lZCBbNCB4IGkzMl0gdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHN1bXMgb2YgcHJvZHVjdHMKKy8vLyAgICBvZiBib3RoIHBhcmFtZXRlcnMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hZGRfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcG1hZGR3ZDEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdHdvIDEyOC1iaXQgc2lnbmVkIFs4IHggaTE2XQorLy8vICAgIHZlY3RvcnMsIHNhdmluZyB0aGUgZ3JlYXRlciB2YWx1ZSBmcm9tIGVhY2ggY29tcGFyaXNvbiBpbiB0aGUKKy8vLyAgICBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgYSAxMjgtYml0IHJlc3VsdCB2ZWN0b3Igb2YgWzggeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQTUFYU1cgLyBQTUFYU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHNpZ25lZCBbOCB4IGkxNl0gdmVjdG9yLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgc2lnbmVkIFs4IHggaTE2XSB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHNpZ25lZCBbOCB4IGkxNl0gdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGdyZWF0ZXIgdmFsdWUgb2YKKy8vLyAgICBlYWNoIGNvbXBhcmlzb24uCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wbWF4c3cxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIHR3byAxMjgtYml0IHVuc2lnbmVkIFsxNiB4IGk4XQorLy8vICAgIHZlY3RvcnMsIHNhdmluZyB0aGUgZ3JlYXRlciB2YWx1ZSBmcm9tIGVhY2ggY29tcGFyaXNvbiBpbiB0aGUKKy8vLyAgICBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgYSAxMjgtYml0IHJlc3VsdCB2ZWN0b3Igb2YgWzE2IHggaThdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQTUFYVUIgLyBQTUFYVUIgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHVuc2lnbmVkIFsxNiB4IGk4XSB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB1bnNpZ25lZCBbMTYgeCBpOF0gdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB1bnNpZ25lZCBbMTYgeCBpOF0gdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGdyZWF0ZXIgdmFsdWUgb2YKKy8vLyAgICBlYWNoIGNvbXBhcmlzb24uCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9lcHU4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtYXh1YjEyOCgoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0d28gMTI4LWJpdCBzaWduZWQgWzggeCBpMTZdCisvLy8gICAgdmVjdG9ycywgc2F2aW5nIHRoZSBzbWFsbGVyIHZhbHVlIGZyb20gZWFjaCBjb21wYXJpc29uIGluIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBhIDEyOC1iaXQgcmVzdWx0IHZlY3RvciBvZiBbOCB4IGkxNl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBNSU5TVyAvIFBNSU5TVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgc2lnbmVkIFs4IHggaTE2XSB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBzaWduZWQgWzggeCBpMTZdIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgc2lnbmVkIFs4IHggaTE2XSB2ZWN0b3IgY29udGFpbmluZyB0aGUgc21hbGxlciB2YWx1ZSBvZgorLy8vICAgIGVhY2ggY29tcGFyaXNvbi4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtaW5zdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdHdvIDEyOC1iaXQgdW5zaWduZWQgWzE2IHggaThdCisvLy8gICAgdmVjdG9ycywgc2F2aW5nIHRoZSBzbWFsbGVyIHZhbHVlIGZyb20gZWFjaCBjb21wYXJpc29uIGluIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBhIDEyOC1iaXQgcmVzdWx0IHZlY3RvciBvZiBbMTYgeCBpOF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBNSU5VQiAvIFBNSU5VQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdW5zaWduZWQgWzE2IHggaThdIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHVuc2lnbmVkIFsxNiB4IGk4XSB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHVuc2lnbmVkIFsxNiB4IGk4XSB2ZWN0b3IgY29udGFpbmluZyB0aGUgc21hbGxlciB2YWx1ZSBvZgorLy8vICAgIGVhY2ggY29tcGFyaXNvbi4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX2VwdTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcG1pbnViMTI4KChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iKTsKK30KKworLy8vIFxicmllZiBNdWx0aXBsaWVzIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIHR3byBzaWduZWQgWzggeCBpMTZdCisvLy8gICAgdmVjdG9ycywgc2F2aW5nIHRoZSB1cHBlciAxNiBiaXRzIG9mIGVhY2ggMzItYml0IHByb2R1Y3QgaW4gdGhlCisvLy8gICAgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIGEgMTI4LWJpdCBzaWduZWQgWzggeCBpMTZdIHJlc3VsdCB2ZWN0b3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBNVUxIVyAvIFBNVUxIVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgc2lnbmVkIFs4IHggaTE2XSB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBzaWduZWQgWzggeCBpMTZdIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgc2lnbmVkIFs4IHggaTE2XSB2ZWN0b3IgY29udGFpbmluZyB0aGUgdXBwZXIgMTYgYml0cyBvZgorLy8vICAgIGVhY2ggb2YgdGhlIGVpZ2h0IDMyLWJpdCBwcm9kdWN0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsaGlfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcG11bGh3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgTXVsdGlwbGllcyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0d28gdW5zaWduZWQgWzggeCBpMTZdCisvLy8gICAgdmVjdG9ycywgc2F2aW5nIHRoZSB1cHBlciAxNiBiaXRzIG9mIGVhY2ggMzItYml0IHByb2R1Y3QgaW4gdGhlCisvLy8gICAgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIGEgMTI4LWJpdCB1bnNpZ25lZCBbOCB4IGkxNl0gcmVzdWx0IHZlY3Rvci4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUE1VTEhVVyAvIFBNVUxIVVcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHVuc2lnbmVkIFs4IHggaTE2XSB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB1bnNpZ25lZCBbOCB4IGkxNl0gdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB1bnNpZ25lZCBbOCB4IGkxNl0gdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHVwcGVyIDE2IGJpdHMKKy8vLyAgICBvZiBlYWNoIG9mIHRoZSBlaWdodCAzMi1iaXQgcHJvZHVjdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX211bGhpX2VwdTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtdWxodXcxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKK30KKworLy8vIFxicmllZiBNdWx0aXBsaWVzIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIHR3byBzaWduZWQgWzggeCBpMTZdCisvLy8gICAgdmVjdG9ycywgc2F2aW5nIHRoZSBsb3dlciAxNiBiaXRzIG9mIGVhY2ggMzItYml0IHByb2R1Y3QgaW4gdGhlCisvLy8gICAgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIGEgMTI4LWJpdCBzaWduZWQgWzggeCBpMTZdIHJlc3VsdCB2ZWN0b3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBNVUxMVyAvIFBNVUxMVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgc2lnbmVkIFs4IHggaTE2XSB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBzaWduZWQgWzggeCBpMTZdIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgc2lnbmVkIFs4IHggaTE2XSB2ZWN0b3IgY29udGFpbmluZyB0aGUgbG93ZXIgMTYgYml0cyBvZgorLy8vICAgIGVhY2ggb2YgdGhlIGVpZ2h0IDMyLWJpdCBwcm9kdWN0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsbG9fZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3Y4aHUpX19hICogKF9fdjhodSlfX2IpOworfQorCisvLy8gXGJyaWVmIE11bHRpcGxpZXMgMzItYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzIGNvbnRhaW5lZCBpbiB0aGUgbG93ZXIgYml0cworLy8vICAgIG9mIHRoZSB0d28gNjQtYml0IGludGVnZXIgdmVjdG9ycyBhbmQgcmV0dXJucyB0aGUgNjQtYml0IHVuc2lnbmVkCisvLy8gICAgcHJvZHVjdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQTVVMVURRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHByb2R1Y3Qgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX211bF9zdTMyKF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcG11bHVkcSgoX192MnNpKV9fYSwgKF9fdjJzaSlfX2IpOworfQorCisvLy8gXGJyaWVmIE11bHRpcGxpZXMgMzItYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzIGNvbnRhaW5lZCBpbiB0aGUgbG93ZXIKKy8vLyAgICBiaXRzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIHR3byBbMiB4IGk2NF0gdmVjdG9ycywgYW5kIHJldHVybnMKKy8vLyAgICB0aGUgNjQtYml0IHByb2R1Y3RzIGluIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIGEgWzIgeCBpNjRdIHZlY3Rvci4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUE1VTFVEUSAvIFBNVUxVRFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSBbMiB4IGk2NF0gdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgWzIgeCBpNjRdIHZlY3RvciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgWzIgeCBpNjRdIHZlY3RvciBjb250YWluaW5nIHRoZSBwcm9kdWN0IG9mIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX211bF9lcHUzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wbXVsdWRxMTI4KChfX3Y0c2kpX19hLCAoX192NHNpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcHV0ZXMgdGhlIGFic29sdXRlIGRpZmZlcmVuY2VzIG9mIGNvcnJlc3BvbmRpbmcgOC1iaXQgaW50ZWdlcgorLy8vICAgIHZhbHVlcyBpbiB0d28gMTI4LWJpdCB2ZWN0b3JzLiBTdW1zIHRoZSBmaXJzdCA4IGFic29sdXRlIGRpZmZlcmVuY2VzLCBhbmQKKy8vLyAgICBzZXBhcmF0ZWx5IHN1bXMgdGhlIHNlY29uZCA4IGFic29sdXRlIGRpZmZlcmVuY2VzLiBQYWNrc3MgdGhlc2UgdHdvCisvLy8gICAgdW5zaWduZWQgMTYtYml0IGludGVnZXIgc3VtcyBpbnRvIHRoZSB1cHBlciBhbmQgbG93ZXIgZWxlbWVudHMgb2YgYQorLy8vICAgIFsyIHggaTY0XSB2ZWN0b3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTQURCVyAvIFBTQURCVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSBbMiB4IGk2NF0gdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHN1bXMgb2YgdGhlIHNldHMgb2YgYWJzb2x1dGUKKy8vLyAgICBkaWZmZXJlbmNlcyBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NhZF9lcHU4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzYWRidzEyOCgoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIHRoZSBjb3JyZXNwb25kaW5nIDgtYml0IGludGVnZXIgdmFsdWVzIGluIHRoZSBvcGVyYW5kcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNVQkIgLyBQU1VCQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgbWludWVuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzdWJ0cmFoZW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgZGlmZmVyZW5jZXMgb2YgdGhlIHZhbHVlcworLy8vICAgIGluIHRoZSBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3ViX2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3YxNnF1KV9fYSAtIChfX3YxNnF1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIHRoZSBjb3JyZXNwb25kaW5nIDE2LWJpdCBpbnRlZ2VyIHZhbHVlcyBpbiB0aGUgb3BlcmFuZHMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTVUJXIC8gUFNVQlcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc3VidHJhaGVuZHMuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGRpZmZlcmVuY2VzIG9mIHRoZSB2YWx1ZXMKKy8vLyAgICBpbiB0aGUgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1Yl9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjhodSlfX2EgLSAoX192OGh1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdCBpbnRlZ2VyIHZhbHVlcyBpbiB0aGUgb3BlcmFuZHMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTVUJEIC8gUFNVQkQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc3VidHJhaGVuZHMuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGRpZmZlcmVuY2VzIG9mIHRoZSB2YWx1ZXMKKy8vLyAgICBpbiB0aGUgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1Yl9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjRzdSlfX2EgLSAoX192NHN1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIHNpZ25lZCBvciB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB2YWx1ZXMgYW5kIHdyaXRlcyB0aGUKKy8vLyAgICBkaWZmZXJlbmNlIHRvIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTVUJRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHN1YnRyYWhlbmQuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgZGlmZmVyZW5jZSBvZiB0aGUgdmFsdWVzIGluCisvLy8gICAgdGhlIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3ViX3NpNjQoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN1YnEoKF9fdjFkaSlfX2EsIChfX3YxZGkpX19iKTsKK30KKworLy8vIFxicmllZiBTdWJ0cmFjdHMgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdHdvIFsyIHggaTY0XSB2ZWN0b3JzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQU1VCUSAvIFBTVUJRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBtaW51ZW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHN1YnRyYWhlbmRzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBkaWZmZXJlbmNlcyBvZiB0aGUgdmFsdWVzCisvLy8gICAgaW4gdGhlIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdWJfZXBpNjQoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3YyZHUpX19hIC0gKF9fdjJkdSlfX2IpOworfQorCisvLy8gXGJyaWVmIFN1YnRyYWN0cyBjb3JyZXNwb25kaW5nIDgtYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlcyBpbiB0aGUgaW5wdXQgYW5kCisvLy8gICAgcmV0dXJucyB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZXMgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIERpZmZlcmVuY2VzIGdyZWF0ZXIgdGhhbiA3RmggYXJlIHNhdHVyYXRlZCB0byA3RmgsIGFuZCBkaWZmZXJlbmNlcyBsZXNzCisvLy8gICAgdGhhbiA4MGggYXJlIHNhdHVyYXRlZCB0byA4MGguCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTVUJTQiAvIFBTVUJTQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgbWludWVuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzdWJ0cmFoZW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgZGlmZmVyZW5jZXMgb2YgdGhlIHZhbHVlcworLy8vICAgIGluIHRoZSBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3Vic19lcGk4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzdWJzYjEyOCgoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIGNvcnJlc3BvbmRpbmcgMTYtYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlcyBpbiB0aGUgaW5wdXQgYW5kCisvLy8gICAgcmV0dXJucyB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZXMgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIERpZmZlcmVuY2VzIGdyZWF0ZXIgdGhhbiA3RkZGaCBhcmUgc2F0dXJhdGVkIHRvIDdGRkZoLCBhbmQgdmFsdWVzIGxlc3MKKy8vLyAgICB0aGFuIDgwMDBoIGFyZSBzYXR1cmF0ZWQgdG8gODAwMGguCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTVUJTVyAvIFBTVUJTVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgbWludWVuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzdWJ0cmFoZW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgZGlmZmVyZW5jZXMgb2YgdGhlIHZhbHVlcworLy8vICAgIGluIHRoZSBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3Vic19lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3Vic3cxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKK30KKworLy8vIFxicmllZiBTdWJ0cmFjdHMgY29ycmVzcG9uZGluZyA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcyBpbiB0aGUgaW5wdXQKKy8vLyAgICBhbmQgcmV0dXJucyB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZXMgaW4gdGhlCisvLy8gICAgZGVzdGluYXRpb24uIERpZmZlcmVuY2VzIGxlc3MgdGhhbiAwMGggYXJlIHNhdHVyYXRlZCB0byAwMGguCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTVUJVU0IgLyBQU1VCVVNCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBtaW51ZW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHN1YnRyYWhlbmRzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSB1bnNpZ25lZCBpbnRlZ2VyCisvLy8gICAgZGlmZmVyZW5jZXMgb2YgdGhlIHZhbHVlcyBpbiB0aGUgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1YnNfZXB1OChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3VidXNiMTI4KChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iKTsKK30KKworLy8vIFxicmllZiBTdWJ0cmFjdHMgY29ycmVzcG9uZGluZyAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMgaW4gdGhlIGlucHV0CisvLy8gICAgYW5kIHJldHVybnMgdGhlIGRpZmZlcmVuY2VzIGluIHRoZSBjb3JyZXNwb25kaW5nIGJ5dGVzIGluIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLiBEaWZmZXJlbmNlcyBsZXNzIHRoYW4gMDAwMGggYXJlIHNhdHVyYXRlZCB0byAwMDAwaC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNVQlVTVyAvIFBTVUJVU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc3VidHJhaGVuZHMuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHVuc2lnbmVkIGludGVnZXIKKy8vLyAgICBkaWZmZXJlbmNlcyBvZiB0aGUgdmFsdWVzIGluIHRoZSBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3Vic19lcHUxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3VidXN3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiB0d28gMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcnMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBBTkQgLyBQQU5EIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgYml0d2lzZSBBTkQgb2YgdGhlIHZhbHVlcworLy8vICAgIGluIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FuZF9zaTEyOChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjJkdSlfX2EgJiAoX192MmR1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiB0d28gMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcnMsIHVzaW5nIHRoZQorLy8vICAgIG9uZSdzIGNvbXBsZW1lbnQgb2YgdGhlIHZhbHVlcyBjb250YWluZWQgaW4gdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQQU5ETiAvIFBBTkROIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3IgY29udGFpbmluZyB0aGUgbGVmdCBzb3VyY2Ugb3BlcmFuZC4gVGhlIG9uZSdzIGNvbXBsZW1lbnQKKy8vLyAgICBvZiB0aGlzIHZhbHVlIGlzIHVzZWQgaW4gdGhlIGJpdHdpc2UgQU5ELgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJpZ2h0IHNvdXJjZSBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBiaXR3aXNlIEFORCBvZiB0aGUgb25lJ3MKKy8vLyAgICBjb21wbGVtZW50IG9mIHRoZSBmaXJzdCBvcGVyYW5kIGFuZCB0aGUgdmFsdWVzIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYW5kbm90X3NpMTI4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSh+KF9fdjJkdSlfX2EgJiAoX192MmR1KV9fYik7Cit9CisvLy8gXGJyaWVmIFBlcmZvcm1zIGEgYml0d2lzZSBPUiBvZiB0d28gMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcnMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBPUiAvIFBPUiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgT1Igb2YgdGhlIHZhbHVlcworLy8vICAgIGluIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX29yX3NpMTI4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192MmR1KV9fYSB8IChfX3YyZHUpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhIGJpdHdpc2UgZXhjbHVzaXZlIE9SIG9mIHR3byAxMjgtYml0IGludGVnZXIgdmVjdG9ycy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFhPUiAvIFBYT1IgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBiaXR3aXNlIGV4Y2x1c2l2ZSBPUiBvZiB0aGUKKy8vLyAgICB2YWx1ZXMgaW4gYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1feG9yX3NpMTI4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192MmR1KV9fYSBeIChfX3YyZHUpX19iKTsKK30KKworLy8vIFxicmllZiBMZWZ0LXNoaWZ0cyB0aGUgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kIGJ5IHRoZSBzcGVjaWZpZWQKKy8vLyAgICBudW1iZXIgb2YgYnl0ZXMuIExvdy1vcmRlciBiaXRzIGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20xMjhpIF9tbV9zbGxpX3NpMTI4KF9fbTEyOGkgYSwgY29uc3QgaW50IGltbSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNMTERRIC8gUFNMTERRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIGltbQorLy8vICAgIEFuIGltbWVkaWF0ZSB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gbGVmdC1zaGlmdAorLy8vICAgIG9wZXJhbmQgYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgbGVmdC1zaGlmdGVkIHZhbHVlLgorI2RlZmluZSBfbW1fc2xsaV9zaTEyOChhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKV9tbV9zZXR6ZXJvX3NpMTI4KCksICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKGEpLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgMCA6IDE2IC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICAxIDogMTcgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDIgOiAxOCAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgMyA6IDE5IC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA0IDogMjAgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDUgOiAyMSAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgNiA6IDIyIC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/ICA3IDogMjMgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gIDggOiAyNCAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAgOSA6IDI1IC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEwIDogMjYgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTEgOiAyNyAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxMiA6IDI4IC0gKGNoYXIpKGltbSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDEzIDogMjkgLSAoY2hhcikoaW1tKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTQgOiAzMCAtIChjaGFyKShpbW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxNSA6IDMxIC0gKGNoYXIpKGltbSkpOyB9KQorCisjZGVmaW5lIF9tbV9ic2xsaV9zaTEyOChhLCBpbW0pIFwKKyAgX21tX3NsbGlfc2kxMjgoKGEpLCAoaW1tKSkKKworLy8vIFxicmllZiBMZWZ0LXNoaWZ0cyBlYWNoIDE2LWJpdCB2YWx1ZSBpbiB0aGUgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kCisvLy8gICAgYnkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYml0cy4gTG93LW9yZGVyIGJpdHMgYXJlIGNsZWFyZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTTExXIC8gUFNMTFcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQW4gaW50ZWdlciB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYml0cyB0byBsZWZ0LXNoaWZ0IGVhY2ggdmFsdWUKKy8vLyAgICBpbiBvcGVyYW5kIF9fYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgbGVmdC1zaGlmdGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2xsaV9lcGkxNihfX20xMjhpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2xsd2kxMjgoKF9fdjhoaSlfX2EsIF9fY291bnQpOworfQorCisvLy8gXGJyaWVmIExlZnQtc2hpZnRzIGVhY2ggMTYtYml0IHZhbHVlIGluIHRoZSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQKKy8vLyAgICBieSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzLiBMb3ctb3JkZXIgYml0cyBhcmUgY2xlYXJlZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNMTFcgLyBQU0xMVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgaW4gd2hpY2ggYml0cyBbNjM6MF0gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGJpdHMKKy8vLyAgICB0byBsZWZ0LXNoaWZ0IGVhY2ggdmFsdWUgaW4gb3BlcmFuZCBfX2EuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGxlZnQtc2hpZnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NsbF9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNsbHcxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgTGVmdC1zaGlmdHMgZWFjaCAzMi1iaXQgdmFsdWUgaW4gdGhlIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb3BlcmFuZAorLy8vICAgIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMuIExvdy1vcmRlciBiaXRzIGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQU0xMRCAvIFBTTExEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEFuIGludGVnZXIgdmFsdWUgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGJpdHMgdG8gbGVmdC1zaGlmdCBlYWNoIHZhbHVlCisvLy8gICAgaW4gb3BlcmFuZCBfX2EuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGxlZnQtc2hpZnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NsbGlfZXBpMzIoX19tMTI4aSBfX2EsIGludCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNsbGRpMTI4KChfX3Y0c2kpX19hLCBfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBMZWZ0LXNoaWZ0cyBlYWNoIDMyLWJpdCB2YWx1ZSBpbiB0aGUgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kCisvLy8gICAgYnkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYml0cy4gTG93LW9yZGVyIGJpdHMgYXJlIGNsZWFyZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTTExEIC8gUFNMTEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGluIHdoaWNoIGJpdHMgWzYzOjBdIHNwZWNpZnkgdGhlIG51bWJlciBvZiBiaXRzCisvLy8gICAgdG8gbGVmdC1zaGlmdCBlYWNoIHZhbHVlIGluIG9wZXJhbmQgX19hLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBsZWZ0LXNoaWZ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zbGxfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzbGxkMTI4KChfX3Y0c2kpX19hLCAoX192NHNpKV9fY291bnQpOworfQorCisvLy8gXGJyaWVmIExlZnQtc2hpZnRzIGVhY2ggNjQtYml0IHZhbHVlIGluIHRoZSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQKKy8vLyAgICBieSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzLiBMb3ctb3JkZXIgYml0cyBhcmUgY2xlYXJlZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNMTFEgLyBQU0xMUSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBbiBpbnRlZ2VyIHZhbHVlIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBiaXRzIHRvIGxlZnQtc2hpZnQgZWFjaCB2YWx1ZQorLy8vICAgIGluIG9wZXJhbmQgX19hLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBsZWZ0LXNoaWZ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zbGxpX2VwaTY0KF9fbTEyOGkgX19hLCBpbnQgX19jb3VudCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzbGxxaTEyOCgoX192MmRpKV9fYSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgTGVmdC1zaGlmdHMgZWFjaCA2NC1iaXQgdmFsdWUgaW4gdGhlIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb3BlcmFuZAorLy8vICAgIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMuIExvdy1vcmRlciBiaXRzIGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQU0xMUSAvIFBTTExRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBpbiB3aGljaCBiaXRzIFs2MzowXSBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgYml0cworLy8vICAgIHRvIGxlZnQtc2hpZnQgZWFjaCB2YWx1ZSBpbiBvcGVyYW5kIF9fYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgbGVmdC1zaGlmdGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2xsX2VwaTY0KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fY291bnQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc2xscTEyOCgoX192MmRpKV9fYSwgKF9fdjJkaSlfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBSaWdodC1zaGlmdHMgZWFjaCAxNi1iaXQgdmFsdWUgaW4gdGhlIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb3BlcmFuZAorLy8vICAgIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMuIEhpZ2gtb3JkZXIgYml0cyBhcmUgZmlsbGVkIHdpdGggdGhlIHNpZ24KKy8vLyAgICBiaXQgb2YgdGhlIGluaXRpYWwgdmFsdWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTUkFXIC8gUFNSQVcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQW4gaW50ZWdlciB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYml0cyB0byByaWdodC1zaGlmdCBlYWNoIHZhbHVlCisvLy8gICAgaW4gb3BlcmFuZCBfX2EuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmFpX2VwaTE2KF9fbTEyOGkgX19hLCBpbnQgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzcmF3aTEyOCgoX192OGhpKV9fYSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgUmlnaHQtc2hpZnRzIGVhY2ggMTYtYml0IHZhbHVlIGluIHRoZSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQKKy8vLyAgICBieSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzLiBIaWdoLW9yZGVyIGJpdHMgYXJlIGZpbGxlZCB3aXRoIHRoZSBzaWduCisvLy8gICAgYml0IG9mIHRoZSBpbml0aWFsIHZhbHVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQU1JBVyAvIFBTUkFXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBpbiB3aGljaCBiaXRzIFs2MzowXSBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgYml0cworLy8vICAgIHRvIHJpZ2h0LXNoaWZ0IGVhY2ggdmFsdWUgaW4gb3BlcmFuZCBfX2EuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmFfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzcmF3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fY291bnQpOworfQorCisvLy8gXGJyaWVmIFJpZ2h0LXNoaWZ0cyBlYWNoIDMyLWJpdCB2YWx1ZSBpbiB0aGUgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kCisvLy8gICAgYnkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYml0cy4gSGlnaC1vcmRlciBiaXRzIGFyZSBmaWxsZWQgd2l0aCB0aGUgc2lnbgorLy8vICAgIGJpdCBvZiB0aGUgaW5pdGlhbCB2YWx1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNSQUQgLyBQU1JBRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBbiBpbnRlZ2VyIHZhbHVlIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBiaXRzIHRvIHJpZ2h0LXNoaWZ0IGVhY2ggdmFsdWUKKy8vLyAgICBpbiBvcGVyYW5kIF9fYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcmlnaHQtc2hpZnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NyYWlfZXBpMzIoX19tMTI4aSBfX2EsIGludCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNyYWRpMTI4KChfX3Y0c2kpX19hLCBfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBSaWdodC1zaGlmdHMgZWFjaCAzMi1iaXQgdmFsdWUgaW4gdGhlIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb3BlcmFuZAorLy8vICAgIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMuIEhpZ2gtb3JkZXIgYml0cyBhcmUgZmlsbGVkIHdpdGggdGhlIHNpZ24KKy8vLyAgICBiaXQgb2YgdGhlIGluaXRpYWwgdmFsdWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTUkFEIC8gUFNSQUQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGluIHdoaWNoIGJpdHMgWzYzOjBdIHNwZWNpZnkgdGhlIG51bWJlciBvZiBiaXRzCisvLy8gICAgdG8gcmlnaHQtc2hpZnQgZWFjaCB2YWx1ZSBpbiBvcGVyYW5kIF9fYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcmlnaHQtc2hpZnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NyYV9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNyYWQxMjgoKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgUmlnaHQtc2hpZnRzIHRoZSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQgYnkgdGhlIHNwZWNpZmllZAorLy8vICAgIG51bWJlciBvZiBieXRlcy4gSGlnaC1vcmRlciBiaXRzIGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20xMjhpIF9tbV9zcmxpX3NpMTI4KF9fbTEyOGkgYSwgY29uc3QgaW50IGltbSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNSTERRIC8gUFNSTERRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIGEKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIGltbQorLy8vICAgIEFuIGltbWVkaWF0ZSB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmlnaHQtc2hpZnQgb3BlcmFuZAorLy8vICAgIGEuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQgdmFsdWUuCisjZGVmaW5lIF9tbV9zcmxpX3NpMTI4KGEsIGltbSkgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKGEpLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fc2V0emVyb19zaTEyOCgpLCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDE2IDogKGNoYXIpKGltbSkgKyAwLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMTcgOiAoY2hhcikoaW1tKSArIDEsICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAxOCA6IChjaGFyKShpbW0pICsgMiwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDE5IDogKGNoYXIpKGltbSkgKyAzLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjAgOiAoY2hhcikoaW1tKSArIDQsICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyMSA6IChjaGFyKShpbW0pICsgNSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDIyIDogKGNoYXIpKGltbSkgKyA2LCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjMgOiAoY2hhcikoaW1tKSArIDcsICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyNCA6IChjaGFyKShpbW0pICsgOCwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDI1IDogKGNoYXIpKGltbSkgKyA5LCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjYgOiAoY2hhcikoaW1tKSArIDEwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAyNyA6IChjaGFyKShpbW0pICsgMTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDI4IDogKGNoYXIpKGltbSkgKyAxMiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyKShpbW0pJjB4RjApID8gMjkgOiAoY2hhcikoaW1tKSArIDEzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIpKGltbSkmMHhGMCkgPyAzMCA6IChjaGFyKShpbW0pICsgMTQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcikoaW1tKSYweEYwKSA/IDMxIDogKGNoYXIpKGltbSkgKyAxNSk7IH0pCisKKyNkZWZpbmUgX21tX2JzcmxpX3NpMTI4KGEsIGltbSkgXAorICBfbW1fc3JsaV9zaTEyOCgoYSksIChpbW0pKQorCisvLy8gXGJyaWVmIFJpZ2h0LXNoaWZ0cyBlYWNoIG9mIDE2LWJpdCB2YWx1ZXMgaW4gdGhlIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IKKy8vLyAgICBvcGVyYW5kIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMuIEhpZ2gtb3JkZXIgYml0cyBhcmUgY2xlYXJlZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNSTFcgLyBQU1JMVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBbiBpbnRlZ2VyIHZhbHVlIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBiaXRzIHRvIHJpZ2h0LXNoaWZ0IGVhY2ggdmFsdWUKKy8vLyAgICBpbiBvcGVyYW5kIF9fYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcmlnaHQtc2hpZnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NybGlfZXBpMTYoX19tMTI4aSBfX2EsIGludCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNybHdpMTI4KChfX3Y4aGkpX19hLCBfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBSaWdodC1zaGlmdHMgZWFjaCBvZiAxNi1iaXQgdmFsdWVzIGluIHRoZSAxMjgtYml0IGludGVnZXIgdmVjdG9yCisvLy8gICAgb3BlcmFuZCBieSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzLiBIaWdoLW9yZGVyIGJpdHMgYXJlIGNsZWFyZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTUkxXIC8gUFNSTFcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGluIHdoaWNoIGJpdHMgWzYzOjBdIHNwZWNpZnkgdGhlIG51bWJlciBvZiBiaXRzCisvLy8gICAgdG8gcmlnaHQtc2hpZnQgZWFjaCB2YWx1ZSBpbiBvcGVyYW5kIF9fYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcmlnaHQtc2hpZnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NybF9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNybHcxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgUmlnaHQtc2hpZnRzIGVhY2ggb2YgMzItYml0IHZhbHVlcyBpbiB0aGUgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcgorLy8vICAgIG9wZXJhbmQgYnkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYml0cy4gSGlnaC1vcmRlciBiaXRzIGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQU1JMRCAvIFBTUkxEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEFuIGludGVnZXIgdmFsdWUgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGJpdHMgdG8gcmlnaHQtc2hpZnQgZWFjaCB2YWx1ZQorLy8vICAgIGluIG9wZXJhbmQgX19hLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSByaWdodC1zaGlmdGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JsaV9lcGkzMihfX20xMjhpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JsZGkxMjgoKF9fdjRzaSlfX2EsIF9fY291bnQpOworfQorCisvLy8gXGJyaWVmIFJpZ2h0LXNoaWZ0cyBlYWNoIG9mIDMyLWJpdCB2YWx1ZXMgaW4gdGhlIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IKKy8vLyAgICBvcGVyYW5kIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMuIEhpZ2gtb3JkZXIgYml0cyBhcmUgY2xlYXJlZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNSTEQgLyBQU1JMRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgaW4gd2hpY2ggYml0cyBbNjM6MF0gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGJpdHMKKy8vLyAgICB0byByaWdodC1zaGlmdCBlYWNoIHZhbHVlIGluIG9wZXJhbmQgX19hLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSByaWdodC1zaGlmdGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JsX2VwaTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fY291bnQpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JsZDEyOCgoX192NHNpKV9fYSwgKF9fdjRzaSlfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBSaWdodC1zaGlmdHMgZWFjaCBvZiA2NC1iaXQgdmFsdWVzIGluIHRoZSAxMjgtYml0IGludGVnZXIgdmVjdG9yCisvLy8gICAgb3BlcmFuZCBieSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzLiBIaWdoLW9yZGVyIGJpdHMgYXJlIGNsZWFyZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTUkxRIC8gUFNSTFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQW4gaW50ZWdlciB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYml0cyB0byByaWdodC1zaGlmdCBlYWNoIHZhbHVlCisvLy8gICAgaW4gb3BlcmFuZCBfX2EuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmxpX2VwaTY0KF9fbTEyOGkgX19hLCBpbnQgX19jb3VudCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzcmxxaTEyOCgoX192MmRpKV9fYSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgUmlnaHQtc2hpZnRzIGVhY2ggb2YgNjQtYml0IHZhbHVlcyBpbiB0aGUgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcgorLy8vICAgIG9wZXJhbmQgYnkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYml0cy4gSGlnaC1vcmRlciBiaXRzIGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQU1JMUSAvIFBTUkxRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBpbiB3aGljaCBiaXRzIFs2MzowXSBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgYml0cworLy8vICAgIHRvIHJpZ2h0LXNoaWZ0IGVhY2ggdmFsdWUgaW4gb3BlcmFuZCBfX2EuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmxfZXBpNjQoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzcmxxMTI4KChfX3YyZGkpX19hLCAoX192MmRpKV9fY291bnQpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgOC1iaXQgdmFsdWVzIG9mIHRoZSAxMjgtYml0CisvLy8gICAgaW50ZWdlciB2ZWN0b3JzIGZvciBlcXVhbGl0eS4gRWFjaCBjb21wYXJpc29uIHlpZWxkcyAwaCBmb3IgZmFsc2UsIEZGaAorLy8vICAgIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQQ01QRVFCIC8gUENNUEVRQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9lcGk4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192MTZxaSlfX2EgPT0gKF9fdjE2cWkpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIDE2LWJpdCB2YWx1ZXMgb2YgdGhlIDEyOC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvcnMgZm9yIGVxdWFsaXR5LiBFYWNoIGNvbXBhcmlzb24geWllbGRzIDBoIGZvciBmYWxzZSwgRkZGRmgKKy8vLyAgICBmb3IgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUENNUEVRVyAvIFBDTVBFUVcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3Y4aGkpX19hID09IChfX3Y4aGkpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdCB2YWx1ZXMgb2YgdGhlIDEyOC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvcnMgZm9yIGVxdWFsaXR5LiBFYWNoIGNvbXBhcmlzb24geWllbGRzIDBoIGZvciBmYWxzZSwKKy8vLyAgICBGRkZGRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBDTVBFUUQgLyBQQ01QRVFEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGVxX2VwaTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192NHNpKV9fYSA9PSAoX192NHNpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBzaWduZWQgOC1iaXQgdmFsdWVzIG9mIHRoZSAxMjgtYml0CisvLy8gICAgaW50ZWdlciB2ZWN0b3JzIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBmaXJzdCBvcGVyYW5kIGFyZQorLy8vICAgIGdyZWF0ZXIgdGhhbiB0aG9zZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQuIEVhY2ggY29tcGFyaXNvbiB5aWVsZHMgMGggZm9yCisvLy8gICAgZmFsc2UsIEZGaCBmb3IgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUENNUEdUQiAvIFBDTVBHVEIgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfZXBpOChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGNvbXBhcmlzb24sIGJ1dCBfX3YxNnFpIGlzIGEgY2hhcgorICAgICB3aGljaCBtYXkgYmUgc2lnbmVkIG9yIHVuc2lnbmVkLCBzbyB1c2UgX192MTZxcy4gKi8KKyAgcmV0dXJuIChfX20xMjhpKSgoX192MTZxcylfX2EgPiAoX192MTZxcylfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2lnbmVkIDE2LWJpdCB2YWx1ZXMgb2YgdGhlCisvLy8gICAgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcnMgdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZXMgaW4gdGhlIGZpcnN0IG9wZXJhbmQKKy8vLyAgICBhcmUgZ3JlYXRlciB0aGFuIHRob3NlIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4gRWFjaCBjb21wYXJpc29uIHlpZWxkcyAwaAorLy8vICAgIGZvciBmYWxzZSwgRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBDTVBHVFcgLyBQQ01QR1RXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGd0X2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192OGhpKV9fYSA+IChfX3Y4aGkpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNpZ25lZCAzMi1iaXQgdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3JzIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBmaXJzdCBvcGVyYW5kCisvLy8gICAgYXJlIGdyZWF0ZXIgdGhhbiB0aG9zZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQuIEVhY2ggY29tcGFyaXNvbiB5aWVsZHMgMGgKKy8vLyAgICBmb3IgZmFsc2UsIEZGRkZGRkZGaCBmb3IgdHJ1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUENNUEdURCAvIFBDTVBHVEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3Y0c2kpX19hID4gKF9fdjRzaSlfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2lnbmVkIDgtYml0IHZhbHVlcyBvZiB0aGUgMTI4LWJpdAorLy8vICAgIGludGVnZXIgdmVjdG9ycyB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3Qgb3BlcmFuZCBhcmUgbGVzcworLy8vICAgIHRoYW4gdGhvc2UgaW4gdGhlIHNlY29uZCBvcGVyYW5kLiBFYWNoIGNvbXBhcmlzb24geWllbGRzIDBoIGZvciBmYWxzZSwKKy8vLyAgICBGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBDTVBHVEIgLyBQQ01QR1RCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gX21tX2NtcGd0X2VwaTgoX19iLCBfX2EpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2lnbmVkIDE2LWJpdCB2YWx1ZXMgb2YgdGhlCisvLy8gICAgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcnMgdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZXMgaW4gdGhlIGZpcnN0IG9wZXJhbmQKKy8vLyAgICBhcmUgbGVzcyB0aGFuIHRob3NlIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4gRWFjaCBjb21wYXJpc29uIHlpZWxkcyAwaCBmb3IKKy8vLyAgICBmYWxzZSwgRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBDTVBHVFcgLyBQQ01QR1RXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIF9tbV9jbXBndF9lcGkxNihfX2IsIF9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBzaWduZWQgMzItYml0IHZhbHVlcyBvZiB0aGUKKy8vLyAgICAxMjgtYml0IGludGVnZXIgdmVjdG9ycyB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3Qgb3BlcmFuZAorLy8vICAgIGFyZSBsZXNzIHRoYW4gdGhvc2UgaW4gdGhlIHNlY29uZCBvcGVyYW5kLiBFYWNoIGNvbXBhcmlzb24geWllbGRzIDBoIGZvcgorLy8vICAgIGZhbHNlLCBGRkZGRkZGRmggZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBDTVBHVEQgLyBQQ01QR1REIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X2VwaTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIF9tbV9jbXBndF9lcGkzMihfX2IsIF9fYSk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgNjQtYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlIGZyb20gdGhlIHNlY29uZCBvcGVyYW5kIGludG8gYQorLy8vICAgIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgYW5kIHJldHVybnMgaXQgaW4gdGhlIGxvd2VyIGVsZW1lbnQgb2YgYSBbMiB4CisvLy8gICAgZG91YmxlXSB2ZWN0b3I7IHRoZSB1cHBlciBlbGVtZW50IG9mIHRoZSByZXR1cm5lZCB2ZWN0b3IgaXMgY29waWVkIGZyb20KKy8vLyAgICB0aGUgdXBwZXIgZWxlbWVudCBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZUU0kyU0QgLyBDVlRTSTJTRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIGNvcGllZCB0byB0aGUgdXBwZXIgNjQgYml0cyBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IHNpZ25lZCBpbnRlZ2VyIG9wZXJhbmQgY29udGFpbmluZyB0aGUgdmFsdWUgdG8gYmUgY29udmVydGVkLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIHdob3NlIGxvd2VyIDY0IGJpdHMgY29udGFpbiB0aGUKKy8vLyAgICBjb252ZXJ0ZWQgdmFsdWUgb2YgdGhlIHNlY29uZCBvcGVyYW5kLiBUaGUgdXBwZXIgNjQgYml0cyBhcmUgY29waWVkIGZyb20KKy8vLyAgICB0aGUgdXBwZXIgNjQgYml0cyBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2k2NF9zZChfX20xMjhkIF9fYSwgbG9uZyBsb25nIF9fYikKK3sKKyAgX19hWzBdID0gX19iOworICByZXR1cm4gX19hOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIHRoZSBmaXJzdCAobG93ZXIpIGVsZW1lbnQgb2YgYSB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGludG8gYQorLy8vICAgIDY0LWJpdCBzaWduZWQgaW50ZWdlciB2YWx1ZSwgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHJvdW5kaW5nIG1vZGUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFNEMlNJIC8gQ1ZUU0QyU0kgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uIFRoZSBsb3dlciA2NCBiaXRzIGFyZSB1c2VkIGluIHRoZQorLy8vICAgIGNvbnZlcnNpb24uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgc2lnbmVkIGludGVnZXIgY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlLgorc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNkX3NpNjQoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRzZDJzaTY0KChfX3YyZGYpX19hKTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyB0aGUgZmlyc3QgKGxvd2VyKSBlbGVtZW50IG9mIGEgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBpbnRvIGEKKy8vLyAgICA2NC1iaXQgc2lnbmVkIGludGVnZXIgdmFsdWUsIHRydW5jYXRpbmcgdGhlIHJlc3VsdCB3aGVuIGl0IGlzIGluZXhhY3QuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFRTRDJTSSAvIENWVFRTRDJTSSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4gVGhlIGxvd2VyIDY0IGJpdHMgYXJlIHVzZWQgaW4gdGhlCisvLy8gICAgY29udmVyc2lvbi4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBzaWduZWQgaW50ZWdlciBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgdmFsdWUuCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHNkX3NpNjQoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnR0c2Qyc2k2NCgoX192MmRmKV9fYSk7Cit9CisjZW5kaWYKKworLy8vIFxicmllZiBDb252ZXJ0cyBhIHZlY3RvciBvZiBbNCB4IGkzMl0gaW50byBhIHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZURFEyUFMgLyBDVlREUTJQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaTMyX3BzKF9fbTEyOGkgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0ZHEycHMoKF9fdjRzaSlfX2EpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGludG8gYSB2ZWN0b3Igb2YgWzQgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlRQUzJEUSAvIENWVFBTMkRRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTMyXSBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQKKy8vLyAgICB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBzX2VwaTMyKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9jdnRwczJkcSgoX192NHNmKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgYSB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gaW50byBhIHZlY3RvciBvZiBbNCB4IGkzMl0sCisvLy8gICAgdHJ1bmNhdGluZyB0aGUgcmVzdWx0IHdoZW4gaXQgaXMgaW5leGFjdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZUVFBTMkRRIC8gQ1ZUVFBTMkRRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGkzMl0gY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHBzX2VwaTMyKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9jdnR0cHMyZHEoKF9fdjRzZilfX2EpOworfQorCisvLy8gXGJyaWVmIFJldHVybnMgYSB2ZWN0b3Igb2YgWzQgeCBpMzJdIHdoZXJlIHRoZSBsb3dlc3QgZWxlbWVudCBpcyB0aGUgaW5wdXQKKy8vLyAgICBvcGVyYW5kIGFuZCB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGFyZSB6ZXJvLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZEIC8gTU9WRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDMyLWJpdCBzaWduZWQgaW50ZWdlciBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMzJdLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzaTMyX3NpMTI4KGludCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4aSkoX192NHNpKXsgX19hLCAwLCAwLCAwIH07Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCisvLy8gXGJyaWVmIFJldHVybnMgYSB2ZWN0b3Igb2YgWzIgeCBpNjRdIHdoZXJlIHRoZSBsb3dlciBlbGVtZW50IGlzIHRoZSBpbnB1dAorLy8vICAgIG9wZXJhbmQgYW5kIHRoZSB1cHBlciBlbGVtZW50IGlzIHplcm8uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVlEgLyBNT1ZRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IHNpZ25lZCBpbnRlZ2VyIG9wZXJhbmQgY29udGFpbmluZyB0aGUgdmFsdWUgdG8gYmUgY29udmVydGVkLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBpNjRdIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZCB2YWx1ZS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2k2NF9zaTEyOChsb25nIGxvbmcgX19hKQoreworICByZXR1cm4gKF9fbTEyOGkpeyBfX2EsIDAgfTsKK30KKyNlbmRpZgorCisvLy8gXGJyaWVmIE1vdmVzIHRoZSBsZWFzdCBzaWduaWZpY2FudCAzMiBiaXRzIG9mIGEgdmVjdG9yIG9mIFs0IHggaTMyXSB0byBhCisvLy8gICAgMzItYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZEIC8gTU9WRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIHZlY3RvciBvZiBbNCB4IGkzMl0uIFRoZSBsZWFzdCBzaWduaWZpY2FudCAzMiBiaXRzIGFyZSBtb3ZlZCB0byB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDMyLWJpdCBzaWduZWQgaW50ZWdlciBjb250YWluaW5nIHRoZSBtb3ZlZCB2YWx1ZS4KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzaTEyOF9zaTMyKF9fbTEyOGkgX19hKQoreworICBfX3Y0c2kgX19iID0gKF9fdjRzaSlfX2E7CisgIHJldHVybiBfX2JbMF07Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCisvLy8gXGJyaWVmIE1vdmVzIHRoZSBsZWFzdCBzaWduaWZpY2FudCA2NCBiaXRzIG9mIGEgdmVjdG9yIG9mIFsyIHggaTY0XSB0byBhCisvLy8gICAgNjQtYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZRIC8gTU9WUSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIHZlY3RvciBvZiBbMiB4IGk2NF0uIFRoZSBsZWFzdCBzaWduaWZpY2FudCA2NCBiaXRzIGFyZSBtb3ZlZCB0byB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBzaWduZWQgaW50ZWdlciBjb250YWluaW5nIHRoZSBtb3ZlZCB2YWx1ZS4KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzaTEyOF9zaTY0KF9fbTEyOGkgX19hKQoreworICByZXR1cm4gX19hWzBdOworfQorI2VuZGlmCisKKy8vLyBcYnJpZWYgTW92ZXMgcGFja2VkIGludGVnZXIgdmFsdWVzIGZyb20gYW4gYWxpZ25lZCAxMjgtYml0IG1lbW9yeSBsb2NhdGlvbgorLy8vICAgIHRvIGVsZW1lbnRzIGluIGEgMTI4LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WRFFBIC8gTU9WRFFBIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEFuIGFsaWduZWQgcG9pbnRlciB0byBhIG1lbW9yeSBsb2NhdGlvbiBjb250YWluaW5nIGludGVnZXIgdmFsdWVzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBtb3ZlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWRfc2kxMjgoX19tMTI4aSBjb25zdCAqX19wKQoreworICByZXR1cm4gKl9fcDsKK30KKworLy8vIFxicmllZiBNb3ZlcyBwYWNrZWQgaW50ZWdlciB2YWx1ZXMgZnJvbSBhbiB1bmFsaWduZWQgMTI4LWJpdCBtZW1vcnkgbG9jYXRpb24KKy8vLyAgICB0byBlbGVtZW50cyBpbiBhIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVkRRVSAvIE1PVkRRVSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3AKKy8vLyAgICBBIHBvaW50ZXIgdG8gYSBtZW1vcnkgbG9jYXRpb24gY29udGFpbmluZyBpbnRlZ2VyIHZhbHVlcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgbW92ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkdV9zaTEyOChfX20xMjhpIGNvbnN0ICpfX3ApCit7CisgIHN0cnVjdCBfX2xvYWR1X3NpMTI4IHsKKyAgICBfX20xMjhpIF9fdjsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIHJldHVybiAoKHN0cnVjdCBfX2xvYWR1X3NpMTI4KilfX3ApLT5fX3Y7Cit9CisKKy8vLyBcYnJpZWYgUmV0dXJucyBhIHZlY3RvciBvZiBbMiB4IGk2NF0gd2hlcmUgdGhlIGxvd2VyIGVsZW1lbnQgaXMgdGFrZW4gZnJvbQorLy8vICAgIHRoZSBsb3dlciBlbGVtZW50IG9mIHRoZSBvcGVyYW5kLCBhbmQgdGhlIHVwcGVyIGVsZW1lbnQgaXMgemVyby4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WUSAvIE1PVlEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGk2NF0uIEJpdHMgWzYzOjBdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzYzOjBdIG9mCisvLy8gICAgdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBpNjRdLiBUaGUgbG93ZXIgb3JkZXIgYml0cyBjb250YWluIHRoZQorLy8vICAgIG1vdmVkIHZhbHVlLiBUaGUgaGlnaGVyIG9yZGVyIGJpdHMgYXJlIGNsZWFyZWQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWRsX2VwaTY0KF9fbTEyOGkgY29uc3QgKl9fcCkKK3sKKyAgc3RydWN0IF9fbW1fbG9hZGxfZXBpNjRfc3RydWN0IHsKKyAgICBsb25nIGxvbmcgX191OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgcmV0dXJuIChfX20xMjhpKSB7ICgoc3RydWN0IF9fbW1fbG9hZGxfZXBpNjRfc3RydWN0KilfX3ApLT5fX3UsIDB9OworfQorCisvLy8gXGJyaWVmIEdlbmVyYXRlcyBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggaTMyXSB3aXRoIHVuc3BlY2lmaWVkIGNvbnRlbnQuCisvLy8gICAgVGhpcyBjb3VsZCBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIGFub3RoZXIgaW50cmluc2ljIGZ1bmN0aW9uIHdoZXJlIHRoZQorLy8vICAgIGFyZ3VtZW50IGlzIHJlcXVpcmVkIGJ1dCB0aGUgdmFsdWUgaXMgbm90IGFjdHVhbGx5IHVzZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBoYXMgbm8gY29ycmVzcG9uZGluZyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMzJdIHdpdGggdW5zcGVjaWZpZWQgY29udGVudC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5kZWZpbmVkX3NpMTI4KHZvaWQpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl91bmRlZjEyOCgpOworfQorCisvLy8gXGJyaWVmIEluaXRpYWxpemVzIGJvdGggNjQtYml0IHZhbHVlcyBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggaTY0XSB3aXRoCisvLy8gICAgdGhlIHNwZWNpZmllZCA2NC1iaXQgaW50ZWdlciB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBzcGVjaWZpYworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdXBwZXIgNjQgYml0cyBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbiB2ZWN0b3Igb2YgWzIgeCBpNjRdLgorLy8vIFxwYXJhbSBfX3EwCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGxvd2VyIDY0IGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24gdmVjdG9yIG9mIFsyIHggaTY0XS4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGk2NF0gY29udGFpbmluZyB0aGUgdmFsdWVzCisvLy8gICAgcHJvdmlkZWQgaW4gdGhlIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRfZXBpNjR4KGxvbmcgbG9uZyBfX3ExLCBsb25nIGxvbmcgX19xMCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKXsgX19xMCwgX19xMSB9OworfQorCisvLy8gXGJyaWVmIEluaXRpYWxpemVzIGJvdGggNjQtYml0IHZhbHVlcyBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggaTY0XSB3aXRoCisvLy8gICAgdGhlIHNwZWNpZmllZCA2NC1iaXQgaW50ZWdlciB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBzcGVjaWZpYworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdXBwZXIgNjQgYml0cyBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbiB2ZWN0b3Igb2YgWzIgeCBpNjRdLgorLy8vIFxwYXJhbSBfX3EwCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGxvd2VyIDY0IGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24gdmVjdG9yIG9mIFsyIHggaTY0XS4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGk2NF0gY29udGFpbmluZyB0aGUgdmFsdWVzCisvLy8gICAgcHJvdmlkZWQgaW4gdGhlIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRfZXBpNjQoX19tNjQgX19xMSwgX19tNjQgX19xMCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKXsgKGxvbmcgbG9uZylfX3EwLCAobG9uZyBsb25nKV9fcTEgfTsKK30KKworLy8vIFxicmllZiBJbml0aWFsaXplcyB0aGUgMzItYml0IHZhbHVlcyBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggaTMyXSB3aXRoCisvLy8gICAgdGhlIHNwZWNpZmllZCAzMi1iaXQgaW50ZWdlciB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBzcGVjaWZpYworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9faTMKKy8vLyAgICBBIDMyLWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFsxMjc6OTZdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uIHZlY3Rvci4KKy8vLyBccGFyYW0gX19pMgorLy8vICAgIEEgMzItYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzk1OjY0XSBvZiB0aGUgZGVzdGluYXRpb24KKy8vLyAgICB2ZWN0b3IuCisvLy8gXHBhcmFtIF9faTEKKy8vLyAgICBBIDMyLWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFs2MzozMl0gb2YgdGhlIGRlc3RpbmF0aW9uCisvLy8gICAgdmVjdG9yLgorLy8vIFxwYXJhbSBfX2kwCisvLy8gICAgQSAzMi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMzE6MF0gb2YgdGhlIGRlc3RpbmF0aW9uCisvLy8gICAgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggaTMyXSBjb250YWluaW5nIHRoZSB2YWx1ZXMKKy8vLyAgICBwcm92aWRlZCBpbiB0aGUgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldF9lcGkzMihpbnQgX19pMywgaW50IF9faTIsIGludCBfX2kxLCBpbnQgX19pMCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKShfX3Y0c2kpeyBfX2kwLCBfX2kxLCBfX2kyLCBfX2kzfTsKK30KKworLy8vIFxicmllZiBJbml0aWFsaXplcyB0aGUgMTYtYml0IHZhbHVlcyBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mIFs4IHggaTE2XSB3aXRoCisvLy8gICAgdGhlIHNwZWNpZmllZCAxNi1iaXQgaW50ZWdlciB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBzcGVjaWZpYworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fdzcKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFsxMjc6MTEyXSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbiB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fdzYKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFsxMTE6OTZdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uIHZlY3Rvci4KKy8vLyBccGFyYW0gX193NQorLy8vICAgIEEgMTYtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzk1OjgwXSBvZiB0aGUgZGVzdGluYXRpb24KKy8vLyAgICB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fdzQKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFs3OTo2NF0gb2YgdGhlIGRlc3RpbmF0aW9uCisvLy8gICAgdmVjdG9yLgorLy8vIFxwYXJhbSBfX3czCisvLy8gICAgQSAxNi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbNjM6NDhdIG9mIHRoZSBkZXN0aW5hdGlvbgorLy8vICAgIHZlY3Rvci4KKy8vLyBccGFyYW0gX193MgorLy8vICAgIEEgMTYtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzQ3OjMyXSBvZiB0aGUgZGVzdGluYXRpb24KKy8vLyAgICB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fdzEKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFszMToxNl0gb2YgdGhlIGRlc3RpbmF0aW9uCisvLy8gICAgdmVjdG9yLgorLy8vIFxwYXJhbSBfX3cwCisvLy8gICAgQSAxNi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMTU6MF0gb2YgdGhlIGRlc3RpbmF0aW9uCisvLy8gICAgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgdmVjdG9yIG9mIFs4IHggaTE2XSBjb250YWluaW5nIHRoZSB2YWx1ZXMKKy8vLyAgICBwcm92aWRlZCBpbiB0aGUgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldF9lcGkxNihzaG9ydCBfX3c3LCBzaG9ydCBfX3c2LCBzaG9ydCBfX3c1LCBzaG9ydCBfX3c0LCBzaG9ydCBfX3czLCBzaG9ydCBfX3cyLCBzaG9ydCBfX3cxLCBzaG9ydCBfX3cwKQoreworICByZXR1cm4gKF9fbTEyOGkpKF9fdjhoaSl7IF9fdzAsIF9fdzEsIF9fdzIsIF9fdzMsIF9fdzQsIF9fdzUsIF9fdzYsIF9fdzcgfTsKK30KKworLy8vIFxicmllZiBJbml0aWFsaXplcyB0aGUgOC1iaXQgdmFsdWVzIGluIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzE2IHggaThdIHdpdGgKKy8vLyAgICB0aGUgc3BlY2lmaWVkIDgtYml0IGludGVnZXIgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgc3BlY2lmaWMKKy8vLyAgICBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2IxNQorLy8vICAgIEluaXRpYWxpemVzIGJpdHMgWzEyNzoxMjBdIG9mIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYjE0CisvLy8gICAgSW5pdGlhbGl6ZXMgYml0cyBbMTE5OjExMl0gb2YgdGhlIGRlc3RpbmF0aW9uIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iMTMKKy8vLyAgICBJbml0aWFsaXplcyBiaXRzIFsxMTE6MTA0XSBvZiB0aGUgZGVzdGluYXRpb24gdmVjdG9yLgorLy8vIFxwYXJhbSBfX2IxMgorLy8vICAgIEluaXRpYWxpemVzIGJpdHMgWzEwMzo5Nl0gb2YgdGhlIGRlc3RpbmF0aW9uIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iMTEKKy8vLyAgICBJbml0aWFsaXplcyBiaXRzIFs5NTo4OF0gb2YgdGhlIGRlc3RpbmF0aW9uIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iMTAKKy8vLyAgICBJbml0aWFsaXplcyBiaXRzIFs4Nzo4MF0gb2YgdGhlIGRlc3RpbmF0aW9uIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iOQorLy8vICAgIEluaXRpYWxpemVzIGJpdHMgWzc5OjcyXSBvZiB0aGUgZGVzdGluYXRpb24gdmVjdG9yLgorLy8vIFxwYXJhbSBfX2I4CisvLy8gICAgSW5pdGlhbGl6ZXMgYml0cyBbNzE6NjRdIG9mIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYjcKKy8vLyAgICBJbml0aWFsaXplcyBiaXRzIFs2Mzo1Nl0gb2YgdGhlIGRlc3RpbmF0aW9uIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iNgorLy8vICAgIEluaXRpYWxpemVzIGJpdHMgWzU1OjQ4XSBvZiB0aGUgZGVzdGluYXRpb24gdmVjdG9yLgorLy8vIFxwYXJhbSBfX2I1CisvLy8gICAgSW5pdGlhbGl6ZXMgYml0cyBbNDc6NDBdIG9mIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYjQKKy8vLyAgICBJbml0aWFsaXplcyBiaXRzIFszOTozMl0gb2YgdGhlIGRlc3RpbmF0aW9uIHZlY3Rvci4KKy8vLyBccGFyYW0gX19iMworLy8vICAgIEluaXRpYWxpemVzIGJpdHMgWzMxOjI0XSBvZiB0aGUgZGVzdGluYXRpb24gdmVjdG9yLgorLy8vIFxwYXJhbSBfX2IyCisvLy8gICAgSW5pdGlhbGl6ZXMgYml0cyBbMjM6MTZdIG9mIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3IuCisvLy8gXHBhcmFtIF9fYjEKKy8vLyAgICBJbml0aWFsaXplcyBiaXRzIFsxNTo4XSBvZiB0aGUgZGVzdGluYXRpb24gdmVjdG9yLgorLy8vIFxwYXJhbSBfX2IwCisvLy8gICAgSW5pdGlhbGl6ZXMgYml0cyBbNzowXSBvZiB0aGUgZGVzdGluYXRpb24gdmVjdG9yLgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgdmVjdG9yIG9mIFsxNiB4IGk4XSBjb250YWluaW5nIHRoZSB2YWx1ZXMKKy8vLyAgICBwcm92aWRlZCBpbiB0aGUgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldF9lcGk4KGNoYXIgX19iMTUsIGNoYXIgX19iMTQsIGNoYXIgX19iMTMsIGNoYXIgX19iMTIsIGNoYXIgX19iMTEsIGNoYXIgX19iMTAsIGNoYXIgX19iOSwgY2hhciBfX2I4LCBjaGFyIF9fYjcsIGNoYXIgX19iNiwgY2hhciBfX2I1LCBjaGFyIF9fYjQsIGNoYXIgX19iMywgY2hhciBfX2IyLCBjaGFyIF9fYjEsIGNoYXIgX19iMCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKShfX3YxNnFpKXsgX19iMCwgX19iMSwgX19iMiwgX19iMywgX19iNCwgX19iNSwgX19iNiwgX19iNywgX19iOCwgX19iOSwgX19iMTAsIF9fYjExLCBfX2IxMiwgX19iMTMsIF9fYjE0LCBfX2IxNSB9OworfQorCisvLy8gXGJyaWVmIEluaXRpYWxpemVzIGJvdGggdmFsdWVzIGluIGEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciB3aXRoIHRoZQorLy8vICAgIHNwZWNpZmllZCA2NC1iaXQgaW50ZWdlciB2YWx1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHNwZWNpZmljCisvLy8gICAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19xCisvLy8gICAgSW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGVsZW1lbnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBpbnRlZ2VyCisvLy8gICAgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpNjRdIHdpdGggYm90aAorLy8vICAgIGVsZW1lbnRzIGNvbnRhaW5pbmcgdGhlIHZhbHVlIHByb3ZpZGVkIGluIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXQxX2VwaTY0eChsb25nIGxvbmcgX19xKQoreworICByZXR1cm4gKF9fbTEyOGkpeyBfX3EsIF9fcSB9OworfQorCisvLy8gXGJyaWVmIEluaXRpYWxpemVzIGJvdGggdmFsdWVzIGluIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBpNjRdIHdpdGggdGhlCisvLy8gICAgc3BlY2lmaWVkIDY0LWJpdCB2YWx1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHNwZWNpZmljCisvLy8gICAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19xCisvLy8gICAgQSA2NC1iaXQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBlbGVtZW50cyBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlcgorLy8vICAgIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGk2NF0gd2l0aCBhbGwgZWxlbWVudHMKKy8vLyAgICBjb250YWluaW5nIHRoZSB2YWx1ZSBwcm92aWRlZCBpbiB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0MV9lcGk2NChfX202NCBfX3EpCit7CisgIHJldHVybiAoX19tMTI4aSl7IChsb25nIGxvbmcpX19xLCAobG9uZyBsb25nKV9fcSB9OworfQorCisvLy8gXGJyaWVmIEluaXRpYWxpemVzIGFsbCB2YWx1ZXMgaW4gYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGkzMl0gd2l0aCB0aGUKKy8vLyAgICBzcGVjaWZpZWQgMzItYml0IHZhbHVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgc3BlY2lmaWMKKy8vLyAgICBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2kKKy8vLyAgICBBIDMyLWJpdCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGVsZW1lbnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBpbnRlZ2VyCisvLy8gICAgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggaTMyXSB3aXRoIGFsbCBlbGVtZW50cworLy8vICAgIGNvbnRhaW5pbmcgdGhlIHZhbHVlIHByb3ZpZGVkIGluIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXQxX2VwaTMyKGludCBfX2kpCit7CisgIHJldHVybiAoX19tMTI4aSkoX192NHNpKXsgX19pLCBfX2ksIF9faSwgX19pIH07Cit9CisKKy8vLyBcYnJpZWYgSW5pdGlhbGl6ZXMgYWxsIHZhbHVlcyBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mIFs4IHggaTE2XSB3aXRoIHRoZQorLy8vICAgIHNwZWNpZmllZCAxNi1iaXQgdmFsdWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBzcGVjaWZpYworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fdworLy8vICAgIEEgMTYtYml0IHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZWxlbWVudHMgb2YgdGhlIGRlc3RpbmF0aW9uIGludGVnZXIKKy8vLyAgICB2ZWN0b3IuCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgMTI4LWJpdCB2ZWN0b3Igb2YgWzggeCBpMTZdIHdpdGggYWxsIGVsZW1lbnRzCisvLy8gICAgY29udGFpbmluZyB0aGUgdmFsdWUgcHJvdmlkZWQgaW4gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldDFfZXBpMTYoc2hvcnQgX193KQoreworICByZXR1cm4gKF9fbTEyOGkpKF9fdjhoaSl7IF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193IH07Cit9CisKKy8vLyBcYnJpZWYgSW5pdGlhbGl6ZXMgYWxsIHZhbHVlcyBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mIFsxNiB4IGk4XSB3aXRoIHRoZQorLy8vICAgIHNwZWNpZmllZCA4LWJpdCB2YWx1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHNwZWNpZmljCisvLy8gICAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQW4gOC1iaXQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBlbGVtZW50cyBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlcgorLy8vICAgIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCAxMjgtYml0IHZlY3RvciBvZiBbMTYgeCBpOF0gd2l0aCBhbGwgZWxlbWVudHMKKy8vLyAgICBjb250YWluaW5nIHRoZSB2YWx1ZSBwcm92aWRlZCBpbiB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0MV9lcGk4KGNoYXIgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKF9fdjE2cWkpeyBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IgfTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciwgaW5pdGlhbGl6ZWQgaW4gcmV2ZXJzZSBvcmRlcgorLy8vICAgICB3aXRoIHRoZSBzcGVjaWZpZWQgNjQtYml0IGludGVncmFsIHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFVOUENLTFFEUSAvIFBVTlBDS0xRRFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19xMAorLy8vICAgIEEgNjQtYml0IGludGVncmFsIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbG93ZXIgNjQgYml0cyBvZiB0aGUKKy8vLyAgICByZXN1bHQuCisvLy8gXHBhcmFtIF9fcTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ3JhbCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHVwcGVyIDY0IGJpdHMgb2YgdGhlCisvLy8gICAgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldHJfZXBpNjQoX19tNjQgX19xMCwgX19tNjQgX19xMSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKXsgKGxvbmcgbG9uZylfX3EwLCAobG9uZyBsb25nKV9fcTEgfTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciwgaW5pdGlhbGl6ZWQgaW4gcmV2ZXJzZSBvcmRlcgorLy8vICAgICB3aXRoIHRoZSBzcGVjaWZpZWQgMzItYml0IGludGVncmFsIHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHNwZWNpZmljCisvLy8gICAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19pMAorLy8vICAgIEEgMzItYml0IGludGVncmFsIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFszMTowXSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2kxCisvLy8gICAgQSAzMi1iaXQgaW50ZWdyYWwgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzYzOjMyXSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2kyCisvLy8gICAgQSAzMi1iaXQgaW50ZWdyYWwgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzk1OjY0XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2kzCisvLy8gICAgQSAzMi1iaXQgaW50ZWdyYWwgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzEyNzo5Nl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRyX2VwaTMyKGludCBfX2kwLCBpbnQgX19pMSwgaW50IF9faTIsIGludCBfX2kzKQoreworICByZXR1cm4gKF9fbTEyOGkpKF9fdjRzaSl7IF9faTAsIF9faTEsIF9faTIsIF9faTN9OworfQorCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSAxMjgtYml0IGludGVnZXIgdmVjdG9yLCBpbml0aWFsaXplZCBpbiByZXZlcnNlIG9yZGVyCisvLy8gICAgIHdpdGggdGhlIHNwZWNpZmllZCAxNi1iaXQgaW50ZWdyYWwgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgc3BlY2lmaWMKKy8vLyAgICBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3cwCisvLy8gICAgQSAxNi1iaXQgaW50ZWdyYWwgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzE1OjBdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fdzEKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ3JhbCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMzE6MTZdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fdzIKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ3JhbCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbNDc6MzJdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fdzMKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ3JhbCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbNjM6NDhdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fdzQKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ3JhbCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbNzk6NjRdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fdzUKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ3JhbCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbOTU6ODBdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fdzYKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ3JhbCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMTExOjk2XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX3c3CisvLy8gICAgQSAxNi1iaXQgaW50ZWdyYWwgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzEyNzoxMTJdIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgMTI4LWJpdCBpbnRlZ2VyIHZlY3Rvci4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0cl9lcGkxNihzaG9ydCBfX3cwLCBzaG9ydCBfX3cxLCBzaG9ydCBfX3cyLCBzaG9ydCBfX3czLCBzaG9ydCBfX3c0LCBzaG9ydCBfX3c1LCBzaG9ydCBfX3c2LCBzaG9ydCBfX3c3KQoreworICByZXR1cm4gKF9fbTEyOGkpKF9fdjhoaSl7IF9fdzAsIF9fdzEsIF9fdzIsIF9fdzMsIF9fdzQsIF9fdzUsIF9fdzYsIF9fdzcgfTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciwgaW5pdGlhbGl6ZWQgaW4gcmV2ZXJzZSBvcmRlcgorLy8vICAgICB3aXRoIHRoZSBzcGVjaWZpZWQgOC1iaXQgaW50ZWdyYWwgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgc3BlY2lmaWMKKy8vLyAgICBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2IwCisvLy8gICAgQW4gOC1iaXQgaW50ZWdyYWwgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzc6MF0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iMQorLy8vICAgIEFuIDgtYml0IGludGVncmFsIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFsxNTo4XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2IyCisvLy8gICAgQW4gOC1iaXQgaW50ZWdyYWwgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzIzOjE2XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2IzCisvLy8gICAgQW4gOC1iaXQgaW50ZWdyYWwgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzMxOjI0XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2I0CisvLy8gICAgQW4gOC1iaXQgaW50ZWdyYWwgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzM5OjMyXSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2I1CisvLy8gICAgQW4gOC1iaXQgaW50ZWdyYWwgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzQ3OjQwXSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2I2CisvLy8gICAgQW4gOC1iaXQgaW50ZWdyYWwgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzU1OjQ4XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2I3CisvLy8gICAgQW4gOC1iaXQgaW50ZWdyYWwgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzYzOjU2XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2I4CisvLy8gICAgQW4gOC1iaXQgaW50ZWdyYWwgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzcxOjY0XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2I5CisvLy8gICAgQW4gOC1iaXQgaW50ZWdyYWwgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzc5OjcyXSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2IxMAorLy8vICAgIEFuIDgtYml0IGludGVncmFsIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFs4Nzo4MF0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iMTEKKy8vLyAgICBBbiA4LWJpdCBpbnRlZ3JhbCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbOTU6ODhdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fYjEyCisvLy8gICAgQW4gOC1iaXQgaW50ZWdyYWwgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzEwMzo5Nl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iMTMKKy8vLyAgICBBbiA4LWJpdCBpbnRlZ3JhbCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMTExOjEwNF0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iMTQKKy8vLyAgICBBbiA4LWJpdCBpbnRlZ3JhbCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMTE5OjExMl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iMTUKKy8vLyAgICBBbiA4LWJpdCBpbnRlZ3JhbCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMTI3OjEyMF0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCAxMjgtYml0IGludGVnZXIgdmVjdG9yLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRyX2VwaTgoY2hhciBfX2IwLCBjaGFyIF9fYjEsIGNoYXIgX19iMiwgY2hhciBfX2IzLCBjaGFyIF9fYjQsIGNoYXIgX19iNSwgY2hhciBfX2I2LCBjaGFyIF9fYjcsIGNoYXIgX19iOCwgY2hhciBfX2I5LCBjaGFyIF9fYjEwLCBjaGFyIF9fYjExLCBjaGFyIF9fYjEyLCBjaGFyIF9fYjEzLCBjaGFyIF9fYjE0LCBjaGFyIF9fYjE1KQoreworICByZXR1cm4gKF9fbTEyOGkpKF9fdjE2cWkpeyBfX2IwLCBfX2IxLCBfX2IyLCBfX2IzLCBfX2I0LCBfX2I1LCBfX2I2LCBfX2I3LCBfX2I4LCBfX2I5LCBfX2IxMCwgX19iMTEsIF9fYjEyLCBfX2IxMywgX19iMTQsIF9fYjE1IH07Cit9CisKKy8vLyBcYnJpZWYgQ3JlYXRlcyBhIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgaW5pdGlhbGl6ZWQgdG8gemVyby4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWWE9SUFMgLyBYT1JQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igd2l0aCBhbGwgZWxlbWVudHMgc2V0IHRvCisvLy8gICAgemVyby4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0emVyb19zaTEyOCh2b2lkKQoreworICByZXR1cm4gKF9fbTEyOGkpeyAwTEwsIDBMTCB9OworfQorCisvLy8gXGJyaWVmIFN0b3JlcyBhIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgdG8gYSBtZW1vcnkgbG9jYXRpb24gYWxpZ25lZCBvbiBhCisvLy8gICAgMTI4LWJpdCBib3VuZGFyeS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WQVBTIC8gTU9WQVBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byBhbiBhbGlnbmVkIG1lbW9yeSBsb2NhdGlvbiB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaW50ZWdlcgorLy8vICAgIHZhbHVlcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byBiZSBtb3ZlZC4KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmVfc2kxMjgoX19tMTI4aSAqX19wLCBfX20xMjhpIF9fYikKK3sKKyAgKl9fcCA9IF9fYjsKK30KKworLy8vIFxicmllZiBTdG9yZXMgYSAxMjgtYml0IGludGVnZXIgdmVjdG9yIHRvIGFuIHVuYWxpZ25lZCBtZW1vcnkgbG9jYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVlVQUyAvIE1PVlVQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3AKKy8vLyAgICBBIHBvaW50ZXIgdG8gYSBtZW1vcnkgbG9jYXRpb24gdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGludGVnZXIgdmFsdWVzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIG1vdmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZXVfc2kxMjgoX19tMTI4aSAqX19wLCBfX20xMjhpIF9fYikKK3sKKyAgc3RydWN0IF9fc3RvcmV1X3NpMTI4IHsKKyAgICBfX20xMjhpIF9fdjsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgICgoc3RydWN0IF9fc3RvcmV1X3NpMTI4KilfX3ApLT5fX3YgPSBfX2I7Cit9CisKKy8vLyBcYnJpZWYgTW92ZXMgYnl0ZXMgc2VsZWN0ZWQgYnkgdGhlIG1hc2sgZnJvbSB0aGUgZmlyc3Qgb3BlcmFuZCB0byB0aGUKKy8vLyAgICBzcGVjaWZpZWQgdW5hbGlnbmVkIG1lbW9yeSBsb2NhdGlvbi4gV2hlbiBhIG1hc2sgYml0IGlzIDEsIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgYnl0ZSBpcyB3cml0dGVuLCBvdGhlcndpc2UgaXQgaXMgbm90IHdyaXR0ZW4uIFRvIG1pbmltaXplCisvLy8gICAgY2FjaGluZywgdGhlIGRhdGUgaXMgZmxhZ2dlZCBhcyBub24tdGVtcG9yYWwgKHVubGlrZWx5IHRvIGJlIHVzZWQgYWdhaW4KKy8vLyAgICBzb29uKS4gRXhjZXB0aW9uIGFuZCB0cmFwIGJlaGF2aW9yIGZvciBlbGVtZW50cyBub3Qgc2VsZWN0ZWQgZm9yIHN0b3JhZ2UKKy8vLyAgICB0byBtZW1vcnkgYXJlIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTUFTS01PVkRRVSAvIE1BU0tNT1ZEUVUgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19kCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byBiZSBtb3ZlZC4KKy8vLyBccGFyYW0gX19uCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG1hc2suIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZgorLy8vICAgIGVhY2ggYnl0ZSByZXByZXNlbnRzIHRoZSBtYXNrIGJpdHMuCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byBhbiB1bmFsaWduZWQgMTI4LWJpdCBtZW1vcnkgbG9jYXRpb24gd2hlcmUgdGhlIHNwZWNpZmllZAorLy8vICAgIHZhbHVlcyBhcmUgbW92ZWQuCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2ttb3ZldV9zaTEyOChfX20xMjhpIF9fZCwgX19tMTI4aSBfX24sIGNoYXIgKl9fcCkKK3sKKyAgX19idWlsdGluX2lhMzJfbWFza21vdmRxdSgoX192MTZxaSlfX2QsIChfX3YxNnFpKV9fbiwgX19wKTsKK30KKworLy8vIFxicmllZiBTdG9yZXMgdGhlIGxvd2VyIDY0IGJpdHMgb2YgYSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTY0XSB0bworLy8vICAgIGEgbWVtb3J5IGxvY2F0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZMUFMgLyBNT1ZMUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIGEgNjQtYml0IG1lbW9yeSBsb2NhdGlvbiB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgbG93ZXIgNjQgYml0cworLy8vICAgIG9mIHRoZSBpbnRlZ2VyIHZlY3RvciBwYXJhbWV0ZXIuCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGk2NF0uIFRoZSBsb3dlciA2NCBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgdmFsdWUgdG8gYmUgc3RvcmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZWxfZXBpNjQoX19tMTI4aSAqX19wLCBfX20xMjhpIF9fYSkKK3sKKyAgc3RydWN0IF9fbW1fc3RvcmVsX2VwaTY0X3N0cnVjdCB7CisgICAgbG9uZyBsb25nIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgICgoc3RydWN0IF9fbW1fc3RvcmVsX2VwaTY0X3N0cnVjdCopX19wKS0+X191ID0gX19hWzBdOworfQorCisvLy8gXGJyaWVmIFN0b3JlcyBhIDEyOC1iaXQgZmxvYXRpbmcgcG9pbnQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSB0byBhIDEyOC1iaXQKKy8vLyAgICBhbGlnbmVkIG1lbW9yeSBsb2NhdGlvbi4gVG8gbWluaW1pemUgY2FjaGluZywgdGhlIGRhdGEgaXMgZmxhZ2dlZCBhcworLy8vICAgIG5vbi10ZW1wb3JhbCAodW5saWtlbHkgdG8gYmUgdXNlZCBhZ2FpbiBzb29uKS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WTlRQUyAvIE1PVk5UUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIHRoZSAxMjgtYml0IGFsaWduZWQgbWVtb3J5IGxvY2F0aW9uIHVzZWQgdG8gc3RvcmUgdGhlIHZhbHVlLgorLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgNjQtYml0IHZhbHVlcyB0byBiZSBzdG9yZWQuCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0cmVhbV9wZChkb3VibGUgKl9fcCwgX19tMTI4ZCBfX2EpCit7CisgIF9fYnVpbHRpbl9ub250ZW1wb3JhbF9zdG9yZSgoX192MmRmKV9fYSwgKF9fdjJkZiopX19wKTsKK30KKworLy8vIFxicmllZiBTdG9yZXMgYSAxMjgtYml0IGludGVnZXIgdmVjdG9yIHRvIGEgMTI4LWJpdCBhbGlnbmVkIG1lbW9yeSBsb2NhdGlvbi4KKy8vLyAgICBUbyBtaW5pbWl6ZSBjYWNoaW5nLCB0aGUgZGF0YSBpcyBmbGFnZ2VkIGFzIG5vbi10ZW1wb3JhbCAodW5saWtlbHkgdG8gYmUKKy8vLyAgICB1c2VkIGFnYWluIHNvb24pLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZOVFBTIC8gTU9WTlRQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3AKKy8vLyAgICBBIHBvaW50ZXIgdG8gdGhlIDEyOC1iaXQgYWxpZ25lZCBtZW1vcnkgbG9jYXRpb24gdXNlZCB0byBzdG9yZSB0aGUgdmFsdWUuCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gYmUgc3RvcmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdHJlYW1fc2kxMjgoX19tMTI4aSAqX19wLCBfX20xMjhpIF9fYSkKK3sKKyAgX19idWlsdGluX25vbnRlbXBvcmFsX3N0b3JlKChfX3YyZGkpX19hLCAoX192MmRpKilfX3ApOworfQorCisvLy8gXGJyaWVmIFN0b3JlcyBhIDMyLWJpdCBpbnRlZ2VyIHZhbHVlIGluIHRoZSBzcGVjaWZpZWQgbWVtb3J5IGxvY2F0aW9uLiBUbworLy8vICAgIG1pbmltaXplIGNhY2hpbmcsIHRoZSBkYXRhIGlzIGZsYWdnZWQgYXMgbm9uLXRlbXBvcmFsICh1bmxpa2VseSB0byBiZQorLy8vICAgIHVzZWQgYWdhaW4gc29vbikuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgTU9WTlRJIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byB0aGUgMzItYml0IG1lbW9yeSBsb2NhdGlvbiB1c2VkIHRvIHN0b3JlIHRoZSB2YWx1ZS4KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAzMi1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSB2YWx1ZSB0byBiZSBzdG9yZWQuCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0cmVhbV9zaTMyKGludCAqX19wLCBpbnQgX19hKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZudGkoX19wLCBfX2EpOworfQorCisjaWZkZWYgX194ODZfNjRfXworLy8vIFxicmllZiBTdG9yZXMgYSA2NC1iaXQgaW50ZWdlciB2YWx1ZSBpbiB0aGUgc3BlY2lmaWVkIG1lbW9yeSBsb2NhdGlvbi4gVG8KKy8vLyAgICBtaW5pbWl6ZSBjYWNoaW5nLCB0aGUgZGF0YSBpcyBmbGFnZ2VkIGFzIG5vbi10ZW1wb3JhbCAodW5saWtlbHkgdG8gYmUKKy8vLyAgICB1c2VkIGFnYWluIHNvb24pLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIE1PVk5USVEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIHRoZSA2NC1iaXQgbWVtb3J5IGxvY2F0aW9uIHVzZWQgdG8gc3RvcmUgdGhlIHZhbHVlLgorLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHZhbHVlIHRvIGJlIHN0b3JlZC4KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RyZWFtX3NpNjQobG9uZyBsb25nICpfX3AsIGxvbmcgbG9uZyBfX2EpCit7CisgIF9fYnVpbHRpbl9pYTMyX21vdm50aTY0KF9fcCwgX19hKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8vLyBcYnJpZWYgVGhlIGNhY2hlIGxpbmUgY29udGFpbmluZyBfX3AgaXMgZmx1c2hlZCBhbmQgaW52YWxpZGF0ZWQgZnJvbSBhbGwKKy8vLyAgICBjYWNoZXMgaW4gdGhlIGNvaGVyZW5jeSBkb21haW4uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQ0xGTFVTSCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3AKKy8vLyAgICBBIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBsb2NhdGlvbiB1c2VkIHRvIGlkZW50aWZ5IHRoZSBjYWNoZSBsaW5lIHRvIGJlCisvLy8gICAgZmx1c2hlZC4KK3ZvaWQgX21tX2NsZmx1c2godm9pZCBjb25zdCAqKTsKKworLy8vIFxicmllZiBGb3JjZXMgc3Ryb25nIG1lbW9yeSBvcmRlcmluZyAoc2VyaWFsaXphdGlvbikgYmV0d2VlbiBsb2FkCisvLy8gICAgaW5zdHJ1Y3Rpb25zIHByZWNlZGluZyB0aGlzIGluc3RydWN0aW9uIGFuZCBsb2FkIGluc3RydWN0aW9ucyBmb2xsb3dpbmcKKy8vLyAgICB0aGlzIGluc3RydWN0aW9uLCBlbnN1cmluZyB0aGUgc3lzdGVtIGNvbXBsZXRlcyBhbGwgcHJldmlvdXMgbG9hZHMgYmVmb3JlCisvLy8gICAgZXhlY3V0aW5nIHN1YnNlcXVlbnQgbG9hZHMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgTEZFTkNFIGluc3RydWN0aW9uLgorLy8vCit2b2lkIF9tbV9sZmVuY2Uodm9pZCk7CisKKy8vLyBcYnJpZWYgRm9yY2VzIHN0cm9uZyBtZW1vcnkgb3JkZXJpbmcgKHNlcmlhbGl6YXRpb24pIGJldHdlZW4gbG9hZCBhbmQgc3RvcmUKKy8vLyAgICBpbnN0cnVjdGlvbnMgcHJlY2VkaW5nIHRoaXMgaW5zdHJ1Y3Rpb24gYW5kIGxvYWQgYW5kIHN0b3JlIGluc3RydWN0aW9ucworLy8vICAgIGZvbGxvd2luZyB0aGlzIGluc3RydWN0aW9uLCBlbnN1cmluZyB0aGF0IHRoZSBzeXN0ZW0gY29tcGxldGVzIGFsbAorLy8vICAgIHByZXZpb3VzIG1lbW9yeSBhY2Nlc3NlcyBiZWZvcmUgZXhlY3V0aW5nIHN1YnNlcXVlbnQgbWVtb3J5IGFjY2Vzc2VzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIE1GRU5DRSBpbnN0cnVjdGlvbi4KKy8vLwordm9pZCBfbW1fbWZlbmNlKHZvaWQpOworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30gLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKy8vLyBcYnJpZWYgQ29udmVydHMgMTYtYml0IHNpZ25lZCBpbnRlZ2VycyBmcm9tIGJvdGggMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcgorLy8vICAgIG9wZXJhbmRzIGludG8gOC1iaXQgc2lnbmVkIGludGVnZXJzLCBhbmQgcGFja3MgdGhlIHJlc3VsdHMgaW50byB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4gUG9zaXRpdmUgdmFsdWVzIGdyZWF0ZXIgdGhhbiAweDdGIGFyZSBzYXR1cmF0ZWQgdG8gMHg3Ri4KKy8vLyAgICBOZWdhdGl2ZSB2YWx1ZXMgbGVzcyB0aGFuIDB4ODAgYXJlIHNhdHVyYXRlZCB0byAweDgwLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQQUNLU1NXQiAvIFBBQ0tTU1dCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaTE2XS4gRWFjaCAxNi1iaXQgZWxlbWVudCBpcyB0cmVhdGVkIGFzCisvLy8gICBhIHNpZ25lZCBpbnRlZ2VyIGFuZCBpcyBjb252ZXJ0ZWQgdG8gYSA4LWJpdCBzaWduZWQgaW50ZWdlciB3aXRoCisvLy8gICBzYXR1cmF0aW9uLiBWYWx1ZXMgZ3JlYXRlciB0aGFuIDB4N0YgYXJlIHNhdHVyYXRlZCB0byAweDdGLiBWYWx1ZXMgbGVzcworLy8vICAgdGhhbiAweDgwIGFyZSBzYXR1cmF0ZWQgdG8gMHg4MC4gVGhlIGNvbnZlcnRlZCBbOCB4IGk4XSB2YWx1ZXMgYXJlCisvLy8gICB3cml0dGVuIHRvIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaTE2XS4gRWFjaCAxNi1iaXQgZWxlbWVudCBpcyB0cmVhdGVkIGFzCisvLy8gICBhIHNpZ25lZCBpbnRlZ2VyIGFuZCBpcyBjb252ZXJ0ZWQgdG8gYSA4LWJpdCBzaWduZWQgaW50ZWdlciB3aXRoCisvLy8gICBzYXR1cmF0aW9uLiBWYWx1ZXMgZ3JlYXRlciB0aGFuIDB4N0YgYXJlIHNhdHVyYXRlZCB0byAweDdGLiBWYWx1ZXMgbGVzcworLy8vICAgdGhhbiAweDgwIGFyZSBzYXR1cmF0ZWQgdG8gMHg4MC4gVGhlIGNvbnZlcnRlZCBbOCB4IGk4XSB2YWx1ZXMgYXJlCisvLy8gICB3cml0dGVuIHRvIHRoZSBoaWdoZXIgNjQgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzE2IHggaThdIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3BhY2tzX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhY2tzc3diMTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgMzItYml0IHNpZ25lZCBpbnRlZ2VycyBmcm9tIGJvdGggMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcgorLy8vICAgIG9wZXJhbmRzIGludG8gMTYtYml0IHNpZ25lZCBpbnRlZ2VycywgYW5kIHBhY2tzIHRoZSByZXN1bHRzIGludG8gdGhlCisvLy8gICAgZGVzdGluYXRpb24uIFBvc2l0aXZlIHZhbHVlcyBncmVhdGVyIHRoYW4gMHg3RkZGIGFyZSBzYXR1cmF0ZWQgdG8gMHg3RkZGLgorLy8vICAgIE5lZ2F0aXZlIHZhbHVlcyBsZXNzIHRoYW4gMHg4MDAwIGFyZSBzYXR1cmF0ZWQgdG8gMHg4MDAwLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQQUNLU1NEVyAvIFBBQ0tTU0RXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkzMl0uIEVhY2ggMzItYml0IGVsZW1lbnQgaXMgdHJlYXRlZCBhcworLy8vICAgIGEgc2lnbmVkIGludGVnZXIgYW5kIGlzIGNvbnZlcnRlZCB0byBhIDE2LWJpdCBzaWduZWQgaW50ZWdlciB3aXRoCisvLy8gICAgc2F0dXJhdGlvbi4gVmFsdWVzIGdyZWF0ZXIgdGhhbiAweDdGRkYgYXJlIHNhdHVyYXRlZCB0byAweDdGRkYuIFZhbHVlcworLy8vICAgIGxlc3MgdGhhbiAweDgwMDAgYXJlIHNhdHVyYXRlZCB0byAweDgwMDAuIFRoZSBjb252ZXJ0ZWQgWzQgeCBpMTZdIHZhbHVlcworLy8vICAgIGFyZSB3cml0dGVuIHRvIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkzMl0uIEVhY2ggMzItYml0IGVsZW1lbnQgaXMgdHJlYXRlZCBhcworLy8vICAgIGEgc2lnbmVkIGludGVnZXIgYW5kIGlzIGNvbnZlcnRlZCB0byBhIDE2LWJpdCBzaWduZWQgaW50ZWdlciB3aXRoCisvLy8gICAgc2F0dXJhdGlvbi4gVmFsdWVzIGdyZWF0ZXIgdGhhbiAweDdGRkYgYXJlIHNhdHVyYXRlZCB0byAweDdGRkYuIFZhbHVlcworLy8vICAgIGxlc3MgdGhhbiAweDgwMDAgYXJlIHNhdHVyYXRlZCB0byAweDgwMDAuIFRoZSBjb252ZXJ0ZWQgWzQgeCBpMTZdIHZhbHVlcworLy8vICAgIGFyZSB3cml0dGVuIHRvIHRoZSBoaWdoZXIgNjQgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzggeCBpMTZdIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3BhY2tzX2VwaTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhY2tzc2R3MTI4KChfX3Y0c2kpX19hLCAoX192NHNpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgMTYtYml0IHNpZ25lZCBpbnRlZ2VycyBmcm9tIGJvdGggMTI4LWJpdCBpbnRlZ2VyIHZlY3RvcgorLy8vICAgIG9wZXJhbmRzIGludG8gOC1iaXQgdW5zaWduZWQgaW50ZWdlcnMsIGFuZCBwYWNrcyB0aGUgcmVzdWx0cyBpbnRvIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLiBWYWx1ZXMgZ3JlYXRlciB0aGFuIDB4RkYgYXJlIHNhdHVyYXRlZCB0byAweEZGLiBWYWx1ZXMgbGVzcworLy8vICAgIHRoYW4gMHgwMCBhcmUgc2F0dXJhdGVkIHRvIDB4MDAuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBBQ0tVU1dCIC8gUEFDS1VTV0IgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaTE2XS4gRWFjaCAxNi1iaXQgZWxlbWVudCBpcyB0cmVhdGVkIGFzCisvLy8gICAgYSBzaWduZWQgaW50ZWdlciBhbmQgaXMgY29udmVydGVkIHRvIGFuIDgtYml0IHVuc2lnbmVkIGludGVnZXIgd2l0aAorLy8vICAgIHNhdHVyYXRpb24uIFZhbHVlcyBncmVhdGVyIHRoYW4gMHhGRiBhcmUgc2F0dXJhdGVkIHRvIDB4RkYuIFZhbHVlcyBsZXNzCisvLy8gICAgdGhhbiAweDAwIGFyZSBzYXR1cmF0ZWQgdG8gMHgwMC4gVGhlIGNvbnZlcnRlZCBbOCB4IGk4XSB2YWx1ZXMgYXJlCisvLy8gICAgd3JpdHRlbiB0byB0aGUgbG93ZXIgNjQgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpMTZdLiBFYWNoIDE2LWJpdCBlbGVtZW50IGlzIHRyZWF0ZWQgYXMKKy8vLyAgICBhIHNpZ25lZCBpbnRlZ2VyIGFuZCBpcyBjb252ZXJ0ZWQgdG8gYW4gOC1iaXQgdW5zaWduZWQgaW50ZWdlciB3aXRoCisvLy8gICAgc2F0dXJhdGlvbi4gVmFsdWVzIGdyZWF0ZXIgdGhhbiAweEZGIGFyZSBzYXR1cmF0ZWQgdG8gMHhGRi4gVmFsdWVzIGxlc3MKKy8vLyAgICB0aGFuIDB4MDAgYXJlIHNhdHVyYXRlZCB0byAweDAwLiBUaGUgY29udmVydGVkIFs4IHggaThdIHZhbHVlcyBhcmUKKy8vLyAgICB3cml0dGVuIHRvIHRoZSBoaWdoZXIgNjQgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzE2IHggaThdIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3BhY2t1c19lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWNrdXN3YjEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEV4dHJhY3RzIDE2IGJpdHMgZnJvbSBhIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpMTZdLCB1c2luZworLy8vICAgIHRoZSBpbW1lZGlhdGUtdmFsdWUgcGFyYW1ldGVyIGFzIGEgc2VsZWN0b3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBFWFRSVyAvIFBFWFRSVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHBhcmFtIF9faW1tCisvLy8gICAgQW4gaW1tZWRpYXRlIHZhbHVlLiBCaXRzIFszOjBdIHNlbGVjdHMgdmFsdWVzIGZyb20gX19hIHRvIGJlIGFzc2lnbmVkIHRvCisvLy8gICAgYml0c1sxNTowXSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIDAwMDogYXNzaWduIHZhbHVlcyBmcm9tIGJpdHMgWzE1OjBdIG9mIF9fYS4KKy8vLyAgICAwMDE6IGFzc2lnbiB2YWx1ZXMgZnJvbSBiaXRzIFszMToxNl0gb2YgX19hLgorLy8vICAgIDAxMDogYXNzaWduIHZhbHVlcyBmcm9tIGJpdHMgWzQ3OjMyXSBvZiBfX2EuCisvLy8gICAgMDExOiBhc3NpZ24gdmFsdWVzIGZyb20gYml0cyBbNjM6NDhdIG9mIF9fYS4KKy8vLyAgICAxMDA6IGFzc2lnbiB2YWx1ZXMgZnJvbSBiaXRzIFs3OTo2NF0gb2YgX19hLgorLy8vICAgIDEwMTogYXNzaWduIHZhbHVlcyBmcm9tIGJpdHMgWzk1OjgwXSBvZiBfX2EuCisvLy8gICAgMTEwOiBhc3NpZ24gdmFsdWVzIGZyb20gYml0cyBbMTExOjk2XSBvZiBfX2EuCisvLy8gICAgMTExOiBhc3NpZ24gdmFsdWVzIGZyb20gYml0cyBbMTI3OjExMl0gb2YgX19hLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIsIHdob3NlIGxvd2VyIDE2IGJpdHMgYXJlIHNlbGVjdGVkIGZyb20gdGhlIDEyOC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvciBwYXJhbWV0ZXIgYW5kIHRoZSByZW1haW5pbmcgYml0cyBhcmUgYXNzaWduZWQgemVyb3MuCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZXh0cmFjdF9lcGkxNihfX20xMjhpIF9fYSwgaW50IF9faW1tKQoreworICBfX3Y4aGkgX19iID0gKF9fdjhoaSlfX2E7CisgIHJldHVybiAodW5zaWduZWQgc2hvcnQpX19iW19faW1tICYgN107Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgYnkgZmlyc3QgbWFraW5nIGEgY29weSBvZiB0aGUKKy8vLyAgICAxMjgtYml0IGludGVnZXIgdmVjdG9yIHBhcmFtZXRlciwgYW5kIHRoZW4gaW5zZXJ0aW5nIHRoZSBsb3dlciAxNiBiaXRzCisvLy8gICAgb2YgYW4gaW50ZWdlciBwYXJhbWV0ZXIgaW50byBhbiBvZmZzZXQgc3BlY2lmaWVkIGJ5IHRoZSBpbW1lZGlhdGUtdmFsdWUKKy8vLyAgICBwYXJhbWV0ZXIuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBJTlNSVyAvIFBJTlNSVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpMTZdLiBUaGlzIHZlY3RvciBpcyBjb3BpZWQgdG8gdGhlCisvLy8gICAgcmVzdWx0IGFuZCB0aGVuIG9uZSBvZiB0aGUgZWlnaHQgZWxlbWVudHMgaW4gdGhlIHJlc3VsdCBpcyByZXBsYWNlZCBieQorLy8vICAgIHRoZSBsb3dlciAxNiBiaXRzIG9mIF9fYi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQW4gaW50ZWdlci4gVGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhpcyBwYXJhbWV0ZXIgYXJlIHdyaXR0ZW4gdG8gdGhlCisvLy8gICAgcmVzdWx0IGJlZ2lubmluZyBhdCBhbiBvZmZzZXQgc3BlY2lmaWVkIGJ5IF9faW1tLgorLy8vIFxwYXJhbSBfX2ltbQorLy8vICAgIEFuIGltbWVkaWF0ZSB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBiaXQgb2Zmc2V0IGluIHRoZSByZXN1bHQgYXQgd2hpY2ggdGhlCisvLy8gICAgbG93ZXIgMTYgYml0cyBvZl9fYiBhcmUgd3JpdHRlbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29uc3RydWN0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9pbnNlcnRfZXBpMTYoX19tMTI4aSBfX2EsIGludCBfX2IsIGludCBfX2ltbSkKK3sKKyAgX192OGhpIF9fYyA9IChfX3Y4aGkpX19hOworICBfX2NbX19pbW0gJiA3XSA9IF9fYjsKKyAgcmV0dXJuIChfX20xMjhpKV9fYzsKK30KKworLy8vIFxicmllZiBDb3BpZXMgdGhlIHZhbHVlcyBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gZWFjaCA4LWJpdAorLy8vICAgIGVsZW1lbnQgaW4gYSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9mIFsxNiB4IGk4XSB0byBjcmVhdGUgYSAxNi1iaXQgbWFzaworLy8vICAgIHZhbHVlLCB6ZXJvLWV4dGVuZHMgdGhlIHZhbHVlLCBhbmQgd3JpdGVzIGl0IHRvIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUE1PVk1TS0IgLyBQTU9WTVNLQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHdpdGggYml0cyB0byBiZSBleHRyYWN0ZWQuCisvLy8gXHJldHVybnMgVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGVhY2ggOC1iaXQgZWxlbWVudCBpbiBfX2EsIHdyaXR0ZW4KKy8vLyAgICB0byBiaXRzIFsxNTowXS4gVGhlIG90aGVyIGJpdHMgYXJlIGFzc2lnbmVkIHplcm9zLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdmVtYXNrX2VwaTgoX19tMTI4aSBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wbW92bXNrYjEyOCgoX192MTZxaSlfX2EpOworfQorCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGJ5IHNodWZmbGluZyBmb3VyIDMyLWJpdAorLy8vICAgIGVsZW1lbnRzIG9mIGEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBwYXJhbWV0ZXIsIHVzaW5nIHRoZSBpbW1lZGlhdGUtdmFsdWUKKy8vLyAgICBwYXJhbWV0ZXIgYXMgYSBzcGVjaWZpZXIuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTEyOGkgX21tX3NodWZmbGVfZXBpMzIoX19tMTI4aSBhLCBjb25zdCBpbnQgaW1tKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQU0hVRkQgLyBQU0hVRkQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gYmUgY29waWVkLgorLy8vIFxwYXJhbSBpbW0KKy8vLyAgICBBbiBpbW1lZGlhdGUgdmFsdWUgY29udGFpbmluZyBhbiA4LWJpdCB2YWx1ZSBzcGVjaWZ5aW5nIHdoaWNoIGVsZW1lbnRzIHRvCisvLy8gICAgY29weSBmcm9tIGEuIFRoZSBkZXN0aW5hdGlvbnMgd2l0aGluIHRoZSAxMjgtYml0IGRlc3RpbmF0aW9uIGFyZSBhc3NpZ25lZAorLy8vICAgIHZhbHVlcyBhcyBmb2xsb3dzOgorLy8vICAgIEJpdHMgWzE6MF0gYXJlIHVzZWQgdG8gYXNzaWduIHZhbHVlcyB0byBiaXRzIFszMTowXSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzM6Ml0gYXJlIHVzZWQgdG8gYXNzaWduIHZhbHVlcyB0byBiaXRzIFs2MzozMl0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFs1OjRdIGFyZSB1c2VkIHRvIGFzc2lnbiB2YWx1ZXMgdG8gYml0cyBbOTU6NjRdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbNzo2XSBhcmUgdXNlZCB0byBhc3NpZ24gdmFsdWVzIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXQgdmFsdWUgYXNzaWdubWVudHM6CisvLy8gICAgMDA6IGFzc2lnbiB2YWx1ZXMgZnJvbSBiaXRzIFszMTowXSBvZiBhLgorLy8vICAgIDAxOiBhc3NpZ24gdmFsdWVzIGZyb20gYml0cyBbNjM6MzJdIG9mIGEuCisvLy8gICAgMTA6IGFzc2lnbiB2YWx1ZXMgZnJvbSBiaXRzIFs5NTo2NF0gb2YgYS4KKy8vLyAgICAxMTogYXNzaWduIHZhbHVlcyBmcm9tIGJpdHMgWzEyNzo5Nl0gb2YgYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc2h1ZmZsZWQgdmFsdWVzLgorI2RlZmluZSBfbW1fc2h1ZmZsZV9lcGkzMihhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgPj4gMCkgJiAweDMsICgoaW1tKSA+PiAyKSAmIDB4MywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgPj4gNCkgJiAweDMsICgoaW1tKSA+PiA2KSAmIDB4Myk7IH0pCisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgYnkgc2h1ZmZsaW5nIGZvdXIgbG93ZXIgMTYtYml0CisvLy8gICAgZWxlbWVudHMgb2YgYSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaTE2XSwgdXNpbmcgdGhlIGltbWVkaWF0ZQorLy8vICAgIHZhbHVlIHBhcmFtZXRlciBhcyBhIHNwZWNpZmllci4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMTI4aSBfbW1fc2h1ZmZsZWxvX2VwaTE2KF9fbTEyOGkgYSwgY29uc3QgaW50IGltbSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNIVUZMVyAvIFBTSFVGTFcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGkxNl0uIEJpdHMgWzEyNzo2NF0gYXJlIGNvcGllZCB0byBiaXRzCisvLy8gICAgWzEyNzo2NF0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gaW1tCisvLy8gICAgQW4gOC1iaXQgaW1tZWRpYXRlIHZhbHVlIHNwZWNpZnlpbmcgd2hpY2ggZWxlbWVudHMgdG8gY29weSBmcm9tIGEuCisvLy8gICAgQml0c1sxOjBdIGFyZSB1c2VkIHRvIGFzc2lnbiB2YWx1ZXMgdG8gYml0cyBbMTU6MF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzWzM6Ml0gYXJlIHVzZWQgdG8gYXNzaWduIHZhbHVlcyB0byBiaXRzIFszMToxNl0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzWzU6NF0gYXJlIHVzZWQgdG8gYXNzaWduIHZhbHVlcyB0byBiaXRzIFs0NzozMl0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzWzc6Nl0gYXJlIHVzZWQgdG8gYXNzaWduIHZhbHVlcyB0byBiaXRzIFs2Mzo0OF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXQgdmFsdWUgYXNzaWdubWVudHM6CisvLy8gICAgMDA6IGFzc2lnbiB2YWx1ZXMgZnJvbSBiaXRzIFsxNTowXSBvZiBhLgorLy8vICAgIDAxOiBhc3NpZ24gdmFsdWVzIGZyb20gYml0cyBbMzE6MTZdIG9mIGEuCisvLy8gICAgMTA6IGFzc2lnbiB2YWx1ZXMgZnJvbSBiaXRzIFs0NzozMl0gb2YgYS4KKy8vLyAgICAxMTogYXNzaWduIHZhbHVlcyBmcm9tIGJpdHMgWzYzOjQ4XSBvZiBhLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzaHVmZmxlZCB2YWx1ZXMuCisjZGVmaW5lIF9tbV9zaHVmZmxlbG9fZXBpMTYoYSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pID4+IDApICYgMHgzLCAoKGltbSkgPj4gMikgJiAweDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pID4+IDQpICYgMHgzLCAoKGltbSkgPj4gNikgJiAweDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgNSwgNiwgNyk7IH0pCisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgYnkgc2h1ZmZsaW5nIGZvdXIgdXBwZXIgMTYtYml0CisvLy8gICAgZWxlbWVudHMgb2YgYSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaTE2XSwgdXNpbmcgdGhlIGltbWVkaWF0ZQorLy8vICAgIHZhbHVlIHBhcmFtZXRlciBhcyBhIHNwZWNpZmllci4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMTI4aSBfbW1fc2h1ZmZsZWhpX2VwaTE2KF9fbTEyOGkgYSwgY29uc3QgaW50IGltbSk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNIVUZIVyAvIFBTSFVGSFcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGkxNl0uIEJpdHMgWzYzOjBdIGFyZSBjb3BpZWQgdG8gYml0cworLy8vICAgIFs2MzowXSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBpbW0KKy8vLyAgICBBbiA4LWJpdCBpbW1lZGlhdGUgdmFsdWUgc3BlY2lmeWluZyB3aGljaCBlbGVtZW50cyB0byBjb3B5IGZyb20gYS4KKy8vLyAgICBCaXRzWzE6MF0gYXJlIHVzZWQgdG8gYXNzaWduIHZhbHVlcyB0byBiaXRzIFs3OTo2NF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzWzM6Ml0gYXJlIHVzZWQgdG8gYXNzaWduIHZhbHVlcyB0byBiaXRzIFs5NTo4MF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzWzU6NF0gYXJlIHVzZWQgdG8gYXNzaWduIHZhbHVlcyB0byBiaXRzIFsxMTE6OTZdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0c1s3OjZdIGFyZSB1c2VkIHRvIGFzc2lnbiB2YWx1ZXMgdG8gYml0cyBbMTI3OjExMl0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXQgdmFsdWUgYXNzaWdubWVudHM6CisvLy8gICAgMDA6IGFzc2lnbiB2YWx1ZXMgZnJvbSBiaXRzIFs3OTo2NF0gb2YgYS4KKy8vLyAgICAwMTogYXNzaWduIHZhbHVlcyBmcm9tIGJpdHMgWzk1OjgwXSBvZiBhLgorLy8vICAgIDEwOiBhc3NpZ24gdmFsdWVzIGZyb20gYml0cyBbMTExOjk2XSBvZiBhLgorLy8vICAgIDExOiBhc3NpZ24gdmFsdWVzIGZyb20gYml0cyBbMTI3OjExMl0gb2YgYS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc2h1ZmZsZWQgdmFsdWVzLgorI2RlZmluZSBfbW1fc2h1ZmZsZWhpX2VwaTE2KGEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4aGkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3VuZGVmaW5lZF9zaTEyOCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKGltbSkgPj4gMCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChpbW0pID4+IDIpICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoaW1tKSA+PiA0KSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKGltbSkgPj4gNikgJiAweDMpKTsgfSkKKworLy8vIFxicmllZiBVbnBhY2tzIHRoZSBoaWdoLW9yZGVyIChpbmRleCA4LTE1KSB2YWx1ZXMgZnJvbSB0d28gMTI4LWJpdCB2ZWN0b3JzCisvLy8gICAgb2YgWzE2IHggaThdIGFuZCBpbnRlcmxlYXZlcyB0aGVtIGludG8gYSAxMjgtYml0IHZlY3RvciBvZiBbMTYgeCBpOF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBVTlBDS0hCVyAvIFBVTlBDS0hCVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsxNiB4IGk4XS4KKy8vLyAgICBCaXRzIFs3MTo2NF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNzowXSBvZiB0aGUgcmVzdWx0CisvLy8gICAgQml0cyBbNzk6NzJdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzIzOjE2XSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzg3OjgwXSBhcmUgd3JpdHRlbiB0byBiaXRzIFszOTozMl0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFs5NTo4OF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNTU6NDhdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbMTAzOjk2XSBhcmUgd3JpdHRlbiB0byBiaXRzIFs3MTo2NF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFsxMTE6MTA0XSBhcmUgd3JpdHRlbiB0byBiaXRzIFs4Nzo4MF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFsxMTk6MTEyXSBhcmUgd3JpdHRlbiB0byBiaXRzIFsxMDM6OTZdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbMTI3OjEyMF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMTE5OjExMl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMTYgeCBpOF0uCisvLy8gICAgQml0cyBbNzE6NjRdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzE1OjhdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbNzk6NzJdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzMxOjI0XSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzg3OjgwXSBhcmUgd3JpdHRlbiB0byBiaXRzIFs0Nzo0MF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFs5NTo4OF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNjM6NTZdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbMTAzOjk2XSBhcmUgd3JpdHRlbiB0byBiaXRzIFs3OTo3Ml0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFsxMTE6MTA0XSBhcmUgd3JpdHRlbiB0byBiaXRzIFs5NTo4OF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFsxMTk6MTEyXSBhcmUgd3JpdHRlbiB0byBiaXRzIFsxMTE6MTA0XSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzEyNzoxMjBdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzEyNzoxMjBdIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsxNiB4IGk4XSBjb250YWluaW5nIHRoZSBpbnRlcmxlYXZlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VucGFja2hpX2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDgsIDE2KzgsIDksIDE2KzksIDEwLCAxNisxMCwgMTEsIDE2KzExLCAxMiwgMTYrMTIsIDEzLCAxNisxMywgMTQsIDE2KzE0LCAxNSwgMTYrMTUpOworfQorCisvLy8gXGJyaWVmIFVucGFja3MgdGhlIGhpZ2gtb3JkZXIgKGluZGV4IDQtNykgdmFsdWVzIGZyb20gdHdvIDEyOC1iaXQgdmVjdG9ycyBvZgorLy8vICAgIFs4IHggaTE2XSBhbmQgaW50ZXJsZWF2ZXMgdGhlbSBpbnRvIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzggeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQVU5QQ0tIV0QgLyBQVU5QQ0tIV0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0uCisvLy8gICAgQml0cyBbNzk6NjRdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzE1OjBdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbOTU6ODBdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzQ3OjMyXSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzExMTo5Nl0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNzk6NjRdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbMTI3OjExMl0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMTExOjk2XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs4IHggaTE2XS4KKy8vLyAgICBCaXRzIFs3OTo2NF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMzE6MTZdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbOTU6ODBdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzYzOjQ4XSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzExMTo5Nl0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbOTU6ODBdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbMTI3OjExMl0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMTI3OjExMl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs4IHggaTE2XSBjb250YWluaW5nIHRoZSBpbnRlcmxlYXZlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VucGFja2hpX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgNCwgOCs0LCA1LCA4KzUsIDYsIDgrNiwgNywgOCs3KTsKK30KKworLy8vIFxicmllZiBVbnBhY2tzIHRoZSBoaWdoLW9yZGVyIChpbmRleCAyLDMpIHZhbHVlcyBmcm9tIHR3byAxMjgtYml0IHZlY3RvcnMgb2YKKy8vLyAgICBbNCB4IGkzMl0gYW5kIGludGVybGVhdmVzIHRoZW0gaW50byBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggaTMyXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFVOUENLSERRIC8gUFVOUENLSERRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMzJdLgorLy8vICAgIEJpdHMgWzk1OjY0XSBhcmUgd3JpdHRlbiB0byBiaXRzIFszMTowXSBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbMTI3Ojk2XSBhcmUgd3JpdHRlbiB0byBiaXRzIFs5NTo2NF0gb2YgdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggaTMyXS4KKy8vLyAgICBCaXRzIFs5NTo2NF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNjQ6MzJdIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXRzIFsxMjc6OTZdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMzJdIGNvbnRhaW5pbmcgdGhlIGludGVybGVhdmVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNraGlfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAyLCA0KzIsIDMsIDQrMyk7Cit9CisKKy8vLyBcYnJpZWYgVW5wYWNrcyB0aGUgaGlnaC1vcmRlciAob2RkLWluZGV4ZWQpIHZhbHVlcyBmcm9tIHR3byAxMjgtYml0IHZlY3RvcnMKKy8vLyAgICBvZiBbMiB4IGk2NF0gYW5kIGludGVybGVhdmVzIHRoZW0gaW50byBhIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggaTY0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFVOUENLSFFEUSAvIFBVTlBDS0hRRFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGk2NF0uCisvLy8gICAgQml0cyBbMTI3OjY0XSBhcmUgd3JpdHRlbiB0byBiaXRzIFs2MzowXSBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBpNjRdLgorLy8vICAgIEJpdHMgWzEyNzo2NF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMTI3OjY0XSBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGk2NF0gY29udGFpbmluZyB0aGUgaW50ZXJsZWF2ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2toaV9lcGk2NChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDEsIDIrMSk7Cit9CisKKy8vLyBcYnJpZWYgVW5wYWNrcyB0aGUgbG93LW9yZGVyIChpbmRleCAwLTcpIHZhbHVlcyBmcm9tIHR3byAxMjgtYml0IHZlY3RvcnMgb2YKKy8vLyAgICBbMTYgeCBpOF0gYW5kIGludGVybGVhdmVzIHRoZW0gaW50byBhIDEyOC1iaXQgdmVjdG9yIG9mIFsxNiB4IGk4XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFVOUENLTEJXIC8gUFVOUENLTEJXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzE2IHggaThdLgorLy8vICAgIEJpdHMgWzc6MF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNzowXSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzE1OjhdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzIzOjE2XSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzIzOjE2XSBhcmUgd3JpdHRlbiB0byBiaXRzIFszOTozMl0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFszMToyNF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNTU6NDhdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbMzk6MzJdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzcxOjY0XSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzQ3OjQwXSBhcmUgd3JpdHRlbiB0byBiaXRzIFs4Nzo4MF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFs1NTo0OF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMTAzOjk2XSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzYzOjU2XSBhcmUgd3JpdHRlbiB0byBiaXRzIFsxMTk6MTEyXSBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzE2IHggaThdLgorLy8vICAgIEJpdHMgWzc6MF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMTU6OF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFsxNTo4XSBhcmUgd3JpdHRlbiB0byBiaXRzIFszMToyNF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFsyMzoxNl0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNDc6NDBdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbMzE6MjRdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzYzOjU2XSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzM5OjMyXSBhcmUgd3JpdHRlbiB0byBiaXRzIFs3OTo3Ml0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFs0Nzo0MF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbOTU6ODhdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbNTU6NDhdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzExMToxMDRdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbNjM6NTZdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzEyNzoxMjBdIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMTYgeCBpOF0gY29udGFpbmluZyB0aGUgaW50ZXJsZWF2ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2tsb19lcGk4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCAwLCAxNiswLCAxLCAxNisxLCAyLCAxNisyLCAzLCAxNiszLCA0LCAxNis0LCA1LCAxNis1LCA2LCAxNis2LCA3LCAxNis3KTsKK30KKworLy8vIFxicmllZiBVbnBhY2tzIHRoZSBsb3ctb3JkZXIgKGluZGV4IDAtMykgdmFsdWVzIGZyb20gZWFjaCBvZiB0aGUgdHdvIDEyOC1iaXQKKy8vLyAgICB2ZWN0b3JzIG9mIFs4IHggaTE2XSBhbmQgaW50ZXJsZWF2ZXMgdGhlbSBpbnRvIGEgMTI4LWJpdCB2ZWN0b3Igb2YKKy8vLyAgICBbOCB4IGkxNl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBVTlBDS0xXRCAvIFBVTlBDS0xXRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs4IHggaTE2XS4KKy8vLyAgICBCaXRzIFsxNTowXSBhcmUgd3JpdHRlbiB0byBiaXRzIFsxNTowXSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzMxOjE2XSBhcmUgd3JpdHRlbiB0byBiaXRzIFs0NzozMl0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFs0NzozMl0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNzk6NjRdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbNjM6NDhdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzExMTo5Nl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0uCisvLy8gICAgQml0cyBbMTU6MF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMzE6MTZdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbMzE6MTZdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzYzOjQ4XSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzQ3OjMyXSBhcmUgd3JpdHRlbiB0byBiaXRzIFs5NTo4MF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFs2Mzo0OF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMTI3OjExMl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs4IHggaTE2XSBjb250YWluaW5nIHRoZSBpbnRlcmxlYXZlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VucGFja2xvX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgMCwgOCswLCAxLCA4KzEsIDIsIDgrMiwgMywgOCszKTsKK30KKworLy8vIFxicmllZiBVbnBhY2tzIHRoZSBsb3ctb3JkZXIgKGluZGV4IDAsMSkgdmFsdWVzIGZyb20gdHdvIDEyOC1iaXQgdmVjdG9ycyBvZgorLy8vICAgIFs0IHggaTMyXSBhbmQgaW50ZXJsZWF2ZXMgdGhlbSBpbnRvIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQVU5QQ0tMRFEgLyBQVU5QQ0tMRFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGkzMl0uCisvLy8gICAgQml0cyBbMzE6MF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMzE6MF0gb2YgdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIEJpdHMgWzYzOjMyXSBhcmUgd3JpdHRlbiB0byBiaXRzIFs5NTo2NF0gb2YgdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggaTMyXS4KKy8vLyAgICBCaXRzIFszMTowXSBhcmUgd3JpdHRlbiB0byBiaXRzIFs2NDozMl0gb2YgdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIEJpdHMgWzYzOjMyXSBhcmUgd3JpdHRlbiB0byBiaXRzIFsxMjc6OTZdIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggaTMyXSBjb250YWluaW5nIHRoZSBpbnRlcmxlYXZlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VucGFja2xvX2VwaTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMCwgNCswLCAxLCA0KzEpOworfQorCisvLy8gXGJyaWVmIFVucGFja3MgdGhlIGxvdy1vcmRlciA2NC1iaXQgZWxlbWVudHMgZnJvbSB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mCisvLy8gICAgWzIgeCBpNjRdIGFuZCBpbnRlcmxlYXZlcyB0aGVtIGludG8gYSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGk2NF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBVTlBDS0xRRFEgLyBQVU5QQ0tMUURRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBpNjRdLgorLy8vICAgIEJpdHMgWzYzOjBdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzYzOjBdIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGk2NF0uCisvLy8gICAgQml0cyBbNjM6MF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMTI3OjY0XSBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGk2NF0gY29udGFpbmluZyB0aGUgaW50ZXJsZWF2ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2tsb19lcGk2NChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDAsIDIrMCk7Cit9CisKKy8vLyBcYnJpZWYgUmV0dXJucyB0aGUgbG93ZXIgNjQgYml0cyBvZiBhIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgYXMgYSA2NC1iaXQKKy8vLyAgICBpbnRlZ2VyLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaGFzIG5vIGNvcnJlc3BvbmRpbmcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQuIFRoZSBsb3dlciA2NCBiaXRzIGFyZSBtb3ZlZCB0byB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGxvd2VyIDY0IGJpdHMgb2YgdGhlIHBhcmFtZXRlci4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdmVwaTY0X3BpNjQoX19tMTI4aSBfX2EpCit7CisgIHJldHVybiAoX19tNjQpX19hWzBdOworfQorCisvLy8gXGJyaWVmIE1vdmVzIHRoZSA2NC1iaXQgb3BlcmFuZCB0byBhIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IsIHplcm9pbmcgdGhlCisvLy8gICAgdXBwZXIgYml0cy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WUSAvIE1PVlEgLyBNT1ZEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IHZhbHVlLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3Rvci4gVGhlIGxvd2VyIDY0IGJpdHMgY29udGFpbiB0aGUgdmFsdWUgZnJvbQorLy8vICAgIHRoZSBvcGVyYW5kLiBUaGUgdXBwZXIgNjQgYml0cyBhcmUgYXNzaWduZWQgemVyb3MuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdnBpNjRfZXBpNjQoX19tNjQgX19hKQoreworICByZXR1cm4gKF9fbTEyOGkpeyAobG9uZyBsb25nKV9fYSwgMCB9OworfQorCisvLy8gXGJyaWVmIE1vdmVzIHRoZSBsb3dlciA2NCBiaXRzIG9mIGEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciB0byBhIDEyOC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvciwgemVyb2luZyB0aGUgdXBwZXIgYml0cy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WUSAvIE1PVlEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQuIFRoZSBsb3dlciA2NCBiaXRzIGFyZSBtb3ZlZCB0byB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IuIFRoZSBsb3dlciA2NCBiaXRzIGNvbnRhaW4gdGhlIHZhbHVlIGZyb20KKy8vLyAgICB0aGUgb3BlcmFuZC4gVGhlIHVwcGVyIDY0IGJpdHMgYXJlIGFzc2lnbmVkIHplcm9zLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlX2VwaTY0KF9fbTEyOGkgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjJkaSlfX2EsIChfX20xMjhpKXsgMCB9LCAwLCAyKTsKK30KKworLy8vIFxicmllZiBVbnBhY2tzIHRoZSBoaWdoLW9yZGVyIChvZGQtaW5kZXhlZCkgdmFsdWVzIGZyb20gdHdvIDEyOC1iaXQgdmVjdG9ycworLy8vICAgIG9mIFsyIHggZG91YmxlXSBhbmQgaW50ZXJsZWF2ZXMgdGhlbSBpbnRvIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeAorLy8vICAgIGRvdWJsZV0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlVOUENLSFBEIC8gVU5QQ0tIUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gICAgQml0cyBbMTI3OjY0XSBhcmUgd3JpdHRlbiB0byBiaXRzIFs2MzowXSBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vICAgIEJpdHMgWzEyNzo2NF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMTI3OjY0XSBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgaW50ZXJsZWF2ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2toaV9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRmKV9fYSwgKF9fdjJkZilfX2IsIDEsIDIrMSk7Cit9CisKKy8vLyBcYnJpZWYgVW5wYWNrcyB0aGUgbG93LW9yZGVyIChldmVuLWluZGV4ZWQpIHZhbHVlcyBmcm9tIHR3byAxMjgtYml0IHZlY3RvcnMKKy8vLyAgICBvZiBbMiB4IGRvdWJsZV0gYW5kIGludGVybGVhdmVzIHRoZW0gaW50byBhIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHgKKy8vLyAgICBkb3VibGVdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZVTlBDS0xQRCAvIFVOUENLTFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vICAgIEJpdHMgWzYzOjBdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzYzOjBdIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gICAgQml0cyBbNjM6MF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMTI3OjY0XSBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgaW50ZXJsZWF2ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2tsb19wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRmKV9fYSwgKF9fdjJkZilfX2IsIDAsIDIrMCk7Cit9CisKKy8vLyBcYnJpZWYgRXh0cmFjdHMgdGhlIHNpZ24gYml0cyBvZiB0aGUgZG91YmxlLXByZWNpc2lvbiB2YWx1ZXMgaW4gdGhlIDEyOC1iaXQKKy8vLyAgICB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLCB6ZXJvLWV4dGVuZHMgdGhlIHZhbHVlLCBhbmQgd3JpdGVzIGl0IHRvIHRoZQorLy8vICAgIGxvdy1vcmRlciBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WTVNLUEQgLyBNT1ZNU0tQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSB2YWx1ZXMgd2l0aCBzaWduIGJpdHMgdG8KKy8vLyAgICBiZSBleHRyYWN0ZWQuCisvLy8gXHJldHVybnMgVGhlIHNpZ24gYml0cyBmcm9tIGVhY2ggb2YgdGhlIGRvdWJsZS1wcmVjaXNpb24gZWxlbWVudHMgaW4gX19hLAorLy8vICAgIHdyaXR0ZW4gdG8gYml0cyBbMTowXS4gVGhlIHJlbWFpbmluZyBiaXRzIGFyZSBhc3NpZ25lZCB2YWx1ZXMgb2YgemVyby4KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlbWFza19wZChfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21vdm1za3BkKChfX3YyZGYpX19hKTsKK30KKworCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gZnJvbSB0d28KKy8vLyAgICAxMjgtYml0IHZlY3RvciBwYXJhbWV0ZXJzIG9mIFsyIHggZG91YmxlXSwgdXNpbmcgdGhlIGltbWVkaWF0ZS12YWx1ZQorLy8vICAgICBwYXJhbWV0ZXIgYXMgYSBzcGVjaWZpZXIuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTEyOGQgX21tX3NodWZmbGVfcGQoX19tMTI4ZCBhLCBfX20xMjhkIGIsIGNvbnN0IGludCBpKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZTSFVGUEQgLyBTSFVGUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vIFxwYXJhbSBiCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8gXHBhcmFtIGkKKy8vLyAgICBBbiA4LWJpdCBpbW1lZGlhdGUgdmFsdWUuIFRoZSBsZWFzdCBzaWduaWZpY2FudCB0d28gYml0cyBzcGVjaWZ5IHdoaWNoCisvLy8gICAgZWxlbWVudHMgdG8gY29weSBmcm9tIGEgYW5kIGI6CisvLy8gICAgQml0WzBdID0gMDogbG93ZXIgZWxlbWVudCBvZiBhIGNvcGllZCB0byBsb3dlciBlbGVtZW50IG9mIHJlc3VsdC4KKy8vLyAgICBCaXRbMF0gPSAxOiB1cHBlciBlbGVtZW50IG9mIGEgY29waWVkIHRvIGxvd2VyIGVsZW1lbnQgb2YgcmVzdWx0LgorLy8vICAgIEJpdFsxXSA9IDA6IGxvd2VyIGVsZW1lbnQgb2YgYiBjb3BpZWQgdG8gdXBwZXIgZWxlbWVudCBvZiByZXN1bHQuCisvLy8gICAgQml0WzFdID0gMTogdXBwZXIgZWxlbWVudCBvZiBiIGNvcGllZCB0byB1cHBlciBlbGVtZW50IG9mIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBzaHVmZmxlZCB2YWx1ZXMuCisjZGVmaW5lIF9tbV9zaHVmZmxlX3BkKGEsIGIsIGkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRmKShfX20xMjhkKShhKSwgKF9fdjJkZikoX19tMTI4ZCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKGkpID4+IDApICYgMHgxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICsgKCgoaSkgPj4gMSkgJiAweDEpKTsgfSkKKworLy8vIFxicmllZiBDYXN0cyBhIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBpbnRvIGEgMTI4LWJpdAorLy8vICAgIGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGhhcyBubyBjb3JyZXNwb25kaW5nIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgc2FtZQorLy8vICAgIGJpdHdpc2UgcGF0dGVybiBhcyB0aGUgcGFyYW1ldGVyLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Nhc3RwZF9wcyhfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIChfX20xMjgpX19hOworfQorCisvLy8gXGJyaWVmIENhc3RzIGEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGludG8gYSAxMjgtYml0CisvLy8gICAgaW50ZWdlciB2ZWN0b3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBoYXMgbm8gY29ycmVzcG9uZGluZyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc2FtZSBiaXR3aXNlIHBhdHRlcm4gYXMgdGhlCisvLy8gICAgcGFyYW1ldGVyLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jYXN0cGRfc2kxMjgoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2E7Cit9CisKKy8vLyBcYnJpZWYgQ2FzdHMgYSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBpbnRvIGEgMTI4LWJpdAorLy8vICAgIGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBoYXMgbm8gY29ycmVzcG9uZGluZyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgdGhlIHNhbWUKKy8vLyAgICBiaXR3aXNlIHBhdHRlcm4gYXMgdGhlIHBhcmFtZXRlci4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY2FzdHBzX3BkKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2E7Cit9CisKKy8vLyBcYnJpZWYgQ2FzdHMgYSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBpbnRvIGEgMTI4LWJpdAorLy8vICAgIGludGVnZXIgdmVjdG9yLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaGFzIG5vIGNvcnJlc3BvbmRpbmcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc2FtZSBiaXR3aXNlIHBhdHRlcm4gYXMgdGhlCisvLy8gICAgcGFyYW1ldGVyLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jYXN0cHNfc2kxMjgoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYTsKK30KKworLy8vIFxicmllZiBDYXN0cyBhIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgaW50byBhIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yCisvLy8gICAgb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBoYXMgbm8gY29ycmVzcG9uZGluZyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBzYW1lCisvLy8gICAgYml0d2lzZSBwYXR0ZXJuIGFzIHRoZSBwYXJhbWV0ZXIuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY2FzdHNpMTI4X3BzKF9fbTEyOGkgX19hKQoreworICByZXR1cm4gKF9fbTEyOClfX2E7Cit9CisKKy8vLyBcYnJpZWYgQ2FzdHMgYSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGludG8gYSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvcgorLy8vICAgIG9mIFsyIHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGhhcyBubyBjb3JyZXNwb25kaW5nIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBzYW1lCisvLy8gICAgYml0d2lzZSBwYXR0ZXJuIGFzIHRoZSBwYXJhbWV0ZXIuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Nhc3RzaTEyOF9wZChfX20xMjhpIF9fYSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYTsKK30KKworLy8vIFxicmllZiBJbmRpY2F0ZXMgdGhhdCBhIHNwaW4gbG9vcCBpcyBiZWluZyBleGVjdXRlZCBmb3IgdGhlIHB1cnBvc2VzIG9mCisvLy8gICAgb3B0aW1pemluZyBwb3dlciBjb25zdW1wdGlvbiBkdXJpbmcgdGhlIGxvb3AuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEFVU0UgaW5zdHJ1Y3Rpb24uCisvLy8KKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIgorI2VuZGlmCit2b2lkIF9tbV9wYXVzZSh2b2lkKTsKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZGVmaW5lIF9NTV9TSFVGRkxFMih4LCB5KSAoKCh4KSA8PCAxKSB8ICh5KSkKKworI2VuZGlmIC8qIF9fRU1NSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvZjE2Y2ludHJpbi5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9mMTZjaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE1YmY3MwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvZjE2Y2ludHJpbi5oCkBAIC0wLDAgKzEsMTI0IEBACisvKj09PS0tLS0gZjE2Y2ludHJpbi5oIC0gRjE2QyBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWYgIWRlZmluZWQgX19YODZJTlRSSU5fSCAmJiAhZGVmaW5lZCBfX0VNTUlOVFJJTl9IICYmICFkZWZpbmVkIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxmMTZjaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxlbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0YxNkNJTlRSSU5fSAorI2RlZmluZSBfX0YxNkNJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBcCisgIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZjE2YyIpKSkKKworLy8vIFxicmllZiBDb252ZXJ0cyBhIDE2LWJpdCBoYWxmLXByZWNpc2lvbiBmbG9hdCB2YWx1ZSBpbnRvIGEgMzItYml0IGZsb2F0CisvLy8gICAgdmFsdWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFBIMlBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTYtYml0IGhhbGYtcHJlY2lzaW9uIGZsb2F0IHZhbHVlLgorLy8vIFxyZXR1cm5zIFRoZSBjb252ZXJ0ZWQgMzItYml0IGZsb2F0IHZhbHVlLgorc3RhdGljIF9faW5saW5lIGZsb2F0IF9fREVGQVVMVF9GTl9BVFRSUworX2N2dHNoX3NzKHVuc2lnbmVkIHNob3J0IF9fYSkKK3sKKyAgX192OGhpIHYgPSB7KHNob3J0KV9fYSwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CisgIF9fdjRzZiByID0gX19idWlsdGluX2lhMzJfdmN2dHBoMnBzKHYpOworICByZXR1cm4gclswXTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyBhIDMyLWJpdCBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0IHZhbHVlIHRvIGEgMTYtYml0CisvLy8gICAgaGFsZi1wcmVjaXNpb24gZmxvYXQgdmFsdWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIHVuc2lnbmVkIHNob3J0IF9jdnRzc19zaChmbG9hdCBhLCBjb25zdCBpbnQgaW1tKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlRQUzJQSCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQSAzMi1iaXQgc2luZ2xlLXByZWNpc2lvbiBmbG9hdCB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQgdG8gYSAxNi1iaXQKKy8vLyAgICBoYWxmLXByZWNpc2lvbiBmbG9hdCB2YWx1ZS4KKy8vLyBccGFyYW0gaW1tCisvLy8gICAgQW4gaW1tZWRpYXRlIHZhbHVlIGNvbnRyb2xsaW5nIHJvdW5kaW5nIHVzaW5nIGJpdHMgWzI6MF06CisvLy8gICAgMDAwOiBOZWFyZXN0CisvLy8gICAgMDAxOiBEb3duCisvLy8gICAgMDEwOiBVcAorLy8vICAgIDAxMTogVHJ1bmNhdGUKKy8vLyAgICAxWFg6IFVzZSBNWENTUi5SQyBmb3Igcm91bmRpbmcKKy8vLyBccmV0dXJucyBUaGUgY29udmVydGVkIDE2LWJpdCBoYWxmLXByZWNpc2lvbiBmbG9hdCB2YWx1ZS4KKyNkZWZpbmUgX2N2dHNzX3NoKGEsIGltbSkgIFwKKyAgKCh1bnNpZ25lZCBzaG9ydCkoKChfX3Y4aGkpX19idWlsdGluX2lhMzJfdmN2dHBzMnBoKChfX3Y0c2Ype2EsIDAsIDAsIDB9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1tKSkpWzBdKSkKKworLy8vIFxicmllZiBDb252ZXJ0cyBhIDEyOC1iaXQgdmVjdG9yIGNvbnRhaW5pbmcgMzItYml0IGZsb2F0IHZhbHVlcyBpbnRvIGEKKy8vLyAgICAxMjgtYml0IHZlY3RvciBjb250YWluaW5nIDE2LWJpdCBoYWxmLXByZWNpc2lvbiBmbG9hdCB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTEyOGkgX21tX2N2dHBzX3BoKF9fbTEyOCBhLCBjb25zdCBpbnQgaW1tKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlRQUzJQSCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBjb250YWluaW5nIDMyLWJpdCBmbG9hdCB2YWx1ZXMuCisvLy8gXHBhcmFtIGltbQorLy8vICAgIEFuIGltbWVkaWF0ZSB2YWx1ZSBjb250cm9sbGluZyByb3VuZGluZyB1c2luZyBiaXRzIFsyOjBdOgorLy8vICAgIDAwMDogTmVhcmVzdAorLy8vICAgIDAwMTogRG93bgorLy8vICAgIDAxMDogVXAKKy8vLyAgICAwMTE6IFRydW5jYXRlCisvLy8gICAgMVhYOiBVc2UgTVhDU1IuUkMgZm9yIHJvdW5kaW5nCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBjb250YWluaW5nIGNvbnZlcnRlZCAxNi1iaXQgaGFsZi1wcmVjaXNpb24gZmxvYXQKKy8vLyAgICB2YWx1ZXMuIFRoZSBsb3dlciA2NCBiaXRzIGFyZSB1c2VkIHRvIHN0b3JlIHRoZSBjb252ZXJ0ZWQgMTYtYml0CisvLy8gICAgaGFsZi1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzLgorI2RlZmluZSBfbW1fY3Z0cHNfcGgoYSwgaW1tKSBcCisgICgoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92Y3Z0cHMycGgoKF9fdjRzZikoX19tMTI4KShhKSwgKGltbSkpKQorCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgMTI4LWJpdCB2ZWN0b3IgY29udGFpbmluZyAxNi1iaXQgaGFsZi1wcmVjaXNpb24gZmxvYXQKKy8vLyAgICB2YWx1ZXMgaW50byBhIDEyOC1iaXQgdmVjdG9yIGNvbnRhaW5pbmcgMzItYml0IGZsb2F0IHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZUUEgyUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBjb250YWluaW5nIDE2LWJpdCBoYWxmLXByZWNpc2lvbiBmbG9hdCB2YWx1ZXMuIFRoZSBsb3dlcgorLy8vICAgIDY0IGJpdHMgYXJlIHVzZWQgaW4gdGhlIGNvbnZlcnNpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIGNvbnZlcnRlZCBmbG9hdCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBoX3BzKF9fbTEyOGkgX19hKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Y3Z0cGgycHMoKF9fdjhoaSlfX2EpOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX0YxNkNJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9mbG9hdC5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9mbG9hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyODI2OWUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2Zsb2F0LmgKQEAgLTAsMCArMSwxMzQgQEAKKy8qPT09LS0tLSBmbG9hdC5oIC0gQ2hhcmFjdGVyaXN0aWNzIG9mIGZsb2F0aW5nIHBvaW50IHR5cGVzIC0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19GTE9BVF9ICisjZGVmaW5lIF9fRkxPQVRfSAorCisvKiBJZiB3ZSdyZSBvbiBNaW5HVywgZmFsbCBiYWNrIHRvIHRoZSBzeXN0ZW0ncyBmbG9hdC5oLCB3aGljaCBtaWdodCBoYXZlCisgKiBhZGRpdGlvbmFsIGRlZmluaXRpb25zIHByb3ZpZGVkIGZvciBXaW5kb3dzLgorICogRm9yIG1vcmUgZGV0YWlscyBzZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3kweWJ3OWZ5LmFzcHgKKyAqLworI2lmIChkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9NU0NfVkVSKSkgJiYgX19TVERDX0hPU1RFRF9fICYmIFwKKyAgICBfX2hhc19pbmNsdWRlX25leHQoPGZsb2F0Lmg+KQorIyAgaW5jbHVkZV9uZXh0IDxmbG9hdC5oPgorCisvKiBVbmRlZmluZSBhbnl0aGluZyB0aGF0IHdlJ2xsIGJlIHJlZGVmaW5pbmcgYmVsb3cuICovCisjICB1bmRlZiBGTFRfRVZBTF9NRVRIT0QKKyMgIHVuZGVmIEZMVF9ST1VORFMKKyMgIHVuZGVmIEZMVF9SQURJWAorIyAgdW5kZWYgRkxUX01BTlRfRElHCisjICB1bmRlZiBEQkxfTUFOVF9ESUcKKyMgIHVuZGVmIExEQkxfTUFOVF9ESUcKKyMgIGlmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCB8fCAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCisjICAgIHVuZGVmIERFQ0lNQUxfRElHCisjICBlbmRpZgorIyAgdW5kZWYgRkxUX0RJRworIyAgdW5kZWYgREJMX0RJRworIyAgdW5kZWYgTERCTF9ESUcKKyMgIHVuZGVmIEZMVF9NSU5fRVhQCisjICB1bmRlZiBEQkxfTUlOX0VYUAorIyAgdW5kZWYgTERCTF9NSU5fRVhQCisjICB1bmRlZiBGTFRfTUlOXzEwX0VYUAorIyAgdW5kZWYgREJMX01JTl8xMF9FWFAKKyMgIHVuZGVmIExEQkxfTUlOXzEwX0VYUAorIyAgdW5kZWYgRkxUX01BWF9FWFAKKyMgIHVuZGVmIERCTF9NQVhfRVhQCisjICB1bmRlZiBMREJMX01BWF9FWFAKKyMgIHVuZGVmIEZMVF9NQVhfMTBfRVhQCisjICB1bmRlZiBEQkxfTUFYXzEwX0VYUAorIyAgdW5kZWYgTERCTF9NQVhfMTBfRVhQCisjICB1bmRlZiBGTFRfTUFYCisjICB1bmRlZiBEQkxfTUFYCisjICB1bmRlZiBMREJMX01BWAorIyAgdW5kZWYgRkxUX0VQU0lMT04KKyMgIHVuZGVmIERCTF9FUFNJTE9OCisjICB1bmRlZiBMREJMX0VQU0lMT04KKyMgIHVuZGVmIEZMVF9NSU4KKyMgIHVuZGVmIERCTF9NSU4KKyMgIHVuZGVmIExEQkxfTUlOCisjICBpZiBfX1NURENfVkVSU0lPTl9fID49IDIwMTExMkwgfHwgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorIyAgICB1bmRlZiBGTFRfVFJVRV9NSU4KKyMgICAgdW5kZWYgREJMX1RSVUVfTUlOCisjICAgIHVuZGVmIExEQkxfVFJVRV9NSU4KKyMgICAgdW5kZWYgRkxUX0RFQ0lNQUxfRElHCisjICAgIHVuZGVmIERCTF9ERUNJTUFMX0RJRworIyAgICB1bmRlZiBMREJMX0RFQ0lNQUxfRElHCisjICBlbmRpZgorI2VuZGlmCisKKy8qIENoYXJhY3RlcmlzdGljcyBvZiBmbG9hdGluZyBwb2ludCB0eXBlcywgQzk5IDUuMi40LjIuMiAqLworCisjZGVmaW5lIEZMVF9FVkFMX01FVEhPRCBfX0ZMVF9FVkFMX01FVEhPRF9fCisjZGVmaW5lIEZMVF9ST1VORFMgKF9fYnVpbHRpbl9mbHRfcm91bmRzKCkpCisjZGVmaW5lIEZMVF9SQURJWCBfX0ZMVF9SQURJWF9fCisKKyNkZWZpbmUgRkxUX01BTlRfRElHIF9fRkxUX01BTlRfRElHX18KKyNkZWZpbmUgREJMX01BTlRfRElHIF9fREJMX01BTlRfRElHX18KKyNkZWZpbmUgTERCTF9NQU5UX0RJRyBfX0xEQkxfTUFOVF9ESUdfXworCisjaWYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMIHx8ICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKyMgIGRlZmluZSBERUNJTUFMX0RJRyBfX0RFQ0lNQUxfRElHX18KKyNlbmRpZgorCisjZGVmaW5lIEZMVF9ESUcgX19GTFRfRElHX18KKyNkZWZpbmUgREJMX0RJRyBfX0RCTF9ESUdfXworI2RlZmluZSBMREJMX0RJRyBfX0xEQkxfRElHX18KKworI2RlZmluZSBGTFRfTUlOX0VYUCBfX0ZMVF9NSU5fRVhQX18KKyNkZWZpbmUgREJMX01JTl9FWFAgX19EQkxfTUlOX0VYUF9fCisjZGVmaW5lIExEQkxfTUlOX0VYUCBfX0xEQkxfTUlOX0VYUF9fCisKKyNkZWZpbmUgRkxUX01JTl8xMF9FWFAgX19GTFRfTUlOXzEwX0VYUF9fCisjZGVmaW5lIERCTF9NSU5fMTBfRVhQIF9fREJMX01JTl8xMF9FWFBfXworI2RlZmluZSBMREJMX01JTl8xMF9FWFAgX19MREJMX01JTl8xMF9FWFBfXworCisjZGVmaW5lIEZMVF9NQVhfRVhQIF9fRkxUX01BWF9FWFBfXworI2RlZmluZSBEQkxfTUFYX0VYUCBfX0RCTF9NQVhfRVhQX18KKyNkZWZpbmUgTERCTF9NQVhfRVhQIF9fTERCTF9NQVhfRVhQX18KKworI2RlZmluZSBGTFRfTUFYXzEwX0VYUCBfX0ZMVF9NQVhfMTBfRVhQX18KKyNkZWZpbmUgREJMX01BWF8xMF9FWFAgX19EQkxfTUFYXzEwX0VYUF9fCisjZGVmaW5lIExEQkxfTUFYXzEwX0VYUCBfX0xEQkxfTUFYXzEwX0VYUF9fCisKKyNkZWZpbmUgRkxUX01BWCBfX0ZMVF9NQVhfXworI2RlZmluZSBEQkxfTUFYIF9fREJMX01BWF9fCisjZGVmaW5lIExEQkxfTUFYIF9fTERCTF9NQVhfXworCisjZGVmaW5lIEZMVF9FUFNJTE9OIF9fRkxUX0VQU0lMT05fXworI2RlZmluZSBEQkxfRVBTSUxPTiBfX0RCTF9FUFNJTE9OX18KKyNkZWZpbmUgTERCTF9FUFNJTE9OIF9fTERCTF9FUFNJTE9OX18KKworI2RlZmluZSBGTFRfTUlOIF9fRkxUX01JTl9fCisjZGVmaW5lIERCTF9NSU4gX19EQkxfTUlOX18KKyNkZWZpbmUgTERCTF9NSU4gX19MREJMX01JTl9fCisKKyNpZiBfX1NURENfVkVSU0lPTl9fID49IDIwMTExMkwgfHwgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorIyAgZGVmaW5lIEZMVF9UUlVFX01JTiBfX0ZMVF9ERU5PUk1fTUlOX18KKyMgIGRlZmluZSBEQkxfVFJVRV9NSU4gX19EQkxfREVOT1JNX01JTl9fCisjICBkZWZpbmUgTERCTF9UUlVFX01JTiBfX0xEQkxfREVOT1JNX01JTl9fCisjICBkZWZpbmUgRkxUX0RFQ0lNQUxfRElHIF9fRkxUX0RFQ0lNQUxfRElHX18KKyMgIGRlZmluZSBEQkxfREVDSU1BTF9ESUcgX19EQkxfREVDSU1BTF9ESUdfXworIyAgZGVmaW5lIExEQkxfREVDSU1BTF9ESUcgX19MREJMX0RFQ0lNQUxfRElHX18KKyNlbmRpZgorCisjZW5kaWYgLyogX19GTE9BVF9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2ZtYTRpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvZm1hNGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYWE4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2ZtYTRpbnRyaW4uaApAQCAtMCwwICsxLDIzMCBAQAorLyo9PT0tLS0tIGZtYTRpbnRyaW4uaCAtIEZNQTQgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX1g4NklOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8Zm1hNGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8eDg2aW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19GTUE0SU5UUklOX0gKKyNkZWZpbmUgX19GTUE0SU5UUklOX0gKKworI2luY2x1ZGUgPHBtbWludHJpbi5oPgorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZtYTQiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWNjX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hY2NfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkKChfX3YyZGYpX19BLCAoX192MmRmKV9fQiwgKF9fdjJkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFjY19zcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRzcygoX192NHNmKV9fQSwgKF9fdjRzZilfX0IsIChfX3Y0c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWNjX3NkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzZCgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3YyZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21zdWJfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtc3VicHMoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CLCAoX192NHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXN1Yl9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtc3VicGQoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CLCAoX192MmRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tc3ViX3NzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnNzKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21zdWJfc2QoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnNkKChfX3YyZGYpX19BLCAoX192MmRmKV9fQiwgKF9fdjJkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbm1hY2NfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZubWFkZHBzKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX25tYWNjX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm5tYWRkcGQoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CLCAoX192MmRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9ubWFjY19zcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm5tYWRkc3MoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CLCAoX192NHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbm1hY2Nfc2QoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRzZCgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3YyZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX25tc3ViX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwcygoX192NHNmKV9fQSwgKF9fdjRzZilfX0IsIChfX3Y0c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9ubXN1Yl9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZubXN1YnBkKChfX3YyZGYpX19BLCAoX192MmRmKV9fQiwgKF9fdjJkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbm1zdWJfc3MoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZubXN1YnNzKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX25tc3ViX3NkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm5tc3Vic2QoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CLCAoX192MmRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWRkc3ViX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hZGRzdWJfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkKChfX3YyZGYpX19BLCAoX192MmRmKV9fQiwgKF9fdjJkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXN1YmFkZF9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwcygoX192NHNmKV9fQSwgKF9fdjRzZilfX0IsIChfX3Y0c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tc3ViYWRkX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwZCgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3YyZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hY2NfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZtYWRkcHMyNTYoKF9fdjhzZilfX0EsIChfX3Y4c2YpX19CLCAoX192OHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFjY19wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZtYWRkcGQyNTYoKF9fdjRkZilfX0EsIChfX3Y0ZGYpX19CLCAoX192NGRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tc3ViX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBzMjU2KChfX3Y4c2YpX19BLCAoX192OHNmKV9fQiwgKF9fdjhzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21zdWJfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBkMjU2KChfX3Y0ZGYpX19BLCAoX192NGRmKV9fQiwgKF9fdjRkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbm1hY2NfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZubWFkZHBzMjU2KChfX3Y4c2YpX19BLCAoX192OHNmKV9fQiwgKF9fdjhzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X25tYWNjX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92Zm5tYWRkcGQyNTYoKF9fdjRkZilfX0EsIChfX3Y0ZGYpX19CLCAoX192NGRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9ubXN1Yl9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Zm5tc3VicHMyNTYoKF9fdjhzZilfX0EsIChfX3Y4c2YpX19CLCAoX192OHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbm1zdWJfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDI1NigoX192NGRmKV9fQSwgKF9fdjRkZilfX0IsIChfX3Y0ZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hZGRzdWJfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMyNTYoKF9fdjhzZilfX0EsIChfX3Y4c2YpX19CLCAoX192OHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFkZHN1Yl9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQyNTYoKF9fdjRkZilfX0EsIChfX3Y0ZGYpX19CLCAoX192NGRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tc3ViYWRkX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBzMjU2KChfX3Y4c2YpX19BLCAoX192OHNmKV9fQiwgKF9fdjhzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21zdWJhZGRfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBkMjU2KChfX3Y0ZGYpX19BLCAoX192NGRmKV9fQiwgKF9fdjRkZilfX0MpOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX0ZNQTRJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9mbWFpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvZm1haW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyZWYwYgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvZm1haW50cmluLmgKQEAgLTAsMCArMSwyMjggQEAKKy8qPT09LS0tLSBmbWE0aW50cmluLmggLSBGTUE0IGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGZtYWludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19GTUFJTlRSSU5fSAorI2RlZmluZSBfX0ZNQUlOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZm1hIikpKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm1hZGRfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkcHMoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CLCAoX192NHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm1hZGRfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkKChfX3YyZGYpX19BLCAoX192MmRmKV9fQiwgKF9fdjJkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm1hZGRfc3MoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkc3MoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CLCAoX192NHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm1hZGRfc2QoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkKChfX3YyZGYpX19BLCAoX192MmRmKV9fQiwgKF9fdjJkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm1zdWJfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtc3VicHMoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CLCAoX192NHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm1zdWJfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBkKChfX3YyZGYpX19BLCAoX192MmRmKV9fQiwgKF9fdjJkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm1zdWJfc3MoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtc3Vic3MoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CLCAoX192NHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm1zdWJfc2QoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnNkKChfX3YyZGYpX19BLCAoX192MmRmKV9fQiwgKF9fdjJkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm5tYWRkX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwcygoX192NHNmKV9fQSwgKF9fdjRzZilfX0IsIChfX3Y0c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbm1hZGRfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwZCgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3YyZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZubWFkZF9zcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm5tYWRkc3MoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CLCAoX192NHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm5tYWRkX3NkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm5tYWRkc2QoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CLCAoX192MmRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbm1zdWJfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZubXN1YnBzKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZubXN1Yl9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZubXN1YnBkKChfX3YyZGYpX19BLCAoX192MmRmKV9fQiwgKF9fdjJkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm5tc3ViX3NzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJzcygoX192NHNmKV9fQSwgKF9fdjRzZilfX0IsIChfX3Y0c2YpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbm1zdWJfc2QoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJzZCgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3YyZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZtYWRkc3ViX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZtYWRkc3ViX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZCgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3YyZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Ztc3ViYWRkX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBzKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Ztc3ViYWRkX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwZCgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3YyZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2ZtYWRkX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMjU2KChfX3Y4c2YpX19BLCAoX192OHNmKV9fQiwgKF9fdjhzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2ZtYWRkX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDI1NigoX192NGRmKV9fQSwgKF9fdjRkZilfX0IsIChfX3Y0ZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Ztc3ViX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBzMjU2KChfX3Y4c2YpX19BLCAoX192OHNmKV9fQiwgKF9fdjhzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Ztc3ViX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92Zm1zdWJwZDI1NigoX192NGRmKV9fQSwgKF9fdjRkZilfX0IsIChfX3Y0ZGYpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2ZubWFkZF9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Zm5tYWRkcHMyNTYoKF9fdjhzZilfX0EsIChfX3Y4c2YpX19CLCAoX192OHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZm5tYWRkX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92Zm5tYWRkcGQyNTYoKF9fdjRkZilfX0EsIChfX3Y0ZGYpX19CLCAoX192NGRmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9mbm1zdWJfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZubXN1YnBzMjU2KChfX3Y4c2YpX19BLCAoX192OHNmKV9fQiwgKF9fdjhzZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2ZubXN1Yl9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZubXN1YnBkMjU2KChfX3Y0ZGYpX19BLCAoX192NGRmKV9fQiwgKF9fdjRkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZm1hZGRzdWJfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMyNTYoKF9fdjhzZilfX0EsIChfX3Y4c2YpX19CLCAoX192OHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZm1hZGRzdWJfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkMjU2KChfX3Y0ZGYpX19BLCAoX192NGRmKV9fQiwgKF9fdjRkZilfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZm1zdWJhZGRfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcHMyNTYoKF9fdjhzZilfX0EsIChfX3Y4c2YpX19CLCAoX192OHNmKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZm1zdWJhZGRfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBkMjU2KChfX3Y0ZGYpX19BLCAoX192NGRmKV9fQiwgKF9fdjRkZilfX0MpOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX0ZNQUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2Z4c3JpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvZnhzcmludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3N2FhNDgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2Z4c3JpbnRyaW4uaApAQCAtMCwwICsxLDU3IEBACisvKj09PS0tLS0gZnhzcmludHJpbi5oIC0gRlhTUiBpbnRyaW5zaWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxmeHNyaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0ZYU1JJTlRSSU5fSAorI2RlZmluZSBfX0ZYU1JJTlRSSU5fSAorCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sICBfX3RhcmdldF9fKCJmeHNyIikpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX2Z4c2F2ZSh2b2lkICpfX3ApIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2Z4c2F2ZShfX3ApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX2Z4cnN0b3Iodm9pZCAqX19wKSB7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9meHJzdG9yKF9fcCk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX2Z4c2F2ZTY0KHZvaWQgKl9fcCkgeworICByZXR1cm4gX19idWlsdGluX2lhMzJfZnhzYXZlNjQoX19wKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19meHJzdG9yNjQodm9pZCAqX19wKSB7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9meHJzdG9yNjQoX19wKTsKK30KKyNlbmRpZgorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9odG1pbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvaHRtaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjljOGQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvaHRtaW50cmluLmgKQEAgLTAsMCArMSwyMjYgQEAKKy8qPT09LS0tLSBodG1pbnRyaW4uaCAtIFN0YW5kYXJkIGhlYWRlciBmb3IgUG93ZXJQQyBIVE0gLS0tLS0tLS0tLS0tLS0tPT09KlwKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorXCo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ki8KKworI2lmbmRlZiBfX0hUTUlOVFJJTl9ICisjZGVmaW5lIF9fSFRNSU5UUklOX0gKKworI2lmbmRlZiBfX0hUTV9fCisjZXJyb3IgIkhUTSBpbnN0cnVjdGlvbiBzZXQgbm90IGVuYWJsZWQiCisjZW5kaWYKKworI2lmZGVmIF9fcG93ZXJwY19fCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKwordHlwZWRlZiB1aW50NjRfdCB0ZXhhc3JfdDsKK3R5cGVkZWYgdWludDMyX3QgdGV4YXNydV90OwordHlwZWRlZiB1aW50MzJfdCB0ZXhhc3JsX3Q7Cit0eXBlZGVmIHVpbnRwdHJfdCB0Zmlhcl90OwordHlwZWRlZiB1aW50cHRyX3QgdGZoYXJfdDsKKworI2RlZmluZSBfSFRNX1NUQVRFKENSMCkgKChDUjAgPj4gMSkgJiAweDMpCisjZGVmaW5lIF9IVE1fTk9OVFJBTlNBQ1RJT05BTCAweDAKKyNkZWZpbmUgX0hUTV9TVVNQRU5ERUQgICAgICAgIDB4MQorI2RlZmluZSBfSFRNX1RSQU5TQUNUSU9OQUwgICAgMHgyCisKKyNkZWZpbmUgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLEJJVE5VTSxTSVpFKSBcCisgICgoKFRFWEFTUikgPj4gKDYzLShCSVROVU0pKSkgJiAoKDE8PChTSVpFKSktMSkpCisjZGVmaW5lIF9URVhBU1JVX0VYVFJBQ1RfQklUUyhURVhBU1IsQklUTlVNLFNJWkUpIFwKKyAgKCgoVEVYQVNSKSA+PiAoMzEtKEJJVE5VTSkpKSAmICgoMTw8KFNJWkUpKS0xKSkKKworI2RlZmluZSBfVEVYQVNSX0ZBSUxVUkVfQ09ERShURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCA3LCA4KQorI2RlZmluZSBfVEVYQVNSVV9GQUlMVVJFX0NPREUoVEVYQVNSVSkgXAorICBfVEVYQVNSVV9FWFRSQUNUX0JJVFMoVEVYQVNSVSwgNywgOCkKKworI2RlZmluZSBfVEVYQVNSX0ZBSUxVUkVfUEVSU0lTVEVOVChURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCA3LCAxKQorI2RlZmluZSBfVEVYQVNSVV9GQUlMVVJFX1BFUlNJU1RFTlQoVEVYQVNSVSkgXAorICBfVEVYQVNSVV9FWFRSQUNUX0JJVFMoVEVYQVNSVSwgNywgMSkKKworI2RlZmluZSBfVEVYQVNSX0RJU0FMTE9XRUQoVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgOCwgMSkKKyNkZWZpbmUgX1RFWEFTUlVfRElTQUxMT1dFRChURVhBU1JVKSBcCisgIF9URVhBU1JVX0VYVFJBQ1RfQklUUyhURVhBU1JVLCA4LCAxKQorCisjZGVmaW5lIF9URVhBU1JfTkVTVElOR19PVkVSRkxPVyhURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCA5LCAxKQorI2RlZmluZSBfVEVYQVNSVV9ORVNUSU5HX09WRVJGTE9XKFRFWEFTUlUpIFwKKyAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDksIDEpCisKKyNkZWZpbmUgX1RFWEFTUl9GT09UUFJJTlRfT1ZFUkZMT1coVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMTAsIDEpCisjZGVmaW5lIF9URVhBU1JVX0ZPT1RQUklOVF9PVkVSRkxPVyhURVhBU1JVKSBcCisgIF9URVhBU1JVX0VYVFJBQ1RfQklUUyhURVhBU1JVLCAxMCwgMSkKKworI2RlZmluZSBfVEVYQVNSX1NFTEZfSU5EVUNFRF9DT05GTElDVChURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCAxMSwgMSkKKyNkZWZpbmUgX1RFWEFTUlVfU0VMRl9JTkRVQ0VEX0NPTkZMSUNUKFRFWEFTUlUpIFwKKyAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDExLCAxKQorCisjZGVmaW5lIF9URVhBU1JfTk9OX1RSQU5TQUNUSU9OQUxfQ09ORkxJQ1QoVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMTIsIDEpCisjZGVmaW5lIF9URVhBU1JVX05PTl9UUkFOU0FDVElPTkFMX0NPTkZMSUNUKFRFWEFTUlUpIFwKKyAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDEyLCAxKQorCisjZGVmaW5lIF9URVhBU1JfVFJBTlNBQ1RJT05fQ09ORkxJQ1QoVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMTMsIDEpCisjZGVmaW5lIF9URVhBU1JVX1RSQU5TQUNUSU9OX0NPTkZMSUNUKFRFWEFTUlUpIFwKKyAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDEzLCAxKQorCisjZGVmaW5lIF9URVhBU1JfVFJBTlNMQVRJT05fSU5WQUxJREFUSU9OX0NPTkZMSUNUKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDE0LCAxKQorI2RlZmluZSBfVEVYQVNSVV9UUkFOU0xBVElPTl9JTlZBTElEQVRJT05fQ09ORkxJQ1QoVEVYQVNSVSkgXAorICBfVEVYQVNSVV9FWFRSQUNUX0JJVFMoVEVYQVNSVSwgMTQsIDEpCisKKyNkZWZpbmUgX1RFWEFTUl9JTVBMRU1FTlRBSU9OX1NQRUNJRklDKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDE1LCAxKQorI2RlZmluZSBfVEVYQVNSVV9JTVBMRU1FTlRBSU9OX1NQRUNJRklDKFRFWEFTUlUpIFwKKyAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDE1LCAxKQorCisjZGVmaW5lIF9URVhBU1JfSU5TVFJVQ1RJT05fRkVUQ0hfQ09ORkxJQ1QoVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMTYsIDEpCisjZGVmaW5lIF9URVhBU1JVX0lOU1RSVUNUSU9OX0ZFVENIX0NPTkZMSUNUKFRFWEFTUlUpIFwKKyAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDE2LCAxKQorCisjZGVmaW5lIF9URVhBU1JfQUJPUlQoVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMzEsIDEpCisjZGVmaW5lIF9URVhBU1JVX0FCT1JUKFRFWEFTUlUpIFwKKyAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDMxLCAxKQorCisKKyNkZWZpbmUgX1RFWEFTUl9TVVNQRU5ERUQoVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMzIsIDEpCisKKyNkZWZpbmUgX1RFWEFTUl9QUklWSUxFR0UoVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMzUsIDIpCisKKyNkZWZpbmUgX1RFWEFTUl9GQUlMVVJFX1NVTU1BUlkoVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMzYsIDEpCisKKyNkZWZpbmUgX1RFWEFTUl9URklBUl9FWEFDVChURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCAzNywgMSkKKworI2RlZmluZSBfVEVYQVNSX1JPVChURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCAzOCwgMSkKKworI2RlZmluZSBfVEVYQVNSX1RSQU5TQUNUSU9OX0xFVkVMKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDYzLCAxMikKKworI2VuZGlmIC8qIF9fcG93ZXJwYyAqLworCisjaWZkZWYgX19zMzkwX18KKworLyogQ29uZGl0aW9uIGNvZGVzIGdlbmVyYXRlZCBieSB0YmVnaW4gICovCisjZGVmaW5lIF9IVE1fVEJFR0lOX1NUQVJURUQgICAgICAgMAorI2RlZmluZSBfSFRNX1RCRUdJTl9JTkRFVEVSTUlOQVRFIDEKKyNkZWZpbmUgX0hUTV9UQkVHSU5fVFJBTlNJRU5UICAgICAyCisjZGVmaW5lIF9IVE1fVEJFR0lOX1BFUlNJU1RFTlQgICAgMworCisvKiBUaGUgYWJvcnQgY29kZXMgYmVsb3cgdGhpcyB0aHJlc2hvbGQgYXJlIHJlc2VydmVkIGZvciBtYWNoaW5lIHVzZS4gICovCisjZGVmaW5lIF9IVE1fRklSU1RfVVNFUl9BQk9SVF9DT0RFIDI1NgorCisvKiBUaGUgdHJhbnNhY3Rpb24gZGlhZ25vc3RpYyBibG9jayBpcyBpdCBpcyBkZWZpbmVkIGluIHRoZSBQcmluY2lwbGVzCisgICBvZiBPcGVyYXRpb24gY2hhcHRlciA1LTkxLiAgKi8KKworc3RydWN0IF9faHRtX3RkYiB7CisgIHVuc2lnbmVkIGNoYXIgZm9ybWF0OyAgICAgICAgICAgICAgICAvKiAgIDAgKi8KKyAgdW5zaWduZWQgY2hhciBmbGFnczsKKyAgdW5zaWduZWQgY2hhciByZXNlcnZlZDFbNF07CisgIHVuc2lnbmVkIHNob3J0IG5lc3RpbmdfZGVwdGg7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBhYm9ydF9jb2RlOyAgICAgICAvKiAgIDggKi8KKyAgdW5zaWduZWQgbG9uZyBsb25nIGNvbmZsaWN0X3Rva2VuOyAgIC8qICAxNiAqLworICB1bnNpZ25lZCBsb25nIGxvbmcgYXRpYTsgICAgICAgICAgICAgLyogIDI0ICovCisgIHVuc2lnbmVkIGNoYXIgZWFpZDsgICAgICAgICAgICAgICAgICAvKiAgMzIgKi8KKyAgdW5zaWduZWQgY2hhciBkeGM7CisgIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQyWzJdOworICB1bnNpZ25lZCBpbnQgcHJvZ3JhbV9pbnRfaWQ7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBleGNlcHRpb25faWQ7ICAgICAvKiAgNDAgKi8KKyAgdW5zaWduZWQgbG9uZyBsb25nIGJlYTsgICAgICAgICAgICAgIC8qICA0OCAqLworICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkM1s3Ml07ICAgICAgICAgLyogIDU2ICovCisgIHVuc2lnbmVkIGxvbmcgbG9uZyBncHJzWzE2XTsgICAgICAgICAvKiAxMjggKi8KK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19hbGlnbmVkX18gKDgpKSk7CisKKworLyogSGVscGVyIGludHJpbnNpY3MgdG8gcmV0cnkgdGJlZ2luIGluIGNhc2Ugb2YgdHJhbnNpZW50IGZhaWx1cmUuICAqLworCitzdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX2J1aWx0aW5fdGJlZ2luX3JldHJ5X251bGwgKGludCBfX3JldHJ5KQoreworICBpbnQgY2MsIGkgPSAwOworCisgIHdoaWxlICgoY2MgPSBfX2J1aWx0aW5fdGJlZ2luKDApKSA9PSBfSFRNX1RCRUdJTl9UUkFOU0lFTlQKKyAgICAgICAgICYmIGkrKyA8IF9fcmV0cnkpCisgICAgX19idWlsdGluX3R4X2Fzc2lzdChpKTsKKworICByZXR1cm4gY2M7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fYnVpbHRpbl90YmVnaW5fcmV0cnlfdGRiICh2b2lkICpfX3RkYiwgaW50IF9fcmV0cnkpCit7CisgIGludCBjYywgaSA9IDA7CisKKyAgd2hpbGUgKChjYyA9IF9fYnVpbHRpbl90YmVnaW4oX190ZGIpKSA9PSBfSFRNX1RCRUdJTl9UUkFOU0lFTlQKKyAgICAgICAgICYmIGkrKyA8IF9fcmV0cnkpCisgICAgX19idWlsdGluX3R4X2Fzc2lzdChpKTsKKworICByZXR1cm4gY2M7Cit9CisKKyNkZWZpbmUgX19idWlsdGluX3RiZWdpbl9yZXRyeSh0ZGIsIHJldHJ5KSBcCisgIChfX2J1aWx0aW5fY29uc3RhbnRfcCh0ZGIgPT0gMCkgJiYgdGRiID09IDAgPyBcCisgICBfX2J1aWx0aW5fdGJlZ2luX3JldHJ5X251bGwocmV0cnkpIDogXAorICAgX19idWlsdGluX3RiZWdpbl9yZXRyeV90ZGIodGRiLCByZXRyeSkpCisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fYnVpbHRpbl90YmVnaW5fcmV0cnlfbm9mbG9hdF9udWxsIChpbnQgX19yZXRyeSkKK3sKKyAgaW50IGNjLCBpID0gMDsKKworICB3aGlsZSAoKGNjID0gX19idWlsdGluX3RiZWdpbl9ub2Zsb2F0KDApKSA9PSBfSFRNX1RCRUdJTl9UUkFOU0lFTlQKKyAgICAgICAgICYmIGkrKyA8IF9fcmV0cnkpCisgICAgX19idWlsdGluX3R4X2Fzc2lzdChpKTsKKworICByZXR1cm4gY2M7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fYnVpbHRpbl90YmVnaW5fcmV0cnlfbm9mbG9hdF90ZGIgKHZvaWQgKl9fdGRiLCBpbnQgX19yZXRyeSkKK3sKKyAgaW50IGNjLCBpID0gMDsKKworICB3aGlsZSAoKGNjID0gX19idWlsdGluX3RiZWdpbl9ub2Zsb2F0KF9fdGRiKSkgPT0gX0hUTV9UQkVHSU5fVFJBTlNJRU5UCisgICAgICAgICAmJiBpKysgPCBfX3JldHJ5KQorICAgIF9fYnVpbHRpbl90eF9hc3Npc3QoaSk7CisKKyAgcmV0dXJuIGNjOworfQorCisjZGVmaW5lIF9fYnVpbHRpbl90YmVnaW5fcmV0cnlfbm9mbG9hdCh0ZGIsIHJldHJ5KSBcCisgIChfX2J1aWx0aW5fY29uc3RhbnRfcCh0ZGIgPT0gMCkgJiYgdGRiID09IDAgPyBcCisgICBfX2J1aWx0aW5fdGJlZ2luX3JldHJ5X25vZmxvYXRfbnVsbChyZXRyeSkgOiBcCisgICBfX2J1aWx0aW5fdGJlZ2luX3JldHJ5X25vZmxvYXRfdGRiKHRkYiwgcmV0cnkpKQorCisjZW5kaWYgLyogX19zMzkwX18gKi8KKworI2VuZGlmIC8qIF9fSFRNSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvaHRteGxpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvaHRteGxpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmRjNzA1Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9odG14bGludHJpbi5oCkBAIC0wLDAgKzEsMzYzIEBACisvKj09PS0tLS0gaHRteGxpbnRyaW4uaCAtIFhMIGNvbXBpbGVyIEhUTSBleGVjdXRpb24gaW50cmluc2ljcy0tLS0tLS0tLS0tLS09PT0qXAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCitcKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0qLworCisjaWZuZGVmIF9fSFRNWExJTlRSSU5fSAorI2RlZmluZSBfX0hUTVhMSU5UUklOX0gKKworI2lmbmRlZiBfX0hUTV9fCisjZXJyb3IgIkhUTSBpbnN0cnVjdGlvbiBzZXQgbm90IGVuYWJsZWQiCisjZW5kaWYKKworI2luY2x1ZGUgPGh0bWludHJpbi5oPgorCisjaWZkZWYgX19wb3dlcnBjX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIF9URVhBU1JfUFRSKFRNX0JVRikgXAorICAoKHRleGFzcl90ICopKChUTV9CVUYpKzApKQorI2RlZmluZSBfVEVYQVNSVV9QVFIoVE1fQlVGKSBcCisgICgodGV4YXNydV90ICopKChUTV9CVUYpKzApKQorI2RlZmluZSBfVEVYQVNSTF9QVFIoVE1fQlVGKSBcCisgICgodGV4YXNybF90ICopKChUTV9CVUYpKzQpKQorI2RlZmluZSBfVEZJQVJfUFRSKFRNX0JVRikgXAorICAoKHRmaWFyX3QgKikoKFRNX0JVRikrOCkpCisKK3R5cGVkZWYgY2hhciBUTV9idWZmX3R5cGVbMTZdOworCisvKiBUaGlzIG1hY3JvIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGEgdHJhbnNhY3Rpb24gd2FzIHN1Y2Nlc3NmdWxseQorICAgc3RhcnRlZCBmcm9tIHRoZSBfX1RNX2JlZ2luKCkgYW5kIF9fVE1fc2ltcGxlX2JlZ2luKCkgaW50cmluc2ljIGZ1bmN0aW9ucworICAgYmVsb3cuICAqLworI2RlZmluZSBfSFRNX1RCRUdJTl9TVEFSVEVEICAgICAxCisKK2V4dGVybiBfX2lubGluZSBsb25nCitfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfX1RNX3NpbXBsZV9iZWdpbiAodm9pZCkKK3sKKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9fYnVpbHRpbl90YmVnaW4gKDApLCAxKSkKKyAgICByZXR1cm4gX0hUTV9UQkVHSU5fU1RBUlRFRDsKKyAgcmV0dXJuIDA7Cit9CisKK2V4dGVybiBfX2lubGluZSBsb25nCitfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfX1RNX2JlZ2luICh2b2lkKiBjb25zdCBfX1RNX2J1ZmYpCit7CisgICpfVEVYQVNSTF9QVFIgKF9fVE1fYnVmZikgPSAwOworICBpZiAoX19idWlsdGluX2V4cGVjdCAoX19idWlsdGluX3RiZWdpbiAoMCksIDEpKQorICAgIHJldHVybiBfSFRNX1RCRUdJTl9TVEFSVEVEOworI2lmZGVmIF9fcG93ZXJwYzY0X18KKyAgKl9URVhBU1JfUFRSIChfX1RNX2J1ZmYpID0gX19idWlsdGluX2dldF90ZXhhc3IgKCk7CisjZWxzZQorICAqX1RFWEFTUlVfUFRSIChfX1RNX2J1ZmYpID0gX19idWlsdGluX2dldF90ZXhhc3J1ICgpOworICAqX1RFWEFTUkxfUFRSIChfX1RNX2J1ZmYpID0gX19idWlsdGluX2dldF90ZXhhc3IgKCk7CisjZW5kaWYKKyAgKl9URklBUl9QVFIgKF9fVE1fYnVmZikgPSBfX2J1aWx0aW5fZ2V0X3RmaWFyICgpOworICByZXR1cm4gMDsKK30KKworZXh0ZXJuIF9faW5saW5lIGxvbmcKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1fZW5kICh2b2lkKQoreworICBpZiAoX19idWlsdGluX2V4cGVjdCAoX19idWlsdGluX3RlbmQgKDApLCAxKSkKKyAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKK2V4dGVybiBfX2lubGluZSB2b2lkCitfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfX1RNX2Fib3J0ICh2b2lkKQoreworICBfX2J1aWx0aW5fdGFib3J0ICgwKTsKK30KKworZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1fbmFtZWRfYWJvcnQgKHVuc2lnbmVkIGNoYXIgY29uc3QgX19jb2RlKQoreworICBfX2J1aWx0aW5fdGFib3J0IChfX2NvZGUpOworfQorCitleHRlcm4gX19pbmxpbmUgdm9pZAorX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9yZXN1bWUgKHZvaWQpCit7CisgIF9fYnVpbHRpbl90cmVzdW1lICgpOworfQorCitleHRlcm4gX19pbmxpbmUgdm9pZAorX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9zdXNwZW5kICh2b2lkKQoreworICBfX2J1aWx0aW5fdHN1c3BlbmQgKCk7Cit9CisKK2V4dGVybiBfX2lubGluZSBsb25nCitfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfX1RNX2lzX3VzZXJfYWJvcnQgKHZvaWQqIGNvbnN0IF9fVE1fYnVmZikKK3sKKyAgdGV4YXNydV90IHRleGFzcnUgPSAqX1RFWEFTUlVfUFRSIChfX1RNX2J1ZmYpOworICByZXR1cm4gX1RFWEFTUlVfQUJPUlQgKHRleGFzcnUpOworfQorCitleHRlcm4gX19pbmxpbmUgbG9uZworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9pc19uYW1lZF91c2VyX2Fib3J0ICh2b2lkKiBjb25zdCBfX1RNX2J1ZmYsIHVuc2lnbmVkIGNoYXIgKl9fY29kZSkKK3sKKyAgdGV4YXNydV90IHRleGFzcnUgPSAqX1RFWEFTUlVfUFRSIChfX1RNX2J1ZmYpOworCisgICpfX2NvZGUgPSBfVEVYQVNSVV9GQUlMVVJFX0NPREUgKHRleGFzcnUpOworICByZXR1cm4gX1RFWEFTUlVfQUJPUlQgKHRleGFzcnUpOworfQorCitleHRlcm4gX19pbmxpbmUgbG9uZworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9pc19pbGxlZ2FsICh2b2lkKiBjb25zdCBfX1RNX2J1ZmYpCit7CisgIHRleGFzcnVfdCB0ZXhhc3J1ID0gKl9URVhBU1JVX1BUUiAoX19UTV9idWZmKTsKKyAgcmV0dXJuIF9URVhBU1JVX0RJU0FMTE9XRUQgKHRleGFzcnUpOworfQorCitleHRlcm4gX19pbmxpbmUgbG9uZworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9pc19mb290cHJpbnRfZXhjZWVkZWQgKHZvaWQqIGNvbnN0IF9fVE1fYnVmZikKK3sKKyAgdGV4YXNydV90IHRleGFzcnUgPSAqX1RFWEFTUlVfUFRSIChfX1RNX2J1ZmYpOworICByZXR1cm4gX1RFWEFTUlVfRk9PVFBSSU5UX09WRVJGTE9XICh0ZXhhc3J1KTsKK30KKworZXh0ZXJuIF9faW5saW5lIGxvbmcKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1fbmVzdGluZ19kZXB0aCAodm9pZCogY29uc3QgX19UTV9idWZmKQoreworICB0ZXhhc3JsX3QgdGV4YXNybDsKKworICBpZiAoX0hUTV9TVEFURSAoX19idWlsdGluX3R0ZXN0ICgpKSA9PSBfSFRNX05PTlRSQU5TQUNUSU9OQUwpCisgICAgeworICAgICAgdGV4YXNybCA9ICpfVEVYQVNSTF9QVFIgKF9fVE1fYnVmZik7CisgICAgICBpZiAoIV9URVhBU1JfRkFJTFVSRV9TVU1NQVJZICh0ZXhhc3JsKSkKKyAgICAgICAgdGV4YXNybCA9IDA7CisgICAgfQorICBlbHNlCisgICAgdGV4YXNybCA9ICh0ZXhhc3JsX3QpIF9fYnVpbHRpbl9nZXRfdGV4YXNyICgpOworCisgIHJldHVybiBfVEVYQVNSX1RSQU5TQUNUSU9OX0xFVkVMICh0ZXhhc3JsKTsKK30KKworZXh0ZXJuIF9faW5saW5lIGxvbmcKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1faXNfbmVzdGVkX3Rvb19kZWVwKHZvaWQqIGNvbnN0IF9fVE1fYnVmZikKK3sKKyAgdGV4YXNydV90IHRleGFzcnUgPSAqX1RFWEFTUlVfUFRSIChfX1RNX2J1ZmYpOworICByZXR1cm4gX1RFWEFTUlVfTkVTVElOR19PVkVSRkxPVyAodGV4YXNydSk7Cit9CisKK2V4dGVybiBfX2lubGluZSBsb25nCitfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfX1RNX2lzX2NvbmZsaWN0KHZvaWQqIGNvbnN0IF9fVE1fYnVmZikKK3sKKyAgdGV4YXNydV90IHRleGFzcnUgPSAqX1RFWEFTUlVfUFRSIChUTV9idWZmKTsKKyAgLyogUmV0dXJuIFRFWEFTUiBiaXRzIDExIChTZWxmLUluZHVjZWQgQ29uZmxpY3QpIHRocm91Z2gKKyAgICAgMTQgKFRyYW5zbGF0aW9uIEludmFsaWRhdGlvbiBDb25mbGljdCkuICAqLworICByZXR1cm4gKF9URVhBU1JVX0VYVFJBQ1RfQklUUyAodGV4YXNydSwgMTQsIDQpKSA/IDEgOiAwOworfQorCitleHRlcm4gX19pbmxpbmUgbG9uZworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9pc19mYWlsdXJlX3BlcnNpc3RlbnQodm9pZCogY29uc3QgX19UTV9idWZmKQoreworICB0ZXhhc3J1X3QgdGV4YXNydSA9ICpfVEVYQVNSVV9QVFIgKF9fVE1fYnVmZik7CisgIHJldHVybiBfVEVYQVNSVV9GQUlMVVJFX1BFUlNJU1RFTlQgKHRleGFzcnUpOworfQorCitleHRlcm4gX19pbmxpbmUgbG9uZworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9mYWlsdXJlX2FkZHJlc3Modm9pZCogY29uc3QgX19UTV9idWZmKQoreworICByZXR1cm4gKl9URklBUl9QVFIgKF9fVE1fYnVmZik7Cit9CisKK2V4dGVybiBfX2lubGluZSBsb25nIGxvbmcKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1fZmFpbHVyZV9jb2RlKHZvaWQqIGNvbnN0IF9fVE1fYnVmZikKK3sKKyAgcmV0dXJuICpfVEVYQVNSX1BUUiAoX19UTV9idWZmKTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fcG93ZXJwY19fICovCisKKyNpZmRlZiBfX3MzOTBfXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKy8qIFRoZXNlIGludHJpbnNpY3MgYXJlIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKyAgIHRoZSBJQk0gWEwgY29tcGlsZXIuICBGb3IgZG9jdW1lbnRhdGlvbiBwbGVhc2Ugc2VlIHRoZSAiei9PUyBYTAorICAgQy9DKysgUHJvZ3JhbW1pbmcgR3VpZGUiIHB1YmxpY2FsbHkgYXZhaWxhYmxlIG9uIHRoZSB3ZWIuICAqLworCitzdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19UTV9zaW1wbGVfYmVnaW4gKCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl90YmVnaW5fbm9mbG9hdCAoMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX1RNX2JlZ2luICh2b2lkKiBjb25zdCBfX3RkYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl90YmVnaW5fbm9mbG9hdCAoX190ZGIpOworfQorCitzdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19UTV9lbmQgKCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl90ZW5kICgpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCitfX1RNX2Fib3J0ICgpCit7CisgIHJldHVybiBfX2J1aWx0aW5fdGFib3J0IChfSFRNX0ZJUlNUX1VTRVJfQUJPUlRfQ09ERSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX1RNX25hbWVkX2Fib3J0ICh1bnNpZ25lZCBjaGFyIGNvbnN0IF9fY29kZSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl90YWJvcnQgKChpbnQpX0hUTV9GSVJTVF9VU0VSX0FCT1JUX0NPREUgKyBfX2NvZGUpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19UTV9ub25fdHJhbnNhY3Rpb25hbF9zdG9yZSAodm9pZCogY29uc3QgX19hZGRyLCBsb25nIGxvbmcgY29uc3QgX192YWx1ZSkKK3sKKyAgX19idWlsdGluX25vbl90eF9zdG9yZSAoKHVpbnQ2NF90KilfX2FkZHIsICh1aW50NjRfdClfX3ZhbHVlKTsKK30KKworc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1fbmVzdGluZ19kZXB0aCAodm9pZCogY29uc3QgX190ZGJfcHRyKQoreworICBpbnQgZGVwdGggPSBfX2J1aWx0aW5fdHhfbmVzdGluZ19kZXB0aCAoKTsKKyAgc3RydWN0IF9faHRtX3RkYiAqdGRiID0gKHN0cnVjdCBfX2h0bV90ZGIqKV9fdGRiX3B0cjsKKworICBpZiAoZGVwdGggIT0gMCkKKyAgICByZXR1cm4gZGVwdGg7CisKKyAgaWYgKHRkYi0+Zm9ybWF0ICE9IDEpCisgICAgcmV0dXJuIDA7CisgIHJldHVybiB0ZGItPm5lc3RpbmdfZGVwdGg7Cit9CisKKy8qIFRyYW5zYWN0aW9uIGZhaWx1cmUgZGlhZ25vc3RpY3MgKi8KKworc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1faXNfdXNlcl9hYm9ydCAodm9pZCogY29uc3QgX190ZGJfcHRyKQoreworICBzdHJ1Y3QgX19odG1fdGRiICp0ZGIgPSAoc3RydWN0IF9faHRtX3RkYiopX190ZGJfcHRyOworCisgIGlmICh0ZGItPmZvcm1hdCAhPSAxKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAhISh0ZGItPmFib3J0X2NvZGUgPj0gX0hUTV9GSVJTVF9VU0VSX0FCT1JUX0NPREUpOworfQorCitzdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19UTV9pc19uYW1lZF91c2VyX2Fib3J0ICh2b2lkKiBjb25zdCBfX3RkYl9wdHIsIHVuc2lnbmVkIGNoYXIqIF9fY29kZSkKK3sKKyAgc3RydWN0IF9faHRtX3RkYiAqdGRiID0gKHN0cnVjdCBfX2h0bV90ZGIqKV9fdGRiX3B0cjsKKworICBpZiAodGRiLT5mb3JtYXQgIT0gMSkKKyAgICByZXR1cm4gMDsKKworICBpZiAodGRiLT5hYm9ydF9jb2RlID49IF9IVE1fRklSU1RfVVNFUl9BQk9SVF9DT0RFKQorICAgIHsKKyAgICAgICpfX2NvZGUgPSB0ZGItPmFib3J0X2NvZGUgLSBfSFRNX0ZJUlNUX1VTRVJfQUJPUlRfQ09ERTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZSBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX1RNX2lzX2lsbGVnYWwgKHZvaWQqIGNvbnN0IF9fdGRiX3B0cikKK3sKKyAgc3RydWN0IF9faHRtX3RkYiAqdGRiID0gKHN0cnVjdCBfX2h0bV90ZGIqKV9fdGRiX3B0cjsKKworICByZXR1cm4gKHRkYi0+Zm9ybWF0ID09IDEKKwkgICYmICh0ZGItPmFib3J0X2NvZGUgPT0gNCAvKiB1bmZpbHRlcmVkIHByb2dyYW0gaW50ZXJydXB0aW9uICovCisJICAgICAgfHwgdGRiLT5hYm9ydF9jb2RlID09IDExIC8qIHJlc3RyaWN0ZWQgaW5zdHJ1Y3Rpb24gKi8pKTsKK30KKworc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1faXNfZm9vdHByaW50X2V4Y2VlZGVkICh2b2lkKiBjb25zdCBfX3RkYl9wdHIpCit7CisgIHN0cnVjdCBfX2h0bV90ZGIgKnRkYiA9IChzdHJ1Y3QgX19odG1fdGRiKilfX3RkYl9wdHI7CisKKyAgcmV0dXJuICh0ZGItPmZvcm1hdCA9PSAxCisJICAmJiAodGRiLT5hYm9ydF9jb2RlID09IDcgLyogZmV0Y2ggb3ZlcmZsb3cgKi8KKwkgICAgICB8fCB0ZGItPmFib3J0X2NvZGUgPT0gOCAvKiBzdG9yZSBvdmVyZmxvdyAqLykpOworfQorCitzdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19UTV9pc19uZXN0ZWRfdG9vX2RlZXAgKHZvaWQqIGNvbnN0IF9fdGRiX3B0cikKK3sKKyAgc3RydWN0IF9faHRtX3RkYiAqdGRiID0gKHN0cnVjdCBfX2h0bV90ZGIqKV9fdGRiX3B0cjsKKworICByZXR1cm4gdGRiLT5mb3JtYXQgPT0gMSAmJiB0ZGItPmFib3J0X2NvZGUgPT0gMTM7IC8qIGRlcHRoIGV4Y2VlZGVkICovCit9CisKK3N0YXRpYyBfX2lubGluZSBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX1RNX2lzX2NvbmZsaWN0ICh2b2lkKiBjb25zdCBfX3RkYl9wdHIpCit7CisgIHN0cnVjdCBfX2h0bV90ZGIgKnRkYiA9IChzdHJ1Y3QgX19odG1fdGRiKilfX3RkYl9wdHI7CisKKyAgcmV0dXJuICh0ZGItPmZvcm1hdCA9PSAxCisJICAmJiAodGRiLT5hYm9ydF9jb2RlID09IDkgLyogZmV0Y2ggY29uZmxpY3QgKi8KKwkgICAgICB8fCB0ZGItPmFib3J0X2NvZGUgPT0gMTAgLyogc3RvcmUgY29uZmxpY3QgKi8pKTsKK30KKworc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1faXNfZmFpbHVyZV9wZXJzaXN0ZW50IChsb25nIGNvbnN0IF9fcmVzdWx0KQoreworICByZXR1cm4gX19yZXN1bHQgPT0gX0hUTV9UQkVHSU5fUEVSU0lTVEVOVDsKK30KKworc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1fZmFpbHVyZV9hZGRyZXNzICh2b2lkKiBjb25zdCBfX3RkYl9wdHIpCit7CisgIHN0cnVjdCBfX2h0bV90ZGIgKnRkYiA9IChzdHJ1Y3QgX19odG1fdGRiKilfX3RkYl9wdHI7CisgIHJldHVybiB0ZGItPmF0aWE7Cit9CisKK3N0YXRpYyBfX2lubGluZSBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX1RNX2ZhaWx1cmVfY29kZSAodm9pZCogY29uc3QgX190ZGJfcHRyKQoreworICBzdHJ1Y3QgX19odG1fdGRiICp0ZGIgPSAoc3RydWN0IF9faHRtX3RkYiopX190ZGJfcHRyOworCisgIHJldHVybiB0ZGItPmFib3J0X2NvZGU7Cit9CisKKyNlbmRpZiAvKiBfX3MzOTBfXyAqLworCisjZW5kaWYgLyogX19IVE1YTElOVFJJTl9IICAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9pYTMyaW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2lhMzJpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTI4MzAwCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9pYTMyaW50cmluLmgKQEAgLTAsMCArMSw3MyBAQAorLyogPT09LS0tLS0tLS0gaWEzMmludHJpbi5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX1g4NklOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8aWEzMmludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8eDg2aW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19JQTMySU5UUklOX0gKKyNkZWZpbmUgX19JQTMySU5UUklOX0gKKworI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19yZWFkZWZsYWdzKHZvaWQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZWFkZWZsYWdzX3U2NCgpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3dyaXRlZWZsYWdzKHVuc2lnbmVkIGxvbmcgbG9uZyBfX2YpCit7CisgIF9fYnVpbHRpbl9pYTMyX3dyaXRlZWZsYWdzX3U2NChfX2YpOworfQorCisjZWxzZSAvKiAhX194ODZfNjRfXyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3JlYWRlZmxhZ3Modm9pZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JlYWRlZmxhZ3NfdTMyKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fd3JpdGVlZmxhZ3ModW5zaWduZWQgaW50IF9fZikKK3sKKyAgX19idWlsdGluX2lhMzJfd3JpdGVlZmxhZ3NfdTMyKF9fZik7Cit9CisjZW5kaWYgLyogIV9feDg2XzY0X18gKi8KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3JkcG1jKGludCBfX0EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkcG1jKF9fQSk7Cit9CisKKy8qIF9fcmR0c2NwICovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fcmR0c2NwKHVuc2lnbmVkIGludCAqX19BKSB7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZHRzY3AoX19BKTsKK30KKworI2RlZmluZSBfcmR0c2MoKSBfX3JkdHNjKCkKKworI2RlZmluZSBfcmRwbWMoQSkgX19yZHBtYyhBKQorCisjZW5kaWYgLyogX19JQTMySU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvaW1taW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2ltbWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMjc1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2ltbWludHJpbi5oCkBAIC0wLDAgKzEsMjgzIEBACisvKj09PS0tLS0gaW1taW50cmluLmggLSBJbnRlbCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNkZWZpbmUgX19JTU1JTlRSSU5fSAorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX01NWF9fKQorI2luY2x1ZGUgPG1taW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19TU0VfXykKKyNpbmNsdWRlIDx4bW1pbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX1NTRTJfXykKKyNpbmNsdWRlIDxlbW1pbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX1NTRTNfXykKKyNpbmNsdWRlIDxwbW1pbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX1NTU0UzX18pCisjaW5jbHVkZSA8dG1taW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IFwKKyAgICAoZGVmaW5lZChfX1NTRTRfMl9fKSB8fCBkZWZpbmVkKF9fU1NFNF8xX18pKQorI2luY2x1ZGUgPHNtbWludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBcCisgICAgKGRlZmluZWQoX19BRVNfXykgfHwgZGVmaW5lZChfX1BDTE1VTF9fKSkKKyNpbmNsdWRlIDx3bW1pbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0NMRkxVU0hPUFRfXykKKyNpbmNsdWRlIDxjbGZsdXNob3B0aW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19BVlhfXykKKyNpbmNsdWRlIDxhdnhpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0FWWDJfXykKKyNpbmNsdWRlIDxhdngyaW50cmluLmg+CisKKy8qIFRoZSAyNTYtYml0IHZlcnNpb25zIG9mIGZ1bmN0aW9ucyBpbiBmMTZjaW50cmluLmguCisgICBJbnRlbCBkb2N1bWVudHMgdGhlc2UgYXMgYmVpbmcgaW4gaW1taW50cmluLmgsIGFuZAorICAgdGhleSBkZXBlbmQgb24gdHlwZWRlZnMgZnJvbSBhdnhpbnRyaW4uaC4gKi8KKworI2RlZmluZSBfbW0yNTZfY3Z0cHNfcGgoYSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92Y3Z0cHMycGgyNTYoKF9fdjhzZikoX19tMjU2KShhKSwgKGltbSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZjE2YyIpKSkKK19tbTI1Nl9jdnRwaF9wcyhfX20xMjhpIF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmN2dHBoMnBzMjU2KChfX3Y4aGkpX19hKTsKK30KKyNlbmRpZiAvKiBfX0FWWDJfXyAqLworCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0JNSV9fKQorI2luY2x1ZGUgPGJtaWludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fQk1JMl9fKQorI2luY2x1ZGUgPGJtaTJpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0xaQ05UX18pCisjaW5jbHVkZSA8bHpjbnRpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0ZNQV9fKQorI2luY2x1ZGUgPGZtYWludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fQVZYNTEyRl9fKQorI2luY2x1ZGUgPGF2eDUxMmZpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0FWWDUxMlZMX18pCisjaW5jbHVkZSA8YXZ4NTEydmxpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0FWWDUxMkJXX18pCisjaW5jbHVkZSA8YXZ4NTEyYndpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0FWWDUxMkNEX18pCisjaW5jbHVkZSA8YXZ4NTEyY2RpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0FWWDUxMkRRX18pCisjaW5jbHVkZSA8YXZ4NTEyZHFpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgXAorICAgIChkZWZpbmVkKF9fQVZYNTEyVkxfXykgJiYgZGVmaW5lZChfX0FWWDUxMkJXX18pKQorI2luY2x1ZGUgPGF2eDUxMnZsYndpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgXAorICAgIChkZWZpbmVkKF9fQVZYNTEyVkxfXykgJiYgZGVmaW5lZChfX0FWWDUxMkNEX18pKQorI2luY2x1ZGUgPGF2eDUxMnZsY2RpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgXAorICAgIChkZWZpbmVkKF9fQVZYNTEyVkxfXykgJiYgZGVmaW5lZChfX0FWWDUxMkRRX18pKQorI2luY2x1ZGUgPGF2eDUxMnZsZHFpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0FWWDUxMkVSX18pCisjaW5jbHVkZSA8YXZ4NTEyZXJpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0FWWDUxMklGTUFfXykKKyNpbmNsdWRlIDxhdng1MTJpZm1haW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IFwKKyAgICAoZGVmaW5lZChfX0FWWDUxMklGTUFfXykgJiYgZGVmaW5lZChfX0FWWDUxMlZMX18pKQorI2luY2x1ZGUgPGF2eDUxMmlmbWF2bGludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fQVZYNTEyVkJNSV9fKQorI2luY2x1ZGUgPGF2eDUxMnZibWlpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgXAorICAgIChkZWZpbmVkKF9fQVZYNTEyVkJNSV9fKSAmJiBkZWZpbmVkKF9fQVZYNTEyVkxfXykpCisjaW5jbHVkZSA8YXZ4NTEydmJtaXZsaW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19BVlg1MTJQRl9fKQorI2luY2x1ZGUgPGF2eDUxMnBmaW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19QS1VfXykKKyNpbmNsdWRlIDxwa3VpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX1JEUk5EX18pCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJyZHJuZCIpKSkKK19yZHJhbmQxNl9zdGVwKHVuc2lnbmVkIHNob3J0ICpfX3ApCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZHJhbmQxNl9zdGVwKF9fcCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInJkcm5kIikpKQorX3JkcmFuZDMyX3N0ZXAodW5zaWduZWQgaW50ICpfX3ApCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZHJhbmQzMl9zdGVwKF9fcCk7Cit9CisKKy8qIF9fYml0X3NjYW5fZm9yd2FyZCAqLworc3RhdGljIF9faW5saW5lX18gaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfYml0X3NjYW5fZm9yd2FyZChpbnQgX19BKSB7CisgIHJldHVybiBfX2J1aWx0aW5fY3R6KF9fQSk7Cit9CisKKy8qIF9fYml0X3NjYW5fcmV2ZXJzZSAqLworc3RhdGljIF9faW5saW5lX18gaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfYml0X3NjYW5fcmV2ZXJzZShpbnQgX19BKSB7CisgIHJldHVybiAzMSAtIF9fYnVpbHRpbl9jbHooX19BKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInJkcm5kIikpKQorX3JkcmFuZDY0X3N0ZXAodW5zaWduZWQgbG9uZyBsb25nICpfX3ApCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZHJhbmQ2NF9zdGVwKF9fcCk7Cit9CisjZW5kaWYKKyNlbmRpZiAvKiBfX1JEUk5EX18gKi8KKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19GU0dTQkFTRV9fKQorI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZzZ3NiYXNlIikpKQorX3JlYWRmc2Jhc2VfdTMyKHZvaWQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZGZzYmFzZTMyKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZzZ3NiYXNlIikpKQorX3JlYWRmc2Jhc2VfdTY0KHZvaWQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZGZzYmFzZTY0KCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZzZ3NiYXNlIikpKQorX3JlYWRnc2Jhc2VfdTMyKHZvaWQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZGdzYmFzZTMyKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZzZ3NiYXNlIikpKQorX3JlYWRnc2Jhc2VfdTY0KHZvaWQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZGdzYmFzZTY0KCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJmc2dzYmFzZSIpKSkKK193cml0ZWZzYmFzZV91MzIodW5zaWduZWQgaW50IF9fVikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3dyZnNiYXNlMzIoX19WKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZzZ3NiYXNlIikpKQorX3dyaXRlZnNiYXNlX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19WKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfd3Jmc2Jhc2U2NChfX1YpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZnNnc2Jhc2UiKSkpCitfd3JpdGVnc2Jhc2VfdTMyKHVuc2lnbmVkIGludCBfX1YpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl93cmdzYmFzZTMyKF9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJmc2dzYmFzZSIpKSkKK193cml0ZWdzYmFzZV91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fVikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3dyZ3NiYXNlNjQoX19WKTsKK30KKworI2VuZGlmCisjZW5kaWYgLyogX19GU0dTQkFTRV9fICovCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fUlRNX18pCisjaW5jbHVkZSA8cnRtaW50cmluLmg+CisjaW5jbHVkZSA8eHRlc3RpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX1NIQV9fKQorI2luY2x1ZGUgPHNoYWludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fRlhTUl9fKQorI2luY2x1ZGUgPGZ4c3JpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX1hTQVZFX18pCisjaW5jbHVkZSA8eHNhdmVpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX1hTQVZFT1BUX18pCisjaW5jbHVkZSA8eHNhdmVvcHRpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX1hTQVZFQ19fKQorI2luY2x1ZGUgPHhzYXZlY2ludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fWFNBVkVTX18pCisjaW5jbHVkZSA8eHNhdmVzaW50cmluLmg+CisjZW5kaWYKKworLyogU29tZSBpbnRyaW5zaWNzIGluc2lkZSBhZHhpbnRyaW4uaCBhcmUgYXZhaWxhYmxlIG9ubHkgb24gcHJvY2Vzc29ycyB3aXRoIEFEWCwKKyAqIHdoZXJlYXMgb3RoZXJzIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBhbGwgdGltZXMuICovCisjaW5jbHVkZSA8YWR4aW50cmluLmg+CisKKyNlbmRpZiAvKiBfX0lNTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2ludHJpbi5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmNiYjlhCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9pbnRyaW4uaApAQCAtMCwwICsxLDExMTggQEAKKy8qID09PS0tLS0tLS0tIGludHJpbi5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworLyogT25seSBpbmNsdWRlIHRoaXMgaWYgd2UncmUgY29tcGlsaW5nIGZvciB0aGUgd2luZG93cyBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgX01TQ19WRVIKKyNpbmNsdWRlX25leHQgPGludHJpbi5oPgorI2Vsc2UKKworI2lmbmRlZiBfX0lOVFJJTl9ICisjZGVmaW5lIF9fSU5UUklOX0gKKworLyogRmlyc3QgaW5jbHVkZSB0aGUgc3RhbmRhcmQgaW50cmluc2ljcy4gKi8KKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisjaW5jbHVkZSA8eDg2aW50cmluLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19hcm1fXykKKyNpbmNsdWRlIDxhcm1pbnRyLmg+CisjZW5kaWYKKworLyogRm9yIHRoZSBkZWZpbml0aW9uIG9mIGptcF9idWYuICovCisjaWYgX19TVERDX0hPU1RFRF9fCisjaW5jbHVkZSA8c2V0am1wLmg+CisjZW5kaWYKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX01NWF9fKQorLyogQW5kIHRoZSByYW5kb20gb25lcyB0aGF0IGFyZW4ndCBpbiB0aG9zZSBmaWxlcy4gKi8KK19fbTY0IF9tX2Zyb21fZmxvYXQoZmxvYXQpOworZmxvYXQgX21fdG9fZmxvYXQoX19tNjQpOworI2VuZGlmCisKKy8qIE90aGVyIGFzc29ydGVkIGluc3RydWN0aW9uIGludHJpbnNpY3MuICovCit2b2lkIF9fYWRkZnNieXRlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIpOwordm9pZCBfX2FkZGZzZHdvcmQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Cit2b2lkIF9fYWRkZnN3b3JkKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIHNob3J0KTsKK3ZvaWQgX19jb2RlX3NlZyhjb25zdCBjaGFyICopOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX19jcHVpZChpbnRbNF0sIGludCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfX2NwdWlkZXgoaW50WzRdLCBpbnQsIGludCk7Cit2b2lkIF9fZGVidWdicmVhayh2b2lkKTsKK3N0YXRpYyBfX2lubGluZV9fCitfX2ludDY0IF9fZW11bChpbnQsIGludCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgX19pbnQ2NCBfX2VtdWx1KHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK3ZvaWQgX19jZGVjbCBfX2Zhc3RmYWlsKHVuc2lnbmVkIGludCk7Cit1bnNpZ25lZCBpbnQgX19nZXRjYWxsZXJzZWZsYWdzKHZvaWQpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX19oYWx0KHZvaWQpOwordW5zaWduZWQgY2hhciBfX2luYnl0ZSh1bnNpZ25lZCBzaG9ydCk7Cit2b2lkIF9faW5ieXRlc3RyaW5nKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGxvbmcpOwordm9pZCBfX2luY2ZzYnl0ZSh1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX19pbmNmc2R3b3JkKHVuc2lnbmVkIGxvbmcpOwordm9pZCBfX2luY2Zzd29yZCh1bnNpZ25lZCBsb25nKTsKK3Vuc2lnbmVkIGxvbmcgX19pbmR3b3JkKHVuc2lnbmVkIHNob3J0KTsKK3ZvaWQgX19pbmR3b3Jkc3RyaW5nKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcpOwordm9pZCBfX2ludDJjKHZvaWQpOwordm9pZCBfX2ludmxwZyh2b2lkICopOwordW5zaWduZWQgc2hvcnQgX19pbndvcmQodW5zaWduZWQgc2hvcnQpOwordm9pZCBfX2lud29yZHN0cmluZyh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQgKiwgdW5zaWduZWQgbG9uZyk7Cit2b2lkIF9fbGlkdCh2b2lkICopOwordW5zaWduZWQgX19pbnQ2NCBfX2xsX2xzaGlmdCh1bnNpZ25lZCBfX2ludDY0LCBpbnQpOworX19pbnQ2NCBfX2xsX3JzaGlmdChfX2ludDY0LCBpbnQpOwordm9pZCBfX2xsd3BjYih2b2lkICopOwordW5zaWduZWQgY2hhciBfX2x3cGluczMyKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwordm9pZCBfX2x3cHZhbDMyKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwordW5zaWduZWQgaW50IF9fbHpjbnQodW5zaWduZWQgaW50KTsKK3Vuc2lnbmVkIHNob3J0IF9fbHpjbnQxNih1bnNpZ25lZCBzaG9ydCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfX21vdnNiKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciBjb25zdCAqLCBzaXplX3QpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX19tb3ZzZCh1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgY29uc3QgKiwgc2l6ZV90KTsKK3N0YXRpYyBfX2lubGluZV9fCit2b2lkIF9fbW92c3codW5zaWduZWQgc2hvcnQgKiwgdW5zaWduZWQgc2hvcnQgY29uc3QgKiwgc2l6ZV90KTsKK3N0YXRpYyBfX2lubGluZV9fCit2b2lkIF9fbm9wKHZvaWQpOwordm9pZCBfX252cmVnX3Jlc3RvcmVfZmVuY2Uodm9pZCk7Cit2b2lkIF9fbnZyZWdfc2F2ZV9mZW5jZSh2b2lkKTsKK3ZvaWQgX19vdXRieXRlKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBjaGFyKTsKK3ZvaWQgX19vdXRieXRlc3RyaW5nKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGxvbmcpOwordm9pZCBfX291dGR3b3JkKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX19vdXRkd29yZHN0cmluZyh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX19vdXR3b3JkKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7Cit2b2lkIF9fb3V0d29yZHN0cmluZyh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQgKiwgdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgaW50IF9fcG9wY250KHVuc2lnbmVkIGludCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgc2hvcnQgX19wb3BjbnQxNih1bnNpZ25lZCBzaG9ydCk7Cit1bnNpZ25lZCBsb25nIF9fcmVhZGNyMCh2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgX19yZWFkY3IyKHZvaWQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGxvbmcgX19yZWFkY3IzKHZvaWQpOwordW5zaWduZWQgbG9uZyBfX3JlYWRjcjQodm9pZCk7Cit1bnNpZ25lZCBsb25nIF9fcmVhZGNyOCh2b2lkKTsKK3Vuc2lnbmVkIGludCBfX3JlYWRkcih1bnNpZ25lZCBpbnQpOworI2lmZGVmIF9faTM4Nl9fCitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgY2hhciBfX3JlYWRmc2J5dGUodW5zaWduZWQgbG9uZyk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgbG9uZyBfX3JlYWRmc2R3b3JkKHVuc2lnbmVkIGxvbmcpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIF9faW50NjQgX19yZWFkZnNxd29yZCh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBzaG9ydCBfX3JlYWRmc3dvcmQodW5zaWduZWQgbG9uZyk7CisjZW5kaWYKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBfX2ludDY0IF9fcmVhZG1zcih1bnNpZ25lZCBsb25nKTsKK3Vuc2lnbmVkIF9faW50NjQgX19yZWFkcG1jKHVuc2lnbmVkIGxvbmcpOwordW5zaWduZWQgbG9uZyBfX3NlZ21lbnRsaW1pdCh1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX19zaWR0KHZvaWQgKik7Cit2b2lkICpfX3Nsd3BjYih2b2lkKTsKK3N0YXRpYyBfX2lubGluZV9fCit2b2lkIF9fc3Rvc2IodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyLCBzaXplX3QpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX19zdG9zZCh1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcsIHNpemVfdCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfX3N0b3N3KHVuc2lnbmVkIHNob3J0ICosIHVuc2lnbmVkIHNob3J0LCBzaXplX3QpOwordm9pZCBfX3N2bV9jbGdpKHZvaWQpOwordm9pZCBfX3N2bV9pbnZscGdhKHZvaWQgKiwgaW50KTsKK3ZvaWQgX19zdm1fc2tpbml0KGludCk7Cit2b2lkIF9fc3ZtX3N0Z2kodm9pZCk7Cit2b2lkIF9fc3ZtX3ZtbG9hZChzaXplX3QpOwordm9pZCBfX3N2bV92bXJ1bihzaXplX3QpOwordm9pZCBfX3N2bV92bXNhdmUoc2l6ZV90KTsKK3ZvaWQgX191ZDIodm9pZCk7Cit1bnNpZ25lZCBfX2ludDY0IF9fdWxsX3JzaGlmdCh1bnNpZ25lZCBfX2ludDY0LCBpbnQpOwordm9pZCBfX3ZteF9vZmYodm9pZCk7Cit2b2lkIF9fdm14X3ZtcHRyc3QodW5zaWduZWQgX19pbnQ2NCAqKTsKK3ZvaWQgX193YmludmQodm9pZCk7Cit2b2lkIF9fd3JpdGVjcjAodW5zaWduZWQgaW50KTsKK3N0YXRpYyBfX2lubGluZV9fCit2b2lkIF9fd3JpdGVjcjModW5zaWduZWQgaW50KTsKK3ZvaWQgX193cml0ZWNyNCh1bnNpZ25lZCBpbnQpOwordm9pZCBfX3dyaXRlY3I4KHVuc2lnbmVkIGludCk7Cit2b2lkIF9fd3JpdGVkcih1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Cit2b2lkIF9fd3JpdGVmc2J5dGUodW5zaWduZWQgbG9uZywgdW5zaWduZWQgY2hhcik7Cit2b2lkIF9fd3JpdGVmc2R3b3JkKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwordm9pZCBfX3dyaXRlZnNxd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBfX2ludDY0KTsKK3ZvaWQgX193cml0ZWZzd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBzaG9ydCk7Cit2b2lkIF9fd3JpdGVtc3IodW5zaWduZWQgbG9uZywgdW5zaWduZWQgX19pbnQ2NCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCAqX0FkZHJlc3NPZlJldHVybkFkZHJlc3Modm9pZCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgY2hhciBfQml0U2NhbkZvcndhcmQodW5zaWduZWQgbG9uZyAqX0luZGV4LCB1bnNpZ25lZCBsb25nIF9NYXNrKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9CaXRTY2FuUmV2ZXJzZSh1bnNpZ25lZCBsb25nICpfSW5kZXgsIHVuc2lnbmVkIGxvbmcgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGNoYXIgX2JpdHRlc3QobG9uZyBjb25zdCAqLCBsb25nKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9iaXR0ZXN0YW5kY29tcGxlbWVudChsb25nICosIGxvbmcpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGNoYXIgX2JpdHRlc3RhbmRyZXNldChsb25nICosIGxvbmcpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGNoYXIgX2JpdHRlc3RhbmRzZXQobG9uZyAqLCBsb25nKTsKK3Vuc2lnbmVkIF9faW50NjQgX19jZGVjbCBfYnl0ZXN3YXBfdWludDY0KHVuc2lnbmVkIF9faW50NjQpOwordW5zaWduZWQgbG9uZyBfX2NkZWNsIF9ieXRlc3dhcF91bG9uZyh1bnNpZ25lZCBsb25nKTsKK3Vuc2lnbmVkIHNob3J0IF9fY2RlY2wgX2J5dGVzd2FwX3VzaG9ydCh1bnNpZ25lZCBzaG9ydCk7Cit2b2lkIF9fY2RlY2wgX2Rpc2FibGUodm9pZCk7Cit2b2lkIF9fY2RlY2wgX2VuYWJsZSh2b2lkKTsKK2xvbmcgX0ludGVybG9ja2VkQWRkTGFyZ2VTdGF0aXN0aWMoX19pbnQ2NCB2b2xhdGlsZSAqX0FkZGVuZCwgbG9uZyBfVmFsdWUpOworc3RhdGljIF9faW5saW5lX18KK2xvbmcgX0ludGVybG9ja2VkQW5kKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzayk7CitzdGF0aWMgX19pbmxpbmVfXworc2hvcnQgX0ludGVybG9ja2VkQW5kMTYoc2hvcnQgdm9sYXRpbGUgKl9WYWx1ZSwgc2hvcnQgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK2NoYXIgX0ludGVybG9ja2VkQW5kOChjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spOwordW5zaWduZWQgY2hhciBfaW50ZXJsb2NrZWRiaXR0ZXN0YW5kcmVzZXQobG9uZyB2b2xhdGlsZSAqLCBsb25nKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9pbnRlcmxvY2tlZGJpdHRlc3RhbmRzZXQobG9uZyB2b2xhdGlsZSAqLCBsb25nKTsKK3N0YXRpYyBfX2lubGluZV9fCitsb25nIF9fY2RlY2wgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKGxvbmcgdm9sYXRpbGUgKl9EZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfRXhjaGFuZ2UsIGxvbmcgX0NvbXBhcmFuZCk7Citsb25nIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZV9ITEVBY3F1aXJlKGxvbmcgdm9sYXRpbGUgKiwgbG9uZywgbG9uZyk7Citsb25nIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZV9ITEVSZWxlYXNlKGxvbmcgdm9sYXRpbGUgKiwgbG9uZywgbG9uZyk7CitzdGF0aWMgX19pbmxpbmVfXworc2hvcnQgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlMTYoc2hvcnQgdm9sYXRpbGUgKl9EZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IF9FeGNoYW5nZSwgc2hvcnQgX0NvbXBhcmFuZCk7CitzdGF0aWMgX19pbmxpbmVfXworX19pbnQ2NCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2U2NChfX2ludDY0IHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW50NjQgX0V4Y2hhbmdlLCBfX2ludDY0IF9Db21wYXJhbmQpOworX19pbnQ2NCBfSW50ZXJsb2NrZWRjb21wYXJlRXhjaGFuZ2U2NF9ITEVBY3F1aXJlKF9faW50NjQgdm9sYXRpbGUgKiwgX19pbnQ2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ludDY0KTsKK19faW50NjQgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlNjRfSExFUmVsZWFzZShfX2ludDY0IHZvbGF0aWxlICosIF9faW50NjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCk7CitzdGF0aWMgX19pbmxpbmVfXworY2hhciBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2U4KGNoYXIgdm9sYXRpbGUgKl9EZXN0aW5hdGlvbiwgY2hhciBfRXhjaGFuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfQ29tcGFyYW5kKTsKK3ZvaWQgKl9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZVBvaW50ZXJfSExFQWNxdWlyZSh2b2lkICp2b2xhdGlsZSAqLCB2b2lkICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKTsKK3ZvaWQgKl9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZVBvaW50ZXJfSExFUmVsZWFzZSh2b2lkICp2b2xhdGlsZSAqLCB2b2lkICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKTsKK3N0YXRpYyBfX2lubGluZV9fCitsb25nIF9fY2RlY2wgX0ludGVybG9ja2VkRGVjcmVtZW50KGxvbmcgdm9sYXRpbGUgKl9BZGRlbmQpOworc3RhdGljIF9faW5saW5lX18KK3Nob3J0IF9JbnRlcmxvY2tlZERlY3JlbWVudDE2KHNob3J0IHZvbGF0aWxlICpfQWRkZW5kKTsKK2xvbmcgX0ludGVybG9ja2VkRXhjaGFuZ2UobG9uZyB2b2xhdGlsZSAqX1RhcmdldCwgbG9uZyBfVmFsdWUpOworc3RhdGljIF9faW5saW5lX18KK3Nob3J0IF9JbnRlcmxvY2tlZEV4Y2hhbmdlMTYoc2hvcnQgdm9sYXRpbGUgKl9UYXJnZXQsIHNob3J0IF9WYWx1ZSk7CitzdGF0aWMgX19pbmxpbmVfXworY2hhciBfSW50ZXJsb2NrZWRFeGNoYW5nZTgoY2hhciB2b2xhdGlsZSAqX1RhcmdldCwgY2hhciBfVmFsdWUpOworc3RhdGljIF9faW5saW5lX18KK2xvbmcgX19jZGVjbCBfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZChsb25nIHZvbGF0aWxlICpfQWRkZW5kLCBsb25nIF9WYWx1ZSk7Citsb25nIF9JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkX0hMRUFjcXVpcmUobG9uZyB2b2xhdGlsZSAqLCBsb25nKTsKK2xvbmcgX0ludGVybG9ja2VkRXhjaGFuZ2VBZGRfSExFUmVsZWFzZShsb25nIHZvbGF0aWxlICosIGxvbmcpOworc3RhdGljIF9faW5saW5lX18KK3Nob3J0IF9JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkMTYoc2hvcnQgdm9sYXRpbGUgKl9BZGRlbmQsIHNob3J0IF9WYWx1ZSk7CitfX2ludDY0IF9JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkNjRfSExFQWNxdWlyZShfX2ludDY0IHZvbGF0aWxlICosIF9faW50NjQpOworX19pbnQ2NCBfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDY0X0hMRVJlbGVhc2UoX19pbnQ2NCB2b2xhdGlsZSAqLCBfX2ludDY0KTsKK3N0YXRpYyBfX2lubGluZV9fCitjaGFyIF9JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkOChjaGFyIHZvbGF0aWxlICpfQWRkZW5kLCBjaGFyIF9WYWx1ZSk7CitzdGF0aWMgX19pbmxpbmVfXworbG9uZyBfX2NkZWNsIF9JbnRlcmxvY2tlZEluY3JlbWVudChsb25nIHZvbGF0aWxlICpfQWRkZW5kKTsKK3N0YXRpYyBfX2lubGluZV9fCitzaG9ydCBfSW50ZXJsb2NrZWRJbmNyZW1lbnQxNihzaG9ydCB2b2xhdGlsZSAqX0FkZGVuZCk7CitzdGF0aWMgX19pbmxpbmVfXworbG9uZyBfSW50ZXJsb2NrZWRPcihsb25nIHZvbGF0aWxlICpfVmFsdWUsIGxvbmcgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK3Nob3J0IF9JbnRlcmxvY2tlZE9yMTYoc2hvcnQgdm9sYXRpbGUgKl9WYWx1ZSwgc2hvcnQgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK2NoYXIgX0ludGVybG9ja2VkT3I4KGNoYXIgdm9sYXRpbGUgKl9WYWx1ZSwgY2hhciBfTWFzayk7CitzdGF0aWMgX19pbmxpbmVfXworbG9uZyBfSW50ZXJsb2NrZWRYb3IobG9uZyB2b2xhdGlsZSAqX1ZhbHVlLCBsb25nIF9NYXNrKTsKK3N0YXRpYyBfX2lubGluZV9fCitzaG9ydCBfSW50ZXJsb2NrZWRYb3IxNihzaG9ydCB2b2xhdGlsZSAqX1ZhbHVlLCBzaG9ydCBfTWFzayk7CitzdGF0aWMgX19pbmxpbmVfXworY2hhciBfSW50ZXJsb2NrZWRYb3I4KGNoYXIgdm9sYXRpbGUgKl9WYWx1ZSwgY2hhciBfTWFzayk7Cit2b2lkIF9fY2RlY2wgX2ludnBjaWQodW5zaWduZWQgaW50LCB2b2lkICopOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGxvbmcgX19jZGVjbCBfbHJvdGwodW5zaWduZWQgbG9uZywgaW50KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBsb25nIF9fY2RlY2wgX2xyb3RyKHVuc2lnbmVkIGxvbmcsIGludCk7CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIG90aGVyIGludHJpbnNpY3Mgb3IgQysrMTEgYXRvbWljcyBpbnN0ZWFkIikpKQorX1JlYWRCYXJyaWVyKHZvaWQpOworc3RhdGljIF9faW5saW5lX18gdm9pZAorX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBvdGhlciBpbnRyaW5zaWNzIG9yIEMrKzExIGF0b21pY3MgaW5zdGVhZCIpKSkKK19SZWFkV3JpdGVCYXJyaWVyKHZvaWQpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgKl9SZXR1cm5BZGRyZXNzKHZvaWQpOwordW5zaWduZWQgaW50IF9yb3J4X3UzMih1bnNpZ25lZCBpbnQsIGNvbnN0IHVuc2lnbmVkIGludCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgaW50IF9fY2RlY2wgX3JvdGwodW5zaWduZWQgaW50IF9WYWx1ZSwgaW50IF9TaGlmdCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgc2hvcnQgX3JvdGwxNih1bnNpZ25lZCBzaG9ydCBfVmFsdWUsIHVuc2lnbmVkIGNoYXIgX1NoaWZ0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBfX2ludDY0IF9fY2RlY2wgX3JvdGw2NCh1bnNpZ25lZCBfX2ludDY0IF9WYWx1ZSwgaW50IF9TaGlmdCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgY2hhciBfcm90bDgodW5zaWduZWQgY2hhciBfVmFsdWUsIHVuc2lnbmVkIGNoYXIgX1NoaWZ0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBpbnQgX19jZGVjbCBfcm90cih1bnNpZ25lZCBpbnQgX1ZhbHVlLCBpbnQgX1NoaWZ0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBzaG9ydCBfcm90cjE2KHVuc2lnbmVkIHNob3J0IF9WYWx1ZSwgdW5zaWduZWQgY2hhciBfU2hpZnQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIF9faW50NjQgX19jZGVjbCBfcm90cjY0KHVuc2lnbmVkIF9faW50NjQgX1ZhbHVlLCBpbnQgX1NoaWZ0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9yb3RyOCh1bnNpZ25lZCBjaGFyIF9WYWx1ZSwgdW5zaWduZWQgY2hhciBfU2hpZnQpOworaW50IF9zYXJ4X2kzMihpbnQsIHVuc2lnbmVkIGludCk7CisjaWYgX19TVERDX0hPU1RFRF9fCitpbnQgX19jZGVjbCBfc2V0am1wKGptcF9idWYpOworI2VuZGlmCit1bnNpZ25lZCBpbnQgX3NobHhfdTMyKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK3Vuc2lnbmVkIGludCBfc2hyeF91MzIodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwordm9pZCBfU3RvcmVfSExFUmVsZWFzZShsb25nIHZvbGF0aWxlICosIGxvbmcpOwordm9pZCBfU3RvcmU2NF9ITEVSZWxlYXNlKF9faW50NjQgdm9sYXRpbGUgKiwgX19pbnQ2NCk7Cit2b2lkIF9TdG9yZVBvaW50ZXJfSExFUmVsZWFzZSh2b2lkICp2b2xhdGlsZSAqLCB2b2lkICopOworc3RhdGljIF9faW5saW5lX18gdm9pZAorX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBvdGhlciBpbnRyaW5zaWNzIG9yIEMrKzExIGF0b21pY3MgaW5zdGVhZCIpKSkKK19Xcml0ZUJhcnJpZXIodm9pZCk7Cit1bnNpZ25lZCBfX2ludDMyIHhiZWdpbih2b2lkKTsKK3ZvaWQgX3hlbmQodm9pZCk7CitzdGF0aWMgX19pbmxpbmVfXworI2RlZmluZSBfWENSX1hGRUFUVVJFX0VOQUJMRURfTUFTSyAwCit1bnNpZ25lZCBfX2ludDY0IF9fY2RlY2wgX3hnZXRidih1bnNpZ25lZCBpbnQpOwordm9pZCBfX2NkZWNsIF94c2V0YnYodW5zaWduZWQgaW50LCB1bnNpZ25lZCBfX2ludDY0KTsKKworLyogVGhlc2UgYWRkaXRpb25hbCBpbnRyaW5zaWNzIGFyZSB0dXJuZWQgb24gaW4geDY0L2FtZDY0L3g4Nl82NCBtb2RlLiAqLworI2lmZGVmIF9feDg2XzY0X18KK3ZvaWQgX19hZGRnc2J5dGUodW5zaWduZWQgbG9uZywgdW5zaWduZWQgY2hhcik7Cit2b2lkIF9fYWRkZ3Nkd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX19hZGRnc3F3b3JkKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIF9faW50NjQpOwordm9pZCBfX2FkZGdzd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBzaG9ydCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfX2Zhc3RzdG9yZWZlbmNlKHZvaWQpOwordm9pZCBfX2luY2dzYnl0ZSh1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX19pbmNnc2R3b3JkKHVuc2lnbmVkIGxvbmcpOwordm9pZCBfX2luY2dzcXdvcmQodW5zaWduZWQgbG9uZyk7Cit2b2lkIF9faW5jZ3N3b3JkKHVuc2lnbmVkIGxvbmcpOwordW5zaWduZWQgY2hhciBfX2x3cGluczY0KHVuc2lnbmVkIF9faW50NjQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK3ZvaWQgX19sd3B2YWw2NCh1bnNpZ25lZCBfX2ludDY0LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Cit1bnNpZ25lZCBfX2ludDY0IF9fbHpjbnQ2NCh1bnNpZ25lZCBfX2ludDY0KTsKK3N0YXRpYyBfX2lubGluZV9fCit2b2lkIF9fbW92c3EodW5zaWduZWQgbG9uZyBsb25nICosIHVuc2lnbmVkIGxvbmcgbG9uZyBjb25zdCAqLCBzaXplX3QpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIF9faW50NjQgX19wb3BjbnQ2NCh1bnNpZ25lZCBfX2ludDY0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9fcmVhZGdzYnl0ZSh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBsb25nIF9fcmVhZGdzZHdvcmQodW5zaWduZWQgbG9uZyk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgX19pbnQ2NCBfX3JlYWRnc3F3b3JkKHVuc2lnbmVkIGxvbmcpOwordW5zaWduZWQgc2hvcnQgX19yZWFkZ3N3b3JkKHVuc2lnbmVkIGxvbmcpOwordW5zaWduZWQgX19pbnQ2NCBfX3NoaWZ0bGVmdDEyOCh1bnNpZ25lZCBfX2ludDY0IF9Mb3dQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX2ludDY0IF9IaWdoUGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfU2hpZnQpOwordW5zaWduZWQgX19pbnQ2NCBfX3NoaWZ0cmlnaHQxMjgodW5zaWduZWQgX19pbnQ2NCBfTG93UGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9faW50NjQgX0hpZ2hQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfU2hpZnQpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX19zdG9zcSh1bnNpZ25lZCBfX2ludDY0ICosIHVuc2lnbmVkIF9faW50NjQsIHNpemVfdCk7Cit1bnNpZ25lZCBjaGFyIF9fdm14X29uKHVuc2lnbmVkIF9faW50NjQgKik7Cit1bnNpZ25lZCBjaGFyIF9fdm14X3ZtY2xlYXIodW5zaWduZWQgX19pbnQ2NCAqKTsKK3Vuc2lnbmVkIGNoYXIgX192bXhfdm1sYXVuY2godm9pZCk7Cit1bnNpZ25lZCBjaGFyIF9fdm14X3ZtcHRybGQodW5zaWduZWQgX19pbnQ2NCAqKTsKK3Vuc2lnbmVkIGNoYXIgX192bXhfdm1yZWFkKHNpemVfdCwgc2l6ZV90ICopOwordW5zaWduZWQgY2hhciBfX3ZteF92bXJlc3VtZSh2b2lkKTsKK3Vuc2lnbmVkIGNoYXIgX192bXhfdm13cml0ZShzaXplX3QsIHNpemVfdCk7Cit2b2lkIF9fd3JpdGVnc2J5dGUodW5zaWduZWQgbG9uZywgdW5zaWduZWQgY2hhcik7Cit2b2lkIF9fd3JpdGVnc2R3b3JkKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwordm9pZCBfX3dyaXRlZ3Nxd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBfX2ludDY0KTsKK3ZvaWQgX193cml0ZWdzd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBzaG9ydCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgY2hhciBfQml0U2NhbkZvcndhcmQ2NCh1bnNpZ25lZCBsb25nICpfSW5kZXgsIHVuc2lnbmVkIF9faW50NjQgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGNoYXIgX0JpdFNjYW5SZXZlcnNlNjQodW5zaWduZWQgbG9uZyAqX0luZGV4LCB1bnNpZ25lZCBfX2ludDY0IF9NYXNrKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9iaXR0ZXN0NjQoX19pbnQ2NCBjb25zdCAqLCBfX2ludDY0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9iaXR0ZXN0YW5kY29tcGxlbWVudDY0KF9faW50NjQgKiwgX19pbnQ2NCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgY2hhciBfYml0dGVzdGFuZHJlc2V0NjQoX19pbnQ2NCAqLCBfX2ludDY0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9iaXR0ZXN0YW5kc2V0NjQoX19pbnQ2NCAqLCBfX2ludDY0KTsKK3Vuc2lnbmVkIF9faW50NjQgX19jZGVjbCBfYnl0ZXN3YXBfdWludDY0KHVuc2lnbmVkIF9faW50NjQpOworbG9uZyBfSW50ZXJsb2NrZWRBbmRfbnAobG9uZyB2b2xhdGlsZSAqX1ZhbHVlLCBsb25nIF9NYXNrKTsKK3Nob3J0IF9JbnRlcmxvY2tlZEFuZDE2X25wKHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKTsKK19faW50NjQgX0ludGVybG9ja2VkQW5kNjRfbnAoX19pbnQ2NCB2b2xhdGlsZSAqX1ZhbHVlLCBfX2ludDY0IF9NYXNrKTsKK2NoYXIgX0ludGVybG9ja2VkQW5kOF9ucChjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spOwordW5zaWduZWQgY2hhciBfaW50ZXJsb2NrZWRiaXR0ZXN0YW5kcmVzZXQ2NChfX2ludDY0IHZvbGF0aWxlICosIF9faW50NjQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGNoYXIgX2ludGVybG9ja2VkYml0dGVzdGFuZHNldDY0KF9faW50NjQgdm9sYXRpbGUgKiwgX19pbnQ2NCk7Citsb25nIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZV9ucChsb25nIHZvbGF0aWxlICpfRGVzdGluYXRpb24sIGxvbmcgX0V4Y2hhbmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfQ29tcGFyYW5kKTsKK3Vuc2lnbmVkIGNoYXIgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlMTI4KF9faW50NjQgdm9sYXRpbGUgKl9EZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW50NjQgX0V4Y2hhbmdlSGlnaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW50NjQgX0V4Y2hhbmdlTG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCAqX0NvbXBhcmVhbmRSZXN1bHQpOwordW5zaWduZWQgY2hhciBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UxMjhfbnAoX19pbnQ2NCB2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCBfRXhjaGFuZ2VIaWdoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCBfRXhjaGFuZ2VMb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ludDY0ICpfQ29tcGFyYW5kUmVzdWx0KTsKK3Nob3J0IF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTE2X25wKHNob3J0IHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfRXhjaGFuZ2UsIHNob3J0IF9Db21wYXJhbmQpOworX19pbnQ2NCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2U2NF9ITEVBY3F1aXJlKF9faW50NjQgdm9sYXRpbGUgKiwgX19pbnQ2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ludDY0KTsKK19faW50NjQgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlNjRfSExFUmVsZWFzZShfX2ludDY0IHZvbGF0aWxlICosIF9faW50NjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCk7CitfX2ludDY0IF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTY0X25wKF9faW50NjQgdm9sYXRpbGUgKl9EZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCBfRXhjaGFuZ2UsIF9faW50NjQgX0NvbXBhcmFuZCk7Cit2b2lkICpfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VQb2ludGVyKHZvaWQgKnZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9FeGNoYW5nZSwgdm9pZCAqX0NvbXBhcmFuZCk7Cit2b2lkICpfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VQb2ludGVyX25wKHZvaWQgKnZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9FeGNoYW5nZSwgdm9pZCAqX0NvbXBhcmFuZCk7Cit2b2lkICpfSW50ZXJsb2NrZWRFeGNoYW5nZVBvaW50ZXIodm9pZCAqdm9sYXRpbGUgKl9UYXJnZXQsIHZvaWQgKl9WYWx1ZSk7Citsb25nIF9JbnRlcmxvY2tlZE9yX25wKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzayk7CitzaG9ydCBfSW50ZXJsb2NrZWRPcjE2X25wKHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKTsKK19faW50NjQgX0ludGVybG9ja2VkT3I2NF9ucChfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUsIF9faW50NjQgX01hc2spOworY2hhciBfSW50ZXJsb2NrZWRPcjhfbnAoY2hhciB2b2xhdGlsZSAqX1ZhbHVlLCBjaGFyIF9NYXNrKTsKK2xvbmcgX0ludGVybG9ja2VkWG9yX25wKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzayk7CitzaG9ydCBfSW50ZXJsb2NrZWRYb3IxNl9ucChzaG9ydCB2b2xhdGlsZSAqX1ZhbHVlLCBzaG9ydCBfTWFzayk7CitfX2ludDY0IF9JbnRlcmxvY2tlZFhvcjY0X25wKF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSwgX19pbnQ2NCBfTWFzayk7CitjaGFyIF9JbnRlcmxvY2tlZFhvcjhfbnAoY2hhciB2b2xhdGlsZSAqX1ZhbHVlLCBjaGFyIF9NYXNrKTsKK3Vuc2lnbmVkIF9faW50NjQgX3JvcnhfdTY0KHVuc2lnbmVkIF9faW50NjQsIGNvbnN0IHVuc2lnbmVkIGludCk7CitfX2ludDY0IF9zYXJ4X2k2NChfX2ludDY0LCB1bnNpZ25lZCBpbnQpOworI2lmIF9fU1REQ19IT1NURURfXworaW50IF9fY2RlY2wgX3NldGptcGV4KGptcF9idWYpOworI2VuZGlmCit1bnNpZ25lZCBfX2ludDY0IF9zaGx4X3U2NCh1bnNpZ25lZCBfX2ludDY0LCB1bnNpZ25lZCBpbnQpOwordW5zaWduZWQgX19pbnQ2NCBfc2hyeF91NjQodW5zaWduZWQgX19pbnQ2NCwgdW5zaWduZWQgaW50KTsKK3N0YXRpYyBfX2lubGluZV9fCitfX2ludDY0IF9fbXVsaChfX2ludDY0LCBfX2ludDY0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBfX2ludDY0IF9fdW11bGgodW5zaWduZWQgX19pbnQ2NCwgdW5zaWduZWQgX19pbnQ2NCk7CitzdGF0aWMgX19pbmxpbmVfXworX19pbnQ2NCBfbXVsMTI4KF9faW50NjQsIF9faW50NjQsIF9faW50NjQqKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBfX2ludDY0IF91bXVsMTI4KHVuc2lnbmVkIF9faW50NjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9faW50NjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9faW50NjQqKTsKKworI2VuZGlmIC8qIF9feDg2XzY0X18gKi8KKworI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FybV9fKQorCitzdGF0aWMgX19pbmxpbmVfXworX19pbnQ2NCBfSW50ZXJsb2NrZWREZWNyZW1lbnQ2NChfX2ludDY0IHZvbGF0aWxlICpfQWRkZW5kKTsKK3N0YXRpYyBfX2lubGluZV9fCitfX2ludDY0IF9JbnRlcmxvY2tlZEV4Y2hhbmdlNjQoX19pbnQ2NCB2b2xhdGlsZSAqX1RhcmdldCwgX19pbnQ2NCBfVmFsdWUpOworc3RhdGljIF9faW5saW5lX18KK19faW50NjQgX0ludGVybG9ja2VkRXhjaGFuZ2VBZGQ2NChfX2ludDY0IHZvbGF0aWxlICpfQWRkZW5kLCBfX2ludDY0IF9WYWx1ZSk7CitzdGF0aWMgX19pbmxpbmVfXworX19pbnQ2NCBfSW50ZXJsb2NrZWRFeGNoYW5nZVN1YjY0KF9faW50NjQgdm9sYXRpbGUgKl9TdWJlbmQsIF9faW50NjQgX1ZhbHVlKTsKK3N0YXRpYyBfX2lubGluZV9fCitfX2ludDY0IF9JbnRlcmxvY2tlZEluY3JlbWVudDY0KF9faW50NjQgdm9sYXRpbGUgKl9BZGRlbmQpOworc3RhdGljIF9faW5saW5lX18KK19faW50NjQgX0ludGVybG9ja2VkT3I2NChfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUsIF9faW50NjQgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK19faW50NjQgX0ludGVybG9ja2VkWG9yNjQoX19pbnQ2NCB2b2xhdGlsZSAqX1ZhbHVlLCBfX2ludDY0IF9NYXNrKTsKK3N0YXRpYyBfX2lubGluZV9fCitfX2ludDY0IF9JbnRlcmxvY2tlZEFuZDY0KF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSwgX19pbnQ2NCBfTWFzayk7CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogQml0IENvdW50aW5nIGFuZCBUZXN0aW5nCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19iaXR0ZXN0KGxvbmcgY29uc3QgKl9CaXRCYXNlLCBsb25nIF9CaXRQb3MpIHsKKyAgcmV0dXJuICgqX0JpdEJhc2UgPj4gX0JpdFBvcykgJiAxOworfQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19iaXR0ZXN0YW5kY29tcGxlbWVudChsb25nICpfQml0QmFzZSwgbG9uZyBfQml0UG9zKSB7CisgIHVuc2lnbmVkIGNoYXIgX1JlcyA9ICgqX0JpdEJhc2UgPj4gX0JpdFBvcykgJiAxOworICAqX0JpdEJhc2UgPSAqX0JpdEJhc2UgXiAoMSA8PCBfQml0UG9zKTsKKyAgcmV0dXJuIF9SZXM7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX2JpdHRlc3RhbmRyZXNldChsb25nICpfQml0QmFzZSwgbG9uZyBfQml0UG9zKSB7CisgIHVuc2lnbmVkIGNoYXIgX1JlcyA9ICgqX0JpdEJhc2UgPj4gX0JpdFBvcykgJiAxOworICAqX0JpdEJhc2UgPSAqX0JpdEJhc2UgJiB+KDEgPDwgX0JpdFBvcyk7CisgIHJldHVybiBfUmVzOworfQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19iaXR0ZXN0YW5kc2V0KGxvbmcgKl9CaXRCYXNlLCBsb25nIF9CaXRQb3MpIHsKKyAgdW5zaWduZWQgY2hhciBfUmVzID0gKCpfQml0QmFzZSA+PiBfQml0UG9zKSAmIDE7CisgICpfQml0QmFzZSA9ICpfQml0QmFzZSB8ICgxIDw8IF9CaXRQb3MpOworICByZXR1cm4gX1JlczsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfaW50ZXJsb2NrZWRiaXR0ZXN0YW5kc2V0KGxvbmcgdm9sYXRpbGUgKl9CaXRCYXNlLCBsb25nIF9CaXRQb3MpIHsKKyAgbG9uZyBfUHJldlZhbCA9IF9fYXRvbWljX2ZldGNoX29yKF9CaXRCYXNlLCAxbCA8PCBfQml0UG9zLCBfX0FUT01JQ19TRVFfQ1NUKTsKKyAgcmV0dXJuIChfUHJldlZhbCA+PiBfQml0UG9zKSAmIDE7Cit9CisjaWYgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19pbnRlcmxvY2tlZGJpdHRlc3RhbmRzZXRfYWNxKGxvbmcgdm9sYXRpbGUgKl9CaXRCYXNlLCBsb25nIF9CaXRQb3MpIHsKKyAgbG9uZyBfUHJldlZhbCA9IF9fYXRvbWljX2ZldGNoX29yKF9CaXRCYXNlLCAxbCA8PCBfQml0UG9zLCBfX0FUT01JQ19BQ1FVSVJFKTsKKyAgcmV0dXJuIChfUHJldlZhbCA+PiBfQml0UG9zKSAmIDE7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX2ludGVybG9ja2VkYml0dGVzdGFuZHNldF9uZihsb25nIHZvbGF0aWxlICpfQml0QmFzZSwgbG9uZyBfQml0UG9zKSB7CisgIGxvbmcgX1ByZXZWYWwgPSBfX2F0b21pY19mZXRjaF9vcihfQml0QmFzZSwgMWwgPDwgX0JpdFBvcywgX19BVE9NSUNfUkVMQVhFRCk7CisgIHJldHVybiAoX1ByZXZWYWwgPj4gX0JpdFBvcykgJiAxOworfQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19pbnRlcmxvY2tlZGJpdHRlc3RhbmRzZXRfcmVsKGxvbmcgdm9sYXRpbGUgKl9CaXRCYXNlLCBsb25nIF9CaXRQb3MpIHsKKyAgbG9uZyBfUHJldlZhbCA9IF9fYXRvbWljX2ZldGNoX29yKF9CaXRCYXNlLCAxbCA8PCBfQml0UG9zLCBfX0FUT01JQ19SRUxFQVNFKTsKKyAgcmV0dXJuIChfUHJldlZhbCA+PiBfQml0UG9zKSAmIDE7Cit9CisjZW5kaWYKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX2JpdHRlc3Q2NChfX2ludDY0IGNvbnN0ICpfQml0QmFzZSwgX19pbnQ2NCBfQml0UG9zKSB7CisgIHJldHVybiAoKl9CaXRCYXNlID4+IF9CaXRQb3MpICYgMTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfYml0dGVzdGFuZGNvbXBsZW1lbnQ2NChfX2ludDY0ICpfQml0QmFzZSwgX19pbnQ2NCBfQml0UG9zKSB7CisgIHVuc2lnbmVkIGNoYXIgX1JlcyA9ICgqX0JpdEJhc2UgPj4gX0JpdFBvcykgJiAxOworICAqX0JpdEJhc2UgPSAqX0JpdEJhc2UgXiAoMWxsIDw8IF9CaXRQb3MpOworICByZXR1cm4gX1JlczsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfYml0dGVzdGFuZHJlc2V0NjQoX19pbnQ2NCAqX0JpdEJhc2UsIF9faW50NjQgX0JpdFBvcykgeworICB1bnNpZ25lZCBjaGFyIF9SZXMgPSAoKl9CaXRCYXNlID4+IF9CaXRQb3MpICYgMTsKKyAgKl9CaXRCYXNlID0gKl9CaXRCYXNlICYgfigxbGwgPDwgX0JpdFBvcyk7CisgIHJldHVybiBfUmVzOworfQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19iaXR0ZXN0YW5kc2V0NjQoX19pbnQ2NCAqX0JpdEJhc2UsIF9faW50NjQgX0JpdFBvcykgeworICB1bnNpZ25lZCBjaGFyIF9SZXMgPSAoKl9CaXRCYXNlID4+IF9CaXRQb3MpICYgMTsKKyAgKl9CaXRCYXNlID0gKl9CaXRCYXNlIHwgKDFsbCA8PCBfQml0UG9zKTsKKyAgcmV0dXJuIF9SZXM7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX2ludGVybG9ja2VkYml0dGVzdGFuZHNldDY0KF9faW50NjQgdm9sYXRpbGUgKl9CaXRCYXNlLCBfX2ludDY0IF9CaXRQb3MpIHsKKyAgbG9uZyBsb25nIF9QcmV2VmFsID0KKyAgICAgIF9fYXRvbWljX2ZldGNoX29yKF9CaXRCYXNlLCAxbGwgPDwgX0JpdFBvcywgX19BVE9NSUNfU0VRX0NTVCk7CisgIHJldHVybiAoX1ByZXZWYWwgPj4gX0JpdFBvcykgJiAxOworfQorI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogSW50ZXJsb2NrZWQgRXhjaGFuZ2UgQWRkCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKK3N0YXRpYyBfX2lubGluZV9fIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDhfYWNxKGNoYXIgdm9sYXRpbGUgKl9BZGRlbmQsIGNoYXIgX1ZhbHVlKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9hZGQoX0FkZGVuZCwgX1ZhbHVlLCBfX0FUT01JQ19BQ1FVSVJFKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDhfbmYoY2hhciB2b2xhdGlsZSAqX0FkZGVuZCwgY2hhciBfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FkZChfQWRkZW5kLCBfVmFsdWUsIF9fQVRPTUlDX1JFTEFYRUQpOworfQorc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkOF9yZWwoY2hhciB2b2xhdGlsZSAqX0FkZGVuZCwgY2hhciBfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FkZChfQWRkZW5kLCBfVmFsdWUsIF9fQVRPTUlDX1JFTEFYRUQpOworfQorc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDE2X2FjcShzaG9ydCB2b2xhdGlsZSAqX0FkZGVuZCwgc2hvcnQgX1ZhbHVlKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9hZGQoX0FkZGVuZCwgX1ZhbHVlLCBfX0FUT01JQ19BQ1FVSVJFKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkRXhjaGFuZ2VBZGQxNl9uZihzaG9ydCB2b2xhdGlsZSAqX0FkZGVuZCwgc2hvcnQgX1ZhbHVlKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9hZGQoX0FkZGVuZCwgX1ZhbHVlLCBfX0FUT01JQ19SRUxBWEVEKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkRXhjaGFuZ2VBZGQxNl9yZWwoc2hvcnQgdm9sYXRpbGUgKl9BZGRlbmQsIHNob3J0IF9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfYWRkKF9BZGRlbmQsIF9WYWx1ZSwgX19BVE9NSUNfUkVMRUFTRSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkRXhjaGFuZ2VBZGRfYWNxKGxvbmcgdm9sYXRpbGUgKl9BZGRlbmQsIGxvbmcgX1ZhbHVlKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9hZGQoX0FkZGVuZCwgX1ZhbHVlLCBfX0FUT01JQ19BQ1FVSVJFKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZF9uZihsb25nIHZvbGF0aWxlICpfQWRkZW5kLCBsb25nIF9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfYWRkKF9BZGRlbmQsIF9WYWx1ZSwgX19BVE9NSUNfUkVMQVhFRCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkRXhjaGFuZ2VBZGRfcmVsKGxvbmcgdm9sYXRpbGUgKl9BZGRlbmQsIGxvbmcgX1ZhbHVlKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9hZGQoX0FkZGVuZCwgX1ZhbHVlLCBfX0FUT01JQ19SRUxFQVNFKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDY0X2FjcShfX2ludDY0IHZvbGF0aWxlICpfQWRkZW5kLCBfX2ludDY0IF9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfYWRkKF9BZGRlbmQsIF9WYWx1ZSwgX19BVE9NSUNfQUNRVUlSRSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkRXhjaGFuZ2VBZGQ2NF9uZihfX2ludDY0IHZvbGF0aWxlICpfQWRkZW5kLCBfX2ludDY0IF9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfYWRkKF9BZGRlbmQsIF9WYWx1ZSwgX19BVE9NSUNfUkVMQVhFRCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkRXhjaGFuZ2VBZGQ2NF9yZWwoX19pbnQ2NCB2b2xhdGlsZSAqX0FkZGVuZCwgX19pbnQ2NCBfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FkZChfQWRkZW5kLCBfVmFsdWUsIF9fQVRPTUlDX1JFTEVBU0UpOworfQorI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogSW50ZXJsb2NrZWQgSW5jcmVtZW50CitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKK3N0YXRpYyBfX2lubGluZV9fIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkSW5jcmVtZW50MTZfYWNxKHNob3J0IHZvbGF0aWxlICpfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYXRvbWljX2FkZF9mZXRjaChfVmFsdWUsIDEsIF9fQVRPTUlDX0FDUVVJUkUpOworfQorc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRJbmNyZW1lbnQxNl9uZihzaG9ydCB2b2xhdGlsZSAqX1ZhbHVlKSB7CisgIHJldHVybiBfX2F0b21pY19hZGRfZmV0Y2goX1ZhbHVlLCAxLCBfX0FUT01JQ19SRUxBWEVEKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkSW5jcmVtZW50MTZfcmVsKHNob3J0IHZvbGF0aWxlICpfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYXRvbWljX2FkZF9mZXRjaChfVmFsdWUsIDEsIF9fQVRPTUlDX1JFTEVBU0UpOworfQorc3RhdGljIF9faW5saW5lX18gbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEluY3JlbWVudF9hY3EobG9uZyB2b2xhdGlsZSAqX1ZhbHVlKSB7CisgIHJldHVybiBfX2F0b21pY19hZGRfZmV0Y2goX1ZhbHVlLCAxLCBfX0FUT01JQ19BQ1FVSVJFKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRJbmNyZW1lbnRfbmYobG9uZyB2b2xhdGlsZSAqX1ZhbHVlKSB7CisgIHJldHVybiBfX2F0b21pY19hZGRfZmV0Y2goX1ZhbHVlLCAxLCBfX0FUT01JQ19SRUxBWEVEKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRJbmNyZW1lbnRfcmVsKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfYWRkX2ZldGNoKF9WYWx1ZSwgMSwgX19BVE9NSUNfUkVMRUFTRSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkSW5jcmVtZW50NjRfYWNxKF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfYWRkX2ZldGNoKF9WYWx1ZSwgMSwgX19BVE9NSUNfQUNRVUlSRSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkSW5jcmVtZW50NjRfbmYoX19pbnQ2NCB2b2xhdGlsZSAqX1ZhbHVlKSB7CisgIHJldHVybiBfX2F0b21pY19hZGRfZmV0Y2goX1ZhbHVlLCAxLCBfX0FUT01JQ19SRUxBWEVEKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRJbmNyZW1lbnQ2NF9yZWwoX19pbnQ2NCB2b2xhdGlsZSAqX1ZhbHVlKSB7CisgIHJldHVybiBfX2F0b21pY19hZGRfZmV0Y2goX1ZhbHVlLCAxLCBfX0FUT01JQ19SRUxFQVNFKTsKK30KKyNlbmRpZgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKK3wqIEludGVybG9ja2VkIERlY3JlbWVudAorXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pCitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZERlY3JlbWVudDE2X2FjcShzaG9ydCB2b2xhdGlsZSAqX1ZhbHVlKSB7CisgIHJldHVybiBfX2F0b21pY19zdWJfZmV0Y2goX1ZhbHVlLCAxLCBfX0FUT01JQ19BQ1FVSVJFKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkRGVjcmVtZW50MTZfbmYoc2hvcnQgdm9sYXRpbGUgKl9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfc3ViX2ZldGNoKF9WYWx1ZSwgMSwgX19BVE9NSUNfUkVMQVhFRCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZERlY3JlbWVudDE2X3JlbChzaG9ydCB2b2xhdGlsZSAqX1ZhbHVlKSB7CisgIHJldHVybiBfX2F0b21pY19zdWJfZmV0Y2goX1ZhbHVlLCAxLCBfX0FUT01JQ19SRUxFQVNFKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWREZWNyZW1lbnRfYWNxKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfc3ViX2ZldGNoKF9WYWx1ZSwgMSwgX19BVE9NSUNfQUNRVUlSRSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkRGVjcmVtZW50X25mKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfc3ViX2ZldGNoKF9WYWx1ZSwgMSwgX19BVE9NSUNfUkVMQVhFRCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkRGVjcmVtZW50X3JlbChsb25nIHZvbGF0aWxlICpfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYXRvbWljX3N1Yl9mZXRjaChfVmFsdWUsIDEsIF9fQVRPTUlDX1JFTEVBU0UpOworfQorc3RhdGljIF9faW5saW5lX18gX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZERlY3JlbWVudDY0X2FjcShfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYXRvbWljX3N1Yl9mZXRjaChfVmFsdWUsIDEsIF9fQVRPTUlDX0FDUVVJUkUpOworfQorc3RhdGljIF9faW5saW5lX18gX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZERlY3JlbWVudDY0X25mKF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfc3ViX2ZldGNoKF9WYWx1ZSwgMSwgX19BVE9NSUNfUkVMQVhFRCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkRGVjcmVtZW50NjRfcmVsKF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfc3ViX2ZldGNoKF9WYWx1ZSwgMSwgX19BVE9NSUNfUkVMRUFTRSk7Cit9CisjZW5kaWYKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiBJbnRlcmxvY2tlZCBBbmQKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQorc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEFuZDhfYWNxKGNoYXIgdm9sYXRpbGUgKl9WYWx1ZSwgY2hhciBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfYW5kKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX0FDUVVJUkUpOworfQorc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEFuZDhfbmYoY2hhciB2b2xhdGlsZSAqX1ZhbHVlLCBjaGFyIF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9hbmQoX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfUkVMQVhFRCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkQW5kOF9yZWwoY2hhciB2b2xhdGlsZSAqX1ZhbHVlLCBjaGFyIF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9hbmQoX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfUkVMRUFTRSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEFuZDE2X2FjcShzaG9ydCB2b2xhdGlsZSAqX1ZhbHVlLCBzaG9ydCBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfYW5kKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX0FDUVVJUkUpOworfQorc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRBbmQxNl9uZihzaG9ydCB2b2xhdGlsZSAqX1ZhbHVlLCBzaG9ydCBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfYW5kKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1JFTEFYRUQpOworfQorc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRBbmQxNl9yZWwoc2hvcnQgdm9sYXRpbGUgKl9WYWx1ZSwgc2hvcnQgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FuZChfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19SRUxFQVNFKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRBbmRfYWNxKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfYW5kKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX0FDUVVJUkUpOworfQorc3RhdGljIF9faW5saW5lX18gbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEFuZF9uZihsb25nIHZvbGF0aWxlICpfVmFsdWUsIGxvbmcgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FuZChfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19SRUxBWEVEKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRBbmRfcmVsKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfYW5kKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1JFTEVBU0UpOworfQorc3RhdGljIF9faW5saW5lX18gX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEFuZDY0X2FjcShfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUsIF9faW50NjQgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FuZChfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19BQ1FVSVJFKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRBbmQ2NF9uZihfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUsIF9faW50NjQgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FuZChfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19SRUxBWEVEKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRBbmQ2NF9yZWwoX19pbnQ2NCB2b2xhdGlsZSAqX1ZhbHVlLCBfX2ludDY0IF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9hbmQoX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfUkVMRUFTRSk7Cit9CisjZW5kaWYKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiBJbnRlcmxvY2tlZCBPcgorXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pCitzdGF0aWMgX19pbmxpbmVfXyBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkT3I4X2FjcShjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX29yKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX0FDUVVJUkUpOworfQorc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZE9yOF9uZihjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX29yKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1JFTEFYRUQpOworfQorc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZE9yOF9yZWwoY2hhciB2b2xhdGlsZSAqX1ZhbHVlLCBjaGFyIF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9vcihfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19SRUxFQVNFKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkT3IxNl9hY3Eoc2hvcnQgdm9sYXRpbGUgKl9WYWx1ZSwgc2hvcnQgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX29yKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX0FDUVVJUkUpOworfQorc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRPcjE2X25mKHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9vcihfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19SRUxBWEVEKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkT3IxNl9yZWwoc2hvcnQgdm9sYXRpbGUgKl9WYWx1ZSwgc2hvcnQgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX29yKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1JFTEVBU0UpOworfQorc3RhdGljIF9faW5saW5lX18gbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZE9yX2FjcShsb25nIHZvbGF0aWxlICpfVmFsdWUsIGxvbmcgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX29yKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX0FDUVVJUkUpOworfQorc3RhdGljIF9faW5saW5lX18gbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZE9yX25mKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfb3IoX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfUkVMQVhFRCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkT3JfcmVsKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfb3IoX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfUkVMRUFTRSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkT3I2NF9hY3EoX19pbnQ2NCB2b2xhdGlsZSAqX1ZhbHVlLCBfX2ludDY0IF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9vcihfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19BQ1FVSVJFKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRPcjY0X25mKF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSwgX19pbnQ2NCBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfb3IoX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfUkVMQVhFRCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkT3I2NF9yZWwoX19pbnQ2NCB2b2xhdGlsZSAqX1ZhbHVlLCBfX2ludDY0IF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9vcihfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19SRUxFQVNFKTsKK30KKyNlbmRpZgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKK3wqIEludGVybG9ja2VkIFhvcgorXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pCitzdGF0aWMgX19pbmxpbmVfXyBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkWG9yOF9hY3EoY2hhciB2b2xhdGlsZSAqX1ZhbHVlLCBjaGFyIF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF94b3IoX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfQUNRVUlSRSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkWG9yOF9uZihjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX3hvcihfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19SRUxBWEVEKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRYb3I4X3JlbChjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX3hvcihfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19SRUxFQVNFKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkWG9yMTZfYWNxKHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF94b3IoX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfQUNRVUlSRSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZFhvcjE2X25mKHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF94b3IoX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfUkVMQVhFRCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZFhvcjE2X3JlbChzaG9ydCB2b2xhdGlsZSAqX1ZhbHVlLCBzaG9ydCBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfeG9yKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1JFTEVBU0UpOworfQorc3RhdGljIF9faW5saW5lX18gbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZFhvcl9hY3EobG9uZyB2b2xhdGlsZSAqX1ZhbHVlLCBsb25nIF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF94b3IoX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfQUNRVUlSRSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkWG9yX25mKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfeG9yKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1JFTEFYRUQpOworfQorc3RhdGljIF9faW5saW5lX18gbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZFhvcl9yZWwobG9uZyB2b2xhdGlsZSAqX1ZhbHVlLCBsb25nIF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF94b3IoX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfUkVMRUFTRSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkWG9yNjRfYWNxKF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSwgX19pbnQ2NCBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfeG9yKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX0FDUVVJUkUpOworfQorc3RhdGljIF9faW5saW5lX18gX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZFhvcjY0X25mKF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSwgX19pbnQ2NCBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfeG9yKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1JFTEFYRUQpOworfQorc3RhdGljIF9faW5saW5lX18gX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZFhvcjY0X3JlbChfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUsIF9faW50NjQgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX3hvcihfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19SRUxFQVNFKTsKK30KKyNlbmRpZgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKK3wqIEludGVybG9ja2VkIEV4Y2hhbmdlCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKK3N0YXRpYyBfX2lubGluZV9fIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRFeGNoYW5nZThfYWNxKGNoYXIgdm9sYXRpbGUgKl9UYXJnZXQsIGNoYXIgX1ZhbHVlKSB7CisgIF9fYXRvbWljX2V4Y2hhbmdlKF9UYXJnZXQsICZfVmFsdWUsICZfVmFsdWUsIF9fQVRPTUlDX0FDUVVJUkUpOworICByZXR1cm4gX1ZhbHVlOworfQorc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlOF9uZihjaGFyIHZvbGF0aWxlICpfVGFyZ2V0LCBjaGFyIF9WYWx1ZSkgeworICBfX2F0b21pY19leGNoYW5nZShfVGFyZ2V0LCAmX1ZhbHVlLCAmX1ZhbHVlLCBfX0FUT01JQ19SRUxBWEVEKTsKKyAgcmV0dXJuIF9WYWx1ZTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRFeGNoYW5nZThfcmVsKGNoYXIgdm9sYXRpbGUgKl9UYXJnZXQsIGNoYXIgX1ZhbHVlKSB7CisgIF9fYXRvbWljX2V4Y2hhbmdlKF9UYXJnZXQsICZfVmFsdWUsICZfVmFsdWUsIF9fQVRPTUlDX1JFTEVBU0UpOworICByZXR1cm4gX1ZhbHVlOworfQorc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRFeGNoYW5nZTE2X2FjcShzaG9ydCB2b2xhdGlsZSAqX1RhcmdldCwgc2hvcnQgX1ZhbHVlKSB7CisgIF9fYXRvbWljX2V4Y2hhbmdlKF9UYXJnZXQsICZfVmFsdWUsICZfVmFsdWUsIF9fQVRPTUlDX0FDUVVJUkUpOworICByZXR1cm4gX1ZhbHVlOworfQorc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRFeGNoYW5nZTE2X25mKHNob3J0IHZvbGF0aWxlICpfVGFyZ2V0LCBzaG9ydCBfVmFsdWUpIHsKKyAgX19hdG9taWNfZXhjaGFuZ2UoX1RhcmdldCwgJl9WYWx1ZSwgJl9WYWx1ZSwgX19BVE9NSUNfUkVMQVhFRCk7CisgIHJldHVybiBfVmFsdWU7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlMTZfcmVsKHNob3J0IHZvbGF0aWxlICpfVGFyZ2V0LCBzaG9ydCBfVmFsdWUpIHsKKyAgX19hdG9taWNfZXhjaGFuZ2UoX1RhcmdldCwgJl9WYWx1ZSwgJl9WYWx1ZSwgX19BVE9NSUNfUkVMRUFTRSk7CisgIHJldHVybiBfVmFsdWU7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkRXhjaGFuZ2VfYWNxKGxvbmcgdm9sYXRpbGUgKl9UYXJnZXQsIGxvbmcgX1ZhbHVlKSB7CisgIF9fYXRvbWljX2V4Y2hhbmdlKF9UYXJnZXQsICZfVmFsdWUsICZfVmFsdWUsIF9fQVRPTUlDX0FDUVVJUkUpOworICByZXR1cm4gX1ZhbHVlOworfQorc3RhdGljIF9faW5saW5lX18gbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlX25mKGxvbmcgdm9sYXRpbGUgKl9UYXJnZXQsIGxvbmcgX1ZhbHVlKSB7CisgIF9fYXRvbWljX2V4Y2hhbmdlKF9UYXJnZXQsICZfVmFsdWUsICZfVmFsdWUsIF9fQVRPTUlDX1JFTEFYRUQpOworICByZXR1cm4gX1ZhbHVlOworfQorc3RhdGljIF9faW5saW5lX18gbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlX3JlbChsb25nIHZvbGF0aWxlICpfVGFyZ2V0LCBsb25nIF9WYWx1ZSkgeworICBfX2F0b21pY19leGNoYW5nZShfVGFyZ2V0LCAmX1ZhbHVlLCAmX1ZhbHVlLCBfX0FUT01JQ19SRUxFQVNFKTsKKyAgcmV0dXJuIF9WYWx1ZTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRFeGNoYW5nZTY0X2FjcShfX2ludDY0IHZvbGF0aWxlICpfVGFyZ2V0LCBfX2ludDY0IF9WYWx1ZSkgeworICBfX2F0b21pY19leGNoYW5nZShfVGFyZ2V0LCAmX1ZhbHVlLCAmX1ZhbHVlLCBfX0FUT01JQ19BQ1FVSVJFKTsKKyAgcmV0dXJuIF9WYWx1ZTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRFeGNoYW5nZTY0X25mKF9faW50NjQgdm9sYXRpbGUgKl9UYXJnZXQsIF9faW50NjQgX1ZhbHVlKSB7CisgIF9fYXRvbWljX2V4Y2hhbmdlKF9UYXJnZXQsICZfVmFsdWUsICZfVmFsdWUsIF9fQVRPTUlDX1JFTEFYRUQpOworICByZXR1cm4gX1ZhbHVlOworfQorc3RhdGljIF9faW5saW5lX18gX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlNjRfcmVsKF9faW50NjQgdm9sYXRpbGUgKl9UYXJnZXQsIF9faW50NjQgX1ZhbHVlKSB7CisgIF9fYXRvbWljX2V4Y2hhbmdlKF9UYXJnZXQsICZfVmFsdWUsICZfVmFsdWUsIF9fQVRPTUlDX1JFTEVBU0UpOworICByZXR1cm4gX1ZhbHVlOworfQorI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogSW50ZXJsb2NrZWQgQ29tcGFyZSBFeGNoYW5nZQorXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pCitzdGF0aWMgX19pbmxpbmVfXyBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlOF9hY3EoY2hhciB2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9FeGNoYW5nZSwgY2hhciBfQ29tcGFyYW5kKSB7CisgIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2UoX0Rlc3RpbmF0aW9uLCAmX0NvbXBhcmFuZCwgJl9FeGNoYW5nZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FUT01JQ19TRVFfQ1NULCBfX0FUT01JQ19BQ1FVSVJFKTsKKyAgcmV0dXJuIF9Db21wYXJhbmQ7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlOF9uZihjaGFyIHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX0V4Y2hhbmdlLCBjaGFyIF9Db21wYXJhbmQpIHsKKyAgX19hdG9taWNfY29tcGFyZV9leGNoYW5nZShfRGVzdGluYXRpb24sICZfQ29tcGFyYW5kLCAmX0V4Y2hhbmdlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQVRPTUlDX1NFUV9DU1QsIF9fQVRPTUlDX1JFTEFYRUQpOworICByZXR1cm4gX0NvbXBhcmFuZDsKK30KK3N0YXRpYyBfX2lubGluZV9fIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2U4X3JlbChjaGFyIHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX0V4Y2hhbmdlLCBjaGFyIF9Db21wYXJhbmQpIHsKKyAgX19hdG9taWNfY29tcGFyZV9leGNoYW5nZShfRGVzdGluYXRpb24sICZfQ29tcGFyYW5kLCAmX0V4Y2hhbmdlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQVRPTUlDX1NFUV9DU1QsIF9fQVRPTUlDX1JFTEVBU0UpOworICByZXR1cm4gX0NvbXBhcmFuZDsKK30KK3N0YXRpYyBfX2lubGluZV9fIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlMTZfYWNxKHNob3J0IHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfRXhjaGFuZ2UsIHNob3J0IF9Db21wYXJhbmQpIHsKKyAgX19hdG9taWNfY29tcGFyZV9leGNoYW5nZShfRGVzdGluYXRpb24sICZfQ29tcGFyYW5kLCAmX0V4Y2hhbmdlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQVRPTUlDX1NFUV9DU1QsIF9fQVRPTUlDX0FDUVVJUkUpOworICByZXR1cm4gX0NvbXBhcmFuZDsKK30KK3N0YXRpYyBfX2lubGluZV9fIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlMTZfbmYoc2hvcnQgdm9sYXRpbGUgKl9EZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IF9FeGNoYW5nZSwgc2hvcnQgX0NvbXBhcmFuZCkgeworICBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlKF9EZXN0aW5hdGlvbiwgJl9Db21wYXJhbmQsICZfRXhjaGFuZ2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BVE9NSUNfU0VRX0NTVCwgX19BVE9NSUNfUkVMQVhFRCk7CisgIHJldHVybiBfQ29tcGFyYW5kOworfQorc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UxNl9yZWwoc2hvcnQgdm9sYXRpbGUgKl9EZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IF9FeGNoYW5nZSwgc2hvcnQgX0NvbXBhcmFuZCkgeworICBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlKF9EZXN0aW5hdGlvbiwgJl9Db21wYXJhbmQsICZfRXhjaGFuZ2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BVE9NSUNfU0VRX0NTVCwgX19BVE9NSUNfUkVMRUFTRSk7CisgIHJldHVybiBfQ29tcGFyYW5kOworfQorc3RhdGljIF9faW5saW5lX18gbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZV9hY3EobG9uZyB2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfRXhjaGFuZ2UsIGxvbmcgX0NvbXBhcmFuZCkgeworICBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlKF9EZXN0aW5hdGlvbiwgJl9Db21wYXJhbmQsICZfRXhjaGFuZ2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BVE9NSUNfU0VRX0NTVCwgX19BVE9NSUNfQUNRVUlSRSk7CisgIHJldHVybiBfQ29tcGFyYW5kOworfQorc3RhdGljIF9faW5saW5lX18gbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZV9uZihsb25nIHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIF9FeGNoYW5nZSwgbG9uZyBfQ29tcGFyYW5kKSB7CisgIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2UoX0Rlc3RpbmF0aW9uLCAmX0NvbXBhcmFuZCwgJl9FeGNoYW5nZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FUT01JQ19TRVFfQ1NULCBfX0FUT01JQ19SRUxBWEVEKTsKKyAgcmV0dXJuIF9Db21wYXJhbmQ7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZV9yZWwobG9uZyB2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfRXhjaGFuZ2UsIGxvbmcgX0NvbXBhcmFuZCkgeworICBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlKF9EZXN0aW5hdGlvbiwgJl9Db21wYXJhbmQsICZfRXhjaGFuZ2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BVE9NSUNfU0VRX0NTVCwgX19BVE9NSUNfUkVMRUFTRSk7CisgIHJldHVybiBfQ29tcGFyYW5kOworfQorc3RhdGljIF9faW5saW5lX18gX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTY0X2FjcShfX2ludDY0IHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ludDY0IF9FeGNoYW5nZSwgX19pbnQ2NCBfQ29tcGFyYW5kKSB7CisgIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2UoX0Rlc3RpbmF0aW9uLCAmX0NvbXBhcmFuZCwgJl9FeGNoYW5nZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FUT01JQ19TRVFfQ1NULCBfX0FUT01JQ19BQ1FVSVJFKTsKKyAgcmV0dXJuIF9Db21wYXJhbmQ7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlNjRfbmYoX19pbnQ2NCB2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCBfRXhjaGFuZ2UsIF9faW50NjQgX0NvbXBhcmFuZCkgeworICBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlKF9EZXN0aW5hdGlvbiwgJl9Db21wYXJhbmQsICZfRXhjaGFuZ2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BVE9NSUNfU0VRX0NTVCwgX19BVE9NSUNfUkVMQVhFRCk7CisgIHJldHVybiBfQ29tcGFyYW5kOworfQorc3RhdGljIF9faW5saW5lX18gX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTY0X3JlbChfX2ludDY0IHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ludDY0IF9FeGNoYW5nZSwgX19pbnQ2NCBfQ29tcGFyYW5kKSB7CisgIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2UoX0Rlc3RpbmF0aW9uLCAmX0NvbXBhcmFuZCwgJl9FeGNoYW5nZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FUT01JQ19TRVFfQ1NULCBfX0FUT01JQ19SRUxFQVNFKTsKKyAgcmV0dXJuIF9Db21wYXJhbmQ7Cit9CisjZW5kaWYKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiByZWFkZnMsIHJlYWRncworfCogKFBvaW50ZXJzIGluIGFkZHJlc3Mgc3BhY2UgIzI1NiBhbmQgIzI1NyBhcmUgcmVsYXRpdmUgdG8gdGhlIEdTIGFuZCBGUworfCogc2VnbWVudCByZWdpc3RlcnMsIHJlc3BlY3RpdmVseS4pCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBfX3B0cl90b19hZGRyX3NwYWNlKF9fYWRkcl9zcGFjZV9uYnIsIF9fdHlwZSwgX19vZmZzZXQpICAgICAgICAgICAgICBcCisgICAgKCh2b2xhdGlsZSBfX3R5cGUgX19hdHRyaWJ1dGVfXygoX19hZGRyZXNzX3NwYWNlX18oX19hZGRyX3NwYWNlX25icikpKSopIFwKKyAgICAoX19vZmZzZXQpKQorCisjaWZkZWYgX19pMzg2X18KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3JlYWRmc2J5dGUodW5zaWduZWQgbG9uZyBfX29mZnNldCkgeworICByZXR1cm4gKl9fcHRyX3RvX2FkZHJfc3BhY2UoMjU3LCB1bnNpZ25lZCBjaGFyLCBfX29mZnNldCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fcmVhZGZzd29yZCh1bnNpZ25lZCBsb25nIF9fb2Zmc2V0KSB7CisgIHJldHVybiAqX19wdHJfdG9fYWRkcl9zcGFjZSgyNTcsIHVuc2lnbmVkIHNob3J0LCBfX29mZnNldCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUworX19yZWFkZnNxd29yZCh1bnNpZ25lZCBsb25nIF9fb2Zmc2V0KSB7CisgIHJldHVybiAqX19wdHJfdG9fYWRkcl9zcGFjZSgyNTcsIHVuc2lnbmVkIF9faW50NjQsIF9fb2Zmc2V0KTsKK30KKyNlbmRpZgorI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3JlYWRnc2J5dGUodW5zaWduZWQgbG9uZyBfX29mZnNldCkgeworICByZXR1cm4gKl9fcHRyX3RvX2FkZHJfc3BhY2UoMjU2LCB1bnNpZ25lZCBjaGFyLCBfX29mZnNldCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fcmVhZGdzd29yZCh1bnNpZ25lZCBsb25nIF9fb2Zmc2V0KSB7CisgIHJldHVybiAqX19wdHJfdG9fYWRkcl9zcGFjZSgyNTYsIHVuc2lnbmVkIHNob3J0LCBfX29mZnNldCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19yZWFkZ3Nkd29yZCh1bnNpZ25lZCBsb25nIF9fb2Zmc2V0KSB7CisgIHJldHVybiAqX19wdHJfdG9fYWRkcl9zcGFjZSgyNTYsIHVuc2lnbmVkIGxvbmcsIF9fb2Zmc2V0KTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3JlYWRnc3F3b3JkKHVuc2lnbmVkIGxvbmcgX19vZmZzZXQpIHsKKyAgcmV0dXJuICpfX3B0cl90b19hZGRyX3NwYWNlKDI1NiwgdW5zaWduZWQgX19pbnQ2NCwgX19vZmZzZXQpOworfQorI2VuZGlmCisjdW5kZWYgX19wdHJfdG9fYWRkcl9zcGFjZQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKK3wqIG1vdnMsIHN0b3MKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fbW92c2IodW5zaWduZWQgY2hhciAqX19kc3QsIHVuc2lnbmVkIGNoYXIgY29uc3QgKl9fc3JjLCBzaXplX3QgX19uKSB7CisgIF9fYXNtX18oInJlcCBtb3ZzYiIgOiA6ICJEIihfX2RzdCksICJTIihfX3NyYyksICJjIihfX24pCisgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlc2kiLCAiJWVjeCIpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fbW92c2QodW5zaWduZWQgbG9uZyAqX19kc3QsIHVuc2lnbmVkIGxvbmcgY29uc3QgKl9fc3JjLCBzaXplX3QgX19uKSB7CisgIF9fYXNtX18oInJlcCBtb3ZzbCIgOiA6ICJEIihfX2RzdCksICJTIihfX3NyYyksICJjIihfX24pCisgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlc2kiLCAiJWVjeCIpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fbW92c3codW5zaWduZWQgc2hvcnQgKl9fZHN0LCB1bnNpZ25lZCBzaG9ydCBjb25zdCAqX19zcmMsIHNpemVfdCBfX24pIHsKKyAgX19hc21fXygicmVwIG1vdnN3IiA6IDogIkQiKF9fZHN0KSwgIlMiKF9fc3JjKSwgImMiKF9fbikKKyAgICAgICAgICAgICAgICAgICAgICAgIDogIiVlZGkiLCAiJWVzaSIsICIlZWN4Iik7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX19zdG9zZCh1bnNpZ25lZCBsb25nICpfX2RzdCwgdW5zaWduZWQgbG9uZyBfX3gsIHNpemVfdCBfX24pIHsKKyAgX19hc21fXygicmVwIHN0b3NsIiA6IDogIkQiKF9fZHN0KSwgImEiKF9feCksICJjIihfX24pCisgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlY3giKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3N0b3N3KHVuc2lnbmVkIHNob3J0ICpfX2RzdCwgdW5zaWduZWQgc2hvcnQgX194LCBzaXplX3QgX19uKSB7CisgIF9fYXNtX18oInJlcCBzdG9zdyIgOiA6ICJEIihfX2RzdCksICJhIihfX3gpLCAiYyIoX19uKQorICAgICAgICAgICAgICAgICAgICAgICAgOiAiJWVkaSIsICIlZWN4Iik7Cit9CisjZW5kaWYKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX19tb3ZzcSh1bnNpZ25lZCBsb25nIGxvbmcgKl9fZHN0LCB1bnNpZ25lZCBsb25nIGxvbmcgY29uc3QgKl9fc3JjLCBzaXplX3QgX19uKSB7CisgIF9fYXNtX18oInJlcCBtb3ZzcSIgOiA6ICJEIihfX2RzdCksICJTIihfX3NyYyksICJjIihfX24pCisgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlc2kiLCAiJWVjeCIpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fc3Rvc3EodW5zaWduZWQgX19pbnQ2NCAqX19kc3QsIHVuc2lnbmVkIF9faW50NjQgX194LCBzaXplX3QgX19uKSB7CisgIF9fYXNtX18oInJlcCBzdG9zcSIgOiA6ICJEIihfX2RzdCksICJhIihfX3gpLCAiYyIoX19uKQorICAgICAgICAgICAgICAgICAgICAgICAgOiAiJWVkaSIsICIlZWN4Iik7Cit9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKK3wqIE1pc2MKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fY3B1aWQoaW50IF9faW5mb1s0XSwgaW50IF9fbGV2ZWwpIHsKKyAgX19hc21fXyAoImNwdWlkIiA6ICI9YSIoX19pbmZvWzBdKSwgIj1iIiAoX19pbmZvWzFdKSwgIj1jIihfX2luZm9bMl0pLCAiPWQiKF9faW5mb1szXSkKKyAgICAgICAgICAgICAgICAgICA6ICJhIihfX2xldmVsKSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX19jcHVpZGV4KGludCBfX2luZm9bNF0sIGludCBfX2xldmVsLCBpbnQgX19lY3gpIHsKKyAgX19hc21fXyAoImNwdWlkIiA6ICI9YSIoX19pbmZvWzBdKSwgIj1iIiAoX19pbmZvWzFdKSwgIj1jIihfX2luZm9bMl0pLCAiPWQiKF9faW5mb1szXSkKKyAgICAgICAgICAgICAgICAgICA6ICJhIihfX2xldmVsKSwgImMiKF9fZWN4KSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX2ludDY0IF9fY2RlY2wgX19ERUZBVUxUX0ZOX0FUVFJTCitfeGdldGJ2KHVuc2lnbmVkIGludCBfX3hjcl9ubykgeworICB1bnNpZ25lZCBpbnQgX19lYXgsIF9fZWR4OworICBfX2FzbV9fICgieGdldGJ2IiA6ICI9YSIgKF9fZWF4KSwgIj1kIiAoX19lZHgpIDogImMiIChfX3hjcl9ubykpOworICByZXR1cm4gKCh1bnNpZ25lZCBfX2ludDY0KV9fZWR4IDw8IDMyKSB8IF9fZWF4OworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19faGFsdCh2b2lkKSB7CisgIF9fYXNtX18gdm9sYXRpbGUgKCJobHQiKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX25vcCh2b2lkKSB7CisgIF9fYXNtX18gdm9sYXRpbGUgKCJub3AiKTsKK30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogUHJpdmlsZWdlZCBpbnRyaW5zaWNzCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3JlYWRtc3IodW5zaWduZWQgbG9uZyBfX3JlZ2lzdGVyKSB7CisgIC8vIExvYWRzIHRoZSBjb250ZW50cyBvZiBhIDY0LWJpdCBtb2RlbCBzcGVjaWZpYyByZWdpc3RlciAoTVNSKSBzcGVjaWZpZWQgaW4KKyAgLy8gdGhlIEVDWCByZWdpc3RlciBpbnRvIHJlZ2lzdGVycyBFRFg6RUFYLiBUaGUgRURYIHJlZ2lzdGVyIGlzIGxvYWRlZCB3aXRoCisgIC8vIHRoZSBoaWdoLW9yZGVyIDMyIGJpdHMgb2YgdGhlIE1TUiBhbmQgdGhlIEVBWCByZWdpc3RlciBpcyBsb2FkZWQgd2l0aCB0aGUKKyAgLy8gbG93LW9yZGVyIDMyIGJpdHMuIElmIGxlc3MgdGhhbiA2NCBiaXRzIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGUgTVNSIGJlaW5nCisgIC8vIHJlYWQsIHRoZSB2YWx1ZXMgcmV0dXJuZWQgdG8gRURYOkVBWCBpbiB1bmltcGxlbWVudGVkIGJpdCBsb2NhdGlvbnMgYXJlCisgIC8vIHVuZGVmaW5lZC4KKyAgdW5zaWduZWQgbG9uZyBfX2VkeDsKKyAgdW5zaWduZWQgbG9uZyBfX2VheDsKKyAgX19hc21fXyAoInJkbXNyIiA6ICI9ZCIoX19lZHgpLCAiPWEiKF9fZWF4KSA6ICJjIihfX3JlZ2lzdGVyKSk7CisgIHJldHVybiAoKCh1bnNpZ25lZCBfX2ludDY0KV9fZWR4KSA8PCAzMikgfCAodW5zaWduZWQgX19pbnQ2NClfX2VheDsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fcmVhZGNyMyh2b2lkKSB7CisgIHVuc2lnbmVkIGxvbmcgX19jcjNfdmFsOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdiAlJWNyMywgJTAiIDogIj1xIihfX2NyM192YWwpIDogOiAibWVtb3J5Iik7CisgIHJldHVybiBfX2NyM192YWw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3dyaXRlY3IzKHVuc2lnbmVkIGludCBfX2NyM192YWwpIHsKKyAgX19hc21fXyAoIm1vdiAlMCwgJSVjcjMiIDogOiAicSIoX19jcjNfdmFsKSA6ICJtZW1vcnkiKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX0lOVFJJTl9IICovCisjZW5kaWYgLyogX01TQ19WRVIgKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvaW50dHlwZXMuaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvaW50dHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDhlYWJhCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9pbnR0eXBlcy5oCkBAIC0wLDAgKzEsMTA2IEBACisvKj09PS0tLS0gaW50dHlwZXMuaCAtIFN0YW5kYXJkIGhlYWRlciBmb3IgaW50ZWdlciBwcmludGYgbWFjcm9zIC0tLS0tLS0tLS09PT0qXAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCitcKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0qLworCisjaWZuZGVmIF9fQ0xBTkdfSU5UVFlQRVNfSAorI2RlZmluZSBfX0NMQU5HX0lOVFRZUEVTX0gKKworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSIDwgMTgwMAorI2Vycm9yIE1TVkMgZG9lcyBub3QgaGF2ZSBpbnR0eXBlcy5oIHByaW9yIHRvIFZpc3VhbCBTdHVkaW8gMjAxMworI2VuZGlmCisKKyNpbmNsdWRlX25leHQgPGludHR5cGVzLmg+CisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDE5MDAKKy8qIE1TVkMgaGVhZGVycyBkZWZpbmUgaW50MzJfdCBhcyBpbnQsIGJ1dCBQUkl4MzIgYXMgImx4IiBpbnN0ZWFkIG9mICJ4Ii4KKyAqIFRoaXMgdHJpZ2dlcnMgZm9ybWF0IHdhcm5pbmdzLCBzbyBmaXggaXQgdXAgaGVyZS4gKi8KKyN1bmRlZiBQUklkMzIKKyN1bmRlZiBQUklkTEVBU1QzMgorI3VuZGVmIFBSSWRGQVNUMzIKKyN1bmRlZiBQUklpMzIKKyN1bmRlZiBQUklpTEVBU1QzMgorI3VuZGVmIFBSSWlGQVNUMzIKKyN1bmRlZiBQUklvMzIKKyN1bmRlZiBQUklvTEVBU1QzMgorI3VuZGVmIFBSSW9GQVNUMzIKKyN1bmRlZiBQUkl1MzIKKyN1bmRlZiBQUkl1TEVBU1QzMgorI3VuZGVmIFBSSXVGQVNUMzIKKyN1bmRlZiBQUkl4MzIKKyN1bmRlZiBQUkl4TEVBU1QzMgorI3VuZGVmIFBSSXhGQVNUMzIKKyN1bmRlZiBQUklYMzIKKyN1bmRlZiBQUklYTEVBU1QzMgorI3VuZGVmIFBSSVhGQVNUMzIKKworI3VuZGVmIFNDTmQzMgorI3VuZGVmIFNDTmRMRUFTVDMyCisjdW5kZWYgU0NOZEZBU1QzMgorI3VuZGVmIFNDTmkzMgorI3VuZGVmIFNDTmlMRUFTVDMyCisjdW5kZWYgU0NOaUZBU1QzMgorI3VuZGVmIFNDTm8zMgorI3VuZGVmIFNDTm9MRUFTVDMyCisjdW5kZWYgU0NOb0ZBU1QzMgorI3VuZGVmIFNDTnUzMgorI3VuZGVmIFNDTnVMRUFTVDMyCisjdW5kZWYgU0NOdUZBU1QzMgorI3VuZGVmIFNDTngzMgorI3VuZGVmIFNDTnhMRUFTVDMyCisjdW5kZWYgU0NOeEZBU1QzMgorCisjZGVmaW5lIFBSSWQzMiAiZCIKKyNkZWZpbmUgUFJJZExFQVNUMzIgImQiCisjZGVmaW5lIFBSSWRGQVNUMzIgImQiCisjZGVmaW5lIFBSSWkzMiAiaSIKKyNkZWZpbmUgUFJJaUxFQVNUMzIgImkiCisjZGVmaW5lIFBSSWlGQVNUMzIgImkiCisjZGVmaW5lIFBSSW8zMiAibyIKKyNkZWZpbmUgUFJJb0xFQVNUMzIgIm8iCisjZGVmaW5lIFBSSW9GQVNUMzIgIm8iCisjZGVmaW5lIFBSSXUzMiAidSIKKyNkZWZpbmUgUFJJdUxFQVNUMzIgInUiCisjZGVmaW5lIFBSSXVGQVNUMzIgInUiCisjZGVmaW5lIFBSSXgzMiAieCIKKyNkZWZpbmUgUFJJeExFQVNUMzIgIngiCisjZGVmaW5lIFBSSXhGQVNUMzIgIngiCisjZGVmaW5lIFBSSVgzMiAiWCIKKyNkZWZpbmUgUFJJWExFQVNUMzIgIlgiCisjZGVmaW5lIFBSSVhGQVNUMzIgIlgiCisKKyNkZWZpbmUgU0NOZDMyICJkIgorI2RlZmluZSBTQ05kTEVBU1QzMiAiZCIKKyNkZWZpbmUgU0NOZEZBU1QzMiAiZCIKKyNkZWZpbmUgU0NOaTMyICJpIgorI2RlZmluZSBTQ05pTEVBU1QzMiAiaSIKKyNkZWZpbmUgU0NOaUZBU1QzMiAiaSIKKyNkZWZpbmUgU0NObzMyICJvIgorI2RlZmluZSBTQ05vTEVBU1QzMiAibyIKKyNkZWZpbmUgU0NOb0ZBU1QzMiAibyIKKyNkZWZpbmUgU0NOdTMyICJ1IgorI2RlZmluZSBTQ051TEVBU1QzMiAidSIKKyNkZWZpbmUgU0NOdUZBU1QzMiAidSIKKyNkZWZpbmUgU0NOeDMyICJ4IgorI2RlZmluZSBTQ054TEVBU1QzMiAieCIKKyNkZWZpbmUgU0NOeEZBU1QzMiAieCIKKyNlbmRpZgorCisjZW5kaWYgLyogX19DTEFOR19JTlRUWVBFU19IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2lzbzY0Ni5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9pc282NDYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2ExM2M1Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9pc282NDYuaApAQCAtMCwwICsxLDQzIEBACisvKj09PS0tLS0gaXNvNjQ2LmggLSBTdGFuZGFyZCBoZWFkZXIgZm9yIGFsdGVybmF0ZSBzcGVsbGluZ3Mgb2Ygb3BlcmF0b3JzLS0tPT09CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEVsaSBGcmllZG1hbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lTTzY0Nl9ICisjZGVmaW5lIF9fSVNPNjQ2X0gKKworI2lmbmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBhbmQgICAgJiYKKyNkZWZpbmUgYW5kX2VxICY9CisjZGVmaW5lIGJpdGFuZCAmCisjZGVmaW5lIGJpdG9yICB8CisjZGVmaW5lIGNvbXBsICB+CisjZGVmaW5lIG5vdCAgICAhCisjZGVmaW5lIG5vdF9lcSAhPQorI2RlZmluZSBvciAgICAgfHwKKyNkZWZpbmUgb3JfZXEgIHw9CisjZGVmaW5lIHhvciAgICBeCisjZGVmaW5lIHhvcl9lcSBePQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0lTTzY0Nl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2ttcF9jb25maWcuaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUva21wX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYzJlMzAKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2ttcF9jb25maWcuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIGttcF9jb25maWcuaCAtLSBGZWF0dXJlIG1hY3JvcworICovCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZpbGUgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuCisvLyBTb3VyY2UgTGljZW5zZXMuIFNlZSBMSUNFTlNFLnR4dCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworI2lmbmRlZiBLTVBfQ09ORklHX0gKKyNkZWZpbmUgS01QX0NPTkZJR19ICisKKyNpbmNsdWRlICJrbXBfcGxhdGZvcm0uaCIKKworLy8gY21ha2VkZWZpbmUwMSBNQUNSTyB3aWxsIGRlZmluZSBNQUNSTyBhcyBlaXRoZXIgMCBvciAxCisvLyBjbWFrZWRlZmluZSBNQUNSTyAxIHdpbGwgZGVmaW5lIE1BQ1JPIGFzIDEgb3IgbGVhdmUgdW5kZWZpbmVkCisjZGVmaW5lIERFQlVHX0JVSUxEIDAKKyNkZWZpbmUgUkVMV0lUSERFQklORk9fQlVJTEQgMAorI2RlZmluZSBMSUJPTVBfVVNFX0lUVF9OT1RJRlkgMQorI2RlZmluZSBVU0VfSVRUX05PVElGWSBMSUJPTVBfVVNFX0lUVF9OT1RJRlkKKyNpZiAhIExJQk9NUF9VU0VfSVRUX05PVElGWQorIyBkZWZpbmUgSU5URUxfTk9fSVRUTk9USUZZX0FQSQorI2VuZGlmCisjZGVmaW5lIExJQk9NUF9VU0VfVkVSU0lPTl9TWU1CT0xTIDEKKyNpZiBMSUJPTVBfVVNFX1ZFUlNJT05fU1lNQk9MUworIyBkZWZpbmUgS01QX1VTRV9WRVJTSU9OX1NZTUJPTFMKKyNlbmRpZgorI2RlZmluZSBMSUJPTVBfSEFWRV9XRUFLX0FUVFJJQlVURSAxCisjZGVmaW5lIEtNUF9IQVZFX1dFQUtfQVRUUklCVVRFIExJQk9NUF9IQVZFX1dFQUtfQVRUUklCVVRFCisjZGVmaW5lIExJQk9NUF9IQVZFX1BTQVBJIDAKKyNkZWZpbmUgS01QX0hBVkVfUFNBUEkgTElCT01QX0hBVkVfUFNBUEkKKyNkZWZpbmUgTElCT01QX1NUQVRTIDAKKyNkZWZpbmUgS01QX1NUQVRTX0VOQUJMRUQgTElCT01QX1NUQVRTCisjZGVmaW5lIExJQk9NUF9IQVZFX1g4NklOVFJJTl9IIDAKKyNkZWZpbmUgS01QX0hBVkVfWDg2SU5UUklOX0ggTElCT01QX0hBVkVfWDg2SU5UUklOX0gKKyNkZWZpbmUgTElCT01QX0hBVkVfX19CVUlMVElOX1JFQURDWUNMRUNPVU5URVIgMAorI2RlZmluZSBLTVBfSEFWRV9fX0JVSUxUSU5fUkVBRENZQ0xFQ09VTlRFUiBMSUJPTVBfSEFWRV9fX0JVSUxUSU5fUkVBRENZQ0xFQ09VTlRFUgorI2RlZmluZSBMSUJPTVBfSEFWRV9fX1JEVFNDIDAKKyNkZWZpbmUgS01QX0hBVkVfX19SRFRTQyBMSUJPTVBfSEFWRV9fX1JEVFNDCisjZGVmaW5lIExJQk9NUF9VU0VfREVCVUdHRVIgMAorI2RlZmluZSBVU0VfREVCVUdHRVIgTElCT01QX1VTRV9ERUJVR0dFUgorI2RlZmluZSBMSUJPTVBfT01QVF9ERUJVRyAwCisjZGVmaW5lIE9NUFRfREVCVUcgTElCT01QX09NUFRfREVCVUcKKyNkZWZpbmUgTElCT01QX09NUFRfU1VQUE9SVCAwCisjZGVmaW5lIE9NUFRfU1VQUE9SVCBMSUJPTVBfT01QVF9TVVBQT1JUCisjZGVmaW5lIExJQk9NUF9PTVBUX0JMQU1FIDEKKyNkZWZpbmUgT01QVF9CTEFNRSBMSUJPTVBfT01QVF9CTEFNRQorI2RlZmluZSBMSUJPTVBfT01QVF9UUkFDRSAxCisjZGVmaW5lIE9NUFRfVFJBQ0UgTElCT01QX09NUFRfVFJBQ0UKKyNkZWZpbmUgTElCT01QX1VTRV9BREFQVElWRV9MT0NLUyAwCisjZGVmaW5lIEtNUF9VU0VfQURBUFRJVkVfTE9DS1MgTElCT01QX1VTRV9BREFQVElWRV9MT0NLUworI2RlZmluZSBLTVBfREVCVUdfQURBUFRJVkVfTE9DS1MgMAorI2RlZmluZSBMSUJPTVBfVVNFX0lOVEVSTk9ERV9BTElHTk1FTlQgMAorI2RlZmluZSBLTVBfVVNFX0lOVEVSTk9ERV9BTElHTk1FTlQgTElCT01QX1VTRV9JTlRFUk5PREVfQUxJR05NRU5UCisjZGVmaW5lIExJQk9NUF9FTkFCTEVfQVNTRVJUSU9OUyAxCisjZGVmaW5lIEtNUF9VU0VfQVNTRVJUIExJQk9NUF9FTkFCTEVfQVNTRVJUSU9OUworI2RlZmluZSBTVFVCU19MSUJSQVJZIDAKKyNkZWZpbmUgTElCT01QX1VTRV9IV0xPQyAwCisjZGVmaW5lIEtNUF9VU0VfSFdMT0MgTElCT01QX1VTRV9IV0xPQworI2RlZmluZSBLTVBfQVJDSF9TVFIgIkFSTSIKKyNkZWZpbmUgS01QX0xJQlJBUllfRklMRSAibGlib21wLnNvIgorI2RlZmluZSBLTVBfVkVSU0lPTl9NQUpPUiA1CisjZGVmaW5lIEtNUF9WRVJTSU9OX01JTk9SIDAKKyNkZWZpbmUgTElCT01QX09NUF9WRVJTSU9OIDQ1CisjZGVmaW5lIE9NUF81MF9FTkFCTEVEIChMSUJPTVBfT01QX1ZFUlNJT04gPj0gNTApCisjZGVmaW5lIE9NUF80NV9FTkFCTEVEIChMSUJPTVBfT01QX1ZFUlNJT04gPj0gNDUpCisjZGVmaW5lIE9NUF80MF9FTkFCTEVEIChMSUJPTVBfT01QX1ZFUlNJT04gPj0gNDApCisjZGVmaW5lIE9NUF8zMF9FTkFCTEVEIChMSUJPTVBfT01QX1ZFUlNJT04gPj0gMzApCisKKy8vIENvbmZpZ3VyZWQgY2FjaGUgbGluZSBiYXNlZCBvbiBhcmNoaXRlY3R1cmUKKyNpZiBLTVBfQVJDSF9QUEM2NAorIyBkZWZpbmUgQ0FDSEVfTElORSAxMjgKKyNlbHNlCisjIGRlZmluZSBDQUNIRV9MSU5FIDY0CisjZW5kaWYKKworI2lmICEgS01QXzMyX0JJVF9BUkNICisjIGRlZmluZSBCVUlMRF9JOCAxCisjZW5kaWYKKworI2RlZmluZSBLTVBfRFlOQU1JQ19MSUIgMQorI2RlZmluZSBLTVBfTkVTVEVEX0hPVF9URUFNUyAxCisjZGVmaW5lIEtNUF9BREpVU1RfQkxPQ0tUSU1FIDEKKyNkZWZpbmUgQlVJTERfUEFSQUxMRUxfT1JERVJFRCAxCisjZGVmaW5lIEtNUF9BU01fSU5UUklOUyAxCisjZGVmaW5lIFVTRV9JVFRfQlVJTEQgTElCT01QX1VTRV9JVFRfTk9USUZZCisjZGVmaW5lIElOVEVMX0lUVE5PVElGWV9QUkVGSVggX19rbXBfaXR0XworI2lmICEgS01QX01JQworIyBkZWZpbmUgVVNFX0xPQURfQkFMQU5DRSAxCisjZW5kaWYKKyNpZiAhIChLTVBfT1NfV0lORE9XUyB8fCBLTVBfT1NfREFSV0lOKQorIyBkZWZpbmUgS01QX1REQVRBX0dUSUQgMQorI2VuZGlmCisjaWYgU1RVQlNfTElCUkFSWQorIyBkZWZpbmUgS01QX1NUVUIgMQorI2VuZGlmCisjaWYgREVCVUdfQlVJTEQgfHwgUkVMV0lUSERFQklORk9fQlVJTEQKKyMgZGVmaW5lIEtNUF9ERUJVRyAxCisjZW5kaWYKKworI2lmIEtNUF9PU19XSU5ET1dTCisjIGRlZmluZSBLTVBfV0lOX0NERUNMCisjZWxzZQorIyBkZWZpbmUgQlVJTERfVFYKKyMgZGVmaW5lIEtNUF9HT01QX0NPTVBBVAorI2VuZGlmCisKKyNlbmRpZiAvLyBLTVBfQ09ORklHX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvbGltaXRzLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2xpbWl0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNDE4N2MKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2xpbWl0cy5oCkBAIC0wLDAgKzEsMTE4IEBACisvKj09PS0tLS0gbGltaXRzLmggLSBTdGFuZGFyZCBoZWFkZXIgZm9yIGludGVnZXIgc2l6ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0qXAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDaHJpcyBMYXR0bmVyCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKK1wqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSovCisKKyNpZm5kZWYgX19DTEFOR19MSU1JVFNfSAorI2RlZmluZSBfX0NMQU5HX0xJTUlUU19ICisKKy8qIFRoZSBzeXN0ZW0ncyBsaW1pdHMuaCBtYXksIGluIHR1cm4sIHRyeSB0byAjaW5jbHVkZV9uZXh0IEdDQydzIGxpbWl0cy5oLgorICAgQXZlcnQgdGhpcyAjaW5jbHVkZV9uZXh0IG1hZG5lc3MuICovCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAhZGVmaW5lZCBfR0NDX0xJTUlUU19IXworI2RlZmluZSBfR0NDX0xJTUlUU19IXworI2VuZGlmCisKKy8qIFN5c3RlbSBoZWFkZXJzIGluY2x1ZGUgYSBudW1iZXIgb2YgY29uc3RhbnRzIGZyb20gUE9TSVggaW4gPGxpbWl0cy5oPi4KKyAgIEluY2x1ZGUgaXQgaWYgd2UncmUgaG9zdGVkLiAqLworI2lmIF9fU1REQ19IT1NURURfXyAmJiBfX2hhc19pbmNsdWRlX25leHQoPGxpbWl0cy5oPikKKyNpbmNsdWRlX25leHQgPGxpbWl0cy5oPgorI2VuZGlmCisKKy8qIE1hbnkgc3lzdGVtIGhlYWRlcnMgdHJ5IHRvICJoZWxwIHVzIG91dCIgYnkgZGVmaW5pbmcgdGhlc2UuICBObyByZWFsbHksIHdlCisgICBrbm93IGhvdyBiaWcgZWFjaCBkYXRhdHlwZSBpcy4gKi8KKyN1bmRlZiAgU0NIQVJfTUlOCisjdW5kZWYgIFNDSEFSX01BWAorI3VuZGVmICBVQ0hBUl9NQVgKKyN1bmRlZiAgU0hSVF9NSU4KKyN1bmRlZiAgU0hSVF9NQVgKKyN1bmRlZiAgVVNIUlRfTUFYCisjdW5kZWYgIElOVF9NSU4KKyN1bmRlZiAgSU5UX01BWAorI3VuZGVmICBVSU5UX01BWAorI3VuZGVmICBMT05HX01JTgorI3VuZGVmICBMT05HX01BWAorI3VuZGVmICBVTE9OR19NQVgKKworI3VuZGVmICBDSEFSX0JJVAorI3VuZGVmICBDSEFSX01JTgorI3VuZGVmICBDSEFSX01BWAorCisvKiBDOTAvOTkgNS4yLjQuMi4xICovCisjZGVmaW5lIFNDSEFSX01BWCBfX1NDSEFSX01BWF9fCisjZGVmaW5lIFNIUlRfTUFYICBfX1NIUlRfTUFYX18KKyNkZWZpbmUgSU5UX01BWCAgIF9fSU5UX01BWF9fCisjZGVmaW5lIExPTkdfTUFYICBfX0xPTkdfTUFYX18KKworI2RlZmluZSBTQ0hBUl9NSU4gKC1fX1NDSEFSX01BWF9fLTEpCisjZGVmaW5lIFNIUlRfTUlOICAoLV9fU0hSVF9NQVhfXyAtMSkKKyNkZWZpbmUgSU5UX01JTiAgICgtX19JTlRfTUFYX18gIC0xKQorI2RlZmluZSBMT05HX01JTiAgKC1fX0xPTkdfTUFYX18gLTFMKQorCisjZGVmaW5lIFVDSEFSX01BWCAoX19TQ0hBUl9NQVhfXyoyICArMSkKKyNkZWZpbmUgVVNIUlRfTUFYIChfX1NIUlRfTUFYX18gKjIgICsxKQorI2RlZmluZSBVSU5UX01BWCAgKF9fSU5UX01BWF9fICAqMlUgKzFVKQorI2RlZmluZSBVTE9OR19NQVggKF9fTE9OR19NQVhfXyAqMlVMKzFVTCkKKworI2lmbmRlZiBNQl9MRU5fTUFYCisjZGVmaW5lIE1CX0xFTl9NQVggMQorI2VuZGlmCisKKyNkZWZpbmUgQ0hBUl9CSVQgIF9fQ0hBUl9CSVRfXworCisjaWZkZWYgX19DSEFSX1VOU0lHTkVEX18gIC8qIC1mdW5zaWduZWQtY2hhciAqLworI2RlZmluZSBDSEFSX01JTiAwCisjZGVmaW5lIENIQVJfTUFYIFVDSEFSX01BWAorI2Vsc2UKKyNkZWZpbmUgQ0hBUl9NSU4gU0NIQVJfTUlOCisjZGVmaW5lIENIQVJfTUFYIF9fU0NIQVJfTUFYX18KKyNlbmRpZgorCisvKiBDOTkgNS4yLjQuMi4xOiBBZGRlZCBsb25nIGxvbmcuCisgICBDKysxMSAxOC4zLjMuMjogc2FtZSBjb250ZW50cyBhcyB0aGUgU3RhbmRhcmQgQyBMaWJyYXJ5IGhlYWRlciA8bGltaXRzLmg+LgorICovCisjaWYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMIHx8IF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKworI3VuZGVmICBMTE9OR19NSU4KKyN1bmRlZiAgTExPTkdfTUFYCisjdW5kZWYgIFVMTE9OR19NQVgKKworI2RlZmluZSBMTE9OR19NQVggIF9fTE9OR19MT05HX01BWF9fCisjZGVmaW5lIExMT05HX01JTiAgKC1fX0xPTkdfTE9OR19NQVhfXy0xTEwpCisjZGVmaW5lIFVMTE9OR19NQVggKF9fTE9OR19MT05HX01BWF9fKjJVTEwrMVVMTCkKKyNlbmRpZgorCisvKiBMT05HX0xPTkdfTUlOL0xPTkdfTE9OR19NQVgvVUxPTkdfTE9OR19NQVggYXJlIGEgR05VIGV4dGVuc2lvbi4gIEl0J3MgdG9vIGJhZAorICAgdGhhdCB3ZSBkb24ndCBoYXZlIHNvbWV0aGluZyBsaWtlICNwcmFnbWEgcG9pc29uIHRoYXQgY291bGQgYmUgdXNlZCB0bworICAgZGVwcmVjYXRlIGEgbWFjcm8gLSB0aGUgY29kZSBzaG91bGQganVzdCB1c2UgTExPTkdfTUFYIGFuZCBmcmllbmRzLgorICovCisjaWYgZGVmaW5lZChfX0dOVV9MSUJSQVJZX18pID8gZGVmaW5lZChfX1VTRV9HTlUpIDogIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorCisjdW5kZWYgICBMT05HX0xPTkdfTUlOCisjdW5kZWYgICBMT05HX0xPTkdfTUFYCisjdW5kZWYgICBVTE9OR19MT05HX01BWAorCisjZGVmaW5lIExPTkdfTE9OR19NQVggIF9fTE9OR19MT05HX01BWF9fCisjZGVmaW5lIExPTkdfTE9OR19NSU4gICgtX19MT05HX0xPTkdfTUFYX18tMUxMKQorI2RlZmluZSBVTE9OR19MT05HX01BWCAoX19MT05HX0xPTkdfTUFYX18qMlVMTCsxVUxMKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NMQU5HX0xJTUlUU19IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2x6Y250aW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL2x6Y250aW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMwMGU0MgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvbHpjbnRpbnRyaW4uaApAQCAtMCwwICsxLDY4IEBACisvKj09PS0tLS0gbHpjbnRpbnRyaW4uaCAtIExaQ05UIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWYgIWRlZmluZWQgX19YODZJTlRSSU5fSCAmJiAhZGVmaW5lZCBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8bHpjbnRpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHg4NmludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fTFpDTlRJTlRSSU5fSAorI2RlZmluZSBfX0xaQ05USU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJsemNudCIpKSkKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2x6Y250MTYodW5zaWduZWQgc2hvcnQgX19YKQoreworICByZXR1cm4gX19YID8gX19idWlsdGluX2NsenMoX19YKSA6IDE2OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2x6Y250MzIodW5zaWduZWQgaW50IF9fWCkKK3sKKyAgcmV0dXJuIF9fWCA/IF9fYnVpbHRpbl9jbHooX19YKSA6IDMyOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbHpjbnRfdTMyKHVuc2lnbmVkIGludCBfX1gpCit7CisgIHJldHVybiBfX1ggPyBfX2J1aWx0aW5fY2x6KF9fWCkgOiAzMjsKK30KKworI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fbHpjbnQ2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19YKQoreworICByZXR1cm4gX19YID8gX19idWlsdGluX2NsemxsKF9fWCkgOiA2NDsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX2x6Y250X3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19YKQoreworICByZXR1cm4gX19YID8gX19idWlsdGluX2NsemxsKF9fWCkgOiA2NDsKK30KKyNlbmRpZgorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX0xaQ05USU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvbW0zZG5vdy5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9tbTNkbm93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0ODY2YwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvbW0zZG5vdy5oCkBAIC0wLDAgKzEsMTcxIEBACisvKj09PS0tLS0gbW0zZG5vdy5oIC0gM0ROb3chIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9NTTNETk9XX0hfSU5DTFVERUQKKyNkZWZpbmUgX01NM0ROT1dfSF9JTkNMVURFRAorCisjaW5jbHVkZSA8bW1pbnRyaW4uaD4KKyNpbmNsdWRlIDxwcmZjaHdpbnRyaW4uaD4KKwordHlwZWRlZiBmbG9hdCBfX3Yyc2YgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDgpKSk7CisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiM2Rub3ciKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9mZW1tcyh2b2lkKSB7CisgIF9fYnVpbHRpbl9pYTMyX2ZlbW1zKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGF2Z3VzYihfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGF2Z3VzYigoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGYyaWQoX19tNjQgX19tKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGYyaWQoKF9fdjJzZilfX20pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BmYWNjKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZmFjYygoX192MnNmKV9fbTEsIChfX3Yyc2YpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZhZGQoX19tNjQgX19tMSwgX19tNjQgX19tMikgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmYWRkKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZmNtcGVxKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZmNtcGVxKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZmNtcGdlKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZmNtcGdlKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZmNtcGd0KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZmNtcGd0KChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZm1heChfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZtYXgoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BmbWluKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZm1pbigoX192MnNmKV9fbTEsIChfX3Yyc2YpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZtdWwoX19tNjQgX19tMSwgX19tNjQgX19tMikgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmbXVsKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZnJjcChfX202NCBfX20pIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZnJjcCgoX192MnNmKV9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZyY3BpdDEoX19tNjQgX19tMSwgX19tNjQgX19tMikgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmcmNwaXQxKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZnJjcGl0MihfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZyY3BpdDIoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BmcnNxcnQoX19tNjQgX19tKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZyc3FydCgoX192MnNmKV9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZyc3FydGl0MShfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZyc3FpdDEoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3Bmc3ViKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZnN1YigoX192MnNmKV9fbTEsIChfX3Yyc2YpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZzdWJyKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZnN1YnIoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BpMmZkKF9fbTY0IF9fbSkgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BpMmZkKChfX3Yyc2kpX19tKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wbXVsaHJ3KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbXVsaHJ3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLyogSGFuZGxlIHRoZSAzZG5vd2EgaW5zdHJ1Y3Rpb25zIGhlcmUuICovCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oIjNkbm93YSIpKSkKKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZjJpdyhfX202NCBfX20pIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZjJpdygoX192MnNmKV9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZuYWNjKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZm5hY2MoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BmcG5hY2MoX19tNjQgX19tMSwgX19tNjQgX19tMikgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmcG5hY2MoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BpMmZ3KF9fbTY0IF9fbSkgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BpMmZ3KChfX3Yyc2kpX19tKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wc3dhcGRzZihfX202NCBfX20pIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3dhcGRzZigoX192MnNmKV9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcHN3YXBkc2koX19tNjQgX19tKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN3YXBkc2koKF9fdjJzaSlfX20pOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9tbV9tYWxsb2MuaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvbW1fbWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1YWZkMwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvbW1fbWFsbG9jLmgKQEAgLTAsMCArMSw3NSBAQAorLyo9PT0tLS0tIG1tX21hbGxvYy5oIC0gQWxsb2NhdGluZyBhbmQgRnJlZWluZyBBbGlnbmVkIE1lbW9yeSBCbG9ja3MgLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX01NX01BTExPQ19ICisjZGVmaW5lIF9fTU1fTUFMTE9DX0gKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaWZkZWYgX1dJTjMyCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZWxzZQorI2lmbmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuIGludCBwb3NpeF9tZW1hbGlnbih2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSk7CisjZWxzZQorLy8gU29tZSBzeXN0ZW1zIChlLmcuIHRob3NlIHdpdGggR05VIGxpYmMpIGRlY2xhcmUgcG9zaXhfbWVtYWxpZ24gd2l0aCBhbgorLy8gZXhjZXB0aW9uIHNwZWNpZmllci4gVmlhIGFuICJlZ3JlZ2lvdXMgd29ya2Fyb3VuZCIgaW4KKy8vIFNlbWE6OkNoZWNrRXF1aXZhbGVudEV4Y2VwdGlvblNwZWMsIENsYW5nIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhcyBhIHZhbGlkCisvLyByZWRlY2xhcmF0aW9uIG9mIGdsaWJjJ3MgZGVjbGFyYXRpb24uCitleHRlcm4gIkMiIGludCBwb3NpeF9tZW1hbGlnbih2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgIShkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChfbW1fbWFsbG9jKSkKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgKl9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWFsbG9jX18pKQorX21tX21hbGxvYyhzaXplX3QgX19zaXplLCBzaXplX3QgX19hbGlnbikKK3sKKyAgaWYgKF9fYWxpZ24gPT0gMSkgeworICAgIHJldHVybiBtYWxsb2MoX19zaXplKTsKKyAgfQorCisgIGlmICghKF9fYWxpZ24gJiAoX19hbGlnbiAtIDEpKSAmJiBfX2FsaWduIDwgc2l6ZW9mKHZvaWQgKikpCisgICAgX19hbGlnbiA9IHNpemVvZih2b2lkICopOworCisgIHZvaWQgKl9fbWFsbG9jZWRNZW1vcnk7CisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyAgX19tYWxsb2NlZE1lbW9yeSA9IF9fbWluZ3dfYWxpZ25lZF9tYWxsb2MoX19zaXplLCBfX2FsaWduKTsKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorICBfX21hbGxvY2VkTWVtb3J5ID0gX2FsaWduZWRfbWFsbG9jKF9fc2l6ZSwgX19hbGlnbik7CisjZWxzZQorICBpZiAocG9zaXhfbWVtYWxpZ24oJl9fbWFsbG9jZWRNZW1vcnksIF9fYWxpZ24sIF9fc2l6ZSkpCisgICAgcmV0dXJuIDA7CisjZW5kaWYKKworICByZXR1cm4gX19tYWxsb2NlZE1lbW9yeTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX21tX2ZyZWUodm9pZCAqX19wKQoreworICBmcmVlKF9fcCk7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fTU1fTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvbW1pbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvbW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWZkNjA1Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9tbWludHJpbi5oCkBAIC0wLDAgKzEsMTU0NSBAQAorLyo9PT0tLS0tIG1taW50cmluLmggLSBNTVggaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX01NSU5UUklOX0gKKyNkZWZpbmUgX19NTUlOVFJJTl9ICisKK3R5cGVkZWYgbG9uZyBsb25nIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg4KSkpOworCit0eXBlZGVmIGxvbmcgbG9uZyBfX3YxZGkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDgpKSk7Cit0eXBlZGVmIGludCBfX3Yyc2kgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDgpKSk7Cit0eXBlZGVmIHNob3J0IF9fdjRoaSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oOCkpKTsKK3R5cGVkZWYgY2hhciBfX3Y4cWkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDgpKSk7CisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygibW14IikpKQorCisvLy8gXGJyaWVmIENsZWFycyB0aGUgTU1YIHN0YXRlIGJ5IHNldHRpbmcgdGhlIHN0YXRlIG9mIHRoZSB4ODcgc3RhY2sgcmVnaXN0ZXJzCisvLy8gICAgdG8gZW1wdHkuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgRU1NUyBpbnN0cnVjdGlvbi4KKy8vLworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9lbXB0eSh2b2lkKQoreworICAgIF9fYnVpbHRpbl9pYTMyX2VtbXMoKTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgNjQtYml0IGludGVnZXIgdmVjdG9yLCBzZXR0aW5nIHRoZSBsb3dlciAzMiBiaXRzIHRvIHRoZQorLy8vICAgIHZhbHVlIG9mIHRoZSAzMi1iaXQgaW50ZWdlciBwYXJhbWV0ZXIgYW5kIHNldHRpbmcgdGhlIHVwcGVyIDMyIGJpdHMgdG8gMC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WRCAvIE1PVkQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19pCisvLy8gICAgQSAzMi1iaXQgaW50ZWdlciB2YWx1ZS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvci4gVGhlIGxvd2VyIDMyIGJpdHMgY29udGFpbiB0aGUgdmFsdWUgb2YgdGhlCisvLy8gICAgcGFyYW1ldGVyLiBUaGUgdXBwZXIgMzIgYml0cyBhcmUgc2V0IHRvIDAuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzaTMyX3NpNjQoaW50IF9faSkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3ZlY19pbml0X3Yyc2koX19pLCAwKTsKK30KKworLy8vIFxicmllZiBSZXR1cm5zIHRoZSBsb3dlciAzMiBiaXRzIG9mIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIGFzIGEgMzItYml0CisvLy8gICAgc2lnbmVkIGludGVnZXIuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVkQgLyBNT1ZEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgMzItYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlIGNvbnRhaW5pbmcgdGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhlCisvLy8gICAgcGFyYW1ldGVyLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNpNjRfc2kzMihfX202NCBfX20pCit7CisgICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3ZlY19leHRfdjJzaSgoX192MnNpKV9fbSwgMCk7Cit9CisKKy8vLyBcYnJpZWYgQ2FzdHMgYSA2NC1iaXQgc2lnbmVkIGludGVnZXIgdmFsdWUgaW50byBhIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WUSAvIE1PVkQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19pCisvLy8gICAgQSA2NC1iaXQgc2lnbmVkIGludGVnZXIuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc2FtZSBiaXR3aXNlIHBhdHRlcm4gYXMgdGhlCisvLy8gICAgcGFyYW1ldGVyLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2k2NF9tNjQobG9uZyBsb25nIF9faSkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9faTsKK30KKworLy8vIFxicmllZiBDYXN0cyBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBpbnRvIGEgNjQtYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZRIC8gTU9WRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20KKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBzaWduZWQgaW50ZWdlciBjb250YWluaW5nIHRoZSBzYW1lIGJpdHdpc2UgcGF0dGVybiBhcyB0aGUKKy8vLyAgICBwYXJhbWV0ZXIuCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0bTY0X3NpNjQoX19tNjQgX19tKQoreworICAgIHJldHVybiAobG9uZyBsb25nKV9fbTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyAxNi1iaXQgc2lnbmVkIGludGVnZXJzIGZyb20gYm90aCA2NC1iaXQgaW50ZWdlciB2ZWN0b3IKKy8vLyAgICBwYXJhbWV0ZXJzIG9mIFs0IHggaTE2XSBpbnRvIDgtYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlcywgYW5kIGNvbnN0cnVjdHMKKy8vLyAgICBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XSBhcyB0aGUgcmVzdWx0LiBQb3NpdGl2ZSB2YWx1ZXMKKy8vLyAgICBncmVhdGVyIHRoYW4gMHg3RiBhcmUgc2F0dXJhdGVkIHRvIDB4N0YuIE5lZ2F0aXZlIHZhbHVlcyBsZXNzIHRoYW4gMHg4MAorLy8vICAgIGFyZSBzYXR1cmF0ZWQgdG8gMHg4MC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQUNLU1NXQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLiBFYWNoIDE2LWJpdCBlbGVtZW50IGlzIHRyZWF0ZWQgYXMgYQorLy8vICAgIDE2LWJpdCBzaWduZWQgaW50ZWdlciBhbmQgaXMgY29udmVydGVkIHRvIGFuIDgtYml0IHNpZ25lZCBpbnRlZ2VyIHdpdGgKKy8vLyAgICBzYXR1cmF0aW9uLiBQb3NpdGl2ZSB2YWx1ZXMgZ3JlYXRlciB0aGFuIDB4N0YgYXJlIHNhdHVyYXRlZCB0byAweDdGLgorLy8vICAgIE5lZ2F0aXZlIHZhbHVlcyBsZXNzIHRoYW4gMHg4MCBhcmUgc2F0dXJhdGVkIHRvIDB4ODAuIFRoZSBjb252ZXJ0ZWQKKy8vLyAgICBbNCB4IGk4XSB2YWx1ZXMgYXJlIHdyaXR0ZW4gdG8gdGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4gRWFjaCAxNi1iaXQgZWxlbWVudCBpcyB0cmVhdGVkIGFzIGEKKy8vLyAgICAxNi1iaXQgc2lnbmVkIGludGVnZXIgYW5kIGlzIGNvbnZlcnRlZCB0byBhbiA4LWJpdCBzaWduZWQgaW50ZWdlciB3aXRoCisvLy8gICAgc2F0dXJhdGlvbi4gUG9zaXRpdmUgdmFsdWVzIGdyZWF0ZXIgdGhhbiAweDdGIGFyZSBzYXR1cmF0ZWQgdG8gMHg3Ri4KKy8vLyAgICBOZWdhdGl2ZSB2YWx1ZXMgbGVzcyB0aGFuIDB4ODAgYXJlIHNhdHVyYXRlZCB0byAweDgwLiBUaGUgY29udmVydGVkCisvLy8gICAgWzQgeCBpOF0gdmFsdWVzIGFyZSB3cml0dGVuIHRvIHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gY29udGFpbmluZyB0aGUgY29udmVydGVkCisvLy8gICAgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcGFja3NfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGFja3Nzd2IoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIDMyLWJpdCBzaWduZWQgaW50ZWdlcnMgZnJvbSBib3RoIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcgorLy8vICAgIHBhcmFtZXRlcnMgb2YgWzIgeCBpMzJdIGludG8gMTYtYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlcywgYW5kIGNvbnN0cnVjdHMKKy8vLyAgICBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gYXMgdGhlIHJlc3VsdC4gUG9zaXRpdmUgdmFsdWVzCisvLy8gICAgZ3JlYXRlciB0aGFuIDB4N0ZGRiBhcmUgc2F0dXJhdGVkIHRvIDB4N0ZGRi4gTmVnYXRpdmUgdmFsdWVzIGxlc3MgdGhhbgorLy8vICAgIDB4ODAwMCBhcmUgc2F0dXJhdGVkIHRvIDB4ODAwMC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQUNLU1NEVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLiBFYWNoIDMyLWJpdCBlbGVtZW50IGlzIHRyZWF0ZWQgYXMgYQorLy8vICAgIDMyLWJpdCBzaWduZWQgaW50ZWdlciBhbmQgaXMgY29udmVydGVkIHRvIGEgMTYtYml0IHNpZ25lZCBpbnRlZ2VyIHdpdGgKKy8vLyAgICBzYXR1cmF0aW9uLiBQb3NpdGl2ZSB2YWx1ZXMgZ3JlYXRlciB0aGFuIDB4N0ZGRiBhcmUgc2F0dXJhdGVkIHRvIDB4N0ZGRi4KKy8vLyAgICBOZWdhdGl2ZSB2YWx1ZXMgbGVzcyB0aGFuIDB4ODAwMCBhcmUgc2F0dXJhdGVkIHRvIDB4ODAwMC4gVGhlIGNvbnZlcnRlZAorLy8vICAgIFsyIHggaTE2XSB2YWx1ZXMgYXJlIHdyaXR0ZW4gdG8gdGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4gRWFjaCAzMi1iaXQgZWxlbWVudCBpcyB0cmVhdGVkIGFzIGEKKy8vLyAgICAzMi1iaXQgc2lnbmVkIGludGVnZXIgYW5kIGlzIGNvbnZlcnRlZCB0byBhIDE2LWJpdCBzaWduZWQgaW50ZWdlciB3aXRoCisvLy8gICAgc2F0dXJhdGlvbi4gUG9zaXRpdmUgdmFsdWVzIGdyZWF0ZXIgdGhhbiAweDdGRkYgYXJlIHNhdHVyYXRlZCB0byAweDdGRkYuCisvLy8gICAgTmVnYXRpdmUgdmFsdWVzIGxlc3MgdGhhbiAweDgwMDAgYXJlIHNhdHVyYXRlZCB0byAweDgwMDAuIFRoZSBjb252ZXJ0ZWQKKy8vLyAgICBbMiB4IGkxNl0gdmFsdWVzIGFyZSB3cml0dGVuIHRvIHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZAorLy8vICAgIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3BhY2tzX3BpMzIoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhY2tzc2R3KChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyAxNi1iaXQgc2lnbmVkIGludGVnZXJzIGZyb20gYm90aCA2NC1iaXQgaW50ZWdlciB2ZWN0b3IKKy8vLyAgICBwYXJhbWV0ZXJzIG9mIFs0IHggaTE2XSBpbnRvIDgtYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLCBhbmQKKy8vLyAgICBjb25zdHJ1Y3RzIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGFzIHRoZSByZXN1bHQuIFZhbHVlcworLy8vICAgIGdyZWF0ZXIgdGhhbiAweEZGIGFyZSBzYXR1cmF0ZWQgdG8gMHhGRi4gVmFsdWVzIGxlc3MgdGhhbiAwIGFyZSBzYXR1cmF0ZWQKKy8vLyAgICB0byAwLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBBQ0tVU1dCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uIEVhY2ggMTYtYml0IGVsZW1lbnQgaXMgdHJlYXRlZCBhcyBhCisvLy8gICAgMTYtYml0IHNpZ25lZCBpbnRlZ2VyIGFuZCBpcyBjb252ZXJ0ZWQgdG8gYW4gOC1iaXQgdW5zaWduZWQgaW50ZWdlciB3aXRoCisvLy8gICAgc2F0dXJhdGlvbi4gVmFsdWVzIGdyZWF0ZXIgdGhhbiAweEZGIGFyZSBzYXR1cmF0ZWQgdG8gMHhGRi4gVmFsdWVzIGxlc3MKKy8vLyAgICB0aGFuIDAgYXJlIHNhdHVyYXRlZCB0byAwLiBUaGUgY29udmVydGVkIFs0IHggaThdIHZhbHVlcyBhcmUgd3JpdHRlbiB0bworLy8vICAgIHRoZSBsb3dlciAzMiBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uIEVhY2ggMTYtYml0IGVsZW1lbnQgaXMgdHJlYXRlZCBhcyBhCisvLy8gICAgMTYtYml0IHNpZ25lZCBpbnRlZ2VyIGFuZCBpcyBjb252ZXJ0ZWQgdG8gYW4gOC1iaXQgdW5zaWduZWQgaW50ZWdlciB3aXRoCisvLy8gICAgc2F0dXJhdGlvbi4gVmFsdWVzIGdyZWF0ZXIgdGhhbiAweEZGIGFyZSBzYXR1cmF0ZWQgdG8gMHhGRi4gVmFsdWVzIGxlc3MKKy8vLyAgICB0aGFuIDAgYXJlIHNhdHVyYXRlZCB0byAwLiBUaGUgY29udmVydGVkIFs0IHggaThdIHZhbHVlcyBhcmUgd3JpdHRlbiB0bworLy8vICAgIHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gY29udGFpbmluZyB0aGUgY29udmVydGVkCisvLy8gICAgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcGFja3NfcHUxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGFja3Vzd2IoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIFVucGFja3MgdGhlIHVwcGVyIDMyIGJpdHMgZnJvbSB0d28gNjQtYml0IGludGVnZXIgdmVjdG9ycyBvZiBbOCB4IGk4XQorLy8vICAgIGFuZCBpbnRlcmxlYXZlcyB0aGVtIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFVOUENLSEJXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XS4KKy8vLyAgICBCaXRzIFszOTozMl0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNzowXSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzQ3OjQwXSBhcmUgd3JpdHRlbiB0byBiaXRzIFsyMzoxNl0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFs1NTo0OF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMzk6MzJdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbNjM6NTZdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzU1OjQ4XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8gICAgQml0cyBbMzk6MzJdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzE1OjhdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbNDc6NDBdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzMxOjI0XSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzU1OjQ4XSBhcmUgd3JpdHRlbiB0byBiaXRzIFs0Nzo0MF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFs2Mzo1Nl0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNjM6NTZdIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gY29udGFpbmluZyB0aGUgaW50ZXJsZWF2ZWQKKy8vLyAgICB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2toaV9waTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3B1bnBja2hidygoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgVW5wYWNrcyB0aGUgdXBwZXIgMzIgYml0cyBmcm9tIHR3byA2NC1iaXQgaW50ZWdlciB2ZWN0b3JzIG9mCisvLy8gICAgWzQgeCBpMTZdIGFuZCBpbnRlcmxlYXZlcyB0aGVtIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBVTlBDS0hXRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vICAgIEJpdHMgWzQ3OjMyXSBhcmUgd3JpdHRlbiB0byBiaXRzIFsxNTowXSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzYzOjQ4XSBhcmUgd3JpdHRlbiB0byBiaXRzIFs0NzozMl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyAgICBCaXRzIFs0NzozMl0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMzE6MTZdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbNjM6NDhdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzYzOjQ4XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSBpbnRlcmxlYXZlZAorLy8vICAgIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VucGFja2hpX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3B1bnBja2h3ZCgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgVW5wYWNrcyB0aGUgdXBwZXIgMzIgYml0cyBmcm9tIHR3byA2NC1iaXQgaW50ZWdlciB2ZWN0b3JzIG9mCisvLy8gICAgWzIgeCBpMzJdIGFuZCBpbnRlcmxlYXZlcyB0aGVtIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBVTlBDS0hEUSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLiBUaGUgdXBwZXIgMzIgYml0cyBhcmUgd3JpdHRlbiB0bworLy8vICAgIHRoZSBsb3dlciAzMiBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0uIFRoZSB1cHBlciAzMiBiaXRzIGFyZSB3cml0dGVuIHRvCisvLy8gICAgdGhlIHVwcGVyIDMyIGJpdHMgb2YgdGhlIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0gY29udGFpbmluZyB0aGUgaW50ZXJsZWF2ZWQKKy8vLyAgICB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2toaV9waTMyKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wdW5wY2toZHEoKF9fdjJzaSlfX20xLCAoX192MnNpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIFVucGFja3MgdGhlIGxvd2VyIDMyIGJpdHMgZnJvbSB0d28gNjQtYml0IGludGVnZXIgdmVjdG9ycyBvZiBbOCB4IGk4XQorLy8vICAgIGFuZCBpbnRlcmxlYXZlcyB0aGVtIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFVOUENLTEJXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XS4KKy8vLyAgICBCaXRzIFs3OjBdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzc6MF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFsxNTo4XSBhcmUgd3JpdHRlbiB0byBiaXRzIFsyMzoxNl0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFsyMzoxNl0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMzk6MzJdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbMzE6MjRdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzU1OjQ4XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8gICAgQml0cyBbNzowXSBhcmUgd3JpdHRlbiB0byBiaXRzIFsxNTo4XSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzE1OjhdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzMxOjI0XSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzIzOjE2XSBhcmUgd3JpdHRlbiB0byBiaXRzIFs0Nzo0MF0gb2YgdGhlIHJlc3VsdC4KKy8vLyAgICBCaXRzIFszMToyNF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNjM6NTZdIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gY29udGFpbmluZyB0aGUgaW50ZXJsZWF2ZWQKKy8vLyAgICB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2tsb19waTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3B1bnBja2xidygoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgVW5wYWNrcyB0aGUgbG93ZXIgMzIgYml0cyBmcm9tIHR3byA2NC1iaXQgaW50ZWdlciB2ZWN0b3JzIG9mCisvLy8gICAgWzQgeCBpMTZdIGFuZCBpbnRlcmxlYXZlcyB0aGVtIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBVTlBDS0xXRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vICAgIEJpdHMgWzE1OjBdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzE1OjBdIG9mIHRoZSByZXN1bHQuCisvLy8gICAgQml0cyBbMzE6MTZdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzQ3OjMyXSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vICAgIEJpdHMgWzE1OjBdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzMxOjE2XSBvZiB0aGUgcmVzdWx0LgorLy8vICAgIEJpdHMgWzMxOjE2XSBhcmUgd3JpdHRlbiB0byBiaXRzIFs2Mzo0OF0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgaW50ZXJsZWF2ZWQKKy8vLyAgICB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2tsb19waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wdW5wY2tsd2QoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIFVucGFja3MgdGhlIGxvd2VyIDMyIGJpdHMgZnJvbSB0d28gNjQtYml0IGludGVnZXIgdmVjdG9ycyBvZgorLy8vICAgIFsyIHggaTMyXSBhbmQgaW50ZXJsZWF2ZXMgdGhlbSBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQVU5QQ0tMRFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4gVGhlIGxvd2VyIDMyIGJpdHMgYXJlIHdyaXR0ZW4gdG8KKy8vLyAgICB0aGUgbG93ZXIgMzIgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLiBUaGUgbG93ZXIgMzIgYml0cyBhcmUgd3JpdHRlbiB0bworLy8vICAgIHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgdGhlIGludGVybGVhdmVkCisvLy8gICAgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNrbG9fcGkzMihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHVucGNrbGRxKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKK30KKworLy8vIFxicmllZiBBZGRzIGVhY2ggOC1iaXQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBmaXJzdCA2NC1iaXQgaW50ZWdlciB2ZWN0b3IKKy8vLyAgICBvZiBbOCB4IGk4XSB0byB0aGUgY29ycmVzcG9uZGluZyA4LWJpdCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIHNlY29uZAorLy8vICAgIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XS4gVGhlIGxvd2VyIDggYml0cyBvZiB0aGUgcmVzdWx0cyBhcmUKKy8vLyAgICBwYWNrZWQgaW50byBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQUREQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XSBjb250YWluaW5nIHRoZSBzdW1zIG9mIGJvdGgKKy8vLyAgICBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkX3BpOChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGFkZGIoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIEFkZHMgZWFjaCAxNi1iaXQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBmaXJzdCA2NC1iaXQgaW50ZWdlciB2ZWN0b3IKKy8vLyAgICBvZiBbNCB4IGkxNl0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgMTYtYml0IGludGVnZXIgZWxlbWVudCBvZiB0aGUgc2Vjb25kCisvLy8gICAgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4gVGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhlIHJlc3VsdHMgYXJlCisvLy8gICAgcGFja2VkIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBBRERXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIHN1bXMgb2YgYm90aAorLy8vICAgIHBhcmFtZXRlcnMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGFkZHcoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIEFkZHMgZWFjaCAzMi1iaXQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBmaXJzdCA2NC1iaXQgaW50ZWdlciB2ZWN0b3IKKy8vLyAgICBvZiBbMiB4IGkzMl0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgMzItYml0IGludGVnZXIgZWxlbWVudCBvZiB0aGUgc2Vjb25kCisvLy8gICAgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhlIHJlc3VsdHMgYXJlCisvLy8gICAgcGFja2VkIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBBREREIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0uCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgdGhlIHN1bXMgb2YgYm90aAorLy8vICAgIHBhcmFtZXRlcnMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRfcGkzMihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGFkZGQoKF9fdjJzaSlfX20xLCAoX192MnNpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIEFkZHMgZWFjaCA4LWJpdCBzaWduZWQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBmaXJzdCA2NC1iaXQgaW50ZWdlcgorLy8vICAgIHZlY3RvciBvZiBbOCB4IGk4XSB0byB0aGUgY29ycmVzcG9uZGluZyA4LWJpdCBzaWduZWQgaW50ZWdlciBlbGVtZW50IG9mCisvLy8gICAgdGhlIHNlY29uZCA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uIFBvc2l0aXZlIHN1bXMgZ3JlYXRlciB0aGFuCisvLy8gICAgMHg3RiBhcmUgc2F0dXJhdGVkIHRvIDB4N0YuIE5lZ2F0aXZlIHN1bXMgbGVzcyB0aGFuIDB4ODAgYXJlIHNhdHVyYXRlZCB0bworLy8vICAgIDB4ODAuIFRoZSByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQUREU0IgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gY29udGFpbmluZyB0aGUgc2F0dXJhdGVkIHN1bXMKKy8vLyAgICBvZiBib3RoIHBhcmFtZXRlcnMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRzX3BpOChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGFkZHNiKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKK30KKworLy8vIFxicmllZiBBZGRzIGVhY2ggMTYtYml0IHNpZ25lZCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIGZpcnN0IDY0LWJpdCBpbnRlZ2VyCisvLy8gICAgdmVjdG9yIG9mIFs0IHggaTE2XSB0byB0aGUgY29ycmVzcG9uZGluZyAxNi1iaXQgc2lnbmVkIGludGVnZXIgZWxlbWVudCBvZgorLy8vICAgIHRoZSBzZWNvbmQgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4gUG9zaXRpdmUgc3VtcyBncmVhdGVyIHRoYW4KKy8vLyAgICAweDdGRkYgYXJlIHNhdHVyYXRlZCB0byAweDdGRkYuIE5lZ2F0aXZlIHN1bXMgbGVzcyB0aGFuIDB4ODAwMCBhcmUKKy8vLyAgICBzYXR1cmF0ZWQgdG8gMHg4MDAwLiBUaGUgcmVzdWx0cyBhcmUgcGFja2VkIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IKKy8vLyAgICBvZiBbNCB4IGkxNl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEFERFNXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIHNhdHVyYXRlZCBzdW1zCisvLy8gICAgb2YgYm90aCBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkc19waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWRkc3coKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIEFkZHMgZWFjaCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIGZpcnN0IDY0LWJpdCBpbnRlZ2VyCisvLy8gICAgdmVjdG9yIG9mIFs4IHggaThdIHRvIHRoZSBjb3JyZXNwb25kaW5nIDgtYml0IHVuc2lnbmVkIGludGVnZXIgZWxlbWVudCBvZgorLy8vICAgIHRoZSBzZWNvbmQgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLiBTdW1zIGdyZWF0ZXIgdGhhbiAweEZGIGFyZQorLy8vICAgIHNhdHVyYXRlZCB0byAweEZGLiBUaGUgcmVzdWx0cyBhcmUgcGFja2VkIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YKKy8vLyAgICBbOCB4IGk4XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQUREVVNCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XS4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgdGhlIHNhdHVyYXRlZAorLy8vICAgIHVuc2lnbmVkIHN1bXMgb2YgYm90aCBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkc19wdTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhZGR1c2IoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIEFkZHMgZWFjaCAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBmaXJzdCA2NC1iaXQgaW50ZWdlcgorLy8vICAgIHZlY3RvciBvZiBbNCB4IGkxNl0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgMTYtYml0IHVuc2lnbmVkIGludGVnZXIgZWxlbWVudAorLy8vICAgIG9mIHRoZSBzZWNvbmQgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4gU3VtcyBncmVhdGVyIHRoYW4KKy8vLyAgICAweEZGRkYgYXJlIHNhdHVyYXRlZCB0byAweEZGRkYuIFRoZSByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBhIDY0LWJpdAorLy8vICAgIGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQUREVVNXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIHNhdHVyYXRlZAorLy8vICAgIHVuc2lnbmVkIHN1bXMgb2YgYm90aCBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkc19wdTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWRkdXN3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLy8vIFxicmllZiBTdWJ0cmFjdHMgZWFjaCA4LWJpdCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIHNlY29uZCA2NC1iaXQgaW50ZWdlcgorLy8vICAgIHZlY3RvciBvZiBbOCB4IGk4XSBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIDgtYml0IGludGVnZXIgZWxlbWVudCBvZiB0aGUKKy8vLyAgICBmaXJzdCA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uIFRoZSBsb3dlciA4IGJpdHMgb2YgdGhlIHJlc3VsdHMKKy8vLyAgICBhcmUgcGFja2VkIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFNVQkIgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmRzLgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gY29udGFpbmluZyB0aGUgc3VidHJhaGVuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gY29udGFpbmluZyB0aGUgZGlmZmVyZW5jZXMgb2YKKy8vLyAgICBib3RoIHBhcmFtZXRlcnMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdWJfcGk4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3ViYigoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIGVhY2ggMTYtYml0IGludGVnZXIgZWxlbWVudCBvZiB0aGUgc2Vjb25kIDY0LWJpdCBpbnRlZ2VyCisvLy8gICAgdmVjdG9yIG9mIFs0IHggaTE2XSBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIDE2LWJpdCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlCisvLy8gICAgZmlyc3QgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4gVGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhlCisvLy8gICAgcmVzdWx0cyBhcmUgcGFja2VkIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTVUJXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgbWludWVuZHMuCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgc3VidHJhaGVuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIGRpZmZlcmVuY2VzIG9mCisvLy8gICAgYm90aCBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3ViX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzdWJ3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLy8vIFxicmllZiBTdWJ0cmFjdHMgZWFjaCAzMi1iaXQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBzZWNvbmQgNjQtYml0IGludGVnZXIKKy8vLyAgICB2ZWN0b3Igb2YgWzIgeCBpMzJdIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgMzItYml0IGludGVnZXIgZWxlbWVudCBvZiB0aGUKKy8vLyAgICBmaXJzdCA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLiBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGUKKy8vLyAgICByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFNVQkQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXSBjb250YWluaW5nIHRoZSBtaW51ZW5kcy4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXSBjb250YWluaW5nIHRoZSBzdWJ0cmFoZW5kcy4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0gY29udGFpbmluZyB0aGUgZGlmZmVyZW5jZXMgb2YKKy8vLyAgICBib3RoIHBhcmFtZXRlcnMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdWJfcGkzMihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN1YmQoKF9fdjJzaSlfX20xLCAoX192MnNpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIFN1YnRyYWN0cyBlYWNoIDgtYml0IHNpZ25lZCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIHNlY29uZCA2NC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XSBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIDgtYml0IHNpZ25lZCBpbnRlZ2VyCisvLy8gICAgZWxlbWVudCBvZiB0aGUgZmlyc3QgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLiBQb3NpdGl2ZSByZXN1bHRzCisvLy8gICAgZ3JlYXRlciB0aGFuIDB4N0YgYXJlIHNhdHVyYXRlZCB0byAweDdGLiBOZWdhdGl2ZSByZXN1bHRzIGxlc3MgdGhhbiAweDgwCisvLy8gICAgYXJlIHNhdHVyYXRlZCB0byAweDgwLiBUaGUgcmVzdWx0cyBhcmUgcGFja2VkIGludG8gYSA2NC1iaXQgaW50ZWdlcgorLy8vICAgIHZlY3RvciBvZiBbOCB4IGk4XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU1VCU0IgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmRzLgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gY29udGFpbmluZyB0aGUgc3VidHJhaGVuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gY29udGFpbmluZyB0aGUgc2F0dXJhdGVkCisvLy8gICAgZGlmZmVyZW5jZXMgb2YgYm90aCBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3Vic19waTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzdWJzYigoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIGVhY2ggMTYtYml0IHNpZ25lZCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIHNlY29uZCA2NC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gZnJvbSB0aGUgY29ycmVzcG9uZGluZyAxNi1iaXQgc2lnbmVkIGludGVnZXIKKy8vLyAgICBlbGVtZW50IG9mIHRoZSBmaXJzdCA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLiBQb3NpdGl2ZSByZXN1bHRzCisvLy8gICAgZ3JlYXRlciB0aGFuIDB4N0ZGRiBhcmUgc2F0dXJhdGVkIHRvIDB4N0ZGRi4gTmVnYXRpdmUgcmVzdWx0cyBsZXNzIHRoYW4KKy8vLyAgICAweDgwMDAgYXJlIHNhdHVyYXRlZCB0byAweDgwMDAuIFRoZSByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBhIDY0LWJpdAorLy8vICAgIGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU1VCU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSBtaW51ZW5kcy4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSBzdWJ0cmFoZW5kcy4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgc2F0dXJhdGVkCisvLy8gICAgZGlmZmVyZW5jZXMgb2YgYm90aCBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3Vic19waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3Vic3coKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIFN1YnRyYWN0cyBlYWNoIDgtYml0IHVuc2lnbmVkIGludGVnZXIgZWxlbWVudCBvZiB0aGUgc2Vjb25kIDY0LWJpdAorLy8vICAgIGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgOC1iaXQgdW5zaWduZWQgaW50ZWdlcgorLy8vICAgIGVsZW1lbnQgb2YgdGhlIGZpcnN0IDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XS4gSWYgYW4gZWxlbWVudCBvZgorLy8vICAgIHRoZSBmaXJzdCB2ZWN0b3IgaXMgbGVzcyB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgdGhlIHNlY29uZAorLy8vICAgIHZlY3RvciwgdGhlIHJlc3VsdCBpcyBzYXR1cmF0ZWQgdG8gMC4gVGhlIHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEKKy8vLyAgICA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFNVQlVTQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gY29udGFpbmluZyB0aGUgbWludWVuZHMuCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XSBjb250YWluaW5nIHRoZSBzdWJ0cmFoZW5kcy4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbOCB4IGk4XSBjb250YWluaW5nIHRoZSBzYXR1cmF0ZWQKKy8vLyAgICBkaWZmZXJlbmNlcyBvZiBib3RoIHBhcmFtZXRlcnMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdWJzX3B1OChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN1YnVzYigoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIGVhY2ggMTYtYml0IHVuc2lnbmVkIGludGVnZXIgZWxlbWVudCBvZiB0aGUgc2Vjb25kIDY0LWJpdAorLy8vICAgIGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIDE2LWJpdCB1bnNpZ25lZAorLy8vICAgIGludGVnZXIgZWxlbWVudCBvZiB0aGUgZmlyc3QgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4gSWYgYW4KKy8vLyAgICBlbGVtZW50IG9mIHRoZSBmaXJzdCB2ZWN0b3IgaXMgbGVzcyB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgdGhlCisvLy8gICAgc2Vjb25kIHZlY3RvciwgdGhlIHJlc3VsdCBpcyBzYXR1cmF0ZWQgdG8gMC4gVGhlIHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvCisvLy8gICAgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTVUJVU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSBtaW51ZW5kcy4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSBzdWJ0cmFoZW5kcy4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgc2F0dXJhdGVkCisvLy8gICAgZGlmZmVyZW5jZXMgb2YgYm90aCBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3Vic19wdTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3VidXN3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLy8vIFxicmllZiBNdWx0aXBsaWVzIGVhY2ggMTYtYml0IHNpZ25lZCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIGZpcnN0IDY0LWJpdAorLy8vICAgIGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBieSB0aGUgY29ycmVzcG9uZGluZyAxNi1iaXQgc2lnbmVkIGludGVnZXIKKy8vLyAgICBlbGVtZW50IG9mIHRoZSBzZWNvbmQgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBhbmQgZ2V0IGZvdXIKKy8vLyAgICAzMi1iaXQgcHJvZHVjdHMuIEFkZHMgYWRqYWNlbnQgcGFpcnMgb2YgcHJvZHVjdHMgdG8gZ2V0IHR3byAzMi1iaXQgc3Vtcy4KKy8vLyAgICBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGVzZSB0d28gc3VtcyBhcmUgcGFja2VkIGludG8gYSA2NC1iaXQgaW50ZWdlcgorLy8vICAgIHZlY3RvciBvZiBbMiB4IGkzMl0uIEZvciBleGFtcGxlLCBiaXRzIFsxNTowXSBvZiBib3RoIHBhcmFtZXRlcnMgYXJlCisvLy8gICAgbXVsdGlwbGllZCwgYml0cyBbMzE6MTZdIG9mIGJvdGggcGFyYW1ldGVycyBhcmUgbXVsdGlwbGllZCwgYW5kIHRoZSBzdW0KKy8vLyAgICBvZiBib3RoIHJlc3VsdHMgaXMgd3JpdHRlbiB0byBiaXRzIFszMTowXSBvZiB0aGUgcmVzdWx0LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBNQUREV0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0gY29udGFpbmluZyB0aGUgc3VtcyBvZgorLy8vICAgIHByb2R1Y3RzIG9mIGJvdGggcGFyYW1ldGVycy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hZGRfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG1hZGR3ZCgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgTXVsdGlwbGllcyBlYWNoIDE2LWJpdCBzaWduZWQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBmaXJzdCA2NC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gYnkgdGhlIGNvcnJlc3BvbmRpbmcgMTYtYml0IHNpZ25lZCBpbnRlZ2VyCisvLy8gICAgZWxlbWVudCBvZiB0aGUgc2Vjb25kIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uIFBhY2tzIHRoZSB1cHBlcgorLy8vICAgIDE2IGJpdHMgb2YgdGhlIDMyLWJpdCBwcm9kdWN0cyBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQTVVMSFcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgdXBwZXIgMTYgYml0cworLy8vICAgIG9mIHRoZSBwcm9kdWN0cyBvZiBib3RoIHBhcmFtZXRlcnMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWxoaV9waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbXVsaHcoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIE11bHRpcGxpZXMgZWFjaCAxNi1iaXQgc2lnbmVkIGludGVnZXIgZWxlbWVudCBvZiB0aGUgZmlyc3QgNjQtYml0CisvLy8gICAgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGJ5IHRoZSBjb3JyZXNwb25kaW5nIDE2LWJpdCBzaWduZWQgaW50ZWdlcgorLy8vICAgIGVsZW1lbnQgb2YgdGhlIHNlY29uZCA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLiBQYWNrcyB0aGUgbG93ZXIKKy8vLyAgICAxNiBiaXRzIG9mIHRoZSAzMi1iaXQgcHJvZHVjdHMgaW50byBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUE1VTExXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHBhcmFtIF9fbTIKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIGxvd2VyIDE2IGJpdHMKKy8vLyAgICBvZiB0aGUgcHJvZHVjdHMgb2YgYm90aCBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsbG9fcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG11bGx3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLy8vIFxicmllZiBMZWZ0LXNoaWZ0cyBlYWNoIDE2LWJpdCBzaWduZWQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBmaXJzdAorLy8vICAgIHBhcmFtZXRlciwgd2hpY2ggaXMgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLCBieSB0aGUgbnVtYmVyCisvLy8gICAgb2YgYml0cyBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgNjQtYml0IGludGVnZXIuIFRoZQorLy8vICAgIGxvd2VyIDE2IGJpdHMgb2YgdGhlIHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mCisvLy8gICAgWzQgeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTTExXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGludGVycHJldGVkIGFzIGEgc2luZ2xlIDY0LWJpdCBpbnRlZ2VyLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSBsZWZ0LXNoaWZ0ZWQKKy8vLyAgICB2YWx1ZXMuIElmIF9fY291bnQgaXMgZ3JlYXRlciBvciBlcXVhbCB0byAxNiwgdGhlIHJlc3VsdCBpcyBzZXQgdG8gYWxsIDAuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zbGxfcGkxNihfX202NCBfX20sIF9fbTY0IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc2xsdygoX192NGhpKV9fbSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgTGVmdC1zaGlmdHMgZWFjaCAxNi1iaXQgc2lnbmVkIGludGVnZXIgZWxlbWVudCBvZiBhIDY0LWJpdCBpbnRlZ2VyCisvLy8gICAgdmVjdG9yIG9mIFs0IHggaTE2XSBieSB0aGUgbnVtYmVyIG9mIGJpdHMgc3BlY2lmaWVkIGJ5IGEgMzItYml0IGludGVnZXIuCisvLy8gICAgVGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhlIHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yCisvLy8gICAgb2YgWzQgeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTTExXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgMzItYml0IGludGVnZXIgdmFsdWUuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIGxlZnQtc2hpZnRlZAorLy8vICAgIHZhbHVlcy4gSWYgX19jb3VudCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIDE2LCB0aGUgcmVzdWx0IGlzIHNldCB0byBhbGwgMC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NsbGlfcGkxNihfX202NCBfX20sIGludCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNsbHdpKChfX3Y0aGkpX19tLCBfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBMZWZ0LXNoaWZ0cyBlYWNoIDMyLWJpdCBzaWduZWQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBmaXJzdAorLy8vICAgIHBhcmFtZXRlciwgd2hpY2ggaXMgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLCBieSB0aGUgbnVtYmVyCisvLy8gICAgb2YgYml0cyBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgNjQtYml0IGludGVnZXIuIFRoZQorLy8vICAgIGxvd2VyIDMyIGJpdHMgb2YgdGhlIHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mCisvLy8gICAgWzIgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTTExEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGludGVycHJldGVkIGFzIGEgc2luZ2xlIDY0LWJpdCBpbnRlZ2VyLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXSBjb250YWluaW5nIHRoZSBsZWZ0LXNoaWZ0ZWQKKy8vLyAgICB2YWx1ZXMuIElmIF9fY291bnQgaXMgZ3JlYXRlciBvciBlcXVhbCB0byAzMiwgdGhlIHJlc3VsdCBpcyBzZXQgdG8gYWxsIDAuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zbGxfcGkzMihfX202NCBfX20sIF9fbTY0IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc2xsZCgoX192MnNpKV9fbSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgTGVmdC1zaGlmdHMgZWFjaCAzMi1iaXQgc2lnbmVkIGludGVnZXIgZWxlbWVudCBvZiBhIDY0LWJpdCBpbnRlZ2VyCisvLy8gICAgdmVjdG9yIG9mIFsyIHggaTMyXSBieSB0aGUgbnVtYmVyIG9mIGJpdHMgc3BlY2lmaWVkIGJ5IGEgMzItYml0IGludGVnZXIuCisvLy8gICAgVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhlIHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIgdmVjdG9yCisvLy8gICAgb2YgWzIgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTTExEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgMzItYml0IGludGVnZXIgdmFsdWUuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgdGhlIGxlZnQtc2hpZnRlZAorLy8vICAgIHZhbHVlcy4gSWYgX19jb3VudCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIDMyLCB0aGUgcmVzdWx0IGlzIHNldCB0byBhbGwgMC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NsbGlfcGkzMihfX202NCBfX20sIGludCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNsbGRpKChfX3Yyc2kpX19tLCBfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBMZWZ0LXNoaWZ0cyB0aGUgZmlyc3QgNjQtYml0IGludGVnZXIgcGFyYW1ldGVyIGJ5IHRoZSBudW1iZXIgb2YgYml0cworLy8vICAgIHNwZWNpZmllZCBieSB0aGUgc2Vjb25kIDY0LWJpdCBpbnRlZ2VyIHBhcmFtZXRlci4gVGhlIGxvd2VyIDY0IGJpdHMgb2YKKy8vLyAgICByZXN1bHQgYXJlIHJldHVybmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTTExRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGludGVycHJldGVkIGFzIGEgc2luZ2xlIDY0LWJpdCBpbnRlZ2VyLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUgNjQtYml0IGludGVnZXIuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgbGVmdC1zaGlmdGVkIHZhbHVlLiBJZgorLy8vICAgICBfX2NvdW50IGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gNjQsIHRoZSByZXN1bHQgaXMgc2V0IHRvIDAuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zbGxfc2k2NChfX202NCBfX20sIF9fbTY0IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc2xscSgoX192MWRpKV9fbSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgTGVmdC1zaGlmdHMgdGhlIGZpcnN0IHBhcmFtZXRlciwgd2hpY2ggaXMgYSA2NC1iaXQgaW50ZWdlciwgYnkgdGhlCisvLy8gICAgbnVtYmVyIG9mIGJpdHMgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgcGFyYW1ldGVyLCB3aGljaCBpcyBhIDMyLWJpdAorLy8vICAgIGludGVnZXIuIFRoZSBsb3dlciA2NCBiaXRzIG9mIHJlc3VsdCBhcmUgcmV0dXJuZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFNMTFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUgNjQtYml0IGludGVnZXIuCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBIDMyLWJpdCBpbnRlZ2VyIHZhbHVlLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGxlZnQtc2hpZnRlZCB2YWx1ZS4gSWYKKy8vLyAgICAgX19jb3VudCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIDY0LCB0aGUgcmVzdWx0IGlzIHNldCB0byAwLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2xsaV9zaTY0KF9fbTY0IF9fbSwgaW50IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc2xscWkoKF9fdjFkaSlfX20sIF9fY291bnQpOworfQorCisvLy8gXGJyaWVmIFJpZ2h0LXNoaWZ0cyBlYWNoIDE2LWJpdCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIGZpcnN0IHBhcmFtZXRlciwKKy8vLyAgICB3aGljaCBpcyBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0sIGJ5IHRoZSBudW1iZXIgb2YgYml0cworLy8vICAgIHNwZWNpZmllZCBieSB0aGUgc2Vjb25kIHBhcmFtZXRlciwgd2hpY2ggaXMgYSA2NC1iaXQgaW50ZWdlci4gSGlnaC1vcmRlcgorLy8vICAgIGJpdHMgYXJlIGZpbGxlZCB3aXRoIHRoZSBzaWduIGJpdCBvZiB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBlYWNoIDE2LWJpdAorLy8vICAgIGVsZW1lbnQuIFRoZSAxNi1iaXQgcmVzdWx0cyBhcmUgcGFja2VkIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YKKy8vLyAgICBbNCB4IGkxNl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFNSQVcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUgNjQtYml0IGludGVnZXIuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQKKy8vLyAgICB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmFfcGkxNihfX202NCBfX20sIF9fbTY0IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3JhdygoX192NGhpKV9fbSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgUmlnaHQtc2hpZnRzIGVhY2ggMTYtYml0IGludGVnZXIgZWxlbWVudCBvZiBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcgorLy8vICAgIG9mIFs0IHggaTE2XSBieSB0aGUgbnVtYmVyIG9mIGJpdHMgc3BlY2lmaWVkIGJ5IGEgMzItYml0IGludGVnZXIuCisvLy8gICAgSGlnaC1vcmRlciBiaXRzIGFyZSBmaWxsZWQgd2l0aCB0aGUgc2lnbiBiaXQgb2YgdGhlIGluaXRpYWwgdmFsdWUgb2YgZWFjaAorLy8vICAgIDE2LWJpdCBlbGVtZW50LiBUaGUgMTYtYml0IHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIKKy8vLyAgICB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTUkFXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgMzItYml0IGludGVnZXIgdmFsdWUuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQKKy8vLyAgICB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmFpX3BpMTYoX19tNjQgX19tLCBpbnQgX19jb3VudCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzcmF3aSgoX192NGhpKV9fbSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgUmlnaHQtc2hpZnRzIGVhY2ggMzItYml0IGludGVnZXIgZWxlbWVudCBvZiB0aGUgZmlyc3QgcGFyYW1ldGVyLAorLy8vICAgIHdoaWNoIGlzIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXSwgYnkgdGhlIG51bWJlciBvZiBiaXRzCisvLy8gICAgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgcGFyYW1ldGVyLCB3aGljaCBpcyBhIDY0LWJpdCBpbnRlZ2VyLiBIaWdoLW9yZGVyCisvLy8gICAgYml0cyBhcmUgZmlsbGVkIHdpdGggdGhlIHNpZ24gYml0IG9mIHRoZSBpbml0aWFsIHZhbHVlIG9mIGVhY2ggMzItYml0CisvLy8gICAgZWxlbWVudC4gVGhlIDMyLWJpdCByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZgorLy8vICAgIFsyIHggaTMyXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU1JBRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20KKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0uCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBpbnRlcnByZXRlZCBhcyBhIHNpbmdsZSA2NC1iaXQgaW50ZWdlci4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0gY29udGFpbmluZyB0aGUgcmlnaHQtc2hpZnRlZAorLy8vICAgIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NyYV9waTMyKF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzcmFkKChfX3Yyc2kpX19tLCBfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBSaWdodC1zaGlmdHMgZWFjaCAzMi1iaXQgaW50ZWdlciBlbGVtZW50IG9mIGEgNjQtYml0IGludGVnZXIgdmVjdG9yCisvLy8gICAgb2YgWzIgeCBpMzJdIGJ5IHRoZSBudW1iZXIgb2YgYml0cyBzcGVjaWZpZWQgYnkgYSAzMi1iaXQgaW50ZWdlci4KKy8vLyAgICBIaWdoLW9yZGVyIGJpdHMgYXJlIGZpbGxlZCB3aXRoIHRoZSBzaWduIGJpdCBvZiB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBlYWNoCisvLy8gICAgMzItYml0IGVsZW1lbnQuIFRoZSAzMi1iaXQgcmVzdWx0cyBhcmUgcGFja2VkIGludG8gYSA2NC1iaXQgaW50ZWdlcgorLy8vICAgIHZlY3RvciBvZiBbMiB4IGkzMl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFNSQUQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQSAzMi1iaXQgaW50ZWdlciB2YWx1ZS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0gY29udGFpbmluZyB0aGUgcmlnaHQtc2hpZnRlZAorLy8vICAgIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NyYWlfcGkzMihfX202NCBfX20sIGludCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNyYWRpKChfX3Yyc2kpX19tLCBfX2NvdW50KTsKK30KKworLy8vIFxicmllZiBSaWdodC1zaGlmdHMgZWFjaCAxNi1iaXQgaW50ZWdlciBlbGVtZW50IG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIsCisvLy8gICAgd2hpY2ggaXMgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLCBieSB0aGUgbnVtYmVyIG9mIGJpdHMKKy8vLyAgICBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgNjQtYml0IGludGVnZXIuIEhpZ2gtb3JkZXIKKy8vLyAgICBiaXRzIGFyZSBjbGVhcmVkLiBUaGUgMTYtYml0IHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgNjQtYml0IGludGVnZXIKKy8vLyAgICB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTUkxXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGludGVycHJldGVkIGFzIGEgc2luZ2xlIDY0LWJpdCBpbnRlZ2VyLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSByaWdodC1zaGlmdGVkCisvLy8gICAgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JsX3BpMTYoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNybHcoKF9fdjRoaSlfX20sIF9fY291bnQpOworfQorCisvLy8gXGJyaWVmIFJpZ2h0LXNoaWZ0cyBlYWNoIDE2LWJpdCBpbnRlZ2VyIGVsZW1lbnQgb2YgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IKKy8vLyAgICBvZiBbNCB4IGkxNl0gYnkgdGhlIG51bWJlciBvZiBiaXRzIHNwZWNpZmllZCBieSBhIDMyLWJpdCBpbnRlZ2VyLgorLy8vICAgIEhpZ2gtb3JkZXIgYml0cyBhcmUgY2xlYXJlZC4gVGhlIDE2LWJpdCByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBhIDY0LWJpdAorLy8vICAgIGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU1JMVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20KKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0uCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBIDMyLWJpdCBpbnRlZ2VyIHZhbHVlLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSByaWdodC1zaGlmdGVkCisvLy8gICAgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JsaV9waTE2KF9fbTY0IF9fbSwgaW50IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3Jsd2koKF9fdjRoaSlfX20sIF9fY291bnQpOworfQorCisvLy8gXGJyaWVmIFJpZ2h0LXNoaWZ0cyBlYWNoIDMyLWJpdCBpbnRlZ2VyIGVsZW1lbnQgb2YgdGhlIGZpcnN0IHBhcmFtZXRlciwKKy8vLyAgICB3aGljaCBpcyBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0sIGJ5IHRoZSBudW1iZXIgb2YgYml0cworLy8vICAgIHNwZWNpZmllZCBieSB0aGUgc2Vjb25kIHBhcmFtZXRlciwgd2hpY2ggaXMgYSA2NC1iaXQgaW50ZWdlci4gSGlnaC1vcmRlcgorLy8vICAgIGJpdHMgYXJlIGNsZWFyZWQuIFRoZSAzMi1iaXQgcmVzdWx0cyBhcmUgcGFja2VkIGludG8gYSA2NC1iaXQgaW50ZWdlcgorLy8vICAgIHZlY3RvciBvZiBbMiB4IGkzMl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFNSTEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLgorLy8vIFxwYXJhbSBfX2NvdW50CisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUgNjQtYml0IGludGVnZXIuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQKKy8vLyAgICB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmxfcGkzMihfX202NCBfX20sIF9fbTY0IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3JsZCgoX192MnNpKV9fbSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgUmlnaHQtc2hpZnRzIGVhY2ggMzItYml0IGludGVnZXIgZWxlbWVudCBvZiBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcgorLy8vICAgIG9mIFsyIHggaTMyXSBieSB0aGUgbnVtYmVyIG9mIGJpdHMgc3BlY2lmaWVkIGJ5IGEgMzItYml0IGludGVnZXIuCisvLy8gICAgSGlnaC1vcmRlciBiaXRzIGFyZSBjbGVhcmVkLiBUaGUgMzItYml0IHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgNjQtYml0CisvLy8gICAgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTUkxEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgMzItYml0IGludGVnZXIgdmFsdWUuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQKKy8vLyAgICB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmxpX3BpMzIoX19tNjQgX19tLCBpbnQgX19jb3VudCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzcmxkaSgoX192MnNpKV9fbSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgUmlnaHQtc2hpZnRzIHRoZSBmaXJzdCA2NC1iaXQgaW50ZWdlciBwYXJhbWV0ZXIgYnkgdGhlIG51bWJlciBvZiBiaXRzCisvLy8gICAgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgNjQtYml0IGludGVnZXIgcGFyYW1ldGVyLiBIaWdoLW9yZGVyIGJpdHMgYXJlCisvLy8gICAgY2xlYXJlZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU1JMUSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20KKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBpbnRlcnByZXRlZCBhcyBhIHNpbmdsZSA2NC1iaXQgaW50ZWdlci4KKy8vLyBccGFyYW0gX19jb3VudAorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGludGVycHJldGVkIGFzIGEgc2luZ2xlIDY0LWJpdCBpbnRlZ2VyLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQgdmFsdWUuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmxfc2k2NChfX202NCBfX20sIF9fbTY0IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3JscSgoX192MWRpKV9fbSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgUmlnaHQtc2hpZnRzIHRoZSBmaXJzdCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgNjQtYml0IGludGVnZXIsIGJ5IHRoZQorLy8vICAgIG51bWJlciBvZiBiaXRzIHNwZWNpZmllZCBieSB0aGUgc2Vjb25kIHBhcmFtZXRlciwgd2hpY2ggaXMgYSAzMi1iaXQKKy8vLyAgICBpbnRlZ2VyLiBIaWdoLW9yZGVyIGJpdHMgYXJlIGNsZWFyZWQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFNSTFEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUgNjQtYml0IGludGVnZXIuCisvLy8gXHBhcmFtIF9fY291bnQKKy8vLyAgICBBIDMyLWJpdCBpbnRlZ2VyIHZhbHVlLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJpZ2h0LXNoaWZ0ZWQgdmFsdWUuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmxpX3NpNjQoX19tNjQgX19tLCBpbnQgX19jb3VudCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzcmxxaSgoX192MWRpKV9fbSwgX19jb3VudCk7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiB0d28gNjQtYml0IGludGVnZXIgdmVjdG9ycy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQU5EIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgQU5EIG9mIGJvdGgKKy8vLyAgICBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYW5kX3NpNjQoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gX19idWlsdGluX2lhMzJfcGFuZCgoX192MWRpKV9fbTEsIChfX3YxZGkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIE5PVCBvZiB0aGUgZmlyc3QgNjQtYml0IGludGVnZXIgdmVjdG9yLCBhbmQgdGhlbgorLy8vICAgIHBlcmZvcm1zIGEgYml0d2lzZSBBTkQgb2YgdGhlIGludGVybWVkaWF0ZSByZXN1bHQgYW5kIHRoZSBzZWNvbmQgNjQtYml0CisvLy8gICAgaW50ZWdlciB2ZWN0b3IuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEFORE4gaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yLiBUaGUgb25lJ3MgY29tcGxlbWVudCBvZiB0aGlzIHBhcmFtZXRlciBpcyB1c2VkCisvLy8gICAgaW4gdGhlIGJpdHdpc2UgQU5ELgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgYml0d2lzZSBBTkQgb2YgdGhlIHNlY29uZAorLy8vICAgIHBhcmFtZXRlciBhbmQgdGhlIG9uZSdzIGNvbXBsZW1lbnQgb2YgdGhlIGZpcnN0IHBhcmFtZXRlci4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FuZG5vdF9zaTY0KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BhbmRuKChfX3YxZGkpX19tMSwgKF9fdjFkaSlfX20yKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhIGJpdHdpc2UgT1Igb2YgdHdvIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcnMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUE9SIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgT1Igb2YgYm90aAorLy8vICAgIHBhcmFtZXRlcnMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9vcl9zaTY0KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BvcigoX192MWRpKV9fbTEsIChfX3YxZGkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIGV4Y2x1c2l2ZSBPUiBvZiB0d28gNjQtYml0IGludGVnZXIgdmVjdG9ycy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQWE9SIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fbTEKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvci4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgZXhjbHVzaXZlIE9SIG9mIGJvdGgKKy8vLyAgICBwYXJhbWV0ZXJzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1feG9yX3NpNjQoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gX19idWlsdGluX2lhMzJfcHhvcigoX192MWRpKV9fbTEsIChfX3YxZGkpX19tMik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdGhlIDgtYml0IGludGVnZXIgZWxlbWVudHMgb2YgdHdvIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcnMgb2YKKy8vLyAgICBbOCB4IGk4XSB0byBkZXRlcm1pbmUgaWYgdGhlIGVsZW1lbnQgb2YgdGhlIGZpcnN0IHZlY3RvciBpcyBlcXVhbCB0byB0aGUKKy8vLyAgICBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgdGhlIHNlY29uZCB2ZWN0b3IuIFRoZSBjb21wYXJpc29uIHlpZWxkcyAwIGZvcgorLy8vICAgIGZhbHNlLCAweEZGIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBDTVBFUUIgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbgorLy8vICAgIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9waTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWIoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHRoZSAxNi1iaXQgaW50ZWdlciBlbGVtZW50cyBvZiB0d28gNjQtYml0IGludGVnZXIgdmVjdG9ycyBvZgorLy8vICAgIFs0IHggaTE2XSB0byBkZXRlcm1pbmUgaWYgdGhlIGVsZW1lbnQgb2YgdGhlIGZpcnN0IHZlY3RvciBpcyBlcXVhbCB0byB0aGUKKy8vLyAgICBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgdGhlIHNlY29uZCB2ZWN0b3IuIFRoZSBjb21wYXJpc29uIHlpZWxkcyAwIGZvcgorLy8vICAgIGZhbHNlLCAweEZGRkYgZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUENNUEVRVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSBjb21wYXJpc29uCisvLy8gICAgcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGVxX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BjbXBlcXcoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHRoZSAzMi1iaXQgaW50ZWdlciBlbGVtZW50cyBvZiB0d28gNjQtYml0IGludGVnZXIgdmVjdG9ycyBvZgorLy8vICAgIFsyIHggaTMyXSB0byBkZXRlcm1pbmUgaWYgdGhlIGVsZW1lbnQgb2YgdGhlIGZpcnN0IHZlY3RvciBpcyBlcXVhbCB0byB0aGUKKy8vLyAgICBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgdGhlIHNlY29uZCB2ZWN0b3IuIFRoZSBjb21wYXJpc29uIHlpZWxkcyAwIGZvcgorLy8vICAgIGZhbHNlLCAweEZGRkZGRkZGIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBDTVBFUUQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbMiB4IGkzMl0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbgorLy8vICAgIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9waTMyKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wY21wZXFkKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0aGUgOC1iaXQgaW50ZWdlciBlbGVtZW50cyBvZiB0d28gNjQtYml0IGludGVnZXIgdmVjdG9ycyBvZgorLy8vICAgIFs4IHggaThdIHRvIGRldGVybWluZSBpZiB0aGUgZWxlbWVudCBvZiB0aGUgZmlyc3QgdmVjdG9yIGlzIGdyZWF0ZXIgdGhhbgorLy8vICAgIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgdGhlIHNlY29uZCB2ZWN0b3IuIFRoZSBjb21wYXJpc29uIHlpZWxkcyAwCisvLy8gICAgZm9yIGZhbHNlLCAweEZGIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBDTVBHVEIgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs4IHggaThdLgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbgorLy8vICAgIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9waTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BjbXBndGIoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHRoZSAxNi1iaXQgaW50ZWdlciBlbGVtZW50cyBvZiB0d28gNjQtYml0IGludGVnZXIgdmVjdG9ycyBvZgorLy8vICAgIFs0IHggaTE2XSB0byBkZXRlcm1pbmUgaWYgdGhlIGVsZW1lbnQgb2YgdGhlIGZpcnN0IHZlY3RvciBpcyBncmVhdGVyIHRoYW4KKy8vLyAgICB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZSBzZWNvbmQgdmVjdG9yLiBUaGUgY29tcGFyaXNvbiB5aWVsZHMgMAorLy8vICAgIGZvciBmYWxzZSwgMHhGRkZGIGZvciB0cnVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBDTVBHVFcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19tMQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyBccGFyYW0gX19tMgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbgorLy8vICAgIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wY21wZ3R3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0aGUgMzItYml0IGludGVnZXIgZWxlbWVudHMgb2YgdHdvIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcnMgb2YKKy8vLyAgICBbMiB4IGkzMl0gdG8gZGV0ZXJtaW5lIGlmIHRoZSBlbGVtZW50IG9mIHRoZSBmaXJzdCB2ZWN0b3IgaXMgZ3JlYXRlciB0aGFuCisvLy8gICAgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB0aGUgc2Vjb25kIHZlY3Rvci4gVGhlIGNvbXBhcmlzb24geWllbGRzIDAKKy8vLyAgICBmb3IgZmFsc2UsIDB4RkZGRkZGRkYgZm9yIHRydWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUENNUEdURCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX20xCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLgorLy8vIFxwYXJhbSBfX20yCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFsyIHggaTMyXSBjb250YWluaW5nIHRoZSBjb21wYXJpc29uCisvLy8gICAgcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGd0X3BpMzIoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BjbXBndGQoKF9fdjJzaSlfX20xLCAoX192MnNpKV9fbTIpOworfQorCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgaW5pdGlhbGl6ZWQgdG8gemVyby4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSB0aGUgXGMgVlhPUlBTIC8gWE9SUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igd2l0aCBhbGwgZWxlbWVudHMgc2V0IHRvIHplcm8uCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXR6ZXJvX3NpNjQodm9pZCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KXsgMExMIH07Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBpbml0aWFsaXplZCB3aXRoIHRoZSBzcGVjaWZpZWQKKy8vLyAgICAzMi1iaXQgaW50ZWdlciB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBzcGVjaWZpYworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9faTEKKy8vLyAgICBBIDMyLWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdXBwZXIgMzIgYml0cyBvZiB0aGUKKy8vLyAgICByZXN1bHQuCisvLy8gXHBhcmFtIF9faTAKKy8vLyAgICBBIDMyLWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbG93ZXIgMzIgYml0cyBvZiB0aGUKKy8vLyAgICByZXN1bHQuCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgNjQtYml0IGludGVnZXIgdmVjdG9yLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0X3BpMzIoaW50IF9faTEsIGludCBfX2kwKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfdmVjX2luaXRfdjJzaShfX2kwLCBfX2kxKTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIGluaXRpYWxpemVkIHdpdGggdGhlIHNwZWNpZmllZAorLy8vICAgIDE2LWJpdCBpbnRlZ2VyIHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHNwZWNpZmljCisvLy8gICAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19zMworLy8vICAgIEEgMTYtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzYzOjQ4XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX3MyCisvLy8gICAgQSAxNi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbNDc6MzJdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fczEKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFszMToxNl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19zMAorLy8vICAgIEEgMTYtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzE1OjBdIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgNjQtYml0IGludGVnZXIgdmVjdG9yLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0X3BpMTYoc2hvcnQgX19zMywgc2hvcnQgX19zMiwgc2hvcnQgX19zMSwgc2hvcnQgX19zMCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3ZlY19pbml0X3Y0aGkoX19zMCwgX19zMSwgX19zMiwgX19zMyk7Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBpbml0aWFsaXplZCB3aXRoIHRoZSBzcGVjaWZpZWQKKy8vLyAgICA4LWJpdCBpbnRlZ2VyIHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHNwZWNpZmljCisvLy8gICAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19iNworLy8vICAgIEFuIDgtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzYzOjU2XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2I2CisvLy8gICAgQW4gOC1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbNTU6NDhdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fYjUKKy8vLyAgICBBbiA4LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFs0Nzo0MF0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iNAorLy8vICAgIEFuIDgtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzM5OjMyXSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2IzCisvLy8gICAgQW4gOC1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMzE6MjRdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fYjIKKy8vLyAgICBBbiA4LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFsyMzoxNl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iMQorLy8vICAgIEFuIDgtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzE1OjhdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fYjAKKy8vLyAgICBBbiA4LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFs3OjBdIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgNjQtYml0IGludGVnZXIgdmVjdG9yLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0X3BpOChjaGFyIF9fYjcsIGNoYXIgX19iNiwgY2hhciBfX2I1LCBjaGFyIF9fYjQsIGNoYXIgX19iMywgY2hhciBfX2IyLAorICAgICAgICAgICAgY2hhciBfX2IxLCBjaGFyIF9fYjApCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl92ZWNfaW5pdF92OHFpKF9fYjAsIF9fYjEsIF9fYjIsIF9fYjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYjQsIF9fYjUsIF9fYjYsIF9fYjcpOworfQorCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLCB3aXRoIGVhY2ggb2YgdGhlCisvLy8gICAgMzItYml0IGludGVnZXIgdmVjdG9yIGVsZW1lbnRzIHNldCB0byB0aGUgc3BlY2lmaWVkIDMyLWJpdCBpbnRlZ2VyCisvLy8gICAgdmFsdWUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTSFVGRCAvIFBTSFVGRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2kKKy8vLyAgICBBIDMyLWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBlYWNoIHZlY3RvciBlbGVtZW50IG9mIHRoZQorLy8vICAgIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzIgeCBpMzJdLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0MV9waTMyKGludCBfX2kpCit7CisgICAgcmV0dXJuIF9tbV9zZXRfcGkzMihfX2ksIF9faSk7Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZiBbNCB4IGkxNl0sIHdpdGggZWFjaCBvZiB0aGUKKy8vLyAgICAxNi1iaXQgaW50ZWdlciB2ZWN0b3IgZWxlbWVudHMgc2V0IHRvIHRoZSBzcGVjaWZpZWQgMTYtYml0IGludGVnZXIKKy8vLyAgICB2YWx1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNIVUZMVyAvIFBTSFVGTFcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX193CisvLy8gICAgQSAxNi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgZWFjaCB2ZWN0b3IgZWxlbWVudCBvZiB0aGUKKy8vLyAgICByZXN1bHQuCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgNjQtYml0IGludGVnZXIgdmVjdG9yIG9mIFs0IHggaTE2XS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldDFfcGkxNihzaG9ydCBfX3cpCit7CisgICAgcmV0dXJuIF9tbV9zZXRfcGkxNihfX3csIF9fdywgX193LCBfX3cpOworfQorCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0sIHdpdGggZWFjaCBvZiB0aGUKKy8vLyAgICA4LWJpdCBpbnRlZ2VyIHZlY3RvciBlbGVtZW50cyBzZXQgdG8gdGhlIHNwZWNpZmllZCA4LWJpdCBpbnRlZ2VyIHZhbHVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQVU5QQ0tMQlcgKyBWUFNIVUZMVyAvIFxjIFBVTlBDS0xCVyArCisvLy8gICAgUFNIVUZMVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBbiA4LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBlYWNoIHZlY3RvciBlbGVtZW50IG9mIHRoZQorLy8vICAgIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXQxX3BpOChjaGFyIF9fYikKK3sKKyAgICByZXR1cm4gX21tX3NldF9waTgoX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IpOworfQorCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IsIGluaXRpYWxpemVkIGluIHJldmVyc2Ugb3JkZXIgd2l0aAorLy8vICAgIHRoZSBzcGVjaWZpZWQgMzItYml0IGludGVnZXIgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgc3BlY2lmaWMKKy8vLyAgICBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2kwCisvLy8gICAgQSAzMi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhlCisvLy8gICAgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2kxCisvLy8gICAgQSAzMi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHVwcGVyIDMyIGJpdHMgb2YgdGhlCisvLy8gICAgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIHZlY3Rvci4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldHJfcGkzMihpbnQgX19pMCwgaW50IF9faTEpCit7CisgICAgcmV0dXJuIF9tbV9zZXRfcGkzMihfX2kxLCBfX2kwKTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgNjQtYml0IGludGVnZXIgdmVjdG9yLCBpbml0aWFsaXplZCBpbiByZXZlcnNlIG9yZGVyIHdpdGgKKy8vLyAgICB0aGUgc3BlY2lmaWVkIDE2LWJpdCBpbnRlZ2VyIHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHNwZWNpZmljCisvLy8gICAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX193MAorLy8vICAgIEEgMTYtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzE1OjBdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fdzEKKy8vLyAgICBBIDE2LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFszMToxNl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX193MgorLy8vICAgIEEgMTYtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzQ3OjMyXSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX3czCisvLy8gICAgQSAxNi1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbNjM6NDhdIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgNjQtYml0IGludGVnZXIgdmVjdG9yLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0cl9waTE2KHNob3J0IF9fdzAsIHNob3J0IF9fdzEsIHNob3J0IF9fdzIsIHNob3J0IF9fdzMpCit7CisgICAgcmV0dXJuIF9tbV9zZXRfcGkxNihfX3czLCBfX3cyLCBfX3cxLCBfX3cwKTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgNjQtYml0IGludGVnZXIgdmVjdG9yLCBpbml0aWFsaXplZCBpbiByZXZlcnNlIG9yZGVyIHdpdGgKKy8vLyAgICB0aGUgc3BlY2lmaWVkIDgtYml0IGludGVnZXIgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgc3BlY2lmaWMKKy8vLyAgICBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2IwCisvLy8gICAgQW4gOC1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbNzowXSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2IxCisvLy8gICAgQW4gOC1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMTU6OF0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iMgorLy8vICAgIEFuIDgtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzIzOjE2XSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2IzCisvLy8gICAgQW4gOC1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMzE6MjRdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fYjQKKy8vLyAgICBBbiA4LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFszOTozMl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iNQorLy8vICAgIEFuIDgtYml0IGludGVnZXIgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzQ3OjQwXSBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2I2CisvLy8gICAgQW4gOC1iaXQgaW50ZWdlciB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbNTU6NDhdIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9fYjcKKy8vLyAgICBBbiA4LWJpdCBpbnRlZ2VyIHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFs2Mzo1Nl0gb2YgdGhlIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCA2NC1iaXQgaW50ZWdlciB2ZWN0b3IuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRyX3BpOChjaGFyIF9fYjAsIGNoYXIgX19iMSwgY2hhciBfX2IyLCBjaGFyIF9fYjMsIGNoYXIgX19iNCwgY2hhciBfX2I1LAorICAgICAgICAgICAgIGNoYXIgX19iNiwgY2hhciBfX2I3KQoreworICAgIHJldHVybiBfbW1fc2V0X3BpOChfX2I3LCBfX2I2LCBfX2I1LCBfX2I0LCBfX2IzLCBfX2IyLCBfX2IxLCBfX2IwKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisvKiBBbGlhc2VzIGZvciBjb21wYXRpYmlsaXR5LiAqLworI2RlZmluZSBfbV9lbXB0eSBfbW1fZW1wdHkKKyNkZWZpbmUgX21fZnJvbV9pbnQgX21tX2N2dHNpMzJfc2k2NAorI2RlZmluZSBfbV9mcm9tX2ludDY0IF9tbV9jdnRzaTY0X202NAorI2RlZmluZSBfbV90b19pbnQgX21tX2N2dHNpNjRfc2kzMgorI2RlZmluZSBfbV90b19pbnQ2NCBfbW1fY3Z0bTY0X3NpNjQKKyNkZWZpbmUgX21fcGFja3Nzd2IgX21tX3BhY2tzX3BpMTYKKyNkZWZpbmUgX21fcGFja3NzZHcgX21tX3BhY2tzX3BpMzIKKyNkZWZpbmUgX21fcGFja3Vzd2IgX21tX3BhY2tzX3B1MTYKKyNkZWZpbmUgX21fcHVucGNraGJ3IF9tbV91bnBhY2toaV9waTgKKyNkZWZpbmUgX21fcHVucGNraHdkIF9tbV91bnBhY2toaV9waTE2CisjZGVmaW5lIF9tX3B1bnBja2hkcSBfbW1fdW5wYWNraGlfcGkzMgorI2RlZmluZSBfbV9wdW5wY2tsYncgX21tX3VucGFja2xvX3BpOAorI2RlZmluZSBfbV9wdW5wY2tsd2QgX21tX3VucGFja2xvX3BpMTYKKyNkZWZpbmUgX21fcHVucGNrbGRxIF9tbV91bnBhY2tsb19waTMyCisjZGVmaW5lIF9tX3BhZGRiIF9tbV9hZGRfcGk4CisjZGVmaW5lIF9tX3BhZGR3IF9tbV9hZGRfcGkxNgorI2RlZmluZSBfbV9wYWRkZCBfbW1fYWRkX3BpMzIKKyNkZWZpbmUgX21fcGFkZHNiIF9tbV9hZGRzX3BpOAorI2RlZmluZSBfbV9wYWRkc3cgX21tX2FkZHNfcGkxNgorI2RlZmluZSBfbV9wYWRkdXNiIF9tbV9hZGRzX3B1OAorI2RlZmluZSBfbV9wYWRkdXN3IF9tbV9hZGRzX3B1MTYKKyNkZWZpbmUgX21fcHN1YmIgX21tX3N1Yl9waTgKKyNkZWZpbmUgX21fcHN1YncgX21tX3N1Yl9waTE2CisjZGVmaW5lIF9tX3BzdWJkIF9tbV9zdWJfcGkzMgorI2RlZmluZSBfbV9wc3Vic2IgX21tX3N1YnNfcGk4CisjZGVmaW5lIF9tX3BzdWJzdyBfbW1fc3Vic19waTE2CisjZGVmaW5lIF9tX3BzdWJ1c2IgX21tX3N1YnNfcHU4CisjZGVmaW5lIF9tX3BzdWJ1c3cgX21tX3N1YnNfcHUxNgorI2RlZmluZSBfbV9wbWFkZHdkIF9tbV9tYWRkX3BpMTYKKyNkZWZpbmUgX21fcG11bGh3IF9tbV9tdWxoaV9waTE2CisjZGVmaW5lIF9tX3BtdWxsdyBfbW1fbXVsbG9fcGkxNgorI2RlZmluZSBfbV9wc2xsdyBfbW1fc2xsX3BpMTYKKyNkZWZpbmUgX21fcHNsbHdpIF9tbV9zbGxpX3BpMTYKKyNkZWZpbmUgX21fcHNsbGQgX21tX3NsbF9waTMyCisjZGVmaW5lIF9tX3BzbGxkaSBfbW1fc2xsaV9waTMyCisjZGVmaW5lIF9tX3BzbGxxIF9tbV9zbGxfc2k2NAorI2RlZmluZSBfbV9wc2xscWkgX21tX3NsbGlfc2k2NAorI2RlZmluZSBfbV9wc3JhdyBfbW1fc3JhX3BpMTYKKyNkZWZpbmUgX21fcHNyYXdpIF9tbV9zcmFpX3BpMTYKKyNkZWZpbmUgX21fcHNyYWQgX21tX3NyYV9waTMyCisjZGVmaW5lIF9tX3BzcmFkaSBfbW1fc3JhaV9waTMyCisjZGVmaW5lIF9tX3Bzcmx3IF9tbV9zcmxfcGkxNgorI2RlZmluZSBfbV9wc3Jsd2kgX21tX3NybGlfcGkxNgorI2RlZmluZSBfbV9wc3JsZCBfbW1fc3JsX3BpMzIKKyNkZWZpbmUgX21fcHNybGRpIF9tbV9zcmxpX3BpMzIKKyNkZWZpbmUgX21fcHNybHEgX21tX3NybF9zaTY0CisjZGVmaW5lIF9tX3BzcmxxaSBfbW1fc3JsaV9zaTY0CisjZGVmaW5lIF9tX3BhbmQgX21tX2FuZF9zaTY0CisjZGVmaW5lIF9tX3BhbmRuIF9tbV9hbmRub3Rfc2k2NAorI2RlZmluZSBfbV9wb3IgX21tX29yX3NpNjQKKyNkZWZpbmUgX21fcHhvciBfbW1feG9yX3NpNjQKKyNkZWZpbmUgX21fcGNtcGVxYiBfbW1fY21wZXFfcGk4CisjZGVmaW5lIF9tX3BjbXBlcXcgX21tX2NtcGVxX3BpMTYKKyNkZWZpbmUgX21fcGNtcGVxZCBfbW1fY21wZXFfcGkzMgorI2RlZmluZSBfbV9wY21wZ3RiIF9tbV9jbXBndF9waTgKKyNkZWZpbmUgX21fcGNtcGd0dyBfbW1fY21wZ3RfcGkxNgorI2RlZmluZSBfbV9wY21wZ3RkIF9tbV9jbXBndF9waTMyCisKKyNlbmRpZiAvKiBfX01NSU5UUklOX0ggKi8KKwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9tb2R1bGUubW9kdWxlbWFwIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9tb2R1bGUubW9kdWxlbWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZWYyZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL21vZHVsZS5tb2R1bGVtYXAKQEAgLTAsMCArMSwxNjYgQEAKKy8qPT09LS0tLSBtb2R1bGUubW9kdWxlbWFwIC0gaW50cmluc2ljcyBtb2R1bGUgbWFwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKK21vZHVsZSBfQnVpbHRpbl9pbnRyaW5zaWNzIFtzeXN0ZW1dIFtleHRlcm5fY10geworICBleHBsaWNpdCBtb2R1bGUgYWx0aXZlYyB7CisgICAgcmVxdWlyZXMgYWx0aXZlYworICAgIGhlYWRlciAiYWx0aXZlYy5oIgorICB9CisKKyAgZXhwbGljaXQgbW9kdWxlIGFybSB7CisgICAgcmVxdWlyZXMgYXJtCisKKyAgICBleHBsaWNpdCBtb2R1bGUgYWNsZSB7CisgICAgICBoZWFkZXIgImFybV9hY2xlLmgiCisgICAgICBleHBvcnQgKgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBuZW9uIHsKKyAgICAgIHJlcXVpcmVzIG5lb24KKyAgICAgIGhlYWRlciAiYXJtX25lb24uaCIKKyAgICAgIGV4cG9ydCAqCisgICAgfQorICB9CisKKyAgZXhwbGljaXQgbW9kdWxlIGludGVsIHsKKyAgICByZXF1aXJlcyB4ODYKKyAgICBleHBvcnQgKgorCisgICAgaGVhZGVyICJpbW1pbnRyaW4uaCIKKyAgICB0ZXh0dWFsIGhlYWRlciAiZjE2Y2ludHJpbi5oIgorICAgIHRleHR1YWwgaGVhZGVyICJhdnhpbnRyaW4uaCIKKyAgICB0ZXh0dWFsIGhlYWRlciAiYXZ4MmludHJpbi5oIgorICAgIHRleHR1YWwgaGVhZGVyICJhdng1MTJmaW50cmluLmgiCisgICAgdGV4dHVhbCBoZWFkZXIgImF2eDUxMmVyaW50cmluLmgiCisgICAgdGV4dHVhbCBoZWFkZXIgImZtYWludHJpbi5oIgorCisgICAgaGVhZGVyICJ4ODZpbnRyaW4uaCIKKyAgICB0ZXh0dWFsIGhlYWRlciAiYm1paW50cmluLmgiCisgICAgdGV4dHVhbCBoZWFkZXIgImJtaTJpbnRyaW4uaCIKKyAgICB0ZXh0dWFsIGhlYWRlciAibHpjbnRpbnRyaW4uaCIKKyAgICB0ZXh0dWFsIGhlYWRlciAieG9waW50cmluLmgiCisgICAgdGV4dHVhbCBoZWFkZXIgImZtYTRpbnRyaW4uaCIKKyAgICB0ZXh0dWFsIGhlYWRlciAibXdhaXR4aW50cmluLmgiCisKKyAgICBleHBsaWNpdCBtb2R1bGUgbW1fbWFsbG9jIHsKKyAgICAgIHJlcXVpcmVzICFmcmVlc3RhbmRpbmcKKyAgICAgIGhlYWRlciAibW1fbWFsbG9jLmgiCisgICAgICBleHBvcnQgKiAvLyBub3RlOiBmb3IgPHN0ZGxpYi5oPiBkZXBlbmRlbmN5CisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIGNwdWlkIHsKKyAgICAgIHJlcXVpcmVzIGdudWlubGluZWFzbQorICAgICAgaGVhZGVyICJjcHVpZC5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBtbXggeworICAgICAgaGVhZGVyICJtbWludHJpbi5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBzc2UgeworICAgICAgZXhwb3J0IG1tX21hbGxvYworICAgICAgZXhwb3J0IG1teAorICAgICAgZXhwb3J0IHNzZTIgLy8gbm90ZTogZm9yIGhhY2tpc2ggPGVtbWludHJpbi5oPiBkZXBlbmRlbmN5CisgICAgICBoZWFkZXIgInhtbWludHJpbi5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBzc2UyIHsKKyAgICAgIGV4cG9ydCBzc2UKKyAgICAgIGhlYWRlciAiZW1taW50cmluLmgiCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIHNzZTMgeworICAgICAgZXhwb3J0IHNzZTIKKyAgICAgIGhlYWRlciAicG1taW50cmluLmgiCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIHNzc2UzIHsKKyAgICAgIGV4cG9ydCBzc2UzCisgICAgICBoZWFkZXIgInRtbWludHJpbi5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBzc2U0XzEgeworICAgICAgZXhwb3J0IHNzc2UzCisgICAgICBoZWFkZXIgInNtbWludHJpbi5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBzc2U0XzIgeworICAgICAgZXhwb3J0IHNzZTRfMQorICAgICAgaGVhZGVyICJubW1pbnRyaW4uaCIKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgc3NlNGEgeworICAgICAgZXhwb3J0IHNzZTMKKyAgICAgIGhlYWRlciAiYW1taW50cmluLmgiCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIHBvcGNudCB7CisgICAgICBoZWFkZXIgInBvcGNudGludHJpbi5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBtbTNkbm93IHsKKyAgICAgIGhlYWRlciAibW0zZG5vdy5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBhZXNfcGNsbXVsIHsKKyAgICAgIGhlYWRlciAid21taW50cmluLmgiCisgICAgICBleHBvcnQgYWVzCisgICAgICBleHBvcnQgcGNsbXVsCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIGFlcyB7CisgICAgICBoZWFkZXIgIl9fd21taW50cmluX2Flcy5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBwY2xtdWwgeworICAgICAgaGVhZGVyICJfX3dtbWludHJpbl9wY2xtdWwuaCIKKyAgICB9CisgIH0KKworICBleHBsaWNpdCBtb2R1bGUgc3lzdGVteiB7CisgICAgcmVxdWlyZXMgc3lzdGVtegorICAgIGV4cG9ydCAqCisKKyAgICBoZWFkZXIgInMzOTBpbnRyaW4uaCIKKworICAgIGV4cGxpY2l0IG1vZHVsZSBodG0geworICAgICAgcmVxdWlyZXMgaHRtCisgICAgICBoZWFkZXIgImh0bWludHJpbi5oIgorICAgICAgaGVhZGVyICJodG14bGludHJpbi5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSB6dmVjdG9yIHsKKyAgICAgIHJlcXVpcmVzIHp2ZWN0b3IsIHZ4CisgICAgICBoZWFkZXIgInZlY2ludHJpbi5oIgorICAgIH0KKyAgfQorfQorCittb2R1bGUgX0J1aWx0aW5fc3RkZGVmX21heF9hbGlnbl90IFtzeXN0ZW1dIFtleHRlcm5fY10geworICBoZWFkZXIgIl9fc3RkZGVmX21heF9hbGlnbl90LmgiCit9CisKK21vZHVsZSBvcGVuY2xfYyB7CisgIHJlcXVpcmVzIG9wZW5jbAorICBoZWFkZXIgIm9wZW5jbC1jLmgiCit9CmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL21zYS5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9tc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTY4MGY1Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9tc2EuaApAQCAtMCwwICsxLDU4MyBAQAorLyo9PT0tLS0tIG1zYS5oIC0gTUlQUyBNU0EgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfTVNBX0gKKyNkZWZpbmUgX01TQV9IIDEKKworI2lmIGRlZmluZWQoX19taXBzX21zYSkKK3R5cGVkZWYgc2lnbmVkIGNoYXIgdjE2aTggX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUoMTYpLCBhbGlnbmVkKDE2KSkpOwordHlwZWRlZiBzaWduZWQgY2hhciB2MTZpOF9iIF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2KSwgYWxpZ25lZCgxKSkpOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHYxNnU4IF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2KSwgYWxpZ25lZCgxNikpKTsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB2MTZ1OF9iIF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2KSwgYWxpZ25lZCgxKSkpOwordHlwZWRlZiBzaG9ydCB2OGkxNiBfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6ZSgxNiksIGFsaWduZWQoMTYpKSk7Cit0eXBlZGVmIHNob3J0IHY4aTE2X2ggX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUoMTYpLCBhbGlnbmVkKDIpKSk7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHY4dTE2IF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2KSwgYWxpZ25lZCgxNikpKTsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdjh1MTZfaCBfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6ZSgxNiksIGFsaWduZWQoMikpKTsKK3R5cGVkZWYgaW50IHY0aTMyIF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2KSwgYWxpZ25lZCgxNikpKTsKK3R5cGVkZWYgaW50IHY0aTMyX3cgX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUoMTYpLCBhbGlnbmVkKDQpKSk7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB2NHUzMiBfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6ZSgxNiksIGFsaWduZWQoMTYpKSk7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB2NHUzMl93IF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2KSwgYWxpZ25lZCg0KSkpOwordHlwZWRlZiBsb25nIGxvbmcgdjJpNjQgX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUoMTYpLCBhbGlnbmVkKDE2KSkpOwordHlwZWRlZiBsb25nIGxvbmcgdjJpNjRfZCBfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6ZSgxNiksIGFsaWduZWQoOCkpKTsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHYydTY0IF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2KSwgYWxpZ25lZCgxNikpKTsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHYydTY0X2QgX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUoMTYpLCBhbGlnbmVkKDgpKSk7Cit0eXBlZGVmIGZsb2F0IHY0ZjMyIF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2KSwgYWxpZ25lZCgxNikpKTsKK3R5cGVkZWYgZmxvYXQgdjRmMzJfdyBfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6ZSgxNiksIGFsaWduZWQoNCkpKTsKK3R5cGVkZWYgZG91YmxlIHYyZjY0IF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSgxNiksIGFsaWduZWQoMTYpKSk7Cit0eXBlZGVmIGRvdWJsZSB2MmY2NF9kIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSgxNiksIGFsaWduZWQoOCkpKTsKKworI2RlZmluZSBfX21zYV9zbGxfYiBfX2J1aWx0aW5fbXNhX3NsbF9iCisjZGVmaW5lIF9fbXNhX3NsbF9oIF9fYnVpbHRpbl9tc2Ffc2xsX2gKKyNkZWZpbmUgX19tc2Ffc2xsX3cgX19idWlsdGluX21zYV9zbGxfdworI2RlZmluZSBfX21zYV9zbGxfZCBfX2J1aWx0aW5fbXNhX3NsbF9kCisjZGVmaW5lIF9fbXNhX3NsbGlfYiBfX2J1aWx0aW5fbXNhX3NsbGlfYgorI2RlZmluZSBfX21zYV9zbGxpX2ggX19idWlsdGluX21zYV9zbGxpX2gKKyNkZWZpbmUgX19tc2Ffc2xsaV93IF9fYnVpbHRpbl9tc2Ffc2xsaV93CisjZGVmaW5lIF9fbXNhX3NsbGlfZCBfX2J1aWx0aW5fbXNhX3NsbGlfZAorI2RlZmluZSBfX21zYV9zcmFfYiBfX2J1aWx0aW5fbXNhX3NyYV9iCisjZGVmaW5lIF9fbXNhX3NyYV9oIF9fYnVpbHRpbl9tc2Ffc3JhX2gKKyNkZWZpbmUgX19tc2Ffc3JhX3cgX19idWlsdGluX21zYV9zcmFfdworI2RlZmluZSBfX21zYV9zcmFfZCBfX2J1aWx0aW5fbXNhX3NyYV9kCisjZGVmaW5lIF9fbXNhX3NyYWlfYiBfX2J1aWx0aW5fbXNhX3NyYWlfYgorI2RlZmluZSBfX21zYV9zcmFpX2ggX19idWlsdGluX21zYV9zcmFpX2gKKyNkZWZpbmUgX19tc2Ffc3JhaV93IF9fYnVpbHRpbl9tc2Ffc3JhaV93CisjZGVmaW5lIF9fbXNhX3NyYWlfZCBfX2J1aWx0aW5fbXNhX3NyYWlfZAorI2RlZmluZSBfX21zYV9zcmFyX2IgX19idWlsdGluX21zYV9zcmFyX2IKKyNkZWZpbmUgX19tc2Ffc3Jhcl9oIF9fYnVpbHRpbl9tc2Ffc3Jhcl9oCisjZGVmaW5lIF9fbXNhX3NyYXJfdyBfX2J1aWx0aW5fbXNhX3NyYXJfdworI2RlZmluZSBfX21zYV9zcmFyX2QgX19idWlsdGluX21zYV9zcmFyX2QKKyNkZWZpbmUgX19tc2Ffc3JhcmlfYiBfX2J1aWx0aW5fbXNhX3NyYXJpX2IKKyNkZWZpbmUgX19tc2Ffc3JhcmlfaCBfX2J1aWx0aW5fbXNhX3NyYXJpX2gKKyNkZWZpbmUgX19tc2Ffc3JhcmlfdyBfX2J1aWx0aW5fbXNhX3NyYXJpX3cKKyNkZWZpbmUgX19tc2Ffc3JhcmlfZCBfX2J1aWx0aW5fbXNhX3NyYXJpX2QKKyNkZWZpbmUgX19tc2Ffc3JsX2IgX19idWlsdGluX21zYV9zcmxfYgorI2RlZmluZSBfX21zYV9zcmxfaCBfX2J1aWx0aW5fbXNhX3NybF9oCisjZGVmaW5lIF9fbXNhX3NybF93IF9fYnVpbHRpbl9tc2Ffc3JsX3cKKyNkZWZpbmUgX19tc2Ffc3JsX2QgX19idWlsdGluX21zYV9zcmxfZAorI2RlZmluZSBfX21zYV9zcmxpX2IgX19idWlsdGluX21zYV9zcmxpX2IKKyNkZWZpbmUgX19tc2Ffc3JsaV9oIF9fYnVpbHRpbl9tc2Ffc3JsaV9oCisjZGVmaW5lIF9fbXNhX3NybGlfdyBfX2J1aWx0aW5fbXNhX3NybGlfdworI2RlZmluZSBfX21zYV9zcmxpX2QgX19idWlsdGluX21zYV9zcmxpX2QKKyNkZWZpbmUgX19tc2Ffc3Jscl9iIF9fYnVpbHRpbl9tc2Ffc3Jscl9iCisjZGVmaW5lIF9fbXNhX3NybHJfaCBfX2J1aWx0aW5fbXNhX3NybHJfaAorI2RlZmluZSBfX21zYV9zcmxyX3cgX19idWlsdGluX21zYV9zcmxyX3cKKyNkZWZpbmUgX19tc2Ffc3Jscl9kIF9fYnVpbHRpbl9tc2Ffc3Jscl9kCisjZGVmaW5lIF9fbXNhX3NybHJpX2IgX19idWlsdGluX21zYV9zcmxyaV9iCisjZGVmaW5lIF9fbXNhX3NybHJpX2ggX19idWlsdGluX21zYV9zcmxyaV9oCisjZGVmaW5lIF9fbXNhX3NybHJpX3cgX19idWlsdGluX21zYV9zcmxyaV93CisjZGVmaW5lIF9fbXNhX3NybHJpX2QgX19idWlsdGluX21zYV9zcmxyaV9kCisjZGVmaW5lIF9fbXNhX2JjbHJfYiBfX2J1aWx0aW5fbXNhX2JjbHJfYgorI2RlZmluZSBfX21zYV9iY2xyX2ggX19idWlsdGluX21zYV9iY2xyX2gKKyNkZWZpbmUgX19tc2FfYmNscl93IF9fYnVpbHRpbl9tc2FfYmNscl93CisjZGVmaW5lIF9fbXNhX2JjbHJfZCBfX2J1aWx0aW5fbXNhX2JjbHJfZAorI2RlZmluZSBfX21zYV9iY2xyaV9iIF9fYnVpbHRpbl9tc2FfYmNscmlfYgorI2RlZmluZSBfX21zYV9iY2xyaV9oIF9fYnVpbHRpbl9tc2FfYmNscmlfaAorI2RlZmluZSBfX21zYV9iY2xyaV93IF9fYnVpbHRpbl9tc2FfYmNscmlfdworI2RlZmluZSBfX21zYV9iY2xyaV9kIF9fYnVpbHRpbl9tc2FfYmNscmlfZAorI2RlZmluZSBfX21zYV9ic2V0X2IgX19idWlsdGluX21zYV9ic2V0X2IKKyNkZWZpbmUgX19tc2FfYnNldF9oIF9fYnVpbHRpbl9tc2FfYnNldF9oCisjZGVmaW5lIF9fbXNhX2JzZXRfdyBfX2J1aWx0aW5fbXNhX2JzZXRfdworI2RlZmluZSBfX21zYV9ic2V0X2QgX19idWlsdGluX21zYV9ic2V0X2QKKyNkZWZpbmUgX19tc2FfYnNldGlfYiBfX2J1aWx0aW5fbXNhX2JzZXRpX2IKKyNkZWZpbmUgX19tc2FfYnNldGlfaCBfX2J1aWx0aW5fbXNhX2JzZXRpX2gKKyNkZWZpbmUgX19tc2FfYnNldGlfdyBfX2J1aWx0aW5fbXNhX2JzZXRpX3cKKyNkZWZpbmUgX19tc2FfYnNldGlfZCBfX2J1aWx0aW5fbXNhX2JzZXRpX2QKKyNkZWZpbmUgX19tc2FfYm5lZ19iIF9fYnVpbHRpbl9tc2FfYm5lZ19iCisjZGVmaW5lIF9fbXNhX2JuZWdfaCBfX2J1aWx0aW5fbXNhX2JuZWdfaAorI2RlZmluZSBfX21zYV9ibmVnX3cgX19idWlsdGluX21zYV9ibmVnX3cKKyNkZWZpbmUgX19tc2FfYm5lZ19kIF9fYnVpbHRpbl9tc2FfYm5lZ19kCisjZGVmaW5lIF9fbXNhX2JuZWdpX2IgX19idWlsdGluX21zYV9ibmVnaV9iCisjZGVmaW5lIF9fbXNhX2JuZWdpX2ggX19idWlsdGluX21zYV9ibmVnaV9oCisjZGVmaW5lIF9fbXNhX2JuZWdpX3cgX19idWlsdGluX21zYV9ibmVnaV93CisjZGVmaW5lIF9fbXNhX2JuZWdpX2QgX19idWlsdGluX21zYV9ibmVnaV9kCisjZGVmaW5lIF9fbXNhX2JpbnNsX2IgX19idWlsdGluX21zYV9iaW5zbF9iCisjZGVmaW5lIF9fbXNhX2JpbnNsX2ggX19idWlsdGluX21zYV9iaW5zbF9oCisjZGVmaW5lIF9fbXNhX2JpbnNsX3cgX19idWlsdGluX21zYV9iaW5zbF93CisjZGVmaW5lIF9fbXNhX2JpbnNsX2QgX19idWlsdGluX21zYV9iaW5zbF9kCisjZGVmaW5lIF9fbXNhX2JpbnNsaV9iIF9fYnVpbHRpbl9tc2FfYmluc2xpX2IKKyNkZWZpbmUgX19tc2FfYmluc2xpX2ggX19idWlsdGluX21zYV9iaW5zbGlfaAorI2RlZmluZSBfX21zYV9iaW5zbGlfdyBfX2J1aWx0aW5fbXNhX2JpbnNsaV93CisjZGVmaW5lIF9fbXNhX2JpbnNsaV9kIF9fYnVpbHRpbl9tc2FfYmluc2xpX2QKKyNkZWZpbmUgX19tc2FfYmluc3JfYiBfX2J1aWx0aW5fbXNhX2JpbnNyX2IKKyNkZWZpbmUgX19tc2FfYmluc3JfaCBfX2J1aWx0aW5fbXNhX2JpbnNyX2gKKyNkZWZpbmUgX19tc2FfYmluc3JfdyBfX2J1aWx0aW5fbXNhX2JpbnNyX3cKKyNkZWZpbmUgX19tc2FfYmluc3JfZCBfX2J1aWx0aW5fbXNhX2JpbnNyX2QKKyNkZWZpbmUgX19tc2FfYmluc3JpX2IgX19idWlsdGluX21zYV9iaW5zcmlfYgorI2RlZmluZSBfX21zYV9iaW5zcmlfaCBfX2J1aWx0aW5fbXNhX2JpbnNyaV9oCisjZGVmaW5lIF9fbXNhX2JpbnNyaV93IF9fYnVpbHRpbl9tc2FfYmluc3JpX3cKKyNkZWZpbmUgX19tc2FfYmluc3JpX2QgX19idWlsdGluX21zYV9iaW5zcmlfZAorI2RlZmluZSBfX21zYV9hZGR2X2IgX19idWlsdGluX21zYV9hZGR2X2IKKyNkZWZpbmUgX19tc2FfYWRkdl9oIF9fYnVpbHRpbl9tc2FfYWRkdl9oCisjZGVmaW5lIF9fbXNhX2FkZHZfdyBfX2J1aWx0aW5fbXNhX2FkZHZfdworI2RlZmluZSBfX21zYV9hZGR2X2QgX19idWlsdGluX21zYV9hZGR2X2QKKyNkZWZpbmUgX19tc2FfYWRkdmlfYiBfX2J1aWx0aW5fbXNhX2FkZHZpX2IKKyNkZWZpbmUgX19tc2FfYWRkdmlfaCBfX2J1aWx0aW5fbXNhX2FkZHZpX2gKKyNkZWZpbmUgX19tc2FfYWRkdmlfdyBfX2J1aWx0aW5fbXNhX2FkZHZpX3cKKyNkZWZpbmUgX19tc2FfYWRkdmlfZCBfX2J1aWx0aW5fbXNhX2FkZHZpX2QKKyNkZWZpbmUgX19tc2Ffc3Vidl9iIF9fYnVpbHRpbl9tc2Ffc3Vidl9iCisjZGVmaW5lIF9fbXNhX3N1YnZfaCBfX2J1aWx0aW5fbXNhX3N1YnZfaAorI2RlZmluZSBfX21zYV9zdWJ2X3cgX19idWlsdGluX21zYV9zdWJ2X3cKKyNkZWZpbmUgX19tc2Ffc3Vidl9kIF9fYnVpbHRpbl9tc2Ffc3Vidl9kCisjZGVmaW5lIF9fbXNhX3N1YnZpX2IgX19idWlsdGluX21zYV9zdWJ2aV9iCisjZGVmaW5lIF9fbXNhX3N1YnZpX2ggX19idWlsdGluX21zYV9zdWJ2aV9oCisjZGVmaW5lIF9fbXNhX3N1YnZpX3cgX19idWlsdGluX21zYV9zdWJ2aV93CisjZGVmaW5lIF9fbXNhX3N1YnZpX2QgX19idWlsdGluX21zYV9zdWJ2aV9kCisjZGVmaW5lIF9fbXNhX21heF9zX2IgX19idWlsdGluX21zYV9tYXhfc19iCisjZGVmaW5lIF9fbXNhX21heF9zX2ggX19idWlsdGluX21zYV9tYXhfc19oCisjZGVmaW5lIF9fbXNhX21heF9zX3cgX19idWlsdGluX21zYV9tYXhfc193CisjZGVmaW5lIF9fbXNhX21heF9zX2QgX19idWlsdGluX21zYV9tYXhfc19kCisjZGVmaW5lIF9fbXNhX21heGlfc19iIF9fYnVpbHRpbl9tc2FfbWF4aV9zX2IKKyNkZWZpbmUgX19tc2FfbWF4aV9zX2ggX19idWlsdGluX21zYV9tYXhpX3NfaAorI2RlZmluZSBfX21zYV9tYXhpX3NfdyBfX2J1aWx0aW5fbXNhX21heGlfc193CisjZGVmaW5lIF9fbXNhX21heGlfc19kIF9fYnVpbHRpbl9tc2FfbWF4aV9zX2QKKyNkZWZpbmUgX19tc2FfbWF4X3VfYiBfX2J1aWx0aW5fbXNhX21heF91X2IKKyNkZWZpbmUgX19tc2FfbWF4X3VfaCBfX2J1aWx0aW5fbXNhX21heF91X2gKKyNkZWZpbmUgX19tc2FfbWF4X3VfdyBfX2J1aWx0aW5fbXNhX21heF91X3cKKyNkZWZpbmUgX19tc2FfbWF4X3VfZCBfX2J1aWx0aW5fbXNhX21heF91X2QKKyNkZWZpbmUgX19tc2FfbWF4aV91X2IgX19idWlsdGluX21zYV9tYXhpX3VfYgorI2RlZmluZSBfX21zYV9tYXhpX3VfaCBfX2J1aWx0aW5fbXNhX21heGlfdV9oCisjZGVmaW5lIF9fbXNhX21heGlfdV93IF9fYnVpbHRpbl9tc2FfbWF4aV91X3cKKyNkZWZpbmUgX19tc2FfbWF4aV91X2QgX19idWlsdGluX21zYV9tYXhpX3VfZAorI2RlZmluZSBfX21zYV9taW5fc19iIF9fYnVpbHRpbl9tc2FfbWluX3NfYgorI2RlZmluZSBfX21zYV9taW5fc19oIF9fYnVpbHRpbl9tc2FfbWluX3NfaAorI2RlZmluZSBfX21zYV9taW5fc193IF9fYnVpbHRpbl9tc2FfbWluX3NfdworI2RlZmluZSBfX21zYV9taW5fc19kIF9fYnVpbHRpbl9tc2FfbWluX3NfZAorI2RlZmluZSBfX21zYV9taW5pX3NfYiBfX2J1aWx0aW5fbXNhX21pbmlfc19iCisjZGVmaW5lIF9fbXNhX21pbmlfc19oIF9fYnVpbHRpbl9tc2FfbWluaV9zX2gKKyNkZWZpbmUgX19tc2FfbWluaV9zX3cgX19idWlsdGluX21zYV9taW5pX3NfdworI2RlZmluZSBfX21zYV9taW5pX3NfZCBfX2J1aWx0aW5fbXNhX21pbmlfc19kCisjZGVmaW5lIF9fbXNhX21pbl91X2IgX19idWlsdGluX21zYV9taW5fdV9iCisjZGVmaW5lIF9fbXNhX21pbl91X2ggX19idWlsdGluX21zYV9taW5fdV9oCisjZGVmaW5lIF9fbXNhX21pbl91X3cgX19idWlsdGluX21zYV9taW5fdV93CisjZGVmaW5lIF9fbXNhX21pbl91X2QgX19idWlsdGluX21zYV9taW5fdV9kCisjZGVmaW5lIF9fbXNhX21pbmlfdV9iIF9fYnVpbHRpbl9tc2FfbWluaV91X2IKKyNkZWZpbmUgX19tc2FfbWluaV91X2ggX19idWlsdGluX21zYV9taW5pX3VfaAorI2RlZmluZSBfX21zYV9taW5pX3VfdyBfX2J1aWx0aW5fbXNhX21pbmlfdV93CisjZGVmaW5lIF9fbXNhX21pbmlfdV9kIF9fYnVpbHRpbl9tc2FfbWluaV91X2QKKyNkZWZpbmUgX19tc2FfbWF4X2FfYiBfX2J1aWx0aW5fbXNhX21heF9hX2IKKyNkZWZpbmUgX19tc2FfbWF4X2FfaCBfX2J1aWx0aW5fbXNhX21heF9hX2gKKyNkZWZpbmUgX19tc2FfbWF4X2FfdyBfX2J1aWx0aW5fbXNhX21heF9hX3cKKyNkZWZpbmUgX19tc2FfbWF4X2FfZCBfX2J1aWx0aW5fbXNhX21heF9hX2QKKyNkZWZpbmUgX19tc2FfbWluX2FfYiBfX2J1aWx0aW5fbXNhX21pbl9hX2IKKyNkZWZpbmUgX19tc2FfbWluX2FfaCBfX2J1aWx0aW5fbXNhX21pbl9hX2gKKyNkZWZpbmUgX19tc2FfbWluX2FfdyBfX2J1aWx0aW5fbXNhX21pbl9hX3cKKyNkZWZpbmUgX19tc2FfbWluX2FfZCBfX2J1aWx0aW5fbXNhX21pbl9hX2QKKyNkZWZpbmUgX19tc2FfY2VxX2IgX19idWlsdGluX21zYV9jZXFfYgorI2RlZmluZSBfX21zYV9jZXFfaCBfX2J1aWx0aW5fbXNhX2NlcV9oCisjZGVmaW5lIF9fbXNhX2NlcV93IF9fYnVpbHRpbl9tc2FfY2VxX3cKKyNkZWZpbmUgX19tc2FfY2VxX2QgX19idWlsdGluX21zYV9jZXFfZAorI2RlZmluZSBfX21zYV9jZXFpX2IgX19idWlsdGluX21zYV9jZXFpX2IKKyNkZWZpbmUgX19tc2FfY2VxaV9oIF9fYnVpbHRpbl9tc2FfY2VxaV9oCisjZGVmaW5lIF9fbXNhX2NlcWlfdyBfX2J1aWx0aW5fbXNhX2NlcWlfdworI2RlZmluZSBfX21zYV9jZXFpX2QgX19idWlsdGluX21zYV9jZXFpX2QKKyNkZWZpbmUgX19tc2FfY2x0X3NfYiBfX2J1aWx0aW5fbXNhX2NsdF9zX2IKKyNkZWZpbmUgX19tc2FfY2x0X3NfaCBfX2J1aWx0aW5fbXNhX2NsdF9zX2gKKyNkZWZpbmUgX19tc2FfY2x0X3NfdyBfX2J1aWx0aW5fbXNhX2NsdF9zX3cKKyNkZWZpbmUgX19tc2FfY2x0X3NfZCBfX2J1aWx0aW5fbXNhX2NsdF9zX2QKKyNkZWZpbmUgX19tc2FfY2x0aV9zX2IgX19idWlsdGluX21zYV9jbHRpX3NfYgorI2RlZmluZSBfX21zYV9jbHRpX3NfaCBfX2J1aWx0aW5fbXNhX2NsdGlfc19oCisjZGVmaW5lIF9fbXNhX2NsdGlfc193IF9fYnVpbHRpbl9tc2FfY2x0aV9zX3cKKyNkZWZpbmUgX19tc2FfY2x0aV9zX2QgX19idWlsdGluX21zYV9jbHRpX3NfZAorI2RlZmluZSBfX21zYV9jbHRfdV9iIF9fYnVpbHRpbl9tc2FfY2x0X3VfYgorI2RlZmluZSBfX21zYV9jbHRfdV9oIF9fYnVpbHRpbl9tc2FfY2x0X3VfaAorI2RlZmluZSBfX21zYV9jbHRfdV93IF9fYnVpbHRpbl9tc2FfY2x0X3VfdworI2RlZmluZSBfX21zYV9jbHRfdV9kIF9fYnVpbHRpbl9tc2FfY2x0X3VfZAorI2RlZmluZSBfX21zYV9jbHRpX3VfYiBfX2J1aWx0aW5fbXNhX2NsdGlfdV9iCisjZGVmaW5lIF9fbXNhX2NsdGlfdV9oIF9fYnVpbHRpbl9tc2FfY2x0aV91X2gKKyNkZWZpbmUgX19tc2FfY2x0aV91X3cgX19idWlsdGluX21zYV9jbHRpX3VfdworI2RlZmluZSBfX21zYV9jbHRpX3VfZCBfX2J1aWx0aW5fbXNhX2NsdGlfdV9kCisjZGVmaW5lIF9fbXNhX2NsZV9zX2IgX19idWlsdGluX21zYV9jbGVfc19iCisjZGVmaW5lIF9fbXNhX2NsZV9zX2ggX19idWlsdGluX21zYV9jbGVfc19oCisjZGVmaW5lIF9fbXNhX2NsZV9zX3cgX19idWlsdGluX21zYV9jbGVfc193CisjZGVmaW5lIF9fbXNhX2NsZV9zX2QgX19idWlsdGluX21zYV9jbGVfc19kCisjZGVmaW5lIF9fbXNhX2NsZWlfc19iIF9fYnVpbHRpbl9tc2FfY2xlaV9zX2IKKyNkZWZpbmUgX19tc2FfY2xlaV9zX2ggX19idWlsdGluX21zYV9jbGVpX3NfaAorI2RlZmluZSBfX21zYV9jbGVpX3NfdyBfX2J1aWx0aW5fbXNhX2NsZWlfc193CisjZGVmaW5lIF9fbXNhX2NsZWlfc19kIF9fYnVpbHRpbl9tc2FfY2xlaV9zX2QKKyNkZWZpbmUgX19tc2FfY2xlX3VfYiBfX2J1aWx0aW5fbXNhX2NsZV91X2IKKyNkZWZpbmUgX19tc2FfY2xlX3VfaCBfX2J1aWx0aW5fbXNhX2NsZV91X2gKKyNkZWZpbmUgX19tc2FfY2xlX3VfdyBfX2J1aWx0aW5fbXNhX2NsZV91X3cKKyNkZWZpbmUgX19tc2FfY2xlX3VfZCBfX2J1aWx0aW5fbXNhX2NsZV91X2QKKyNkZWZpbmUgX19tc2FfY2xlaV91X2IgX19idWlsdGluX21zYV9jbGVpX3VfYgorI2RlZmluZSBfX21zYV9jbGVpX3VfaCBfX2J1aWx0aW5fbXNhX2NsZWlfdV9oCisjZGVmaW5lIF9fbXNhX2NsZWlfdV93IF9fYnVpbHRpbl9tc2FfY2xlaV91X3cKKyNkZWZpbmUgX19tc2FfY2xlaV91X2QgX19idWlsdGluX21zYV9jbGVpX3VfZAorI2RlZmluZSBfX21zYV9sZF9iIF9fYnVpbHRpbl9tc2FfbGRfYgorI2RlZmluZSBfX21zYV9sZF9oIF9fYnVpbHRpbl9tc2FfbGRfaAorI2RlZmluZSBfX21zYV9sZF93IF9fYnVpbHRpbl9tc2FfbGRfdworI2RlZmluZSBfX21zYV9sZF9kIF9fYnVpbHRpbl9tc2FfbGRfZAorI2RlZmluZSBfX21zYV9zdF9iIF9fYnVpbHRpbl9tc2Ffc3RfYgorI2RlZmluZSBfX21zYV9zdF9oIF9fYnVpbHRpbl9tc2Ffc3RfaAorI2RlZmluZSBfX21zYV9zdF93IF9fYnVpbHRpbl9tc2Ffc3RfdworI2RlZmluZSBfX21zYV9zdF9kIF9fYnVpbHRpbl9tc2Ffc3RfZAorI2RlZmluZSBfX21zYV9zYXRfc19iIF9fYnVpbHRpbl9tc2Ffc2F0X3NfYgorI2RlZmluZSBfX21zYV9zYXRfc19oIF9fYnVpbHRpbl9tc2Ffc2F0X3NfaAorI2RlZmluZSBfX21zYV9zYXRfc193IF9fYnVpbHRpbl9tc2Ffc2F0X3NfdworI2RlZmluZSBfX21zYV9zYXRfc19kIF9fYnVpbHRpbl9tc2Ffc2F0X3NfZAorI2RlZmluZSBfX21zYV9zYXRfdV9iIF9fYnVpbHRpbl9tc2Ffc2F0X3VfYgorI2RlZmluZSBfX21zYV9zYXRfdV9oIF9fYnVpbHRpbl9tc2Ffc2F0X3VfaAorI2RlZmluZSBfX21zYV9zYXRfdV93IF9fYnVpbHRpbl9tc2Ffc2F0X3VfdworI2RlZmluZSBfX21zYV9zYXRfdV9kIF9fYnVpbHRpbl9tc2Ffc2F0X3VfZAorI2RlZmluZSBfX21zYV9hZGRfYV9iIF9fYnVpbHRpbl9tc2FfYWRkX2FfYgorI2RlZmluZSBfX21zYV9hZGRfYV9oIF9fYnVpbHRpbl9tc2FfYWRkX2FfaAorI2RlZmluZSBfX21zYV9hZGRfYV93IF9fYnVpbHRpbl9tc2FfYWRkX2FfdworI2RlZmluZSBfX21zYV9hZGRfYV9kIF9fYnVpbHRpbl9tc2FfYWRkX2FfZAorI2RlZmluZSBfX21zYV9hZGRzX2FfYiBfX2J1aWx0aW5fbXNhX2FkZHNfYV9iCisjZGVmaW5lIF9fbXNhX2FkZHNfYV9oIF9fYnVpbHRpbl9tc2FfYWRkc19hX2gKKyNkZWZpbmUgX19tc2FfYWRkc19hX3cgX19idWlsdGluX21zYV9hZGRzX2FfdworI2RlZmluZSBfX21zYV9hZGRzX2FfZCBfX2J1aWx0aW5fbXNhX2FkZHNfYV9kCisjZGVmaW5lIF9fbXNhX2FkZHNfc19iIF9fYnVpbHRpbl9tc2FfYWRkc19zX2IKKyNkZWZpbmUgX19tc2FfYWRkc19zX2ggX19idWlsdGluX21zYV9hZGRzX3NfaAorI2RlZmluZSBfX21zYV9hZGRzX3NfdyBfX2J1aWx0aW5fbXNhX2FkZHNfc193CisjZGVmaW5lIF9fbXNhX2FkZHNfc19kIF9fYnVpbHRpbl9tc2FfYWRkc19zX2QKKyNkZWZpbmUgX19tc2FfYWRkc191X2IgX19idWlsdGluX21zYV9hZGRzX3VfYgorI2RlZmluZSBfX21zYV9hZGRzX3VfaCBfX2J1aWx0aW5fbXNhX2FkZHNfdV9oCisjZGVmaW5lIF9fbXNhX2FkZHNfdV93IF9fYnVpbHRpbl9tc2FfYWRkc191X3cKKyNkZWZpbmUgX19tc2FfYWRkc191X2QgX19idWlsdGluX21zYV9hZGRzX3VfZAorI2RlZmluZSBfX21zYV9hdmVfc19iIF9fYnVpbHRpbl9tc2FfYXZlX3NfYgorI2RlZmluZSBfX21zYV9hdmVfc19oIF9fYnVpbHRpbl9tc2FfYXZlX3NfaAorI2RlZmluZSBfX21zYV9hdmVfc193IF9fYnVpbHRpbl9tc2FfYXZlX3NfdworI2RlZmluZSBfX21zYV9hdmVfc19kIF9fYnVpbHRpbl9tc2FfYXZlX3NfZAorI2RlZmluZSBfX21zYV9hdmVfdV9iIF9fYnVpbHRpbl9tc2FfYXZlX3VfYgorI2RlZmluZSBfX21zYV9hdmVfdV9oIF9fYnVpbHRpbl9tc2FfYXZlX3VfaAorI2RlZmluZSBfX21zYV9hdmVfdV93IF9fYnVpbHRpbl9tc2FfYXZlX3VfdworI2RlZmluZSBfX21zYV9hdmVfdV9kIF9fYnVpbHRpbl9tc2FfYXZlX3VfZAorI2RlZmluZSBfX21zYV9hdmVyX3NfYiBfX2J1aWx0aW5fbXNhX2F2ZXJfc19iCisjZGVmaW5lIF9fbXNhX2F2ZXJfc19oIF9fYnVpbHRpbl9tc2FfYXZlcl9zX2gKKyNkZWZpbmUgX19tc2FfYXZlcl9zX3cgX19idWlsdGluX21zYV9hdmVyX3NfdworI2RlZmluZSBfX21zYV9hdmVyX3NfZCBfX2J1aWx0aW5fbXNhX2F2ZXJfc19kCisjZGVmaW5lIF9fbXNhX2F2ZXJfdV9iIF9fYnVpbHRpbl9tc2FfYXZlcl91X2IKKyNkZWZpbmUgX19tc2FfYXZlcl91X2ggX19idWlsdGluX21zYV9hdmVyX3VfaAorI2RlZmluZSBfX21zYV9hdmVyX3VfdyBfX2J1aWx0aW5fbXNhX2F2ZXJfdV93CisjZGVmaW5lIF9fbXNhX2F2ZXJfdV9kIF9fYnVpbHRpbl9tc2FfYXZlcl91X2QKKyNkZWZpbmUgX19tc2Ffc3Vic19zX2IgX19idWlsdGluX21zYV9zdWJzX3NfYgorI2RlZmluZSBfX21zYV9zdWJzX3NfaCBfX2J1aWx0aW5fbXNhX3N1YnNfc19oCisjZGVmaW5lIF9fbXNhX3N1YnNfc193IF9fYnVpbHRpbl9tc2Ffc3Vic19zX3cKKyNkZWZpbmUgX19tc2Ffc3Vic19zX2QgX19idWlsdGluX21zYV9zdWJzX3NfZAorI2RlZmluZSBfX21zYV9zdWJzX3VfYiBfX2J1aWx0aW5fbXNhX3N1YnNfdV9iCisjZGVmaW5lIF9fbXNhX3N1YnNfdV9oIF9fYnVpbHRpbl9tc2Ffc3Vic191X2gKKyNkZWZpbmUgX19tc2Ffc3Vic191X3cgX19idWlsdGluX21zYV9zdWJzX3VfdworI2RlZmluZSBfX21zYV9zdWJzX3VfZCBfX2J1aWx0aW5fbXNhX3N1YnNfdV9kCisjZGVmaW5lIF9fbXNhX3N1YnN1dV9zX2IgX19idWlsdGluX21zYV9zdWJzdXVfc19iCisjZGVmaW5lIF9fbXNhX3N1YnN1dV9zX2ggX19idWlsdGluX21zYV9zdWJzdXVfc19oCisjZGVmaW5lIF9fbXNhX3N1YnN1dV9zX3cgX19idWlsdGluX21zYV9zdWJzdXVfc193CisjZGVmaW5lIF9fbXNhX3N1YnN1dV9zX2QgX19idWlsdGluX21zYV9zdWJzdXVfc19kCisjZGVmaW5lIF9fbXNhX3N1YnN1c191X2IgX19idWlsdGluX21zYV9zdWJzdXNfdV9iCisjZGVmaW5lIF9fbXNhX3N1YnN1c191X2ggX19idWlsdGluX21zYV9zdWJzdXNfdV9oCisjZGVmaW5lIF9fbXNhX3N1YnN1c191X3cgX19idWlsdGluX21zYV9zdWJzdXNfdV93CisjZGVmaW5lIF9fbXNhX3N1YnN1c191X2QgX19idWlsdGluX21zYV9zdWJzdXNfdV9kCisjZGVmaW5lIF9fbXNhX2FzdWJfc19iIF9fYnVpbHRpbl9tc2FfYXN1Yl9zX2IKKyNkZWZpbmUgX19tc2FfYXN1Yl9zX2ggX19idWlsdGluX21zYV9hc3ViX3NfaAorI2RlZmluZSBfX21zYV9hc3ViX3NfdyBfX2J1aWx0aW5fbXNhX2FzdWJfc193CisjZGVmaW5lIF9fbXNhX2FzdWJfc19kIF9fYnVpbHRpbl9tc2FfYXN1Yl9zX2QKKyNkZWZpbmUgX19tc2FfYXN1Yl91X2IgX19idWlsdGluX21zYV9hc3ViX3VfYgorI2RlZmluZSBfX21zYV9hc3ViX3VfaCBfX2J1aWx0aW5fbXNhX2FzdWJfdV9oCisjZGVmaW5lIF9fbXNhX2FzdWJfdV93IF9fYnVpbHRpbl9tc2FfYXN1Yl91X3cKKyNkZWZpbmUgX19tc2FfYXN1Yl91X2QgX19idWlsdGluX21zYV9hc3ViX3VfZAorI2RlZmluZSBfX21zYV9tdWx2X2IgX19idWlsdGluX21zYV9tdWx2X2IKKyNkZWZpbmUgX19tc2FfbXVsdl9oIF9fYnVpbHRpbl9tc2FfbXVsdl9oCisjZGVmaW5lIF9fbXNhX211bHZfdyBfX2J1aWx0aW5fbXNhX211bHZfdworI2RlZmluZSBfX21zYV9tdWx2X2QgX19idWlsdGluX21zYV9tdWx2X2QKKyNkZWZpbmUgX19tc2FfbWFkZHZfYiBfX2J1aWx0aW5fbXNhX21hZGR2X2IKKyNkZWZpbmUgX19tc2FfbWFkZHZfaCBfX2J1aWx0aW5fbXNhX21hZGR2X2gKKyNkZWZpbmUgX19tc2FfbWFkZHZfdyBfX2J1aWx0aW5fbXNhX21hZGR2X3cKKyNkZWZpbmUgX19tc2FfbWFkZHZfZCBfX2J1aWx0aW5fbXNhX21hZGR2X2QKKyNkZWZpbmUgX19tc2FfbXN1YnZfYiBfX2J1aWx0aW5fbXNhX21zdWJ2X2IKKyNkZWZpbmUgX19tc2FfbXN1YnZfaCBfX2J1aWx0aW5fbXNhX21zdWJ2X2gKKyNkZWZpbmUgX19tc2FfbXN1YnZfdyBfX2J1aWx0aW5fbXNhX21zdWJ2X3cKKyNkZWZpbmUgX19tc2FfbXN1YnZfZCBfX2J1aWx0aW5fbXNhX21zdWJ2X2QKKyNkZWZpbmUgX19tc2FfZGl2X3NfYiBfX2J1aWx0aW5fbXNhX2Rpdl9zX2IKKyNkZWZpbmUgX19tc2FfZGl2X3NfaCBfX2J1aWx0aW5fbXNhX2Rpdl9zX2gKKyNkZWZpbmUgX19tc2FfZGl2X3NfdyBfX2J1aWx0aW5fbXNhX2Rpdl9zX3cKKyNkZWZpbmUgX19tc2FfZGl2X3NfZCBfX2J1aWx0aW5fbXNhX2Rpdl9zX2QKKyNkZWZpbmUgX19tc2FfZGl2X3VfYiBfX2J1aWx0aW5fbXNhX2Rpdl91X2IKKyNkZWZpbmUgX19tc2FfZGl2X3VfaCBfX2J1aWx0aW5fbXNhX2Rpdl91X2gKKyNkZWZpbmUgX19tc2FfZGl2X3VfdyBfX2J1aWx0aW5fbXNhX2Rpdl91X3cKKyNkZWZpbmUgX19tc2FfZGl2X3VfZCBfX2J1aWx0aW5fbXNhX2Rpdl91X2QKKyNkZWZpbmUgX19tc2FfaGFkZF9zX2ggX19idWlsdGluX21zYV9oYWRkX3NfaAorI2RlZmluZSBfX21zYV9oYWRkX3NfdyBfX2J1aWx0aW5fbXNhX2hhZGRfc193CisjZGVmaW5lIF9fbXNhX2hhZGRfc19kIF9fYnVpbHRpbl9tc2FfaGFkZF9zX2QKKyNkZWZpbmUgX19tc2FfaGFkZF91X2ggX19idWlsdGluX21zYV9oYWRkX3VfaAorI2RlZmluZSBfX21zYV9oYWRkX3VfdyBfX2J1aWx0aW5fbXNhX2hhZGRfdV93CisjZGVmaW5lIF9fbXNhX2hhZGRfdV9kIF9fYnVpbHRpbl9tc2FfaGFkZF91X2QKKyNkZWZpbmUgX19tc2FfaHN1Yl9zX2ggX19idWlsdGluX21zYV9oc3ViX3NfaAorI2RlZmluZSBfX21zYV9oc3ViX3NfdyBfX2J1aWx0aW5fbXNhX2hzdWJfc193CisjZGVmaW5lIF9fbXNhX2hzdWJfc19kIF9fYnVpbHRpbl9tc2FfaHN1Yl9zX2QKKyNkZWZpbmUgX19tc2FfaHN1Yl91X2ggX19idWlsdGluX21zYV9oc3ViX3VfaAorI2RlZmluZSBfX21zYV9oc3ViX3VfdyBfX2J1aWx0aW5fbXNhX2hzdWJfdV93CisjZGVmaW5lIF9fbXNhX2hzdWJfdV9kIF9fYnVpbHRpbl9tc2FfaHN1Yl91X2QKKyNkZWZpbmUgX19tc2FfbW9kX3NfYiBfX2J1aWx0aW5fbXNhX21vZF9zX2IKKyNkZWZpbmUgX19tc2FfbW9kX3NfaCBfX2J1aWx0aW5fbXNhX21vZF9zX2gKKyNkZWZpbmUgX19tc2FfbW9kX3NfdyBfX2J1aWx0aW5fbXNhX21vZF9zX3cKKyNkZWZpbmUgX19tc2FfbW9kX3NfZCBfX2J1aWx0aW5fbXNhX21vZF9zX2QKKyNkZWZpbmUgX19tc2FfbW9kX3VfYiBfX2J1aWx0aW5fbXNhX21vZF91X2IKKyNkZWZpbmUgX19tc2FfbW9kX3VfaCBfX2J1aWx0aW5fbXNhX21vZF91X2gKKyNkZWZpbmUgX19tc2FfbW9kX3VfdyBfX2J1aWx0aW5fbXNhX21vZF91X3cKKyNkZWZpbmUgX19tc2FfbW9kX3VfZCBfX2J1aWx0aW5fbXNhX21vZF91X2QKKyNkZWZpbmUgX19tc2FfZG90cF9zX2ggX19idWlsdGluX21zYV9kb3RwX3NfaAorI2RlZmluZSBfX21zYV9kb3RwX3NfdyBfX2J1aWx0aW5fbXNhX2RvdHBfc193CisjZGVmaW5lIF9fbXNhX2RvdHBfc19kIF9fYnVpbHRpbl9tc2FfZG90cF9zX2QKKyNkZWZpbmUgX19tc2FfZG90cF91X2ggX19idWlsdGluX21zYV9kb3RwX3VfaAorI2RlZmluZSBfX21zYV9kb3RwX3VfdyBfX2J1aWx0aW5fbXNhX2RvdHBfdV93CisjZGVmaW5lIF9fbXNhX2RvdHBfdV9kIF9fYnVpbHRpbl9tc2FfZG90cF91X2QKKyNkZWZpbmUgX19tc2FfZHBhZGRfc19oIF9fYnVpbHRpbl9tc2FfZHBhZGRfc19oCisjZGVmaW5lIF9fbXNhX2RwYWRkX3NfdyBfX2J1aWx0aW5fbXNhX2RwYWRkX3NfdworI2RlZmluZSBfX21zYV9kcGFkZF9zX2QgX19idWlsdGluX21zYV9kcGFkZF9zX2QKKyNkZWZpbmUgX19tc2FfZHBhZGRfdV9oIF9fYnVpbHRpbl9tc2FfZHBhZGRfdV9oCisjZGVmaW5lIF9fbXNhX2RwYWRkX3VfdyBfX2J1aWx0aW5fbXNhX2RwYWRkX3VfdworI2RlZmluZSBfX21zYV9kcGFkZF91X2QgX19idWlsdGluX21zYV9kcGFkZF91X2QKKyNkZWZpbmUgX19tc2FfZHBzdWJfc19oIF9fYnVpbHRpbl9tc2FfZHBzdWJfc19oCisjZGVmaW5lIF9fbXNhX2Rwc3ViX3NfdyBfX2J1aWx0aW5fbXNhX2Rwc3ViX3NfdworI2RlZmluZSBfX21zYV9kcHN1Yl9zX2QgX19idWlsdGluX21zYV9kcHN1Yl9zX2QKKyNkZWZpbmUgX19tc2FfZHBzdWJfdV9oIF9fYnVpbHRpbl9tc2FfZHBzdWJfdV9oCisjZGVmaW5lIF9fbXNhX2Rwc3ViX3VfdyBfX2J1aWx0aW5fbXNhX2Rwc3ViX3VfdworI2RlZmluZSBfX21zYV9kcHN1Yl91X2QgX19idWlsdGluX21zYV9kcHN1Yl91X2QKKyNkZWZpbmUgX19tc2Ffc2xkX2IgX19idWlsdGluX21zYV9zbGRfYgorI2RlZmluZSBfX21zYV9zbGRfaCBfX2J1aWx0aW5fbXNhX3NsZF9oCisjZGVmaW5lIF9fbXNhX3NsZF93IF9fYnVpbHRpbl9tc2Ffc2xkX3cKKyNkZWZpbmUgX19tc2Ffc2xkX2QgX19idWlsdGluX21zYV9zbGRfZAorI2RlZmluZSBfX21zYV9zbGRpX2IgX19idWlsdGluX21zYV9zbGRpX2IKKyNkZWZpbmUgX19tc2Ffc2xkaV9oIF9fYnVpbHRpbl9tc2Ffc2xkaV9oCisjZGVmaW5lIF9fbXNhX3NsZGlfdyBfX2J1aWx0aW5fbXNhX3NsZGlfdworI2RlZmluZSBfX21zYV9zbGRpX2QgX19idWlsdGluX21zYV9zbGRpX2QKKyNkZWZpbmUgX19tc2Ffc3BsYXRfYiBfX2J1aWx0aW5fbXNhX3NwbGF0X2IKKyNkZWZpbmUgX19tc2Ffc3BsYXRfaCBfX2J1aWx0aW5fbXNhX3NwbGF0X2gKKyNkZWZpbmUgX19tc2Ffc3BsYXRfdyBfX2J1aWx0aW5fbXNhX3NwbGF0X3cKKyNkZWZpbmUgX19tc2Ffc3BsYXRfZCBfX2J1aWx0aW5fbXNhX3NwbGF0X2QKKyNkZWZpbmUgX19tc2Ffc3BsYXRpX2IgX19idWlsdGluX21zYV9zcGxhdGlfYgorI2RlZmluZSBfX21zYV9zcGxhdGlfaCBfX2J1aWx0aW5fbXNhX3NwbGF0aV9oCisjZGVmaW5lIF9fbXNhX3NwbGF0aV93IF9fYnVpbHRpbl9tc2Ffc3BsYXRpX3cKKyNkZWZpbmUgX19tc2Ffc3BsYXRpX2QgX19idWlsdGluX21zYV9zcGxhdGlfZAorI2RlZmluZSBfX21zYV9wY2tldl9iIF9fYnVpbHRpbl9tc2FfcGNrZXZfYgorI2RlZmluZSBfX21zYV9wY2tldl9oIF9fYnVpbHRpbl9tc2FfcGNrZXZfaAorI2RlZmluZSBfX21zYV9wY2tldl93IF9fYnVpbHRpbl9tc2FfcGNrZXZfdworI2RlZmluZSBfX21zYV9wY2tldl9kIF9fYnVpbHRpbl9tc2FfcGNrZXZfZAorI2RlZmluZSBfX21zYV9wY2tvZF9iIF9fYnVpbHRpbl9tc2FfcGNrb2RfYgorI2RlZmluZSBfX21zYV9wY2tvZF9oIF9fYnVpbHRpbl9tc2FfcGNrb2RfaAorI2RlZmluZSBfX21zYV9wY2tvZF93IF9fYnVpbHRpbl9tc2FfcGNrb2RfdworI2RlZmluZSBfX21zYV9wY2tvZF9kIF9fYnVpbHRpbl9tc2FfcGNrb2RfZAorI2RlZmluZSBfX21zYV9pbHZsX2IgX19idWlsdGluX21zYV9pbHZsX2IKKyNkZWZpbmUgX19tc2FfaWx2bF9oIF9fYnVpbHRpbl9tc2FfaWx2bF9oCisjZGVmaW5lIF9fbXNhX2lsdmxfdyBfX2J1aWx0aW5fbXNhX2lsdmxfdworI2RlZmluZSBfX21zYV9pbHZsX2QgX19idWlsdGluX21zYV9pbHZsX2QKKyNkZWZpbmUgX19tc2FfaWx2cl9iIF9fYnVpbHRpbl9tc2FfaWx2cl9iCisjZGVmaW5lIF9fbXNhX2lsdnJfaCBfX2J1aWx0aW5fbXNhX2lsdnJfaAorI2RlZmluZSBfX21zYV9pbHZyX3cgX19idWlsdGluX21zYV9pbHZyX3cKKyNkZWZpbmUgX19tc2FfaWx2cl9kIF9fYnVpbHRpbl9tc2FfaWx2cl9kCisjZGVmaW5lIF9fbXNhX2lsdmV2X2IgX19idWlsdGluX21zYV9pbHZldl9iCisjZGVmaW5lIF9fbXNhX2lsdmV2X2ggX19idWlsdGluX21zYV9pbHZldl9oCisjZGVmaW5lIF9fbXNhX2lsdmV2X3cgX19idWlsdGluX21zYV9pbHZldl93CisjZGVmaW5lIF9fbXNhX2lsdmV2X2QgX19idWlsdGluX21zYV9pbHZldl9kCisjZGVmaW5lIF9fbXNhX2lsdm9kX2IgX19idWlsdGluX21zYV9pbHZvZF9iCisjZGVmaW5lIF9fbXNhX2lsdm9kX2ggX19idWlsdGluX21zYV9pbHZvZF9oCisjZGVmaW5lIF9fbXNhX2lsdm9kX3cgX19idWlsdGluX21zYV9pbHZvZF93CisjZGVmaW5lIF9fbXNhX2lsdm9kX2QgX19idWlsdGluX21zYV9pbHZvZF9kCisjZGVmaW5lIF9fbXNhX3ZzaGZfYiBfX2J1aWx0aW5fbXNhX3ZzaGZfYgorI2RlZmluZSBfX21zYV92c2hmX2ggX19idWlsdGluX21zYV92c2hmX2gKKyNkZWZpbmUgX19tc2FfdnNoZl93IF9fYnVpbHRpbl9tc2FfdnNoZl93CisjZGVmaW5lIF9fbXNhX3ZzaGZfZCBfX2J1aWx0aW5fbXNhX3ZzaGZfZAorI2RlZmluZSBfX21zYV9hbmRfdiBfX2J1aWx0aW5fbXNhX2FuZF92CisjZGVmaW5lIF9fbXNhX2FuZGlfYiBfX2J1aWx0aW5fbXNhX2FuZGlfYgorI2RlZmluZSBfX21zYV9vcl92IF9fYnVpbHRpbl9tc2Ffb3JfdgorI2RlZmluZSBfX21zYV9vcmlfYiBfX2J1aWx0aW5fbXNhX29yaV9iCisjZGVmaW5lIF9fbXNhX25vcl92IF9fYnVpbHRpbl9tc2Ffbm9yX3YKKyNkZWZpbmUgX19tc2Ffbm9yaV9iIF9fYnVpbHRpbl9tc2Ffbm9yaV9iCisjZGVmaW5lIF9fbXNhX3hvcl92IF9fYnVpbHRpbl9tc2FfeG9yX3YKKyNkZWZpbmUgX19tc2FfeG9yaV9iIF9fYnVpbHRpbl9tc2FfeG9yaV9iCisjZGVmaW5lIF9fbXNhX2JtbnpfdiBfX2J1aWx0aW5fbXNhX2JtbnpfdgorI2RlZmluZSBfX21zYV9ibW56aV9iIF9fYnVpbHRpbl9tc2FfYm1uemlfYgorI2RlZmluZSBfX21zYV9ibXpfdiBfX2J1aWx0aW5fbXNhX2Jtel92CisjZGVmaW5lIF9fbXNhX2JtemlfYiBfX2J1aWx0aW5fbXNhX2JtemlfYgorI2RlZmluZSBfX21zYV9ic2VsX3YgX19idWlsdGluX21zYV9ic2VsX3YKKyNkZWZpbmUgX19tc2FfYnNlbGlfYiBfX2J1aWx0aW5fbXNhX2JzZWxpX2IKKyNkZWZpbmUgX19tc2Ffc2hmX2IgX19idWlsdGluX21zYV9zaGZfYgorI2RlZmluZSBfX21zYV9zaGZfaCBfX2J1aWx0aW5fbXNhX3NoZl9oCisjZGVmaW5lIF9fbXNhX3NoZl93IF9fYnVpbHRpbl9tc2Ffc2hmX3cKKyNkZWZpbmUgX19tc2FfdGVzdF9ibnpfdiBfX2J1aWx0aW5fbXNhX2Juel92CisjZGVmaW5lIF9fbXNhX3Rlc3RfYnpfdiBfX2J1aWx0aW5fbXNhX2J6X3YKKyNkZWZpbmUgX19tc2FfZmlsbF9iIF9fYnVpbHRpbl9tc2FfZmlsbF9iCisjZGVmaW5lIF9fbXNhX2ZpbGxfaCBfX2J1aWx0aW5fbXNhX2ZpbGxfaAorI2RlZmluZSBfX21zYV9maWxsX3cgX19idWlsdGluX21zYV9maWxsX3cKKyNkZWZpbmUgX19tc2FfZmlsbF9kIF9fYnVpbHRpbl9tc2FfZmlsbF9kCisjZGVmaW5lIF9fbXNhX3BjbnRfYiBfX2J1aWx0aW5fbXNhX3BjbnRfYgorI2RlZmluZSBfX21zYV9wY250X2ggX19idWlsdGluX21zYV9wY250X2gKKyNkZWZpbmUgX19tc2FfcGNudF93IF9fYnVpbHRpbl9tc2FfcGNudF93CisjZGVmaW5lIF9fbXNhX3BjbnRfZCBfX2J1aWx0aW5fbXNhX3BjbnRfZAorI2RlZmluZSBfX21zYV9ubG9jX2IgX19idWlsdGluX21zYV9ubG9jX2IKKyNkZWZpbmUgX19tc2FfbmxvY19oIF9fYnVpbHRpbl9tc2FfbmxvY19oCisjZGVmaW5lIF9fbXNhX25sb2NfdyBfX2J1aWx0aW5fbXNhX25sb2NfdworI2RlZmluZSBfX21zYV9ubG9jX2QgX19idWlsdGluX21zYV9ubG9jX2QKKyNkZWZpbmUgX19tc2Ffbmx6Y19iIF9fYnVpbHRpbl9tc2Ffbmx6Y19iCisjZGVmaW5lIF9fbXNhX25semNfaCBfX2J1aWx0aW5fbXNhX25semNfaAorI2RlZmluZSBfX21zYV9ubHpjX3cgX19idWlsdGluX21zYV9ubHpjX3cKKyNkZWZpbmUgX19tc2Ffbmx6Y19kIF9fYnVpbHRpbl9tc2Ffbmx6Y19kCisjZGVmaW5lIF9fbXNhX2NvcHlfc19iIF9fYnVpbHRpbl9tc2FfY29weV9zX2IKKyNkZWZpbmUgX19tc2FfY29weV9zX2ggX19idWlsdGluX21zYV9jb3B5X3NfaAorI2RlZmluZSBfX21zYV9jb3B5X3NfdyBfX2J1aWx0aW5fbXNhX2NvcHlfc193CisjZGVmaW5lIF9fbXNhX2NvcHlfc19kIF9fYnVpbHRpbl9tc2FfY29weV9zX2QKKyNkZWZpbmUgX19tc2FfY29weV91X2IgX19idWlsdGluX21zYV9jb3B5X3VfYgorI2RlZmluZSBfX21zYV9jb3B5X3VfaCBfX2J1aWx0aW5fbXNhX2NvcHlfdV9oCisjZGVmaW5lIF9fbXNhX2NvcHlfdV93IF9fYnVpbHRpbl9tc2FfY29weV91X3cKKyNkZWZpbmUgX19tc2FfY29weV91X2QgX19idWlsdGluX21zYV9jb3B5X3VfZAorI2RlZmluZSBfX21zYV9pbnNlcnRfYiBfX2J1aWx0aW5fbXNhX2luc2VydF9iCisjZGVmaW5lIF9fbXNhX2luc2VydF9oIF9fYnVpbHRpbl9tc2FfaW5zZXJ0X2gKKyNkZWZpbmUgX19tc2FfaW5zZXJ0X3cgX19idWlsdGluX21zYV9pbnNlcnRfdworI2RlZmluZSBfX21zYV9pbnNlcnRfZCBfX2J1aWx0aW5fbXNhX2luc2VydF9kCisjZGVmaW5lIF9fbXNhX2luc3ZlX2IgX19idWlsdGluX21zYV9pbnN2ZV9iCisjZGVmaW5lIF9fbXNhX2luc3ZlX2ggX19idWlsdGluX21zYV9pbnN2ZV9oCisjZGVmaW5lIF9fbXNhX2luc3ZlX3cgX19idWlsdGluX21zYV9pbnN2ZV93CisjZGVmaW5lIF9fbXNhX2luc3ZlX2QgX19idWlsdGluX21zYV9pbnN2ZV9kCisjZGVmaW5lIF9fbXNhX3Rlc3RfYm56X2IgX19idWlsdGluX21zYV9ibnpfYgorI2RlZmluZSBfX21zYV90ZXN0X2Juel9oIF9fYnVpbHRpbl9tc2FfYm56X2gKKyNkZWZpbmUgX19tc2FfdGVzdF9ibnpfdyBfX2J1aWx0aW5fbXNhX2Juel93CisjZGVmaW5lIF9fbXNhX3Rlc3RfYm56X2QgX19idWlsdGluX21zYV9ibnpfZAorI2RlZmluZSBfX21zYV90ZXN0X2J6X2IgX19idWlsdGluX21zYV9iel9iCisjZGVmaW5lIF9fbXNhX3Rlc3RfYnpfaCBfX2J1aWx0aW5fbXNhX2J6X2gKKyNkZWZpbmUgX19tc2FfdGVzdF9iel93IF9fYnVpbHRpbl9tc2FfYnpfdworI2RlZmluZSBfX21zYV90ZXN0X2J6X2QgX19idWlsdGluX21zYV9iel9kCisjZGVmaW5lIF9fbXNhX2xkaV9iIF9fYnVpbHRpbl9tc2FfbGRpX2IKKyNkZWZpbmUgX19tc2FfbGRpX2ggX19idWlsdGluX21zYV9sZGlfaAorI2RlZmluZSBfX21zYV9sZGlfdyBfX2J1aWx0aW5fbXNhX2xkaV93CisjZGVmaW5lIF9fbXNhX2xkaV9kIF9fYnVpbHRpbl9tc2FfbGRpX2QKKyNkZWZpbmUgX19tc2FfZmNhZl93IF9fYnVpbHRpbl9tc2FfZmNhZl93CisjZGVmaW5lIF9fbXNhX2ZjYWZfZCBfX2J1aWx0aW5fbXNhX2ZjYWZfZAorI2RlZmluZSBfX21zYV9mY29yX3cgX19idWlsdGluX21zYV9mY29yX3cKKyNkZWZpbmUgX19tc2FfZmNvcl9kIF9fYnVpbHRpbl9tc2FfZmNvcl9kCisjZGVmaW5lIF9fbXNhX2ZjdW5fdyBfX2J1aWx0aW5fbXNhX2ZjdW5fdworI2RlZmluZSBfX21zYV9mY3VuX2QgX19idWlsdGluX21zYV9mY3VuX2QKKyNkZWZpbmUgX19tc2FfZmN1bmVfdyBfX2J1aWx0aW5fbXNhX2ZjdW5lX3cKKyNkZWZpbmUgX19tc2FfZmN1bmVfZCBfX2J1aWx0aW5fbXNhX2ZjdW5lX2QKKyNkZWZpbmUgX19tc2FfZmN1ZXFfdyBfX2J1aWx0aW5fbXNhX2ZjdWVxX3cKKyNkZWZpbmUgX19tc2FfZmN1ZXFfZCBfX2J1aWx0aW5fbXNhX2ZjdWVxX2QKKyNkZWZpbmUgX19tc2FfZmNlcV93IF9fYnVpbHRpbl9tc2FfZmNlcV93CisjZGVmaW5lIF9fbXNhX2ZjZXFfZCBfX2J1aWx0aW5fbXNhX2ZjZXFfZAorI2RlZmluZSBfX21zYV9mY25lX3cgX19idWlsdGluX21zYV9mY25lX3cKKyNkZWZpbmUgX19tc2FfZmNuZV9kIF9fYnVpbHRpbl9tc2FfZmNuZV9kCisjZGVmaW5lIF9fbXNhX2ZjbHRfdyBfX2J1aWx0aW5fbXNhX2ZjbHRfdworI2RlZmluZSBfX21zYV9mY2x0X2QgX19idWlsdGluX21zYV9mY2x0X2QKKyNkZWZpbmUgX19tc2FfZmN1bHRfdyBfX2J1aWx0aW5fbXNhX2ZjdWx0X3cKKyNkZWZpbmUgX19tc2FfZmN1bHRfZCBfX2J1aWx0aW5fbXNhX2ZjdWx0X2QKKyNkZWZpbmUgX19tc2FfZmNsZV93IF9fYnVpbHRpbl9tc2FfZmNsZV93CisjZGVmaW5lIF9fbXNhX2ZjbGVfZCBfX2J1aWx0aW5fbXNhX2ZjbGVfZAorI2RlZmluZSBfX21zYV9mY3VsZV93IF9fYnVpbHRpbl9tc2FfZmN1bGVfdworI2RlZmluZSBfX21zYV9mY3VsZV9kIF9fYnVpbHRpbl9tc2FfZmN1bGVfZAorI2RlZmluZSBfX21zYV9mc2FmX3cgX19idWlsdGluX21zYV9mc2FmX3cKKyNkZWZpbmUgX19tc2FfZnNhZl9kIF9fYnVpbHRpbl9tc2FfZnNhZl9kCisjZGVmaW5lIF9fbXNhX2Zzb3JfdyBfX2J1aWx0aW5fbXNhX2Zzb3JfdworI2RlZmluZSBfX21zYV9mc29yX2QgX19idWlsdGluX21zYV9mc29yX2QKKyNkZWZpbmUgX19tc2FfZnN1bl93IF9fYnVpbHRpbl9tc2FfZnN1bl93CisjZGVmaW5lIF9fbXNhX2ZzdW5fZCBfX2J1aWx0aW5fbXNhX2ZzdW5fZAorI2RlZmluZSBfX21zYV9mc3VuZV93IF9fYnVpbHRpbl9tc2FfZnN1bmVfdworI2RlZmluZSBfX21zYV9mc3VuZV9kIF9fYnVpbHRpbl9tc2FfZnN1bmVfZAorI2RlZmluZSBfX21zYV9mc3VlcV93IF9fYnVpbHRpbl9tc2FfZnN1ZXFfdworI2RlZmluZSBfX21zYV9mc3VlcV9kIF9fYnVpbHRpbl9tc2FfZnN1ZXFfZAorI2RlZmluZSBfX21zYV9mc2VxX3cgX19idWlsdGluX21zYV9mc2VxX3cKKyNkZWZpbmUgX19tc2FfZnNlcV9kIF9fYnVpbHRpbl9tc2FfZnNlcV9kCisjZGVmaW5lIF9fbXNhX2ZzbmVfdyBfX2J1aWx0aW5fbXNhX2ZzbmVfdworI2RlZmluZSBfX21zYV9mc25lX2QgX19idWlsdGluX21zYV9mc25lX2QKKyNkZWZpbmUgX19tc2FfZnNsdF93IF9fYnVpbHRpbl9tc2FfZnNsdF93CisjZGVmaW5lIF9fbXNhX2ZzbHRfZCBfX2J1aWx0aW5fbXNhX2ZzbHRfZAorI2RlZmluZSBfX21zYV9mc3VsdF93IF9fYnVpbHRpbl9tc2FfZnN1bHRfdworI2RlZmluZSBfX21zYV9mc3VsdF9kIF9fYnVpbHRpbl9tc2FfZnN1bHRfZAorI2RlZmluZSBfX21zYV9mc2xlX3cgX19idWlsdGluX21zYV9mc2xlX3cKKyNkZWZpbmUgX19tc2FfZnNsZV9kIF9fYnVpbHRpbl9tc2FfZnNsZV9kCisjZGVmaW5lIF9fbXNhX2ZzdWxlX3cgX19idWlsdGluX21zYV9mc3VsZV93CisjZGVmaW5lIF9fbXNhX2ZzdWxlX2QgX19idWlsdGluX21zYV9mc3VsZV9kCisjZGVmaW5lIF9fbXNhX2ZhZGRfdyBfX2J1aWx0aW5fbXNhX2ZhZGRfdworI2RlZmluZSBfX21zYV9mYWRkX2QgX19idWlsdGluX21zYV9mYWRkX2QKKyNkZWZpbmUgX19tc2FfZnN1Yl93IF9fYnVpbHRpbl9tc2FfZnN1Yl93CisjZGVmaW5lIF9fbXNhX2ZzdWJfZCBfX2J1aWx0aW5fbXNhX2ZzdWJfZAorI2RlZmluZSBfX21zYV9mbXVsX3cgX19idWlsdGluX21zYV9mbXVsX3cKKyNkZWZpbmUgX19tc2FfZm11bF9kIF9fYnVpbHRpbl9tc2FfZm11bF9kCisjZGVmaW5lIF9fbXNhX2ZkaXZfdyBfX2J1aWx0aW5fbXNhX2ZkaXZfdworI2RlZmluZSBfX21zYV9mZGl2X2QgX19idWlsdGluX21zYV9mZGl2X2QKKyNkZWZpbmUgX19tc2FfZm1hZGRfdyBfX2J1aWx0aW5fbXNhX2ZtYWRkX3cKKyNkZWZpbmUgX19tc2FfZm1hZGRfZCBfX2J1aWx0aW5fbXNhX2ZtYWRkX2QKKyNkZWZpbmUgX19tc2FfZm1zdWJfdyBfX2J1aWx0aW5fbXNhX2Ztc3ViX3cKKyNkZWZpbmUgX19tc2FfZm1zdWJfZCBfX2J1aWx0aW5fbXNhX2Ztc3ViX2QKKyNkZWZpbmUgX19tc2FfZmV4cDJfdyBfX2J1aWx0aW5fbXNhX2ZleHAyX3cKKyNkZWZpbmUgX19tc2FfZmV4cDJfZCBfX2J1aWx0aW5fbXNhX2ZleHAyX2QKKyNkZWZpbmUgX19tc2FfZmV4ZG9faCBfX2J1aWx0aW5fbXNhX2ZleGRvX2gKKyNkZWZpbmUgX19tc2FfZmV4ZG9fdyBfX2J1aWx0aW5fbXNhX2ZleGRvX3cKKyNkZWZpbmUgX19tc2FfZnRxX2ggX19idWlsdGluX21zYV9mdHFfaAorI2RlZmluZSBfX21zYV9mdHFfdyBfX2J1aWx0aW5fbXNhX2Z0cV93CisjZGVmaW5lIF9fbXNhX2ZtaW5fdyBfX2J1aWx0aW5fbXNhX2ZtaW5fdworI2RlZmluZSBfX21zYV9mbWluX2QgX19idWlsdGluX21zYV9mbWluX2QKKyNkZWZpbmUgX19tc2FfZm1pbl9hX3cgX19idWlsdGluX21zYV9mbWluX2FfdworI2RlZmluZSBfX21zYV9mbWluX2FfZCBfX2J1aWx0aW5fbXNhX2ZtaW5fYV9kCisjZGVmaW5lIF9fbXNhX2ZtYXhfdyBfX2J1aWx0aW5fbXNhX2ZtYXhfdworI2RlZmluZSBfX21zYV9mbWF4X2QgX19idWlsdGluX21zYV9mbWF4X2QKKyNkZWZpbmUgX19tc2FfZm1heF9hX3cgX19idWlsdGluX21zYV9mbWF4X2FfdworI2RlZmluZSBfX21zYV9mbWF4X2FfZCBfX2J1aWx0aW5fbXNhX2ZtYXhfYV9kCisjZGVmaW5lIF9fbXNhX211bF9xX2ggX19idWlsdGluX21zYV9tdWxfcV9oCisjZGVmaW5lIF9fbXNhX211bF9xX3cgX19idWlsdGluX21zYV9tdWxfcV93CisjZGVmaW5lIF9fbXNhX211bHJfcV9oIF9fYnVpbHRpbl9tc2FfbXVscl9xX2gKKyNkZWZpbmUgX19tc2FfbXVscl9xX3cgX19idWlsdGluX21zYV9tdWxyX3FfdworI2RlZmluZSBfX21zYV9tYWRkX3FfaCBfX2J1aWx0aW5fbXNhX21hZGRfcV9oCisjZGVmaW5lIF9fbXNhX21hZGRfcV93IF9fYnVpbHRpbl9tc2FfbWFkZF9xX3cKKyNkZWZpbmUgX19tc2FfbWFkZHJfcV9oIF9fYnVpbHRpbl9tc2FfbWFkZHJfcV9oCisjZGVmaW5lIF9fbXNhX21hZGRyX3FfdyBfX2J1aWx0aW5fbXNhX21hZGRyX3FfdworI2RlZmluZSBfX21zYV9tc3ViX3FfaCBfX2J1aWx0aW5fbXNhX21zdWJfcV9oCisjZGVmaW5lIF9fbXNhX21zdWJfcV93IF9fYnVpbHRpbl9tc2FfbXN1Yl9xX3cKKyNkZWZpbmUgX19tc2FfbXN1YnJfcV9oIF9fYnVpbHRpbl9tc2FfbXN1YnJfcV9oCisjZGVmaW5lIF9fbXNhX21zdWJyX3FfdyBfX2J1aWx0aW5fbXNhX21zdWJyX3FfdworI2RlZmluZSBfX21zYV9mY2xhc3NfdyBfX2J1aWx0aW5fbXNhX2ZjbGFzc193CisjZGVmaW5lIF9fbXNhX2ZjbGFzc19kIF9fYnVpbHRpbl9tc2FfZmNsYXNzX2QKKyNkZWZpbmUgX19tc2FfZnNxcnRfdyBfX2J1aWx0aW5fbXNhX2ZzcXJ0X3cKKyNkZWZpbmUgX19tc2FfZnNxcnRfZCBfX2J1aWx0aW5fbXNhX2ZzcXJ0X2QKKyNkZWZpbmUgX19tc2FfZnJjcF93IF9fYnVpbHRpbl9tc2FfZnJjcF93CisjZGVmaW5lIF9fbXNhX2ZyY3BfZCBfX2J1aWx0aW5fbXNhX2ZyY3BfZAorI2RlZmluZSBfX21zYV9mcmludF93IF9fYnVpbHRpbl9tc2FfZnJpbnRfdworI2RlZmluZSBfX21zYV9mcmludF9kIF9fYnVpbHRpbl9tc2FfZnJpbnRfZAorI2RlZmluZSBfX21zYV9mcnNxcnRfdyBfX2J1aWx0aW5fbXNhX2Zyc3FydF93CisjZGVmaW5lIF9fbXNhX2Zyc3FydF9kIF9fYnVpbHRpbl9tc2FfZnJzcXJ0X2QKKyNkZWZpbmUgX19tc2FfZmxvZzJfdyBfX2J1aWx0aW5fbXNhX2Zsb2cyX3cKKyNkZWZpbmUgX19tc2FfZmxvZzJfZCBfX2J1aWx0aW5fbXNhX2Zsb2cyX2QKKyNkZWZpbmUgX19tc2FfZmV4dXBsX3cgX19idWlsdGluX21zYV9mZXh1cGxfdworI2RlZmluZSBfX21zYV9mZXh1cGxfZCBfX2J1aWx0aW5fbXNhX2ZleHVwbF9kCisjZGVmaW5lIF9fbXNhX2ZleHVwcl93IF9fYnVpbHRpbl9tc2FfZmV4dXByX3cKKyNkZWZpbmUgX19tc2FfZmV4dXByX2QgX19idWlsdGluX21zYV9mZXh1cHJfZAorI2RlZmluZSBfX21zYV9mZnFsX3cgX19idWlsdGluX21zYV9mZnFsX3cKKyNkZWZpbmUgX19tc2FfZmZxbF9kIF9fYnVpbHRpbl9tc2FfZmZxbF9kCisjZGVmaW5lIF9fbXNhX2ZmcXJfdyBfX2J1aWx0aW5fbXNhX2ZmcXJfdworI2RlZmluZSBfX21zYV9mZnFyX2QgX19idWlsdGluX21zYV9mZnFyX2QKKyNkZWZpbmUgX19tc2FfZnRpbnRfc193IF9fYnVpbHRpbl9tc2FfZnRpbnRfc193CisjZGVmaW5lIF9fbXNhX2Z0aW50X3NfZCBfX2J1aWx0aW5fbXNhX2Z0aW50X3NfZAorI2RlZmluZSBfX21zYV9mdGludF91X3cgX19idWlsdGluX21zYV9mdGludF91X3cKKyNkZWZpbmUgX19tc2FfZnRpbnRfdV9kIF9fYnVpbHRpbl9tc2FfZnRpbnRfdV9kCisjZGVmaW5lIF9fbXNhX2Z0cnVuY19zX3cgX19idWlsdGluX21zYV9mdHJ1bmNfc193CisjZGVmaW5lIF9fbXNhX2Z0cnVuY19zX2QgX19idWlsdGluX21zYV9mdHJ1bmNfc19kCisjZGVmaW5lIF9fbXNhX2Z0cnVuY191X3cgX19idWlsdGluX21zYV9mdHJ1bmNfdV93CisjZGVmaW5lIF9fbXNhX2Z0cnVuY191X2QgX19idWlsdGluX21zYV9mdHJ1bmNfdV9kCisjZGVmaW5lIF9fbXNhX2ZmaW50X3NfdyBfX2J1aWx0aW5fbXNhX2ZmaW50X3NfdworI2RlZmluZSBfX21zYV9mZmludF9zX2QgX19idWlsdGluX21zYV9mZmludF9zX2QKKyNkZWZpbmUgX19tc2FfZmZpbnRfdV93IF9fYnVpbHRpbl9tc2FfZmZpbnRfdV93CisjZGVmaW5lIF9fbXNhX2ZmaW50X3VfZCBfX2J1aWx0aW5fbXNhX2ZmaW50X3VfZAorI2RlZmluZSBfX21zYV9jZmNtc2EgX19idWlsdGluX21zYV9jZmNtc2EKKyNkZWZpbmUgX19tc2FfbW92ZV92IF9fYnVpbHRpbl9tc2FfbW92ZV92CisjZGVmaW5lIF9fbXNhX2Nhc3RfdG9fdmVjdG9yX2Zsb2F0IF9fYnVpbHRpbl9tc2FfY2FzdF90b192ZWN0b3JfZmxvYXQKKyNkZWZpbmUgX19tc2FfY2FzdF90b192ZWN0b3JfZG91YmxlIF9fYnVpbHRpbl9tc2FfY2FzdF90b192ZWN0b3JfZG91YmxlCisjZGVmaW5lIF9fbXNhX2Nhc3RfdG9fc2NhbGFyX2Zsb2F0IF9fYnVpbHRpbl9tc2FfY2FzdF90b19zY2FsYXJfZmxvYXQKKyNkZWZpbmUgX19tc2FfY2FzdF90b19zY2FsYXJfZG91YmxlIF9fYnVpbHRpbl9tc2FfY2FzdF90b19zY2FsYXJfZG91YmxlCisjZW5kaWYgLyogZGVmaW5lZChfX21pcHNfbXNhKSAqLworI2VuZGlmIC8qIF9NU0FfSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9td2FpdHhpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvbXdhaXR4aW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM1ZjJhYwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvbXdhaXR4aW50cmluLmgKQEAgLTAsMCArMSw0NyBAQAorLyo9PT0tLS0tIG13YWl0eGludHJpbi5oIC0gTU9OSVRPUlgvTVdBSVRYIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX1g4NklOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8bXdhaXR4aW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfTVdBSVRYSU5UUklOX0gKKyNkZWZpbmUgX01XQUlUWElOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgIF9fdGFyZ2V0X18oIm13YWl0eCIpKSkKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW9uaXRvcngodm9pZCBjb25zdCAqIF9fcCwgdW5zaWduZWQgX19leHRlbnNpb25zLCB1bnNpZ25lZCBfX2hpbnRzKQoreworICBfX2J1aWx0aW5faWEzMl9tb25pdG9yeCgodm9pZCAqKV9fcCwgX19leHRlbnNpb25zLCBfX2hpbnRzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9td2FpdHgodW5zaWduZWQgX19leHRlbnNpb25zLCB1bnNpZ25lZCBfX2hpbnRzLCB1bnNpZ25lZCBfX2Nsb2NrKQoreworICBfX2J1aWx0aW5faWEzMl9td2FpdHgoX19leHRlbnNpb25zLCBfX2hpbnRzLCBfX2Nsb2NrKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX01XQUlUWElOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL25tbWludHJpbi5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9ubW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2ZlYzE1Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9ubW1pbnRyaW4uaApAQCAtMCwwICsxLDMwIEBACisvKj09PS0tLS0gbm1taW50cmluLmggLSBTU0U0IGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9OTU1JTlRSSU5fSAorI2RlZmluZSBfTk1NSU5UUklOX0gKKworLyogVG8gbWF0Y2ggZXhwZWN0YXRpb25zIG9mIGdjYyB3ZSBwdXQgdGhlIHNzZTQuMiBkZWZpbml0aW9ucyBpbnRvIHNtbWludHJpbi5oLAorICAganVzdCBpbmNsdWRlIGl0IG5vdyB0aGVuLiAgKi8KKyNpbmNsdWRlIDxzbW1pbnRyaW4uaD4KKyNlbmRpZiAvKiBfTk1NSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvb21wLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhODg0ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL29tcC5oCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICogaW5jbHVkZS80NS9vbXAuaC52YXIKKyAqLworCisKKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4KKy8vIFNvdXJjZSBMaWNlbnNlcy4gU2VlIExJQ0VOU0UudHh0IGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisKKworI2lmbmRlZiBfX09NUF9ICisjICAgZGVmaW5lIF9fT01QX0gKKworIyAgIGRlZmluZSBLTVBfVkVSU0lPTl9NQUpPUiAgICA1CisjICAgZGVmaW5lIEtNUF9WRVJTSU9OX01JTk9SICAgIDAKKyMgICBkZWZpbmUgS01QX1ZFUlNJT05fQlVJTEQgICAgMjAxNDA5MjYKKyMgICBkZWZpbmUgS01QX0JVSUxEX0RBVEUgICAgICAgIk5vX1RpbWVzdGFtcCIKKworIyAgIGlmZGVmIF9fY3BsdXNwbHVzCisgICAgZXh0ZXJuICJDIiB7CisjICAgZW5kaWYKKworIyAgIGlmIGRlZmluZWQoX1dJTjMyKQorIyAgICAgICBkZWZpbmUgX19LQUlfS01QQ19DT05WRU5USU9OIF9fY2RlY2wKKyMgICBlbHNlCisjICAgICAgIGRlZmluZSBfX0tBSV9LTVBDX0NPTlZFTlRJT04KKyMgICBlbmRpZgorCisgICAgLyogc2NoZWR1bGUga2luZCBjb25zdGFudHMgKi8KKyAgICB0eXBlZGVmIGVudW0gb21wX3NjaGVkX3QgeworCW9tcF9zY2hlZF9zdGF0aWMgID0gMSwKKwlvbXBfc2NoZWRfZHluYW1pYyA9IDIsCisJb21wX3NjaGVkX2d1aWRlZCAgPSAzLAorCW9tcF9zY2hlZF9hdXRvICAgID0gNAorICAgIH0gb21wX3NjaGVkX3Q7CisKKyAgICAvKiBzZXQgQVBJIGZ1bmN0aW9ucyAqLworICAgIGV4dGVybiB2b2lkICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfc2V0X251bV90aHJlYWRzIChpbnQpOworICAgIGV4dGVybiB2b2lkICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfc2V0X2R5bmFtaWMgICAgIChpbnQpOworICAgIGV4dGVybiB2b2lkICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfc2V0X25lc3RlZCAgICAgIChpbnQpOworICAgIGV4dGVybiB2b2lkICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfc2V0X21heF9hY3RpdmVfbGV2ZWxzIChpbnQpOworICAgIGV4dGVybiB2b2lkICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfc2V0X3NjaGVkdWxlICAgICAgICAgIChvbXBfc2NoZWRfdCwgaW50KTsKKworICAgIC8qIHF1ZXJ5IEFQSSBmdW5jdGlvbnMgKi8KKyAgICBleHRlcm4gaW50ICAgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAgb21wX2dldF9udW1fdGhyZWFkcyAgKHZvaWQpOworICAgIGV4dGVybiBpbnQgICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfZ2V0X2R5bmFtaWMgICAgICAodm9pZCk7CisgICAgZXh0ZXJuIGludCAgICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIG9tcF9nZXRfbmVzdGVkICAgICAgICh2b2lkKTsKKyAgICBleHRlcm4gaW50ICAgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAgb21wX2dldF9tYXhfdGhyZWFkcyAgKHZvaWQpOworICAgIGV4dGVybiBpbnQgICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfZ2V0X3RocmVhZF9udW0gICAodm9pZCk7CisgICAgZXh0ZXJuIGludCAgICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIG9tcF9nZXRfbnVtX3Byb2NzICAgICh2b2lkKTsKKyAgICBleHRlcm4gaW50ICAgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAgb21wX2luX3BhcmFsbGVsICAgICAgKHZvaWQpOworICAgIGV4dGVybiBpbnQgICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfaW5fZmluYWwgICAgICAgICAodm9pZCk7CisgICAgZXh0ZXJuIGludCAgICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIG9tcF9nZXRfYWN0aXZlX2xldmVsICAgICAgICAodm9pZCk7CisgICAgZXh0ZXJuIGludCAgICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIG9tcF9nZXRfbGV2ZWwgICAgICAgICAgICAgICAodm9pZCk7CisgICAgZXh0ZXJuIGludCAgICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIG9tcF9nZXRfYW5jZXN0b3JfdGhyZWFkX251bSAoaW50KTsKKyAgICBleHRlcm4gaW50ICAgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAgb21wX2dldF90ZWFtX3NpemUgICAgICAgICAgIChpbnQpOworICAgIGV4dGVybiBpbnQgICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfZ2V0X3RocmVhZF9saW1pdCAgICAgICAgKHZvaWQpOworICAgIGV4dGVybiBpbnQgICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfZ2V0X21heF9hY3RpdmVfbGV2ZWxzICAgKHZvaWQpOworICAgIGV4dGVybiB2b2lkICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfZ2V0X3NjaGVkdWxlICAgICAgICAgICAgKG9tcF9zY2hlZF90ICosIGludCAqKTsKKyAgICBleHRlcm4gaW50ICAgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAgb21wX2dldF9tYXhfdGFza19wcmlvcml0eSAgICh2b2lkKTsKKworICAgIC8qIGxvY2sgQVBJIGZ1bmN0aW9ucyAqLworICAgIHR5cGVkZWYgc3RydWN0IG9tcF9sb2NrX3QgeworICAgICAgICB2b2lkICogX2xrOworICAgIH0gb21wX2xvY2tfdDsKKworICAgIGV4dGVybiB2b2lkICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfaW5pdF9sb2NrICAgIChvbXBfbG9ja190ICopOworICAgIGV4dGVybiB2b2lkICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfc2V0X2xvY2sgICAgIChvbXBfbG9ja190ICopOworICAgIGV4dGVybiB2b2lkICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfdW5zZXRfbG9jayAgIChvbXBfbG9ja190ICopOworICAgIGV4dGVybiB2b2lkICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfZGVzdHJveV9sb2NrIChvbXBfbG9ja190ICopOworICAgIGV4dGVybiBpbnQgICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfdGVzdF9sb2NrICAgIChvbXBfbG9ja190ICopOworCisgICAgLyogbmVzdGVkIGxvY2sgQVBJIGZ1bmN0aW9ucyAqLworICAgIHR5cGVkZWYgc3RydWN0IG9tcF9uZXN0X2xvY2tfdCB7CisgICAgICAgIHZvaWQgKiBfbGs7CisgICAgfSBvbXBfbmVzdF9sb2NrX3Q7CisKKyAgICBleHRlcm4gdm9pZCAgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAgb21wX2luaXRfbmVzdF9sb2NrICAgIChvbXBfbmVzdF9sb2NrX3QgKik7CisgICAgZXh0ZXJuIHZvaWQgICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIG9tcF9zZXRfbmVzdF9sb2NrICAgICAob21wX25lc3RfbG9ja190ICopOworICAgIGV4dGVybiB2b2lkICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfdW5zZXRfbmVzdF9sb2NrICAgKG9tcF9uZXN0X2xvY2tfdCAqKTsKKyAgICBleHRlcm4gdm9pZCAgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAgb21wX2Rlc3Ryb3lfbmVzdF9sb2NrIChvbXBfbmVzdF9sb2NrX3QgKik7CisgICAgZXh0ZXJuIGludCAgICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIG9tcF90ZXN0X25lc3RfbG9jayAgICAob21wX25lc3RfbG9ja190ICopOworCisgICAgLyogbG9jayBoaW50IHR5cGUgZm9yIGR5bmFtaWMgdXNlciBsb2NrICovCisgICAgdHlwZWRlZiBlbnVtIG9tcF9sb2NrX2hpbnRfdCB7CisgICAgICAgIG9tcF9sb2NrX2hpbnRfbm9uZSAgICAgICAgICAgPSAwLAorICAgICAgICBvbXBfbG9ja19oaW50X3VuY29udGVuZGVkICAgID0gMSwKKyAgICAgICAgb21wX2xvY2tfaGludF9jb250ZW5kZWQgICAgICA9ICgxPDwxICksCisgICAgICAgIG9tcF9sb2NrX2hpbnRfbm9uc3BlY3VsYXRpdmUgPSAoMTw8MiApLAorICAgICAgICBvbXBfbG9ja19oaW50X3NwZWN1bGF0aXZlICAgID0gKDE8PDMgKSwKKyAgICAgICAga21wX2xvY2tfaGludF9obGUgICAgICAgICAgICA9ICgxPDwxNiksCisgICAgICAgIGttcF9sb2NrX2hpbnRfcnRtICAgICAgICAgICAgPSAoMTw8MTcpLAorICAgICAgICBrbXBfbG9ja19oaW50X2FkYXB0aXZlICAgICAgID0gKDE8PDE4KQorICAgIH0gb21wX2xvY2tfaGludF90OworCisgICAgLyogaGludGVkIGxvY2sgaW5pdGlhbGl6ZXJzICovCisgICAgZXh0ZXJuIHZvaWQgX19LQUlfS01QQ19DT05WRU5USU9OIG9tcF9pbml0X2xvY2tfd2l0aF9oaW50KG9tcF9sb2NrX3QgKiwgb21wX2xvY2tfaGludF90KTsKKyAgICBleHRlcm4gdm9pZCBfX0tBSV9LTVBDX0NPTlZFTlRJT04gb21wX2luaXRfbmVzdF9sb2NrX3dpdGhfaGludChvbXBfbmVzdF9sb2NrX3QgKiwgb21wX2xvY2tfaGludF90KTsKKworICAgIC8qIHRpbWUgQVBJIGZ1bmN0aW9ucyAqLworICAgIGV4dGVybiBkb3VibGUgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfZ2V0X3d0aW1lICh2b2lkKTsKKyAgICBleHRlcm4gZG91YmxlIF9fS0FJX0tNUENfQ09OVkVOVElPTiAgb21wX2dldF93dGljayAodm9pZCk7CisKKyAgICAvKiBPcGVuTVAgNC4wICovCisgICAgZXh0ZXJuIGludCAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfZ2V0X2RlZmF1bHRfZGV2aWNlICh2b2lkKTsKKyAgICBleHRlcm4gdm9pZCBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIG9tcF9zZXRfZGVmYXVsdF9kZXZpY2UgKGludCk7CisgICAgZXh0ZXJuIGludCAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfaXNfaW5pdGlhbF9kZXZpY2UgKHZvaWQpOworICAgIGV4dGVybiBpbnQgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAgb21wX2dldF9udW1fZGV2aWNlcyAodm9pZCk7CisgICAgZXh0ZXJuIGludCAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfZ2V0X251bV90ZWFtcyAodm9pZCk7CisgICAgZXh0ZXJuIGludCAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfZ2V0X3RlYW1fbnVtICh2b2lkKTsKKyAgICBleHRlcm4gaW50ICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIG9tcF9nZXRfY2FuY2VsbGF0aW9uICh2b2lkKTsKKworIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPgorICAgIC8qIE9wZW5NUCA0LjUgKi8KKyAgICBleHRlcm4gaW50ICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfZ2V0X2luaXRpYWxfZGV2aWNlICh2b2lkKTsKKyAgICBleHRlcm4gdm9pZCogX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfdGFyZ2V0X2FsbG9jKHNpemVfdCwgaW50KTsKKyAgICBleHRlcm4gdm9pZCAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfdGFyZ2V0X2ZyZWUodm9pZCAqLCBpbnQpOworICAgIGV4dGVybiBpbnQgICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIG9tcF90YXJnZXRfaXNfcHJlc2VudCh2b2lkICosIGludCk7CisgICAgZXh0ZXJuIGludCAgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAgb21wX3RhcmdldF9tZW1jcHkodm9pZCAqLCB2b2lkICosIHNpemVfdCwgc2l6ZV90LCBzaXplX3QsIGludCwgaW50KTsKKyAgICBleHRlcm4gaW50ICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfdGFyZ2V0X21lbWNweV9yZWN0KHZvaWQgKiwgdm9pZCAqLCBzaXplX3QsIGludCwgY29uc3Qgc2l6ZV90ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCAqLCBjb25zdCBzaXplX3QgKiwgY29uc3Qgc2l6ZV90ICosIGNvbnN0IHNpemVfdCAqLCBpbnQsIGludCk7CisgICAgZXh0ZXJuIGludCAgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAgb21wX3RhcmdldF9hc3NvY2lhdGVfcHRyKHZvaWQgKiwgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgaW50KTsKKyAgICBleHRlcm4gaW50ICAgX19LQUlfS01QQ19DT05WRU5USU9OICBvbXBfdGFyZ2V0X2Rpc2Fzc29jaWF0ZV9wdHIodm9pZCAqLCBpbnQpOworCisgICAgLyoga21wIEFQSSBmdW5jdGlvbnMgKi8KKyAgICBleHRlcm4gaW50ICAgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAga21wX2dldF9zdGFja3NpemUgICAgICAgICAgKHZvaWQpOworICAgIGV4dGVybiB2b2lkICAgX19LQUlfS01QQ19DT05WRU5USU9OICBrbXBfc2V0X3N0YWNrc2l6ZSAgICAgICAgICAoaW50KTsKKyAgICBleHRlcm4gc2l6ZV90IF9fS0FJX0tNUENfQ09OVkVOVElPTiAga21wX2dldF9zdGFja3NpemVfcyAgICAgICAgKHZvaWQpOworICAgIGV4dGVybiB2b2lkICAgX19LQUlfS01QQ19DT05WRU5USU9OICBrbXBfc2V0X3N0YWNrc2l6ZV9zICAgICAgICAoc2l6ZV90KTsKKyAgICBleHRlcm4gaW50ICAgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAga21wX2dldF9ibG9ja3RpbWUgICAgICAgICAgKHZvaWQpOworICAgIGV4dGVybiBpbnQgICAgX19LQUlfS01QQ19DT05WRU5USU9OICBrbXBfZ2V0X2xpYnJhcnkgICAgICAgICAgICAodm9pZCk7CisgICAgZXh0ZXJuIHZvaWQgICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIGttcF9zZXRfYmxvY2t0aW1lICAgICAgICAgIChpbnQpOworICAgIGV4dGVybiB2b2lkICAgX19LQUlfS01QQ19DT05WRU5USU9OICBrbXBfc2V0X2xpYnJhcnkgICAgICAgICAgICAoaW50KTsKKyAgICBleHRlcm4gdm9pZCAgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAga21wX3NldF9saWJyYXJ5X3NlcmlhbCAgICAgKHZvaWQpOworICAgIGV4dGVybiB2b2lkICAgX19LQUlfS01QQ19DT05WRU5USU9OICBrbXBfc2V0X2xpYnJhcnlfdHVybmFyb3VuZCAodm9pZCk7CisgICAgZXh0ZXJuIHZvaWQgICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIGttcF9zZXRfbGlicmFyeV90aHJvdWdocHV0ICh2b2lkKTsKKyAgICBleHRlcm4gdm9pZCAgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAga21wX3NldF9kZWZhdWx0cyAgICAgICAgICAgKGNoYXIgY29uc3QgKik7CisgICAgZXh0ZXJuIHZvaWQgICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIGttcF9zZXRfZGlzcF9udW1fYnVmZmVycyAgIChpbnQpOworCisgICAgLyogSW50ZWwgYWZmaW5pdHkgQVBJICovCisgICAgdHlwZWRlZiB2b2lkICoga21wX2FmZmluaXR5X21hc2tfdDsKKworICAgIGV4dGVybiBpbnQgICAgX19LQUlfS01QQ19DT05WRU5USU9OICBrbXBfc2V0X2FmZmluaXR5ICAgICAgICAgICAgIChrbXBfYWZmaW5pdHlfbWFza190ICopOworICAgIGV4dGVybiBpbnQgICAgX19LQUlfS01QQ19DT05WRU5USU9OICBrbXBfZ2V0X2FmZmluaXR5ICAgICAgICAgICAgIChrbXBfYWZmaW5pdHlfbWFza190ICopOworICAgIGV4dGVybiBpbnQgICAgX19LQUlfS01QQ19DT05WRU5USU9OICBrbXBfZ2V0X2FmZmluaXR5X21heF9wcm9jICAgICh2b2lkKTsKKyAgICBleHRlcm4gdm9pZCAgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAga21wX2NyZWF0ZV9hZmZpbml0eV9tYXNrICAgICAoa21wX2FmZmluaXR5X21hc2tfdCAqKTsKKyAgICBleHRlcm4gdm9pZCAgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAga21wX2Rlc3Ryb3lfYWZmaW5pdHlfbWFzayAgICAoa21wX2FmZmluaXR5X21hc2tfdCAqKTsKKyAgICBleHRlcm4gaW50ICAgIF9fS0FJX0tNUENfQ09OVkVOVElPTiAga21wX3NldF9hZmZpbml0eV9tYXNrX3Byb2MgICAoaW50LCBrbXBfYWZmaW5pdHlfbWFza190ICopOworICAgIGV4dGVybiBpbnQgICAgX19LQUlfS01QQ19DT05WRU5USU9OICBrbXBfdW5zZXRfYWZmaW5pdHlfbWFza19wcm9jIChpbnQsIGttcF9hZmZpbml0eV9tYXNrX3QgKik7CisgICAgZXh0ZXJuIGludCAgICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIGttcF9nZXRfYWZmaW5pdHlfbWFza19wcm9jICAgKGludCwga21wX2FmZmluaXR5X21hc2tfdCAqKTsKKworICAgIC8qIE9wZW5NUCA0LjAgYWZmaW5pdHkgQVBJICovCisgICAgdHlwZWRlZiBlbnVtIG9tcF9wcm9jX2JpbmRfdCB7CisgICAgICAgIG9tcF9wcm9jX2JpbmRfZmFsc2UgPSAwLAorICAgICAgICBvbXBfcHJvY19iaW5kX3RydWUgPSAxLAorICAgICAgICBvbXBfcHJvY19iaW5kX21hc3RlciA9IDIsCisgICAgICAgIG9tcF9wcm9jX2JpbmRfY2xvc2UgPSAzLAorICAgICAgICBvbXBfcHJvY19iaW5kX3NwcmVhZCA9IDQKKyAgICB9IG9tcF9wcm9jX2JpbmRfdDsKKworICAgIGV4dGVybiBvbXBfcHJvY19iaW5kX3QgX19LQUlfS01QQ19DT05WRU5USU9OIG9tcF9nZXRfcHJvY19iaW5kICh2b2lkKTsKKworICAgIC8qIE9wZW5NUCA0LjUgYWZmaW5pdHkgQVBJICovCisgICAgZXh0ZXJuIGludCAgX19LQUlfS01QQ19DT05WRU5USU9OIG9tcF9nZXRfbnVtX3BsYWNlcyAodm9pZCk7CisgICAgZXh0ZXJuIGludCAgX19LQUlfS01QQ19DT05WRU5USU9OIG9tcF9nZXRfcGxhY2VfbnVtX3Byb2NzIChpbnQpOworICAgIGV4dGVybiB2b2lkIF9fS0FJX0tNUENfQ09OVkVOVElPTiBvbXBfZ2V0X3BsYWNlX3Byb2NfaWRzIChpbnQsIGludCAqKTsKKyAgICBleHRlcm4gaW50ICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gb21wX2dldF9wbGFjZV9udW0gKHZvaWQpOworICAgIGV4dGVybiBpbnQgIF9fS0FJX0tNUENfQ09OVkVOVElPTiBvbXBfZ2V0X3BhcnRpdGlvbl9udW1fcGxhY2VzICh2b2lkKTsKKyAgICBleHRlcm4gdm9pZCBfX0tBSV9LTVBDX0NPTlZFTlRJT04gb21wX2dldF9wYXJ0aXRpb25fcGxhY2VfbnVtcyAoaW50ICopOworCisgICAgZXh0ZXJuIHZvaWQgKiBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIGttcF9tYWxsb2MgIChzaXplX3QpOworICAgIGV4dGVybiB2b2lkICogX19LQUlfS01QQ19DT05WRU5USU9OICBrbXBfYWxpZ25lZF9tYWxsb2MgIChzaXplX3QsIHNpemVfdCk7CisgICAgZXh0ZXJuIHZvaWQgKiBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIGttcF9jYWxsb2MgIChzaXplX3QsIHNpemVfdCk7CisgICAgZXh0ZXJuIHZvaWQgKiBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIGttcF9yZWFsbG9jICh2b2lkICosIHNpemVfdCk7CisgICAgZXh0ZXJuIHZvaWQgICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIGttcF9mcmVlICAgICh2b2lkICopOworCisgICAgZXh0ZXJuIHZvaWQgICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIGttcF9zZXRfd2FybmluZ3Nfb24odm9pZCk7CisgICAgZXh0ZXJuIHZvaWQgICBfX0tBSV9LTVBDX0NPTlZFTlRJT04gIGttcF9zZXRfd2FybmluZ3Nfb2ZmKHZvaWQpOworCisjICAgdW5kZWYgX19LQUlfS01QQ19DT05WRU5USU9OCisKKyAgICAvKiBXYXJuaW5nOgorICAgICAgIFRoZSBmb2xsb3dpbmcgdHlwZWRlZnMgYXJlIG5vdCBzdGFuZGFyZCwgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuCisgICAgKi8KKyAgICB0eXBlZGVmIGludCAgICAgb21wX2ludF90OworICAgIHR5cGVkZWYgZG91YmxlICBvbXBfd3RpbWVfdDsKKworIyAgIGlmZGVmIF9fY3BsdXNwbHVzCisgICAgfQorIyAgIGVuZGlmCisKKyNlbmRpZiAvKiBfX09NUF9IICovCisKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvb3BlbmNsLWMuaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvb3BlbmNsLWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDRlY2EzCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9vcGVuY2wtYy5oCkBAIC0wLDAgKzEsMTcwNTEgQEAKKy8vPT09LS0tIG9wZW5jbC1jLmggLSBPcGVuQ0wgQyBsYW5ndWFnZSBidWlsdGluIGZ1bmN0aW9uIGhlYWRlciAtLS0tLS0tLS0tLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisKKyNpZm5kZWYgX09QRU5DTF9IXworI2RlZmluZSBfT1BFTkNMX0hfCisKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorI2lmbmRlZiBjbF9raHJfZGVwdGhfaW1hZ2VzCisjZGVmaW5lIGNsX2tocl9kZXB0aF9pbWFnZXMKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKyNkZWZpbmUgX19vdmxkIF9fYXR0cmlidXRlX18oKG92ZXJsb2FkYWJsZSkpCisjZGVmaW5lIF9fY29udiBfX2F0dHJpYnV0ZV9fKChjb252ZXJnZW50KSkKKworLy8gT3B0aW1pemF0aW9ucworI2RlZmluZSBfX3B1cmVmbiBfX2F0dHJpYnV0ZV9fKChwdXJlKSkKKyNkZWZpbmUgX19jbmZuIF9fYXR0cmlidXRlX18oKGNvbnN0KSkKKworLy8gYnVpbHQtaW4gc2NhbGFyIGRhdGEgdHlwZXM6CisKKy8qKgorICogQW4gdW5zaWduZWQgOC1iaXQgaW50ZWdlci4KKyAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjaGFyOworCisvKioKKyAqIEFuIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyLgorICovCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydDsKKworLyoqCisgKiBBbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlci4KKyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKKworLyoqCisgKiBBbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlci4KKyAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25nOworCisvKioKKyAqIFRoZSB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgb2YgdGhlIHJlc3VsdCBvZiB0aGUgc2l6ZW9mIG9wZXJhdG9yLiBUaGlzCisgKiBpcyBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGlmIENMX0RFVklDRV9BRERSRVNTX0JJVFMKKyAqIGRlZmluZWQgaW4gdGFibGUgNC4zIGlzIDMyLWJpdHMgYW5kIGlzIGEgNjQtYml0IHVuc2lnbmVkIGludGVnZXIgaWYKKyAqIENMX0RFVklDRV9BRERSRVNTX0JJVFMgaXMgNjQtYml0cy4KKyAqLwordHlwZWRlZiBfX1NJWkVfVFlQRV9fIHNpemVfdDsKKworLyoqCisgKiBBIHNpZ25lZCBpbnRlZ2VyIHR5cGUgdGhhdCBpcyB0aGUgcmVzdWx0IG9mIHN1YnRyYWN0aW5nIHR3byBwb2ludGVycy4KKyAqIFRoaXMgaXMgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgaWYgQ0xfREVWSUNFX0FERFJFU1NfQklUUworICogZGVmaW5lZCBpbiB0YWJsZSA0LjMgaXMgMzItYml0cyBhbmQgaXMgYSA2NC1iaXQgc2lnbmVkIGludGVnZXIgaWYKKyAqIENMX0RFVklDRV9BRERSRVNTX0JJVFMgaXMgNjQtYml0cy4KKyAqLwordHlwZWRlZiBfX1BUUkRJRkZfVFlQRV9fIHB0cmRpZmZfdDsKKworLyoqCisqIEEgc2lnbmVkIGludGVnZXIgdHlwZSB3aXRoIHRoZSBwcm9wZXJ0eSB0aGF0IGFueSB2YWxpZCBwb2ludGVyIHRvCisqIHZvaWQgY2FuIGJlIGNvbnZlcnRlZCB0byB0aGlzIHR5cGUsIHRoZW4gY29udmVydGVkIGJhY2sgdG8gcG9pbnRlcgorKiB0byB2b2lkLCBhbmQgdGhlIHJlc3VsdCB3aWxsIGNvbXBhcmUgZXF1YWwgdG8gdGhlIG9yaWdpbmFsIHBvaW50ZXIuCisqLwordHlwZWRlZiBfX0lOVFBUUl9UWVBFX18gaW50cHRyX3Q7CisKKy8qKgorKiBBbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgd2l0aCB0aGUgcHJvcGVydHkgdGhhdCBhbnkgdmFsaWQgcG9pbnRlciB0bworKiB2b2lkIGNhbiBiZSBjb252ZXJ0ZWQgdG8gdGhpcyB0eXBlLCB0aGVuIGNvbnZlcnRlZCBiYWNrIHRvIHBvaW50ZXIKKyogdG8gdm9pZCwgYW5kIHRoZSByZXN1bHQgd2lsbCBjb21wYXJlIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCBwb2ludGVyLgorKi8KK3R5cGVkZWYgX19VSU5UUFRSX1RZUEVfXyB1aW50cHRyX3Q7CisKKy8vIGJ1aWx0LWluIHZlY3RvciBkYXRhIHR5cGVzOgordHlwZWRlZiBjaGFyIGNoYXIyIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgyKSkpOwordHlwZWRlZiBjaGFyIGNoYXIzIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgzKSkpOwordHlwZWRlZiBjaGFyIGNoYXI0IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg0KSkpOwordHlwZWRlZiBjaGFyIGNoYXI4IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg4KSkpOwordHlwZWRlZiBjaGFyIGNoYXIxNiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMTYpKSk7Cit0eXBlZGVmIHVjaGFyIHVjaGFyMiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMikpKTsKK3R5cGVkZWYgdWNoYXIgdWNoYXIzIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgzKSkpOwordHlwZWRlZiB1Y2hhciB1Y2hhcjQgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDQpKSk7Cit0eXBlZGVmIHVjaGFyIHVjaGFyOCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoOCkpKTsKK3R5cGVkZWYgdWNoYXIgdWNoYXIxNiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMTYpKSk7Cit0eXBlZGVmIHNob3J0IHNob3J0MiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMikpKTsKK3R5cGVkZWYgc2hvcnQgc2hvcnQzIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgzKSkpOwordHlwZWRlZiBzaG9ydCBzaG9ydDQgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDQpKSk7Cit0eXBlZGVmIHNob3J0IHNob3J0OCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoOCkpKTsKK3R5cGVkZWYgc2hvcnQgc2hvcnQxNiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMTYpKSk7Cit0eXBlZGVmIHVzaG9ydCB1c2hvcnQyIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgyKSkpOwordHlwZWRlZiB1c2hvcnQgdXNob3J0MyBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMykpKTsKK3R5cGVkZWYgdXNob3J0IHVzaG9ydDQgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDQpKSk7Cit0eXBlZGVmIHVzaG9ydCB1c2hvcnQ4IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg4KSkpOwordHlwZWRlZiB1c2hvcnQgdXNob3J0MTYgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDE2KSkpOwordHlwZWRlZiBpbnQgaW50MiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMikpKTsKK3R5cGVkZWYgaW50IGludDMgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDMpKSk7Cit0eXBlZGVmIGludCBpbnQ0IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg0KSkpOwordHlwZWRlZiBpbnQgaW50OCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoOCkpKTsKK3R5cGVkZWYgaW50IGludDE2IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgxNikpKTsKK3R5cGVkZWYgdWludCB1aW50MiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMikpKTsKK3R5cGVkZWYgdWludCB1aW50MyBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMykpKTsKK3R5cGVkZWYgdWludCB1aW50NCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoNCkpKTsKK3R5cGVkZWYgdWludCB1aW50OCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoOCkpKTsKK3R5cGVkZWYgdWludCB1aW50MTYgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDE2KSkpOwordHlwZWRlZiBsb25nIGxvbmcyIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgyKSkpOwordHlwZWRlZiBsb25nIGxvbmczIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgzKSkpOwordHlwZWRlZiBsb25nIGxvbmc0IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg0KSkpOwordHlwZWRlZiBsb25nIGxvbmc4IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg4KSkpOwordHlwZWRlZiBsb25nIGxvbmcxNiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMTYpKSk7Cit0eXBlZGVmIHVsb25nIHVsb25nMiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMikpKTsKK3R5cGVkZWYgdWxvbmcgdWxvbmczIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgzKSkpOwordHlwZWRlZiB1bG9uZyB1bG9uZzQgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDQpKSk7Cit0eXBlZGVmIHVsb25nIHVsb25nOCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoOCkpKTsKK3R5cGVkZWYgdWxvbmcgdWxvbmcxNiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMTYpKSk7Cit0eXBlZGVmIGZsb2F0IGZsb2F0MiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMikpKTsKK3R5cGVkZWYgZmxvYXQgZmxvYXQzIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgzKSkpOwordHlwZWRlZiBmbG9hdCBmbG9hdDQgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDQpKSk7Cit0eXBlZGVmIGZsb2F0IGZsb2F0OCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoOCkpKTsKK3R5cGVkZWYgZmxvYXQgZmxvYXQxNiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMTYpKSk7CisjaWZkZWYgY2xfa2hyX2ZwMTYKKyNwcmFnbWEgT1BFTkNMIEVYVEVOU0lPTiBjbF9raHJfZnAxNiA6IGVuYWJsZQordHlwZWRlZiBoYWxmIGhhbGYyIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgyKSkpOwordHlwZWRlZiBoYWxmIGhhbGYzIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgzKSkpOwordHlwZWRlZiBoYWxmIGhhbGY0IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg0KSkpOwordHlwZWRlZiBoYWxmIGhhbGY4IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg4KSkpOwordHlwZWRlZiBoYWxmIGhhbGYxNiBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMTYpKSk7CisjZW5kaWYKKyNpZmRlZiBjbF9raHJfZnA2NAorI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fIDwgQ0xfVkVSU0lPTl8xXzIKKyNwcmFnbWEgT1BFTkNMIEVYVEVOU0lPTiBjbF9raHJfZnA2NCA6IGVuYWJsZQorI2VuZGlmCit0eXBlZGVmIGRvdWJsZSBkb3VibGUyIF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSgyKSkpOwordHlwZWRlZiBkb3VibGUgZG91YmxlMyBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoMykpKTsKK3R5cGVkZWYgZG91YmxlIGRvdWJsZTQgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDQpKSk7Cit0eXBlZGVmIGRvdWJsZSBkb3VibGU4IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg4KSkpOwordHlwZWRlZiBkb3VibGUgZG91YmxlMTYgX19hdHRyaWJ1dGVfXygoZXh0X3ZlY3Rvcl90eXBlKDE2KSkpOworI2VuZGlmCisKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorI2RlZmluZSBOVUxMICgodm9pZCopMCkKKyNlbmRpZgorCisvKioKKyAqIFZhbHVlIG9mIG1heGltdW0gbm9uLWluZmluaXRlIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQKKyAqIG51bWJlci4KKyAqLworI2RlZmluZSBNQVhGTE9BVCAweDEuZmZmZmZlcDEyN2YKKworLyoqCisgKiBBIHBvc2l0aXZlIGZsb2F0IGNvbnN0YW50IGV4cHJlc3Npb24uIEhVR0VfVkFMRiBldmFsdWF0ZXMKKyAqIHRvICtpbmZpbml0eS4gVXNlZCBhcyBhbiBlcnJvciB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYnVpbHQtaW4KKyAqIG1hdGggZnVuY3Rpb25zLgorICovCisjZGVmaW5lIEhVR0VfVkFMRiAoX19idWlsdGluX2h1Z2VfdmFsZigpKQorCisvKioKKyAqIEEgcG9zaXRpdmUgZG91YmxlIGNvbnN0YW50IGV4cHJlc3Npb24uIEhVR0VfVkFMIGV2YWx1YXRlcworICogdG8gK2luZmluaXR5LiBVc2VkIGFzIGFuIGVycm9yIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBidWlsdC1pbgorICogbWF0aCBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgSFVHRV9WQUwgKF9fYnVpbHRpbl9odWdlX3ZhbCgpKQorCisvKioKKyAqIEEgY29uc3RhbnQgZXhwcmVzc2lvbiBvZiB0eXBlIGZsb2F0IHJlcHJlc2VudGluZyBwb3NpdGl2ZSBvcgorICogdW5zaWduZWQgaW5maW5pdHkuCisgKi8KKyNkZWZpbmUgSU5GSU5JVFkgKF9fYnVpbHRpbl9pbmZmKCkpCisKKy8qKgorICogQSBjb25zdGFudCBleHByZXNzaW9uIG9mIHR5cGUgZmxvYXQgcmVwcmVzZW50aW5nIGEgcXVpZXQgTmFOLgorICovCisjZGVmaW5lIE5BTiBhc19mbG9hdChJTlRfTUFYKQorCisjZGVmaW5lIEZQX0lMT0dCMCAgICBJTlRfTUlOCisjZGVmaW5lIEZQX0lMT0dCTkFOICAgIElOVF9NQVgKKworI2RlZmluZSBGTFRfRElHIDYKKyNkZWZpbmUgRkxUX01BTlRfRElHIDI0CisjZGVmaW5lIEZMVF9NQVhfMTBfRVhQICszOAorI2RlZmluZSBGTFRfTUFYX0VYUCArMTI4CisjZGVmaW5lIEZMVF9NSU5fMTBfRVhQIC0zNworI2RlZmluZSBGTFRfTUlOX0VYUCAtMTI1CisjZGVmaW5lIEZMVF9SQURJWCAyCisjZGVmaW5lIEZMVF9NQVggMHgxLmZmZmZmZXAxMjdmCisjZGVmaW5lIEZMVF9NSU4gMHgxLjBwLTEyNmYKKyNkZWZpbmUgRkxUX0VQU0lMT04gMHgxLjBwLTIzZgorCisjZGVmaW5lIE1fRV9GICAgICAgICAgMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjI1MGYKKyNkZWZpbmUgTV9MT0cyRV9GICAgICAxLjQ0MjY5NTA0MDg4ODk2MzQwNzM1OTkyNDY4MTAwMTg5MjE0ZgorI2RlZmluZSBNX0xPRzEwRV9GICAgIDAuNDM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MDgyZgorI2RlZmluZSBNX0xOMl9GICAgICAgIDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4ZgorI2RlZmluZSBNX0xOMTBfRiAgICAgIDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjFmCisjZGVmaW5lIE1fUElfRiAgICAgICAgMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1MDI4OGYKKyNkZWZpbmUgTV9QSV8yX0YgICAgICAxLjU3MDc5NjMyNjc5NDg5NjYxOTIzMTMyMTY5MTYzOTc1MTQ0ZgorI2RlZmluZSBNX1BJXzRfRiAgICAgIDAuNzg1Mzk4MTYzMzk3NDQ4MzA5NjE1NjYwODQ1ODE5ODc1NzIxZgorI2RlZmluZSBNXzFfUElfRiAgICAgIDAuMzE4MzA5ODg2MTgzNzkwNjcxNTM3NzY3NTI2NzQ1MDI4NzI0ZgorI2RlZmluZSBNXzJfUElfRiAgICAgIDAuNjM2NjE5NzcyMzY3NTgxMzQzMDc1NTM1MDUzNDkwMDU3NDQ4ZgorI2RlZmluZSBNXzJfU1FSVFBJX0YgIDEuMTI4Mzc5MTY3MDk1NTEyNTczODk2MTU4OTAzMTIxNTQ1MTdmCisjZGVmaW5lIE1fU1FSVDJfRiAgICAgMS40MTQyMTM1NjIzNzMwOTUwNDg4MDE2ODg3MjQyMDk2OTgwOGYKKyNkZWZpbmUgTV9TUVJUMV8yX0YgICAwLjcwNzEwNjc4MTE4NjU0NzUyNDQwMDg0NDM2MjEwNDg0OTAzOWYKKworI2RlZmluZSBEQkxfRElHIDE1CisjZGVmaW5lIERCTF9NQU5UX0RJRyA1MworI2RlZmluZSBEQkxfTUFYXzEwX0VYUCArMzA4CisjZGVmaW5lIERCTF9NQVhfRVhQICsxMDI0CisjZGVmaW5lIERCTF9NSU5fMTBfRVhQIC0zMDcKKyNkZWZpbmUgREJMX01JTl9FWFAgLTEwMjEKKyNkZWZpbmUgREJMX1JBRElYIDIKKyNkZWZpbmUgREJMX01BWCAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisjZGVmaW5lIERCTF9NSU4gMHgxLjBwLTEwMjIKKyNkZWZpbmUgREJMX0VQU0lMT04gMHgxLjBwLTUyCisKKyNkZWZpbmUgTV9FICAgICAgICAgICAweDEuNWJmMGE4YjE0NTc2OXArMQorI2RlZmluZSBNX0xPRzJFICAgICAgIDB4MS43MTU0NzY1MmI4MmZlcCswCisjZGVmaW5lIE1fTE9HMTBFICAgICAgMHgxLmJjYjdiMTUyNmU1MGVwLTIKKyNkZWZpbmUgTV9MTjIgICAgICAgICAweDEuNjJlNDJmZWZhMzllZnAtMQorI2RlZmluZSBNX0xOMTAgICAgICAgIDB4MS4yNmJiMWJiYjU1NTE2cCsxCisjZGVmaW5lIE1fUEkgICAgICAgICAgMHgxLjkyMWZiNTQ0NDJkMThwKzEKKyNkZWZpbmUgTV9QSV8yICAgICAgICAweDEuOTIxZmI1NDQ0MmQxOHArMAorI2RlZmluZSBNX1BJXzQgICAgICAgIDB4MS45MjFmYjU0NDQyZDE4cC0xCisjZGVmaW5lIE1fMV9QSSAgICAgICAgMHgxLjQ1ZjMwNmRjOWM4ODNwLTIKKyNkZWZpbmUgTV8yX1BJICAgICAgICAweDEuNDVmMzA2ZGM5Yzg4M3AtMQorI2RlZmluZSBNXzJfU1FSVFBJICAgIDB4MS4yMGRkNzUwNDI5YjZkcCswCisjZGVmaW5lIE1fU1FSVDIgICAgICAgMHgxLjZhMDllNjY3ZjNiY2RwKzAKKyNkZWZpbmUgTV9TUVJUMV8yICAgICAweDEuNmEwOWU2NjdmM2JjZHAtMQorCisjaWZkZWYgY2xfa2hyX2ZwMTYKKworI2RlZmluZSBIQUxGX0RJRyAzCisjZGVmaW5lIEhBTEZfTUFOVF9ESUcgMTEKKyNkZWZpbmUgSEFMRl9NQVhfMTBfRVhQICs0CisjZGVmaW5lIEhBTEZfTUFYX0VYUCArMTYKKyNkZWZpbmUgSEFMRl9NSU5fMTBfRVhQIC00CisjZGVmaW5lIEhBTEZfTUlOX0VYUCAtMTMKKyNkZWZpbmUgSEFMRl9SQURJWCAyCisjZGVmaW5lIEhBTEZfTUFYICgoMHgxLmZmY3AxNWgpKQorI2RlZmluZSBIQUxGX01JTiAoKDB4MS4wcC0xNGgpKQorI2RlZmluZSBIQUxGX0VQU0lMT04gKCgweDEuMHAtMTBoKSkKKworI2RlZmluZSBNX0VfSCAgICAgICAgIDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYyNTBoCisjZGVmaW5lIE1fTE9HMkVfSCAgICAgMS40NDI2OTUwNDA4ODg5NjM0MDczNTk5MjQ2ODEwMDE4OTIxNGgKKyNkZWZpbmUgTV9MT0cxMEVfSCAgICAwLjQzNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNTA4MmgKKyNkZWZpbmUgTV9MTjJfSCAgICAgICAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2OGgKKyNkZWZpbmUgTV9MTjEwX0ggICAgICAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIxaAorI2RlZmluZSBNX1BJX0ggICAgICAgIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODhoCisjZGVmaW5lIE1fUElfMl9IICAgICAgMS41NzA3OTYzMjY3OTQ4OTY2MTkyMzEzMjE2OTE2Mzk3NTE0NGgKKyNkZWZpbmUgTV9QSV80X0ggICAgICAwLjc4NTM5ODE2MzM5NzQ0ODMwOTYxNTY2MDg0NTgxOTg3NTcyMWgKKyNkZWZpbmUgTV8xX1BJX0ggICAgICAwLjMxODMwOTg4NjE4Mzc5MDY3MTUzNzc2NzUyNjc0NTAyODcyNGgKKyNkZWZpbmUgTV8yX1BJX0ggICAgICAwLjYzNjYxOTc3MjM2NzU4MTM0MzA3NTUzNTA1MzQ5MDA1NzQ0OGgKKyNkZWZpbmUgTV8yX1NRUlRQSV9IICAxLjEyODM3OTE2NzA5NTUxMjU3Mzg5NjE1ODkwMzEyMTU0NTE3aAorI2RlZmluZSBNX1NRUlQyX0ggICAgIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODAxNjg4NzI0MjA5Njk4MDhoCisjZGVmaW5lIE1fU1FSVDFfMl9IICAgMC43MDcxMDY3ODExODY1NDc1MjQ0MDA4NDQzNjIxMDQ4NDkwMzloCisKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKyNkZWZpbmUgQ0hBUl9CSVQgICAgOAorI2RlZmluZSBTQ0hBUl9NQVggIDEyNworI2RlZmluZSBTQ0hBUl9NSU4gICgtMTI4KQorI2RlZmluZSBVQ0hBUl9NQVggIDI1NQorI2RlZmluZSBDSEFSX01BWCAgU0NIQVJfTUFYCisjZGVmaW5lIENIQVJfTUlOICBTQ0hBUl9NSU4KKyNkZWZpbmUgVVNIUlRfTUFYICA2NTUzNQorI2RlZmluZSBTSFJUX01BWCAgMzI3NjcKKyNkZWZpbmUgU0hSVF9NSU4gICgtMzI3NjgpCisjZGVmaW5lIFVJTlRfTUFYICAweGZmZmZmZmZmCisjZGVmaW5lIElOVF9NQVggICAgMjE0NzQ4MzY0NworI2RlZmluZSBJTlRfTUlOICAgICgtMjE0NzQ4MzY0Ny0xKQorI2RlZmluZSBVTE9OR19NQVggIDB4ZmZmZmZmZmZmZmZmZmZmZlVMCisjZGVmaW5lIExPTkdfTUFYICAweDdmZmZmZmZmZmZmZmZmZmZMCisjZGVmaW5lIExPTkdfTUlOICAoLTB4N2ZmZmZmZmZmZmZmZmZmZkwtMSkKKworLy8gT3BlbkNMIHYxLjEvMS4yLzIuMCBzNi4yLjMgLSBFeHBsaWNpdCBjb252ZXJzaW9ucworCitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0ZShjaGFyKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0ZShjaGFyKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnR6KGNoYXIpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnR6KGNoYXIpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydHAoY2hhcik7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHAoY2hhcik7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0bihjaGFyKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0bihjaGFyKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIoY2hhcik7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdChjaGFyKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRlKHVjaGFyKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0ZSh1Y2hhcik7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0eih1Y2hhcik7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHoodWNoYXIpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydHAodWNoYXIpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRwKHVjaGFyKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRuKHVjaGFyKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0bih1Y2hhcik7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyKHVjaGFyKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0KHVjaGFyKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRlKHNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0ZShzaG9ydCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0eihzaG9ydCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHooc2hvcnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydHAoc2hvcnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRwKHNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRuKHNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0bihzaG9ydCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyKHNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0KHNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRlKHVzaG9ydCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydGUodXNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnR6KHVzaG9ydCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHoodXNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRwKHVzaG9ydCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHAodXNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRuKHVzaG9ydCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydG4odXNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIodXNob3J0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0KHVzaG9ydCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0ZShpbnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRlKGludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0eihpbnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnR6KGludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0cChpbnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRwKGludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0bihpbnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRuKGludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyKGludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdChpbnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydGUodWludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydGUodWludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0eih1aW50KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0eih1aW50KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRwKHVpbnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRwKHVpbnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydG4odWludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydG4odWludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyKHVpbnQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXQodWludCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0ZShsb25nKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0ZShsb25nKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnR6KGxvbmcpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnR6KGxvbmcpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydHAobG9uZyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHAobG9uZyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0bihsb25nKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0bihsb25nKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIobG9uZyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdChsb25nKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRlKHVsb25nKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0ZSh1bG9uZyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0eih1bG9uZyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHoodWxvbmcpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydHAodWxvbmcpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRwKHVsb25nKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRuKHVsb25nKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0bih1bG9uZyk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyKHVsb25nKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0KHVsb25nKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRlKGZsb2F0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0ZShmbG9hdCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0eihmbG9hdCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydHooZmxvYXQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydHAoZmxvYXQpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRwKGZsb2F0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRuKGZsb2F0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0bihmbG9hdCk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyKGZsb2F0KTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0KGZsb2F0KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydGUoY2hhcik7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0ZShjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydHooY2hhcik7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0eihjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydHAoY2hhcik7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0cChjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydG4oY2hhcik7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0bihjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcihjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXQoY2hhcik7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRlKHVjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRlKHVjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydHoodWNoYXIpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydHoodWNoYXIpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0cCh1Y2hhcik7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0cCh1Y2hhcik7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRuKHVjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRuKHVjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcih1Y2hhcik7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0KHVjaGFyKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydGUoc2hvcnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydGUoc2hvcnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0eihzaG9ydCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0eihzaG9ydCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRwKHNob3J0KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRwKHNob3J0KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydG4oc2hvcnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydG4oc2hvcnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyKHNob3J0KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXQoc2hvcnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0ZSh1c2hvcnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydGUodXNob3J0KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydHoodXNob3J0KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnR6KHVzaG9ydCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRwKHVzaG9ydCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0cCh1c2hvcnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0bih1c2hvcnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydG4odXNob3J0KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcih1c2hvcnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdCh1c2hvcnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0ZShpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydGUoaW50KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydHooaW50KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnR6KGludCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRwKGludCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0cChpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0bihpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydG4oaW50KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcihpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdChpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0ZSh1aW50KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRlKHVpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0eih1aW50KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnR6KHVpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0cCh1aW50KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRwKHVpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0bih1aW50KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRuKHVpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyKHVpbnQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdCh1aW50KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydGUobG9uZyk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0ZShsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydHoobG9uZyk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0eihsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydHAobG9uZyk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0cChsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydG4obG9uZyk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0bihsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcihsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXQobG9uZyk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRlKHVsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRlKHVsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydHoodWxvbmcpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydHoodWxvbmcpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0cCh1bG9uZyk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0cCh1bG9uZyk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRuKHVsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRuKHVsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcih1bG9uZyk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0KHVsb25nKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydGUoZmxvYXQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydGUoZmxvYXQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0eihmbG9hdCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0eihmbG9hdCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRwKGZsb2F0KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRwKGZsb2F0KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydG4oZmxvYXQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydG4oZmxvYXQpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyKGZsb2F0KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXQoZmxvYXQpOworCitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRlKGNoYXIpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydGUoY2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnR6KGNoYXIpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydHooY2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRwKGNoYXIpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydHAoY2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRuKGNoYXIpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydG4oY2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQoY2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0KGNoYXIpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0ZSh1Y2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0ZSh1Y2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnR6KHVjaGFyKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnR6KHVjaGFyKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHAodWNoYXIpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydHAodWNoYXIpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0bih1Y2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0bih1Y2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQodWNoYXIpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdCh1Y2hhcik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRlKHNob3J0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRlKHNob3J0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHooc2hvcnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydHooc2hvcnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0cChzaG9ydCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0cChzaG9ydCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRuKHNob3J0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRuKHNob3J0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydChzaG9ydCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0KHNob3J0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydGUodXNob3J0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRlKHVzaG9ydCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnR6KHVzaG9ydCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0eih1c2hvcnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0cCh1c2hvcnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydHAodXNob3J0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydG4odXNob3J0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRuKHVzaG9ydCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQodXNob3J0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXQodXNob3J0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydGUoaW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRlKGludCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnR6KGludCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0eihpbnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0cChpbnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydHAoaW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydG4oaW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRuKGludCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQoaW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXQoaW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydGUodWludCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0ZSh1aW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHoodWludCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0eih1aW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHAodWludCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0cCh1aW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydG4odWludCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0bih1aW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydCh1aW50KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXQodWludCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRlKGxvbmcpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydGUobG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnR6KGxvbmcpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydHoobG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRwKGxvbmcpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydHAobG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRuKGxvbmcpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydG4obG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQobG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0KGxvbmcpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0ZSh1bG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0ZSh1bG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnR6KHVsb25nKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnR6KHVsb25nKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHAodWxvbmcpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydHAodWxvbmcpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0bih1bG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0bih1bG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQodWxvbmcpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdCh1bG9uZyk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRlKGZsb2F0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRlKGZsb2F0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHooZmxvYXQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydHooZmxvYXQpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0cChmbG9hdCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0cChmbG9hdCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRuKGZsb2F0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRuKGZsb2F0KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydChmbG9hdCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0KGZsb2F0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0ZShjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydGUoY2hhcik7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydHooY2hhcik7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnR6KGNoYXIpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRwKGNoYXIpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0cChjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0bihjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydG4oY2hhcik7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydChjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdChjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0ZSh1Y2hhcik7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRlKHVjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0eih1Y2hhcik7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnR6KHVjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0cCh1Y2hhcik7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRwKHVjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0bih1Y2hhcik7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRuKHVjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0KHVjaGFyKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdCh1Y2hhcik7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydGUoc2hvcnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0ZShzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydHooc2hvcnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0eihzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydHAoc2hvcnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0cChzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydG4oc2hvcnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0bihzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydChzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXQoc2hvcnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRlKHVzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRlKHVzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydHoodXNob3J0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydHoodXNob3J0KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0cCh1c2hvcnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0cCh1c2hvcnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRuKHVzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRuKHVzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydCh1c2hvcnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0KHVzaG9ydCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydGUoaW50KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydGUoaW50KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0eihpbnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0eihpbnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRwKGludCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRwKGludCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydG4oaW50KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydG4oaW50KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0KGludCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXQoaW50KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0ZSh1aW50KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydGUodWludCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydHoodWludCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnR6KHVpbnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRwKHVpbnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0cCh1aW50KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0bih1aW50KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydG4odWludCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydCh1aW50KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdCh1aW50KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0ZShsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydGUobG9uZyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydHoobG9uZyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnR6KGxvbmcpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRwKGxvbmcpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0cChsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0bihsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydG4obG9uZyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydChsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdChsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0ZSh1bG9uZyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRlKHVsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0eih1bG9uZyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnR6KHVsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0cCh1bG9uZyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRwKHVsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0bih1bG9uZyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRuKHVsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0KHVsb25nKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdCh1bG9uZyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydGUoZmxvYXQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0ZShmbG9hdCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydHooZmxvYXQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0eihmbG9hdCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydHAoZmxvYXQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0cChmbG9hdCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydG4oZmxvYXQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0bihmbG9hdCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydChmbG9hdCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXQoZmxvYXQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRlKGNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0ZShjaGFyKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0eihjaGFyKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHooY2hhcik7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydHAoY2hhcik7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRwKGNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRuKGNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0bihjaGFyKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50KGNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0KGNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRlKHVjaGFyKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydGUodWNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnR6KHVjaGFyKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHoodWNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRwKHVjaGFyKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHAodWNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRuKHVjaGFyKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydG4odWNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQodWNoYXIpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0KHVjaGFyKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0ZShzaG9ydCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRlKHNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0eihzaG9ydCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnR6KHNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0cChzaG9ydCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRwKHNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0bihzaG9ydCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRuKHNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50KHNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdChzaG9ydCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydGUodXNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydGUodXNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0eih1c2hvcnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0eih1c2hvcnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRwKHVzaG9ydCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRwKHVzaG9ydCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydG4odXNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydG4odXNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50KHVzaG9ydCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXQodXNob3J0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0ZShpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0ZShpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnR6KGludCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnR6KGludCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydHAoaW50KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHAoaW50KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0bihpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0bihpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQoaW50KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdChpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRlKHVpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0ZSh1aW50KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0eih1aW50KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHoodWludCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydHAodWludCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRwKHVpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRuKHVpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0bih1aW50KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50KHVpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0KHVpbnQpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRlKGxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0ZShsb25nKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0eihsb25nKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHoobG9uZyk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydHAobG9uZyk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRwKGxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRuKGxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0bihsb25nKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50KGxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0KGxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRlKHVsb25nKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydGUodWxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnR6KHVsb25nKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHoodWxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRwKHVsb25nKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHAodWxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRuKHVsb25nKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydG4odWxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQodWxvbmcpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0KHVsb25nKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0ZShmbG9hdCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRlKGZsb2F0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0eihmbG9hdCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnR6KGZsb2F0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0cChmbG9hdCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRwKGZsb2F0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0bihmbG9hdCk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRuKGZsb2F0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50KGZsb2F0KTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdChmbG9hdCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0ZShjaGFyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0ZShjaGFyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnR6KGNoYXIpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnR6KGNoYXIpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydHAoY2hhcik7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHAoY2hhcik7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0bihjaGFyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0bihjaGFyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQoY2hhcik7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdChjaGFyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRlKHVjaGFyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0ZSh1Y2hhcik7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0eih1Y2hhcik7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHoodWNoYXIpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydHAodWNoYXIpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRwKHVjaGFyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRuKHVjaGFyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0bih1Y2hhcik7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50KHVjaGFyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0KHVjaGFyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRlKHNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0ZShzaG9ydCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0eihzaG9ydCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHooc2hvcnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydHAoc2hvcnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRwKHNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRuKHNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0bihzaG9ydCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50KHNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0KHNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRlKHVzaG9ydCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydGUodXNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnR6KHVzaG9ydCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHoodXNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRwKHVzaG9ydCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHAodXNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRuKHVzaG9ydCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydG4odXNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQodXNob3J0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0KHVzaG9ydCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0ZShpbnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRlKGludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0eihpbnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnR6KGludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0cChpbnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRwKGludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0bihpbnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRuKGludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50KGludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdChpbnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydGUodWludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydGUodWludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0eih1aW50KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0eih1aW50KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRwKHVpbnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRwKHVpbnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydG4odWludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydG4odWludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50KHVpbnQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXQodWludCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0ZShsb25nKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0ZShsb25nKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnR6KGxvbmcpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnR6KGxvbmcpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydHAobG9uZyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHAobG9uZyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0bihsb25nKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0bihsb25nKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQobG9uZyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdChsb25nKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRlKHVsb25nKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0ZSh1bG9uZyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0eih1bG9uZyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHoodWxvbmcpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydHAodWxvbmcpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRwKHVsb25nKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRuKHVsb25nKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0bih1bG9uZyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50KHVsb25nKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0KHVsb25nKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRlKGZsb2F0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0ZShmbG9hdCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0eihmbG9hdCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHooZmxvYXQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydHAoZmxvYXQpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRwKGZsb2F0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRuKGZsb2F0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0bihmbG9hdCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50KGZsb2F0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0KGZsb2F0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRlKGNoYXIpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRlKGNoYXIpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydHooY2hhcik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydHooY2hhcik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0cChjaGFyKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0cChjaGFyKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRuKGNoYXIpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRuKGNoYXIpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZyhjaGFyKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0KGNoYXIpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydGUodWNoYXIpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRlKHVjaGFyKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnR6KHVjaGFyKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0eih1Y2hhcik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0cCh1Y2hhcik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydHAodWNoYXIpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydG4odWNoYXIpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRuKHVjaGFyKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcodWNoYXIpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXQodWNoYXIpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydGUoc2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRlKHNob3J0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnR6KHNob3J0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0eihzaG9ydCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0cChzaG9ydCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydHAoc2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydG4oc2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRuKHNob3J0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcoc2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXQoc2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydGUodXNob3J0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0ZSh1c2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydHoodXNob3J0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0eih1c2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydHAodXNob3J0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0cCh1c2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydG4odXNob3J0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0bih1c2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZyh1c2hvcnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXQodXNob3J0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRlKGludCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydGUoaW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnR6KGludCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydHooaW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRwKGludCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydHAoaW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRuKGludCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydG4oaW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcoaW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0KGludCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0ZSh1aW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0ZSh1aW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnR6KHVpbnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnR6KHVpbnQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydHAodWludCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydHAodWludCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0bih1aW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0bih1aW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcodWludCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdCh1aW50KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRlKGxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRlKGxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydHoobG9uZyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydHoobG9uZyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0cChsb25nKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0cChsb25nKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRuKGxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRuKGxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZyhsb25nKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0KGxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydGUodWxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRlKHVsb25nKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnR6KHVsb25nKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0eih1bG9uZyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0cCh1bG9uZyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydHAodWxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydG4odWxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRuKHVsb25nKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcodWxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXQodWxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydGUoZmxvYXQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRlKGZsb2F0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnR6KGZsb2F0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0eihmbG9hdCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0cChmbG9hdCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydHAoZmxvYXQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydG4oZmxvYXQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRuKGZsb2F0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcoZmxvYXQpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXQoZmxvYXQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0ZShjaGFyKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRlKGNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0eihjaGFyKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnR6KGNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0cChjaGFyKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRwKGNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0bihjaGFyKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRuKGNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nKGNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdChjaGFyKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydGUodWNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydGUodWNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0eih1Y2hhcik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0eih1Y2hhcik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRwKHVjaGFyKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRwKHVjaGFyKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydG4odWNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydG4odWNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nKHVjaGFyKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXQodWNoYXIpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0ZShzaG9ydCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0ZShzaG9ydCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnR6KHNob3J0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnR6KHNob3J0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydHAoc2hvcnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHAoc2hvcnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0bihzaG9ydCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0bihzaG9ydCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcoc2hvcnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdChzaG9ydCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRlKHVzaG9ydCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0ZSh1c2hvcnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0eih1c2hvcnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHoodXNob3J0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydHAodXNob3J0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRwKHVzaG9ydCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRuKHVzaG9ydCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0bih1c2hvcnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nKHVzaG9ydCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0KHVzaG9ydCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRlKGludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0ZShpbnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0eihpbnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHooaW50KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydHAoaW50KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRwKGludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRuKGludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0bihpbnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nKGludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0KGludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRlKHVpbnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydGUodWludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnR6KHVpbnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHoodWludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRwKHVpbnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHAodWludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRuKHVpbnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydG4odWludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcodWludCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0KHVpbnQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0ZShsb25nKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRlKGxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0eihsb25nKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnR6KGxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0cChsb25nKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRwKGxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0bihsb25nKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRuKGxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nKGxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdChsb25nKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydGUodWxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydGUodWxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0eih1bG9uZyk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0eih1bG9uZyk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRwKHVsb25nKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRwKHVsb25nKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydG4odWxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydG4odWxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nKHVsb25nKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXQodWxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0ZShmbG9hdCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0ZShmbG9hdCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnR6KGZsb2F0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnR6KGZsb2F0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydHAoZmxvYXQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHAoZmxvYXQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0bihmbG9hdCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0bihmbG9hdCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcoZmxvYXQpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdChmbG9hdCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRlKGNoYXIpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0eihjaGFyKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydHAoY2hhcik7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRuKGNoYXIpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0KGNoYXIpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0ZSh1Y2hhcik7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnR6KHVjaGFyKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydHAodWNoYXIpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0bih1Y2hhcik7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQodWNoYXIpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0ZShzaG9ydCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnR6KHNob3J0KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydHAoc2hvcnQpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0bihzaG9ydCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQoc2hvcnQpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0ZSh1c2hvcnQpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0eih1c2hvcnQpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0cCh1c2hvcnQpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0bih1c2hvcnQpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0KHVzaG9ydCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRlKGludCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnR6KGludCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRwKGludCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRuKGludCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQoaW50KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydGUodWludCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnR6KHVpbnQpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0cCh1aW50KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydG4odWludCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQodWludCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRlKGxvbmcpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0eihsb25nKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydHAobG9uZyk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRuKGxvbmcpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0KGxvbmcpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0ZSh1bG9uZyk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnR6KHVsb25nKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydHAodWxvbmcpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0bih1bG9uZyk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQodWxvbmcpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0ZShmbG9hdCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnR6KGZsb2F0KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydHAoZmxvYXQpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0bihmbG9hdCk7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQoZmxvYXQpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0ZShjaGFyMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0ZShjaGFyMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnR6KGNoYXIyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnR6KGNoYXIyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydHAoY2hhcjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHAoY2hhcjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0bihjaGFyMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0bihjaGFyMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjIoY2hhcjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdChjaGFyMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRlKHVjaGFyMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0ZSh1Y2hhcjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0eih1Y2hhcjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHoodWNoYXIyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydHAodWNoYXIyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRwKHVjaGFyMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRuKHVjaGFyMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0bih1Y2hhcjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyKHVjaGFyMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0KHVjaGFyMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRlKHNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0ZShzaG9ydDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0eihzaG9ydDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHooc2hvcnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydHAoc2hvcnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRwKHNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRuKHNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0bihzaG9ydDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyKHNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0KHNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRlKHVzaG9ydDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydGUodXNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnR6KHVzaG9ydDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHoodXNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRwKHVzaG9ydDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHAodXNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRuKHVzaG9ydDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydG4odXNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjIodXNob3J0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0KHVzaG9ydDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0ZShpbnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRlKGludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0eihpbnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnR6KGludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0cChpbnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRwKGludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0bihpbnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRuKGludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyKGludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdChpbnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydGUodWludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydGUodWludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0eih1aW50Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0eih1aW50Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRwKHVpbnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRwKHVpbnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydG4odWludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydG4odWludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyKHVpbnQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXQodWludDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0ZShsb25nMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0ZShsb25nMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnR6KGxvbmcyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnR6KGxvbmcyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydHAobG9uZzIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHAobG9uZzIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0bihsb25nMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0bihsb25nMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjIobG9uZzIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdChsb25nMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRlKHVsb25nMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0ZSh1bG9uZzIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0eih1bG9uZzIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHoodWxvbmcyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydHAodWxvbmcyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRwKHVsb25nMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRuKHVsb25nMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0bih1bG9uZzIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyKHVsb25nMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0KHVsb25nMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRlKGZsb2F0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0ZShmbG9hdDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0eihmbG9hdDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHooZmxvYXQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydHAoZmxvYXQyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRwKGZsb2F0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRuKGZsb2F0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0bihmbG9hdDIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyKGZsb2F0Mik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0KGZsb2F0Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydGUoY2hhcjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0ZShjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydHooY2hhcjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0eihjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydHAoY2hhcjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0cChjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydG4oY2hhcjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0bihjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMihjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXQoY2hhcjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRlKHVjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRlKHVjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydHoodWNoYXIyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydHoodWNoYXIyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0cCh1Y2hhcjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0cCh1Y2hhcjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRuKHVjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRuKHVjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMih1Y2hhcjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0KHVjaGFyMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydGUoc2hvcnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydGUoc2hvcnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0eihzaG9ydDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0eihzaG9ydDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRwKHNob3J0Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRwKHNob3J0Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydG4oc2hvcnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydG4oc2hvcnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyKHNob3J0Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXQoc2hvcnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0ZSh1c2hvcnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydGUodXNob3J0Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydHoodXNob3J0Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnR6KHVzaG9ydDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRwKHVzaG9ydDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0cCh1c2hvcnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0bih1c2hvcnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydG4odXNob3J0Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMih1c2hvcnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdCh1c2hvcnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0ZShpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydGUoaW50Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydHooaW50Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnR6KGludDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRwKGludDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0cChpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0bihpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydG4oaW50Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMihpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdChpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0ZSh1aW50Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRlKHVpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0eih1aW50Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnR6KHVpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0cCh1aW50Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRwKHVpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0bih1aW50Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRuKHVpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyKHVpbnQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdCh1aW50Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydGUobG9uZzIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0ZShsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydHoobG9uZzIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0eihsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydHAobG9uZzIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0cChsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydG4obG9uZzIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0bihsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMihsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXQobG9uZzIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRlKHVsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRlKHVsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydHoodWxvbmcyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydHoodWxvbmcyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0cCh1bG9uZzIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0cCh1bG9uZzIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRuKHVsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRuKHVsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMih1bG9uZzIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0KHVsb25nMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydGUoZmxvYXQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydGUoZmxvYXQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0eihmbG9hdDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0eihmbG9hdDIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRwKGZsb2F0Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRwKGZsb2F0Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydG4oZmxvYXQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydG4oZmxvYXQyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyKGZsb2F0Mik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXQoZmxvYXQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0ZShjaGFyMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRlKGNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0eihjaGFyMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnR6KGNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0cChjaGFyMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRwKGNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0bihjaGFyMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRuKGNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyKGNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdChjaGFyMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydGUodWNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydGUodWNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0eih1Y2hhcjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0eih1Y2hhcjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRwKHVjaGFyMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRwKHVjaGFyMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydG4odWNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydG4odWNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyKHVjaGFyMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXQodWNoYXIyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0ZShzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0ZShzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnR6KHNob3J0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnR6KHNob3J0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydHAoc2hvcnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHAoc2hvcnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0bihzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0bihzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDIoc2hvcnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdChzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRlKHVzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0ZSh1c2hvcnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0eih1c2hvcnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHoodXNob3J0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydHAodXNob3J0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRwKHVzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRuKHVzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0bih1c2hvcnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyKHVzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0KHVzaG9ydDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRlKGludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0ZShpbnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0eihpbnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHooaW50Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydHAoaW50Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRwKGludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRuKGludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0bihpbnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyKGludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0KGludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRlKHVpbnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydGUodWludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnR6KHVpbnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHoodWludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRwKHVpbnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHAodWludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRuKHVpbnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydG4odWludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDIodWludDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0KHVpbnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0ZShsb25nMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRlKGxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0eihsb25nMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnR6KGxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0cChsb25nMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRwKGxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0bihsb25nMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRuKGxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyKGxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdChsb25nMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydGUodWxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydGUodWxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0eih1bG9uZzIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0eih1bG9uZzIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRwKHVsb25nMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRwKHVsb25nMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydG4odWxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydG4odWxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyKHVsb25nMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXQodWxvbmcyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0ZShmbG9hdDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0ZShmbG9hdDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnR6KGZsb2F0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnR6KGZsb2F0Mik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydHAoZmxvYXQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHAoZmxvYXQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0bihmbG9hdDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0bihmbG9hdDIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDIoZmxvYXQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdChmbG9hdDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydGUoY2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRlKGNoYXIyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnR6KGNoYXIyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0eihjaGFyMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0cChjaGFyMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydHAoY2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydG4oY2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRuKGNoYXIyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDIoY2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXQoY2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydGUodWNoYXIyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0ZSh1Y2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHoodWNoYXIyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0eih1Y2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHAodWNoYXIyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0cCh1Y2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydG4odWNoYXIyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0bih1Y2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Mih1Y2hhcjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXQodWNoYXIyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRlKHNob3J0Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydGUoc2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnR6KHNob3J0Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydHooc2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRwKHNob3J0Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydHAoc2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRuKHNob3J0Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydG4oc2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDIoc2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0KHNob3J0Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0ZSh1c2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0ZSh1c2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnR6KHVzaG9ydDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnR6KHVzaG9ydDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHAodXNob3J0Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydHAodXNob3J0Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0bih1c2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0bih1c2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDIodXNob3J0Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdCh1c2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRlKGludDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRlKGludDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHooaW50Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydHooaW50Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0cChpbnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0cChpbnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRuKGludDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRuKGludDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MihpbnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0KGludDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydGUodWludDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRlKHVpbnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnR6KHVpbnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0eih1aW50Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0cCh1aW50Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydHAodWludDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydG4odWludDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRuKHVpbnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDIodWludDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXQodWludDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydGUobG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRlKGxvbmcyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnR6KGxvbmcyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0eihsb25nMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0cChsb25nMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydHAobG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydG4obG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRuKGxvbmcyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDIobG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXQobG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydGUodWxvbmcyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0ZSh1bG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHoodWxvbmcyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0eih1bG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydHAodWxvbmcyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0cCh1bG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydG4odWxvbmcyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0bih1bG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Mih1bG9uZzIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXQodWxvbmcyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRlKGZsb2F0Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydGUoZmxvYXQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnR6KGZsb2F0Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydHooZmxvYXQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRwKGZsb2F0Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydHAoZmxvYXQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRuKGZsb2F0Mik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydG4oZmxvYXQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDIoZmxvYXQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0KGZsb2F0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0ZShjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydGUoY2hhcjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydHooY2hhcjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnR6KGNoYXIyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRwKGNoYXIyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0cChjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0bihjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydG4oY2hhcjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MihjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdChjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0ZSh1Y2hhcjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRlKHVjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0eih1Y2hhcjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnR6KHVjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0cCh1Y2hhcjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRwKHVjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0bih1Y2hhcjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRuKHVjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyKHVjaGFyMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdCh1Y2hhcjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydGUoc2hvcnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0ZShzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydHooc2hvcnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0eihzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydHAoc2hvcnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0cChzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydG4oc2hvcnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0bihzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MihzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXQoc2hvcnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRlKHVzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRlKHVzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydHoodXNob3J0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydHoodXNob3J0Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0cCh1c2hvcnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0cCh1c2hvcnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRuKHVzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRuKHVzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Mih1c2hvcnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0KHVzaG9ydDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydGUoaW50Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydGUoaW50Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0eihpbnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0eihpbnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRwKGludDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRwKGludDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydG4oaW50Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydG4oaW50Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyKGludDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXQoaW50Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0ZSh1aW50Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydGUodWludDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydHoodWludDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnR6KHVpbnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRwKHVpbnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0cCh1aW50Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0bih1aW50Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydG4odWludDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Mih1aW50Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdCh1aW50Mik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0ZShsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydGUobG9uZzIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydHoobG9uZzIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnR6KGxvbmcyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRwKGxvbmcyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0cChsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0bihsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydG4obG9uZzIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Mihsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdChsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0ZSh1bG9uZzIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRlKHVsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0eih1bG9uZzIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnR6KHVsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0cCh1bG9uZzIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRwKHVsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0bih1bG9uZzIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRuKHVsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyKHVsb25nMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdCh1bG9uZzIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydGUoZmxvYXQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0ZShmbG9hdDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydHooZmxvYXQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0eihmbG9hdDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydHAoZmxvYXQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0cChmbG9hdDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydG4oZmxvYXQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0bihmbG9hdDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MihmbG9hdDIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXQoZmxvYXQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydGUoY2hhcjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydGUoY2hhcjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0eihjaGFyMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0eihjaGFyMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRwKGNoYXIyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRwKGNoYXIyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydG4oY2hhcjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydG4oY2hhcjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyKGNoYXIyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXQoY2hhcjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0ZSh1Y2hhcjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydGUodWNoYXIyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydHoodWNoYXIyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnR6KHVjaGFyMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRwKHVjaGFyMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0cCh1Y2hhcjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0bih1Y2hhcjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydG4odWNoYXIyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Mih1Y2hhcjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdCh1Y2hhcjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0ZShzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydGUoc2hvcnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydHooc2hvcnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnR6KHNob3J0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRwKHNob3J0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0cChzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0bihzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydG4oc2hvcnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MihzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdChzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0ZSh1c2hvcnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRlKHVzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0eih1c2hvcnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnR6KHVzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0cCh1c2hvcnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRwKHVzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0bih1c2hvcnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRuKHVzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyKHVzaG9ydDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdCh1c2hvcnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydGUoaW50Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0ZShpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydHooaW50Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0eihpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydHAoaW50Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0cChpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydG4oaW50Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0bihpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MihpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXQoaW50Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRlKHVpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRlKHVpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydHoodWludDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydHoodWludDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0cCh1aW50Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0cCh1aW50Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRuKHVpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRuKHVpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Mih1aW50Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0KHVpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydGUobG9uZzIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydGUobG9uZzIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0eihsb25nMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0eihsb25nMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRwKGxvbmcyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRwKGxvbmcyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydG4obG9uZzIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydG4obG9uZzIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyKGxvbmcyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXQobG9uZzIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0ZSh1bG9uZzIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydGUodWxvbmcyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydHoodWxvbmcyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnR6KHVsb25nMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRwKHVsb25nMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0cCh1bG9uZzIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0bih1bG9uZzIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydG4odWxvbmcyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Mih1bG9uZzIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdCh1bG9uZzIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0ZShmbG9hdDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydGUoZmxvYXQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydHooZmxvYXQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnR6KGZsb2F0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRwKGZsb2F0Mik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0cChmbG9hdDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0bihmbG9hdDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydG4oZmxvYXQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MihmbG9hdDIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdChmbG9hdDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0ZShjaGFyMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0ZShjaGFyMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnR6KGNoYXIyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnR6KGNoYXIyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydHAoY2hhcjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHAoY2hhcjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0bihjaGFyMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0bihjaGFyMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzIoY2hhcjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdChjaGFyMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRlKHVjaGFyMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0ZSh1Y2hhcjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0eih1Y2hhcjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHoodWNoYXIyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydHAodWNoYXIyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRwKHVjaGFyMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRuKHVjaGFyMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0bih1Y2hhcjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyKHVjaGFyMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0KHVjaGFyMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRlKHNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0ZShzaG9ydDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0eihzaG9ydDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHooc2hvcnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydHAoc2hvcnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRwKHNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRuKHNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0bihzaG9ydDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyKHNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0KHNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRlKHVzaG9ydDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydGUodXNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnR6KHVzaG9ydDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHoodXNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRwKHVzaG9ydDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHAodXNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRuKHVzaG9ydDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydG4odXNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzIodXNob3J0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0KHVzaG9ydDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0ZShpbnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRlKGludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0eihpbnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnR6KGludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0cChpbnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRwKGludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0bihpbnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRuKGludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyKGludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdChpbnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydGUodWludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydGUodWludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0eih1aW50Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0eih1aW50Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRwKHVpbnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRwKHVpbnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydG4odWludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydG4odWludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyKHVpbnQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXQodWludDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0ZShsb25nMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0ZShsb25nMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnR6KGxvbmcyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnR6KGxvbmcyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydHAobG9uZzIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHAobG9uZzIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0bihsb25nMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0bihsb25nMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzIobG9uZzIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdChsb25nMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRlKHVsb25nMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0ZSh1bG9uZzIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0eih1bG9uZzIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHoodWxvbmcyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydHAodWxvbmcyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRwKHVsb25nMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRuKHVsb25nMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0bih1bG9uZzIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyKHVsb25nMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0KHVsb25nMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRlKGZsb2F0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0ZShmbG9hdDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0eihmbG9hdDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHooZmxvYXQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydHAoZmxvYXQyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRwKGZsb2F0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRuKGZsb2F0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0bihmbG9hdDIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyKGZsb2F0Mik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0KGZsb2F0Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydGUoY2hhcjIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0ZShjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydHooY2hhcjIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0eihjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydHAoY2hhcjIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0cChjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydG4oY2hhcjIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0bihjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMihjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXQoY2hhcjIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRlKHVjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRlKHVjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydHoodWNoYXIyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydHoodWNoYXIyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0cCh1Y2hhcjIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0cCh1Y2hhcjIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRuKHVjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRuKHVjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMih1Y2hhcjIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0KHVjaGFyMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydGUoc2hvcnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydGUoc2hvcnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0eihzaG9ydDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0eihzaG9ydDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRwKHNob3J0Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRwKHNob3J0Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydG4oc2hvcnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydG4oc2hvcnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyKHNob3J0Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXQoc2hvcnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0ZSh1c2hvcnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydGUodXNob3J0Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydHoodXNob3J0Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnR6KHVzaG9ydDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRwKHVzaG9ydDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0cCh1c2hvcnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0bih1c2hvcnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydG4odXNob3J0Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMih1c2hvcnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdCh1c2hvcnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0ZShpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydGUoaW50Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydHooaW50Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnR6KGludDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRwKGludDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0cChpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0bihpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydG4oaW50Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMihpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdChpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0ZSh1aW50Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRlKHVpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0eih1aW50Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnR6KHVpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0cCh1aW50Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRwKHVpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0bih1aW50Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRuKHVpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyKHVpbnQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdCh1aW50Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydGUobG9uZzIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0ZShsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydHoobG9uZzIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0eihsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydHAobG9uZzIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0cChsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydG4obG9uZzIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0bihsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMihsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXQobG9uZzIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRlKHVsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRlKHVsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydHoodWxvbmcyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydHoodWxvbmcyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0cCh1bG9uZzIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0cCh1bG9uZzIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRuKHVsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRuKHVsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMih1bG9uZzIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0KHVsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydGUoZmxvYXQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydGUoZmxvYXQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0eihmbG9hdDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0eihmbG9hdDIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRwKGZsb2F0Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRwKGZsb2F0Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydG4oZmxvYXQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydG4oZmxvYXQyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyKGZsb2F0Mik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXQoZmxvYXQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0ZShjaGFyMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydHooY2hhcjIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRwKGNoYXIyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0bihjaGFyMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MihjaGFyMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydGUodWNoYXIyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0eih1Y2hhcjIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRwKHVjaGFyMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydG4odWNoYXIyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyKHVjaGFyMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydGUoc2hvcnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0eihzaG9ydDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRwKHNob3J0Mik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydG4oc2hvcnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyKHNob3J0Mik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydGUodXNob3J0Mik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydHoodXNob3J0Mik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydHAodXNob3J0Mik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydG4odXNob3J0Mik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Mih1c2hvcnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0ZShpbnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0eihpbnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0cChpbnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0bihpbnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyKGludDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRlKHVpbnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0eih1aW50Mik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydHAodWludDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRuKHVpbnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyKHVpbnQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0ZShsb25nMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydHoobG9uZzIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRwKGxvbmcyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0bihsb25nMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Mihsb25nMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydGUodWxvbmcyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0eih1bG9uZzIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRwKHVsb25nMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydG4odWxvbmcyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyKHVsb25nMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydGUoZmxvYXQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0eihmbG9hdDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRwKGZsb2F0Mik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydG4oZmxvYXQyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyKGZsb2F0Mik7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRlKGNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRlKGNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydHooY2hhcjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydHooY2hhcjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0cChjaGFyMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0cChjaGFyMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRuKGNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRuKGNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMyhjaGFyMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0KGNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydGUodWNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRlKHVjaGFyMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnR6KHVjaGFyMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0eih1Y2hhcjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0cCh1Y2hhcjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydHAodWNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydG4odWNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRuKHVjaGFyMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjModWNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXQodWNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydGUoc2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRlKHNob3J0Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnR6KHNob3J0Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0eihzaG9ydDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0cChzaG9ydDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydHAoc2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydG4oc2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRuKHNob3J0Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjMoc2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXQoc2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydGUodXNob3J0Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0ZSh1c2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydHoodXNob3J0Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0eih1c2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydHAodXNob3J0Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0cCh1c2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydG4odXNob3J0Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0bih1c2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMyh1c2hvcnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXQodXNob3J0Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRlKGludDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydGUoaW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnR6KGludDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydHooaW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRwKGludDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydHAoaW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRuKGludDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydG4oaW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjMoaW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0KGludDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0ZSh1aW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0ZSh1aW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnR6KHVpbnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnR6KHVpbnQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydHAodWludDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydHAodWludDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0bih1aW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0bih1aW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjModWludDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdCh1aW50Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRlKGxvbmczKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRlKGxvbmczKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydHoobG9uZzMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydHoobG9uZzMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0cChsb25nMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0cChsb25nMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRuKGxvbmczKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRuKGxvbmczKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMyhsb25nMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0KGxvbmczKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydGUodWxvbmczKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRlKHVsb25nMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnR6KHVsb25nMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0eih1bG9uZzMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0cCh1bG9uZzMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydHAodWxvbmczKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydG4odWxvbmczKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRuKHVsb25nMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjModWxvbmczKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXQodWxvbmczKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydGUoZmxvYXQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRlKGZsb2F0Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnR6KGZsb2F0Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0eihmbG9hdDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0cChmbG9hdDMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydHAoZmxvYXQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydG4oZmxvYXQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRuKGZsb2F0Myk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjMoZmxvYXQzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXQoZmxvYXQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0ZShjaGFyMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRlKGNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0eihjaGFyMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnR6KGNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0cChjaGFyMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRwKGNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0bihjaGFyMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRuKGNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzKGNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdChjaGFyMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydGUodWNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydGUodWNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0eih1Y2hhcjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0eih1Y2hhcjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRwKHVjaGFyMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRwKHVjaGFyMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydG4odWNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydG4odWNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzKHVjaGFyMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXQodWNoYXIzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0ZShzaG9ydDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0ZShzaG9ydDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnR6KHNob3J0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnR6KHNob3J0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydHAoc2hvcnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHAoc2hvcnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0bihzaG9ydDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0bihzaG9ydDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjMoc2hvcnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdChzaG9ydDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRlKHVzaG9ydDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0ZSh1c2hvcnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0eih1c2hvcnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHoodXNob3J0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydHAodXNob3J0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRwKHVzaG9ydDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRuKHVzaG9ydDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0bih1c2hvcnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzKHVzaG9ydDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0KHVzaG9ydDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRlKGludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0ZShpbnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0eihpbnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHooaW50Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydHAoaW50Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRwKGludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRuKGludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0bihpbnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzKGludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0KGludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRlKHVpbnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydGUodWludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnR6KHVpbnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHoodWludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRwKHVpbnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHAodWludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRuKHVpbnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydG4odWludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjModWludDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0KHVpbnQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0ZShsb25nMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRlKGxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0eihsb25nMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnR6KGxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0cChsb25nMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRwKGxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0bihsb25nMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRuKGxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzKGxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdChsb25nMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydGUodWxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydGUodWxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0eih1bG9uZzMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0eih1bG9uZzMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRwKHVsb25nMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRwKHVsb25nMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydG4odWxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydG4odWxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzKHVsb25nMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXQodWxvbmczKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0ZShmbG9hdDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0ZShmbG9hdDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnR6KGZsb2F0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnR6KGZsb2F0Myk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydHAoZmxvYXQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHAoZmxvYXQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0bihmbG9hdDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0bihmbG9hdDMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjMoZmxvYXQzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdChmbG9hdDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRlKGNoYXIzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydGUoY2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnR6KGNoYXIzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydHooY2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRwKGNoYXIzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydHAoY2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRuKGNoYXIzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydG4oY2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDMoY2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0KGNoYXIzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0ZSh1Y2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0ZSh1Y2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnR6KHVjaGFyMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnR6KHVjaGFyMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydHAodWNoYXIzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydHAodWNoYXIzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0bih1Y2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0bih1Y2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDModWNoYXIzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdCh1Y2hhcjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRlKHNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRlKHNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydHooc2hvcnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydHooc2hvcnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0cChzaG9ydDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0cChzaG9ydDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRuKHNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRuKHNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MyhzaG9ydDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0KHNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydGUodXNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRlKHVzaG9ydDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnR6KHVzaG9ydDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0eih1c2hvcnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0cCh1c2hvcnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydHAodXNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydG4odXNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRuKHVzaG9ydDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDModXNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXQodXNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydGUoaW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRlKGludDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnR6KGludDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0eihpbnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0cChpbnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydHAoaW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydG4oaW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRuKGludDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDMoaW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXQoaW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydGUodWludDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0ZSh1aW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydHoodWludDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0eih1aW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydHAodWludDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0cCh1aW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydG4odWludDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0bih1aW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Myh1aW50Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXQodWludDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRlKGxvbmczKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydGUobG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnR6KGxvbmczKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydHoobG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRwKGxvbmczKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydHAobG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRuKGxvbmczKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydG4obG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDMobG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0KGxvbmczKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0ZSh1bG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0ZSh1bG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnR6KHVsb25nMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnR6KHVsb25nMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydHAodWxvbmczKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydHAodWxvbmczKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0bih1bG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0bih1bG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDModWxvbmczKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdCh1bG9uZzMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRlKGZsb2F0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRlKGZsb2F0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydHooZmxvYXQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydHooZmxvYXQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0cChmbG9hdDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0cChmbG9hdDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRuKGZsb2F0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRuKGZsb2F0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MyhmbG9hdDMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0KGZsb2F0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0ZShjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydGUoY2hhcjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydHooY2hhcjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnR6KGNoYXIzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRwKGNoYXIzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0cChjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0bihjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydG4oY2hhcjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MyhjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdChjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0ZSh1Y2hhcjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRlKHVjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0eih1Y2hhcjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnR6KHVjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0cCh1Y2hhcjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRwKHVjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0bih1Y2hhcjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRuKHVjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzKHVjaGFyMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdCh1Y2hhcjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydGUoc2hvcnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0ZShzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydHooc2hvcnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0eihzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydHAoc2hvcnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0cChzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydG4oc2hvcnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0bihzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MyhzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXQoc2hvcnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRlKHVzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRlKHVzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydHoodXNob3J0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydHoodXNob3J0Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0cCh1c2hvcnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0cCh1c2hvcnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRuKHVzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRuKHVzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Myh1c2hvcnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0KHVzaG9ydDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydGUoaW50Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydGUoaW50Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0eihpbnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0eihpbnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRwKGludDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRwKGludDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydG4oaW50Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydG4oaW50Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzKGludDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXQoaW50Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0ZSh1aW50Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydGUodWludDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydHoodWludDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnR6KHVpbnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRwKHVpbnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0cCh1aW50Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0bih1aW50Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydG4odWludDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Myh1aW50Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdCh1aW50Myk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0ZShsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydGUobG9uZzMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydHoobG9uZzMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnR6KGxvbmczKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRwKGxvbmczKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0cChsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0bihsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydG4obG9uZzMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Myhsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdChsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0ZSh1bG9uZzMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRlKHVsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0eih1bG9uZzMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnR6KHVsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0cCh1bG9uZzMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRwKHVsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0bih1bG9uZzMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRuKHVsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzKHVsb25nMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdCh1bG9uZzMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydGUoZmxvYXQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0ZShmbG9hdDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydHooZmxvYXQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0eihmbG9hdDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydHAoZmxvYXQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0cChmbG9hdDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydG4oZmxvYXQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0bihmbG9hdDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MyhmbG9hdDMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXQoZmxvYXQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRlKGNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0ZShjaGFyMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0eihjaGFyMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHooY2hhcjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydHAoY2hhcjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRwKGNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRuKGNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0bihjaGFyMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzKGNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0KGNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRlKHVjaGFyMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydGUodWNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnR6KHVjaGFyMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHoodWNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRwKHVjaGFyMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHAodWNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRuKHVjaGFyMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydG4odWNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDModWNoYXIzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0KHVjaGFyMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0ZShzaG9ydDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRlKHNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0eihzaG9ydDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnR6KHNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0cChzaG9ydDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRwKHNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0bihzaG9ydDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRuKHNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzKHNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdChzaG9ydDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydGUodXNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydGUodXNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0eih1c2hvcnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0eih1c2hvcnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRwKHVzaG9ydDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRwKHVzaG9ydDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydG4odXNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydG4odXNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzKHVzaG9ydDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXQodXNob3J0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0ZShpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0ZShpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnR6KGludDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnR6KGludDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydHAoaW50Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHAoaW50Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0bihpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0bihpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDMoaW50Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdChpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRlKHVpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0ZSh1aW50Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0eih1aW50Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHoodWludDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydHAodWludDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRwKHVpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRuKHVpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0bih1aW50Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzKHVpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0KHVpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRlKGxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0ZShsb25nMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0eihsb25nMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHoobG9uZzMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydHAobG9uZzMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRwKGxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRuKGxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0bihsb25nMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzKGxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0KGxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRlKHVsb25nMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydGUodWxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnR6KHVsb25nMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHoodWxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRwKHVsb25nMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHAodWxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRuKHVsb25nMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydG4odWxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDModWxvbmczKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0KHVsb25nMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0ZShmbG9hdDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRlKGZsb2F0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0eihmbG9hdDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnR6KGZsb2F0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0cChmbG9hdDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRwKGZsb2F0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0bihmbG9hdDMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRuKGZsb2F0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzKGZsb2F0Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdChmbG9hdDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0ZShjaGFyMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0ZShjaGFyMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnR6KGNoYXIzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnR6KGNoYXIzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydHAoY2hhcjMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHAoY2hhcjMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0bihjaGFyMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0bihjaGFyMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDMoY2hhcjMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdChjaGFyMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRlKHVjaGFyMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0ZSh1Y2hhcjMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0eih1Y2hhcjMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHoodWNoYXIzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydHAodWNoYXIzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRwKHVjaGFyMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRuKHVjaGFyMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0bih1Y2hhcjMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzKHVjaGFyMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0KHVjaGFyMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRlKHNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0ZShzaG9ydDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0eihzaG9ydDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHooc2hvcnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydHAoc2hvcnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRwKHNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRuKHNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0bihzaG9ydDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzKHNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0KHNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRlKHVzaG9ydDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydGUodXNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnR6KHVzaG9ydDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHoodXNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRwKHVzaG9ydDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHAodXNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRuKHVzaG9ydDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydG4odXNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDModXNob3J0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0KHVzaG9ydDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0ZShpbnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRlKGludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0eihpbnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnR6KGludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0cChpbnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRwKGludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0bihpbnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRuKGludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzKGludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdChpbnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydGUodWludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydGUodWludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0eih1aW50Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0eih1aW50Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRwKHVpbnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRwKHVpbnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydG4odWludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydG4odWludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzKHVpbnQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXQodWludDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0ZShsb25nMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0ZShsb25nMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnR6KGxvbmczKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnR6KGxvbmczKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydHAobG9uZzMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHAobG9uZzMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0bihsb25nMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0bihsb25nMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDMobG9uZzMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdChsb25nMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRlKHVsb25nMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0ZSh1bG9uZzMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0eih1bG9uZzMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHoodWxvbmczKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydHAodWxvbmczKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRwKHVsb25nMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRuKHVsb25nMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0bih1bG9uZzMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzKHVsb25nMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0KHVsb25nMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRlKGZsb2F0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0ZShmbG9hdDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0eihmbG9hdDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHooZmxvYXQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydHAoZmxvYXQzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRwKGZsb2F0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRuKGZsb2F0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0bihmbG9hdDMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzKGZsb2F0Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0KGZsb2F0Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRlKGNoYXIzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRlKGNoYXIzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydHooY2hhcjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydHooY2hhcjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0cChjaGFyMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0cChjaGFyMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRuKGNoYXIzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRuKGNoYXIzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMyhjaGFyMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0KGNoYXIzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydGUodWNoYXIzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRlKHVjaGFyMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnR6KHVjaGFyMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0eih1Y2hhcjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0cCh1Y2hhcjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydHAodWNoYXIzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydG4odWNoYXIzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRuKHVjaGFyMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzModWNoYXIzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXQodWNoYXIzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydGUoc2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRlKHNob3J0Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnR6KHNob3J0Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0eihzaG9ydDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0cChzaG9ydDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydHAoc2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydG4oc2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRuKHNob3J0Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzMoc2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXQoc2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydGUodXNob3J0Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0ZSh1c2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydHoodXNob3J0Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0eih1c2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydHAodXNob3J0Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0cCh1c2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydG4odXNob3J0Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0bih1c2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMyh1c2hvcnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXQodXNob3J0Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRlKGludDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydGUoaW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnR6KGludDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydHooaW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRwKGludDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydHAoaW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRuKGludDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydG4oaW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzMoaW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0KGludDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0ZSh1aW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0ZSh1aW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnR6KHVpbnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnR6KHVpbnQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydHAodWludDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydHAodWludDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0bih1aW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0bih1aW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzModWludDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdCh1aW50Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRlKGxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRlKGxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydHoobG9uZzMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydHoobG9uZzMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0cChsb25nMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0cChsb25nMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRuKGxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRuKGxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMyhsb25nMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0KGxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydGUodWxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRlKHVsb25nMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnR6KHVsb25nMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0eih1bG9uZzMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0cCh1bG9uZzMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydHAodWxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydG4odWxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRuKHVsb25nMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzModWxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXQodWxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydGUoZmxvYXQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRlKGZsb2F0Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnR6KGZsb2F0Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0eihmbG9hdDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0cChmbG9hdDMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydHAoZmxvYXQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydG4oZmxvYXQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRuKGZsb2F0Myk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzMoZmxvYXQzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXQoZmxvYXQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0ZShjaGFyMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRlKGNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0eihjaGFyMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnR6KGNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0cChjaGFyMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRwKGNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0bihjaGFyMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRuKGNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczKGNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdChjaGFyMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydGUodWNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydGUodWNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0eih1Y2hhcjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0eih1Y2hhcjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRwKHVjaGFyMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRwKHVjaGFyMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydG4odWNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydG4odWNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczKHVjaGFyMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXQodWNoYXIzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0ZShzaG9ydDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0ZShzaG9ydDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnR6KHNob3J0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnR6KHNob3J0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydHAoc2hvcnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHAoc2hvcnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0bihzaG9ydDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0bihzaG9ydDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzMoc2hvcnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdChzaG9ydDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRlKHVzaG9ydDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0ZSh1c2hvcnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0eih1c2hvcnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHoodXNob3J0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydHAodXNob3J0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRwKHVzaG9ydDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRuKHVzaG9ydDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0bih1c2hvcnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczKHVzaG9ydDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0KHVzaG9ydDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRlKGludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0ZShpbnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0eihpbnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHooaW50Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydHAoaW50Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRwKGludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRuKGludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0bihpbnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczKGludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0KGludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRlKHVpbnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydGUodWludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnR6KHVpbnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHoodWludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRwKHVpbnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHAodWludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRuKHVpbnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydG4odWludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzModWludDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0KHVpbnQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0ZShsb25nMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRlKGxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0eihsb25nMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnR6KGxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0cChsb25nMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRwKGxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0bihsb25nMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRuKGxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczKGxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdChsb25nMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydGUodWxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydGUodWxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0eih1bG9uZzMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0eih1bG9uZzMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRwKHVsb25nMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRwKHVsb25nMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydG4odWxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydG4odWxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczKHVsb25nMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXQodWxvbmczKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0ZShmbG9hdDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0ZShmbG9hdDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnR6KGZsb2F0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnR6KGZsb2F0Myk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydHAoZmxvYXQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHAoZmxvYXQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0bihmbG9hdDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0bihmbG9hdDMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzMoZmxvYXQzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdChmbG9hdDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRlKGNoYXIzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0eihjaGFyMyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydHAoY2hhcjMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRuKGNoYXIzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzKGNoYXIzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0ZSh1Y2hhcjMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnR6KHVjaGFyMyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydHAodWNoYXIzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0bih1Y2hhcjMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDModWNoYXIzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0ZShzaG9ydDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnR6KHNob3J0Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydHAoc2hvcnQzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0bihzaG9ydDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDMoc2hvcnQzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0ZSh1c2hvcnQzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0eih1c2hvcnQzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0cCh1c2hvcnQzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0bih1c2hvcnQzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzKHVzaG9ydDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRlKGludDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnR6KGludDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRwKGludDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRuKGludDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDMoaW50Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydGUodWludDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnR6KHVpbnQzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0cCh1aW50Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydG4odWludDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDModWludDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRlKGxvbmczKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0eihsb25nMyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydHAobG9uZzMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRuKGxvbmczKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzKGxvbmczKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0ZSh1bG9uZzMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnR6KHVsb25nMyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydHAodWxvbmczKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0bih1bG9uZzMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDModWxvbmczKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0ZShmbG9hdDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnR6KGZsb2F0Myk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydHAoZmxvYXQzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0bihmbG9hdDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDMoZmxvYXQzKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydGUoY2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydGUoY2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0eihjaGFyNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0eihjaGFyNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRwKGNoYXI0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRwKGNoYXI0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydG4oY2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydG4oY2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0KGNoYXI0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXQoY2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0ZSh1Y2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydGUodWNoYXI0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydHoodWNoYXI0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnR6KHVjaGFyNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRwKHVjaGFyNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0cCh1Y2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0bih1Y2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydG4odWNoYXI0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNCh1Y2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdCh1Y2hhcjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0ZShzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydGUoc2hvcnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydHooc2hvcnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnR6KHNob3J0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRwKHNob3J0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0cChzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0bihzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydG4oc2hvcnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNChzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdChzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0ZSh1c2hvcnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRlKHVzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0eih1c2hvcnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnR6KHVzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0cCh1c2hvcnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRwKHVzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0bih1c2hvcnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRuKHVzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0KHVzaG9ydDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdCh1c2hvcnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydGUoaW50NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0ZShpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydHooaW50NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0eihpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydHAoaW50NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0cChpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydG4oaW50NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0bihpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNChpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXQoaW50NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRlKHVpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRlKHVpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydHoodWludDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydHoodWludDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0cCh1aW50NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0cCh1aW50NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRuKHVpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRuKHVpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNCh1aW50NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0KHVpbnQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydGUobG9uZzQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydGUobG9uZzQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0eihsb25nNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0eihsb25nNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRwKGxvbmc0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRwKGxvbmc0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydG4obG9uZzQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydG4obG9uZzQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0KGxvbmc0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXQobG9uZzQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0ZSh1bG9uZzQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydGUodWxvbmc0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydHoodWxvbmc0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnR6KHVsb25nNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRwKHVsb25nNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0cCh1bG9uZzQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0bih1bG9uZzQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydG4odWxvbmc0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNCh1bG9uZzQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdCh1bG9uZzQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0ZShmbG9hdDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydGUoZmxvYXQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydHooZmxvYXQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnR6KGZsb2F0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRwKGZsb2F0NCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0cChmbG9hdDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0bihmbG9hdDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydG4oZmxvYXQ0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNChmbG9hdDQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdChmbG9hdDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRlKGNoYXI0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydGUoY2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnR6KGNoYXI0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydHooY2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRwKGNoYXI0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydHAoY2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRuKGNoYXI0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydG4oY2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjQoY2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0KGNoYXI0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0ZSh1Y2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0ZSh1Y2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnR6KHVjaGFyNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnR6KHVjaGFyNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHAodWNoYXI0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydHAodWNoYXI0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0bih1Y2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0bih1Y2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjQodWNoYXI0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdCh1Y2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRlKHNob3J0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRlKHNob3J0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHooc2hvcnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydHooc2hvcnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0cChzaG9ydDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0cChzaG9ydDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRuKHNob3J0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRuKHNob3J0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNChzaG9ydDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0KHNob3J0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydGUodXNob3J0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRlKHVzaG9ydDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnR6KHVzaG9ydDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0eih1c2hvcnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0cCh1c2hvcnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydHAodXNob3J0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydG4odXNob3J0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRuKHVzaG9ydDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjQodXNob3J0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXQodXNob3J0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydGUoaW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRlKGludDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnR6KGludDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0eihpbnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0cChpbnQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydHAoaW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydG4oaW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRuKGludDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjQoaW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXQoaW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydGUodWludDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0ZSh1aW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHoodWludDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0eih1aW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHAodWludDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0cCh1aW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydG4odWludDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0bih1aW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNCh1aW50NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXQodWludDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRlKGxvbmc0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydGUobG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnR6KGxvbmc0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydHoobG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRwKGxvbmc0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydHAobG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRuKGxvbmc0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydG4obG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjQobG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0KGxvbmc0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0ZSh1bG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0ZSh1bG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnR6KHVsb25nNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnR6KHVsb25nNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHAodWxvbmc0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydHAodWxvbmc0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0bih1bG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0bih1bG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjQodWxvbmc0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdCh1bG9uZzQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRlKGZsb2F0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRlKGZsb2F0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHooZmxvYXQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydHooZmxvYXQ0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0cChmbG9hdDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0cChmbG9hdDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRuKGZsb2F0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRuKGZsb2F0NCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNChmbG9hdDQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0KGZsb2F0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydGUoY2hhcjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0ZShjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydHooY2hhcjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0eihjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydHAoY2hhcjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0cChjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydG4oY2hhcjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0bihjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NChjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXQoY2hhcjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRlKHVjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRlKHVjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydHoodWNoYXI0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydHoodWNoYXI0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0cCh1Y2hhcjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0cCh1Y2hhcjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRuKHVjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRuKHVjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NCh1Y2hhcjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0KHVjaGFyNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydGUoc2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydGUoc2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0eihzaG9ydDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0eihzaG9ydDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRwKHNob3J0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRwKHNob3J0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydG4oc2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydG4oc2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0KHNob3J0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXQoc2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0ZSh1c2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydGUodXNob3J0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydHoodXNob3J0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnR6KHVzaG9ydDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRwKHVzaG9ydDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0cCh1c2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0bih1c2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydG4odXNob3J0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NCh1c2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdCh1c2hvcnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0ZShpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydGUoaW50NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydHooaW50NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnR6KGludDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRwKGludDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0cChpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0bihpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydG4oaW50NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NChpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdChpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0ZSh1aW50NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRlKHVpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0eih1aW50NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnR6KHVpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0cCh1aW50NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRwKHVpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0bih1aW50NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRuKHVpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0KHVpbnQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdCh1aW50NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydGUobG9uZzQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0ZShsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydHoobG9uZzQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0eihsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydHAobG9uZzQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0cChsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydG4obG9uZzQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0bihsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NChsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXQobG9uZzQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRlKHVsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRlKHVsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydHoodWxvbmc0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydHoodWxvbmc0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0cCh1bG9uZzQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0cCh1bG9uZzQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRuKHVsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRuKHVsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NCh1bG9uZzQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0KHVsb25nNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydGUoZmxvYXQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydGUoZmxvYXQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0eihmbG9hdDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0eihmbG9hdDQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRwKGZsb2F0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRwKGZsb2F0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydG4oZmxvYXQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydG4oZmxvYXQ0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0KGZsb2F0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXQoZmxvYXQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRlKGNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0ZShjaGFyNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0eihjaGFyNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHooY2hhcjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydHAoY2hhcjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRwKGNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRuKGNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0bihjaGFyNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0KGNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0KGNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRlKHVjaGFyNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydGUodWNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnR6KHVjaGFyNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHoodWNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRwKHVjaGFyNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHAodWNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRuKHVjaGFyNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydG4odWNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDQodWNoYXI0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0KHVjaGFyNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0ZShzaG9ydDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRlKHNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0eihzaG9ydDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnR6KHNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0cChzaG9ydDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRwKHNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0bihzaG9ydDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRuKHNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0KHNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdChzaG9ydDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydGUodXNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydGUodXNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0eih1c2hvcnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0eih1c2hvcnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRwKHVzaG9ydDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRwKHVzaG9ydDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydG4odXNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydG4odXNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0KHVzaG9ydDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXQodXNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0ZShpbnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0ZShpbnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnR6KGludDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnR6KGludDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydHAoaW50NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHAoaW50NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0bihpbnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0bihpbnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDQoaW50NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdChpbnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRlKHVpbnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0ZSh1aW50NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0eih1aW50NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHoodWludDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydHAodWludDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRwKHVpbnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRuKHVpbnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0bih1aW50NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0KHVpbnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0KHVpbnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRlKGxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0ZShsb25nNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0eihsb25nNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHoobG9uZzQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydHAobG9uZzQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRwKGxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRuKGxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0bihsb25nNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0KGxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0KGxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRlKHVsb25nNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydGUodWxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnR6KHVsb25nNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHoodWxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRwKHVsb25nNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHAodWxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRuKHVsb25nNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydG4odWxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDQodWxvbmc0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0KHVsb25nNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0ZShmbG9hdDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRlKGZsb2F0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0eihmbG9hdDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnR6KGZsb2F0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0cChmbG9hdDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRwKGZsb2F0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0bihmbG9hdDQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRuKGZsb2F0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0KGZsb2F0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdChmbG9hdDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydGUoY2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRlKGNoYXI0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnR6KGNoYXI0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0eihjaGFyNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0cChjaGFyNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydHAoY2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydG4oY2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRuKGNoYXI0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDQoY2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXQoY2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydGUodWNoYXI0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0ZSh1Y2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHoodWNoYXI0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0eih1Y2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHAodWNoYXI0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0cCh1Y2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydG4odWNoYXI0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0bih1Y2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NCh1Y2hhcjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXQodWNoYXI0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRlKHNob3J0NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydGUoc2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnR6KHNob3J0NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydHooc2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRwKHNob3J0NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydHAoc2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRuKHNob3J0NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydG4oc2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDQoc2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0KHNob3J0NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0ZSh1c2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0ZSh1c2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnR6KHVzaG9ydDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnR6KHVzaG9ydDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHAodXNob3J0NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydHAodXNob3J0NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0bih1c2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0bih1c2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDQodXNob3J0NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdCh1c2hvcnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRlKGludDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRlKGludDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHooaW50NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydHooaW50NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0cChpbnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0cChpbnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRuKGludDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRuKGludDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NChpbnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0KGludDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydGUodWludDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRlKHVpbnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnR6KHVpbnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0eih1aW50NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0cCh1aW50NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydHAodWludDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydG4odWludDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRuKHVpbnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDQodWludDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXQodWludDQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydGUobG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRlKGxvbmc0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnR6KGxvbmc0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0eihsb25nNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0cChsb25nNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydHAobG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydG4obG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRuKGxvbmc0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDQobG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXQobG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydGUodWxvbmc0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0ZSh1bG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHoodWxvbmc0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0eih1bG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydHAodWxvbmc0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0cCh1bG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydG4odWxvbmc0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0bih1bG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NCh1bG9uZzQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXQodWxvbmc0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRlKGZsb2F0NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydGUoZmxvYXQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnR6KGZsb2F0NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydHooZmxvYXQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRwKGZsb2F0NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydHAoZmxvYXQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRuKGZsb2F0NCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydG4oZmxvYXQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDQoZmxvYXQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0KGZsb2F0NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRlKGNoYXI0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRlKGNoYXI0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydHooY2hhcjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydHooY2hhcjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0cChjaGFyNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0cChjaGFyNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRuKGNoYXI0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRuKGNoYXI0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NChjaGFyNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0KGNoYXI0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydGUodWNoYXI0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRlKHVjaGFyNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnR6KHVjaGFyNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0eih1Y2hhcjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0cCh1Y2hhcjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydHAodWNoYXI0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydG4odWNoYXI0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRuKHVjaGFyNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDQodWNoYXI0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXQodWNoYXI0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydGUoc2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRlKHNob3J0NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnR6KHNob3J0NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0eihzaG9ydDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0cChzaG9ydDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydHAoc2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydG4oc2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRuKHNob3J0NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDQoc2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXQoc2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydGUodXNob3J0NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0ZSh1c2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydHoodXNob3J0NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0eih1c2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydHAodXNob3J0NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0cCh1c2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydG4odXNob3J0NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0bih1c2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NCh1c2hvcnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXQodXNob3J0NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRlKGludDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydGUoaW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnR6KGludDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydHooaW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRwKGludDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydHAoaW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRuKGludDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydG4oaW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDQoaW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0KGludDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0ZSh1aW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0ZSh1aW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnR6KHVpbnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnR6KHVpbnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydHAodWludDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydHAodWludDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0bih1aW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0bih1aW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDQodWludDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdCh1aW50NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRlKGxvbmc0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRlKGxvbmc0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydHoobG9uZzQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydHoobG9uZzQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0cChsb25nNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0cChsb25nNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRuKGxvbmc0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRuKGxvbmc0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NChsb25nNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0KGxvbmc0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydGUodWxvbmc0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRlKHVsb25nNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnR6KHVsb25nNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0eih1bG9uZzQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0cCh1bG9uZzQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydHAodWxvbmc0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydG4odWxvbmc0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRuKHVsb25nNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDQodWxvbmc0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXQodWxvbmc0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydGUoZmxvYXQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRlKGZsb2F0NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnR6KGZsb2F0NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0eihmbG9hdDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0cChmbG9hdDQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydHAoZmxvYXQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydG4oZmxvYXQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRuKGZsb2F0NCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDQoZmxvYXQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXQoZmxvYXQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydGUoY2hhcjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydGUoY2hhcjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0eihjaGFyNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0eihjaGFyNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRwKGNoYXI0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRwKGNoYXI0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydG4oY2hhcjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydG4oY2hhcjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0KGNoYXI0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXQoY2hhcjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0ZSh1Y2hhcjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydGUodWNoYXI0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydHoodWNoYXI0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnR6KHVjaGFyNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRwKHVjaGFyNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0cCh1Y2hhcjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0bih1Y2hhcjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydG4odWNoYXI0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNCh1Y2hhcjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdCh1Y2hhcjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0ZShzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydGUoc2hvcnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydHooc2hvcnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnR6KHNob3J0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRwKHNob3J0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0cChzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0bihzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydG4oc2hvcnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNChzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdChzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0ZSh1c2hvcnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRlKHVzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0eih1c2hvcnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnR6KHVzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0cCh1c2hvcnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRwKHVzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0bih1c2hvcnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRuKHVzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0KHVzaG9ydDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdCh1c2hvcnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydGUoaW50NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0ZShpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydHooaW50NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0eihpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydHAoaW50NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0cChpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydG4oaW50NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0bihpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNChpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXQoaW50NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRlKHVpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRlKHVpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydHoodWludDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydHoodWludDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0cCh1aW50NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0cCh1aW50NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRuKHVpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRuKHVpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNCh1aW50NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0KHVpbnQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydGUobG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydGUobG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0eihsb25nNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0eihsb25nNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRwKGxvbmc0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRwKGxvbmc0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydG4obG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydG4obG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0KGxvbmc0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXQobG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0ZSh1bG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydGUodWxvbmc0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydHoodWxvbmc0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnR6KHVsb25nNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRwKHVsb25nNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0cCh1bG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0bih1bG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydG4odWxvbmc0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNCh1bG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdCh1bG9uZzQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0ZShmbG9hdDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydGUoZmxvYXQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydHooZmxvYXQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnR6KGZsb2F0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRwKGZsb2F0NCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0cChmbG9hdDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0bihmbG9hdDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydG4oZmxvYXQ0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNChmbG9hdDQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdChmbG9hdDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRlKGNoYXI0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydGUoY2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnR6KGNoYXI0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydHooY2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRwKGNoYXI0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydHAoY2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRuKGNoYXI0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydG4oY2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzQoY2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0KGNoYXI0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0ZSh1Y2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0ZSh1Y2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnR6KHVjaGFyNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnR6KHVjaGFyNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHAodWNoYXI0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydHAodWNoYXI0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0bih1Y2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0bih1Y2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzQodWNoYXI0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdCh1Y2hhcjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRlKHNob3J0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRlKHNob3J0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHooc2hvcnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydHooc2hvcnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0cChzaG9ydDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0cChzaG9ydDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRuKHNob3J0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRuKHNob3J0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNChzaG9ydDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0KHNob3J0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydGUodXNob3J0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRlKHVzaG9ydDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnR6KHVzaG9ydDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0eih1c2hvcnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0cCh1c2hvcnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydHAodXNob3J0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydG4odXNob3J0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRuKHVzaG9ydDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzQodXNob3J0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXQodXNob3J0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydGUoaW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRlKGludDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnR6KGludDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0eihpbnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0cChpbnQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydHAoaW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydG4oaW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRuKGludDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzQoaW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXQoaW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydGUodWludDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0ZSh1aW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHoodWludDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0eih1aW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHAodWludDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0cCh1aW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydG4odWludDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0bih1aW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNCh1aW50NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXQodWludDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRlKGxvbmc0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydGUobG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnR6KGxvbmc0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydHoobG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRwKGxvbmc0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydHAobG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRuKGxvbmc0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydG4obG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzQobG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0KGxvbmc0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0ZSh1bG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0ZSh1bG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnR6KHVsb25nNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnR6KHVsb25nNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHAodWxvbmc0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydHAodWxvbmc0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0bih1bG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0bih1bG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzQodWxvbmc0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdCh1bG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRlKGZsb2F0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRlKGZsb2F0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHooZmxvYXQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydHooZmxvYXQ0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0cChmbG9hdDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0cChmbG9hdDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRuKGZsb2F0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRuKGZsb2F0NCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNChmbG9hdDQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0KGZsb2F0NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydGUoY2hhcjQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnR6KGNoYXI0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0cChjaGFyNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydG4oY2hhcjQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDQoY2hhcjQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRlKHVjaGFyNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydHoodWNoYXI0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0cCh1Y2hhcjQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRuKHVjaGFyNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NCh1Y2hhcjQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRlKHNob3J0NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydHooc2hvcnQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0cChzaG9ydDQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRuKHNob3J0NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NChzaG9ydDQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRlKHVzaG9ydDQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnR6KHVzaG9ydDQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRwKHVzaG9ydDQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRuKHVzaG9ydDQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDQodXNob3J0NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydGUoaW50NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydHooaW50NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydHAoaW50NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydG4oaW50NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NChpbnQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0ZSh1aW50NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydHoodWludDQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRwKHVpbnQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0bih1aW50NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NCh1aW50NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydGUobG9uZzQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnR6KGxvbmc0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0cChsb25nNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydG4obG9uZzQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDQobG9uZzQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRlKHVsb25nNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydHoodWxvbmc0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0cCh1bG9uZzQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRuKHVsb25nNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NCh1bG9uZzQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRlKGZsb2F0NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydHooZmxvYXQ0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0cChmbG9hdDQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRuKGZsb2F0NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NChmbG9hdDQpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0ZShjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0ZShjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnR6KGNoYXI4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnR6KGNoYXI4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydHAoY2hhcjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHAoY2hhcjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0bihjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0bihjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjgoY2hhcjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdChjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRlKHVjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0ZSh1Y2hhcjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0eih1Y2hhcjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHoodWNoYXI4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydHAodWNoYXI4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRwKHVjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRuKHVjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0bih1Y2hhcjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4KHVjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0KHVjaGFyOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRlKHNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0ZShzaG9ydDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0eihzaG9ydDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHooc2hvcnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydHAoc2hvcnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRwKHNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRuKHNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0bihzaG9ydDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4KHNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0KHNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRlKHVzaG9ydDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydGUodXNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnR6KHVzaG9ydDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHoodXNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRwKHVzaG9ydDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHAodXNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRuKHVzaG9ydDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydG4odXNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjgodXNob3J0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0KHVzaG9ydDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0ZShpbnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRlKGludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0eihpbnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnR6KGludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0cChpbnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRwKGludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0bihpbnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRuKGludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4KGludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdChpbnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydGUodWludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydGUodWludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0eih1aW50OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0eih1aW50OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRwKHVpbnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRwKHVpbnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydG4odWludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydG4odWludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4KHVpbnQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXQodWludDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0ZShsb25nOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0ZShsb25nOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnR6KGxvbmc4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnR6KGxvbmc4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydHAobG9uZzgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHAobG9uZzgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0bihsb25nOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0bihsb25nOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjgobG9uZzgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdChsb25nOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRlKHVsb25nOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0ZSh1bG9uZzgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0eih1bG9uZzgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHoodWxvbmc4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydHAodWxvbmc4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRwKHVsb25nOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRuKHVsb25nOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0bih1bG9uZzgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4KHVsb25nOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0KHVsb25nOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRlKGZsb2F0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0ZShmbG9hdDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0eihmbG9hdDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHooZmxvYXQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydHAoZmxvYXQ4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRwKGZsb2F0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRuKGZsb2F0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0bihmbG9hdDgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4KGZsb2F0OCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0KGZsb2F0OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydGUoY2hhcjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0ZShjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydHooY2hhcjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0eihjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydHAoY2hhcjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0cChjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydG4oY2hhcjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0bihjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOChjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXQoY2hhcjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRlKHVjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRlKHVjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydHoodWNoYXI4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydHoodWNoYXI4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0cCh1Y2hhcjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0cCh1Y2hhcjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRuKHVjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRuKHVjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOCh1Y2hhcjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0KHVjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydGUoc2hvcnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydGUoc2hvcnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0eihzaG9ydDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0eihzaG9ydDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRwKHNob3J0OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRwKHNob3J0OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydG4oc2hvcnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydG4oc2hvcnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4KHNob3J0OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXQoc2hvcnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0ZSh1c2hvcnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydGUodXNob3J0OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydHoodXNob3J0OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnR6KHVzaG9ydDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRwKHVzaG9ydDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0cCh1c2hvcnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0bih1c2hvcnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydG4odXNob3J0OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOCh1c2hvcnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdCh1c2hvcnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0ZShpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydGUoaW50OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydHooaW50OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnR6KGludDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRwKGludDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0cChpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0bihpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydG4oaW50OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOChpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdChpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0ZSh1aW50OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRlKHVpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0eih1aW50OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnR6KHVpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0cCh1aW50OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRwKHVpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0bih1aW50OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRuKHVpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4KHVpbnQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdCh1aW50OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydGUobG9uZzgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0ZShsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydHoobG9uZzgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0eihsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydHAobG9uZzgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0cChsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydG4obG9uZzgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0bihsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOChsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXQobG9uZzgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRlKHVsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRlKHVsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydHoodWxvbmc4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydHoodWxvbmc4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0cCh1bG9uZzgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0cCh1bG9uZzgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRuKHVsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRuKHVsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOCh1bG9uZzgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0KHVsb25nOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydGUoZmxvYXQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydGUoZmxvYXQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0eihmbG9hdDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0eihmbG9hdDgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRwKGZsb2F0OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRwKGZsb2F0OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydG4oZmxvYXQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydG4oZmxvYXQ4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4KGZsb2F0OCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXQoZmxvYXQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0ZShjaGFyOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRlKGNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0eihjaGFyOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnR6KGNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0cChjaGFyOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRwKGNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0bihjaGFyOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRuKGNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4KGNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdChjaGFyOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydGUodWNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydGUodWNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0eih1Y2hhcjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0eih1Y2hhcjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRwKHVjaGFyOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRwKHVjaGFyOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydG4odWNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydG4odWNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4KHVjaGFyOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXQodWNoYXI4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0ZShzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0ZShzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnR6KHNob3J0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnR6KHNob3J0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydHAoc2hvcnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHAoc2hvcnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0bihzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0bihzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDgoc2hvcnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdChzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRlKHVzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0ZSh1c2hvcnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0eih1c2hvcnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHoodXNob3J0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydHAodXNob3J0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRwKHVzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRuKHVzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0bih1c2hvcnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4KHVzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0KHVzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRlKGludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0ZShpbnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0eihpbnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHooaW50OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydHAoaW50OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRwKGludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRuKGludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0bihpbnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4KGludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0KGludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRlKHVpbnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydGUodWludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnR6KHVpbnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHoodWludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRwKHVpbnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHAodWludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRuKHVpbnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydG4odWludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDgodWludDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0KHVpbnQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0ZShsb25nOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRlKGxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0eihsb25nOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnR6KGxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0cChsb25nOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRwKGxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0bihsb25nOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRuKGxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4KGxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdChsb25nOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydGUodWxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydGUodWxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0eih1bG9uZzgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0eih1bG9uZzgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRwKHVsb25nOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRwKHVsb25nOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydG4odWxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydG4odWxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4KHVsb25nOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXQodWxvbmc4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0ZShmbG9hdDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0ZShmbG9hdDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnR6KGZsb2F0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnR6KGZsb2F0OCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydHAoZmxvYXQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHAoZmxvYXQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0bihmbG9hdDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0bihmbG9hdDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDgoZmxvYXQ4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdChmbG9hdDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydGUoY2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRlKGNoYXI4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnR6KGNoYXI4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0eihjaGFyOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0cChjaGFyOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydHAoY2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydG4oY2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRuKGNoYXI4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDgoY2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXQoY2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydGUodWNoYXI4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0ZSh1Y2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHoodWNoYXI4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0eih1Y2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHAodWNoYXI4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0cCh1Y2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydG4odWNoYXI4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0bih1Y2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OCh1Y2hhcjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXQodWNoYXI4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRlKHNob3J0OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydGUoc2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnR6KHNob3J0OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydHooc2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRwKHNob3J0OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydHAoc2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRuKHNob3J0OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydG4oc2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDgoc2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0KHNob3J0OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0ZSh1c2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0ZSh1c2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnR6KHVzaG9ydDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnR6KHVzaG9ydDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHAodXNob3J0OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydHAodXNob3J0OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0bih1c2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0bih1c2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDgodXNob3J0OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdCh1c2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRlKGludDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRlKGludDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHooaW50OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydHooaW50OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0cChpbnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0cChpbnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRuKGludDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRuKGludDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OChpbnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0KGludDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydGUodWludDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRlKHVpbnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnR6KHVpbnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0eih1aW50OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0cCh1aW50OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydHAodWludDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydG4odWludDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRuKHVpbnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDgodWludDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXQodWludDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydGUobG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRlKGxvbmc4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnR6KGxvbmc4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0eihsb25nOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0cChsb25nOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydHAobG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydG4obG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRuKGxvbmc4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDgobG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXQobG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydGUodWxvbmc4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0ZSh1bG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHoodWxvbmc4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0eih1bG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydHAodWxvbmc4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0cCh1bG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydG4odWxvbmc4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0bih1bG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OCh1bG9uZzgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXQodWxvbmc4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRlKGZsb2F0OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydGUoZmxvYXQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnR6KGZsb2F0OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydHooZmxvYXQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRwKGZsb2F0OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydHAoZmxvYXQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRuKGZsb2F0OCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydG4oZmxvYXQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDgoZmxvYXQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0KGZsb2F0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0ZShjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydGUoY2hhcjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydHooY2hhcjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnR6KGNoYXI4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRwKGNoYXI4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0cChjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0bihjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydG4oY2hhcjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OChjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdChjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0ZSh1Y2hhcjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRlKHVjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0eih1Y2hhcjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnR6KHVjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0cCh1Y2hhcjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRwKHVjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0bih1Y2hhcjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRuKHVjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4KHVjaGFyOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdCh1Y2hhcjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydGUoc2hvcnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0ZShzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydHooc2hvcnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0eihzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydHAoc2hvcnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0cChzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydG4oc2hvcnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0bihzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OChzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXQoc2hvcnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRlKHVzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRlKHVzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydHoodXNob3J0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydHoodXNob3J0OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0cCh1c2hvcnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0cCh1c2hvcnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRuKHVzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRuKHVzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OCh1c2hvcnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0KHVzaG9ydDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydGUoaW50OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydGUoaW50OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0eihpbnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0eihpbnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRwKGludDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRwKGludDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydG4oaW50OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydG4oaW50OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4KGludDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXQoaW50OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0ZSh1aW50OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydGUodWludDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydHoodWludDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnR6KHVpbnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRwKHVpbnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0cCh1aW50OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0bih1aW50OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydG4odWludDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OCh1aW50OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdCh1aW50OCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0ZShsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydGUobG9uZzgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydHoobG9uZzgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnR6KGxvbmc4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRwKGxvbmc4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0cChsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0bihsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydG4obG9uZzgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OChsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdChsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0ZSh1bG9uZzgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRlKHVsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0eih1bG9uZzgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnR6KHVsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0cCh1bG9uZzgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRwKHVsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0bih1bG9uZzgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRuKHVsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4KHVsb25nOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdCh1bG9uZzgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydGUoZmxvYXQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0ZShmbG9hdDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydHooZmxvYXQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0eihmbG9hdDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydHAoZmxvYXQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0cChmbG9hdDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydG4oZmxvYXQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0bihmbG9hdDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OChmbG9hdDgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXQoZmxvYXQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydGUoY2hhcjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydGUoY2hhcjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0eihjaGFyOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0eihjaGFyOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRwKGNoYXI4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRwKGNoYXI4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydG4oY2hhcjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydG4oY2hhcjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4KGNoYXI4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXQoY2hhcjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0ZSh1Y2hhcjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydGUodWNoYXI4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydHoodWNoYXI4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnR6KHVjaGFyOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRwKHVjaGFyOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0cCh1Y2hhcjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0bih1Y2hhcjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydG4odWNoYXI4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OCh1Y2hhcjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdCh1Y2hhcjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0ZShzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydGUoc2hvcnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydHooc2hvcnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnR6KHNob3J0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRwKHNob3J0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0cChzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0bihzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydG4oc2hvcnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OChzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdChzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0ZSh1c2hvcnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRlKHVzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0eih1c2hvcnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnR6KHVzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0cCh1c2hvcnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRwKHVzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0bih1c2hvcnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRuKHVzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4KHVzaG9ydDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdCh1c2hvcnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydGUoaW50OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0ZShpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydHooaW50OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0eihpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydHAoaW50OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0cChpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydG4oaW50OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0bihpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OChpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXQoaW50OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRlKHVpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRlKHVpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydHoodWludDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydHoodWludDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0cCh1aW50OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0cCh1aW50OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRuKHVpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRuKHVpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OCh1aW50OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0KHVpbnQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydGUobG9uZzgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydGUobG9uZzgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0eihsb25nOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0eihsb25nOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRwKGxvbmc4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRwKGxvbmc4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydG4obG9uZzgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydG4obG9uZzgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4KGxvbmc4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXQobG9uZzgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0ZSh1bG9uZzgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydGUodWxvbmc4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydHoodWxvbmc4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnR6KHVsb25nOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRwKHVsb25nOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0cCh1bG9uZzgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0bih1bG9uZzgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydG4odWxvbmc4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OCh1bG9uZzgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdCh1bG9uZzgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0ZShmbG9hdDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydGUoZmxvYXQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydHooZmxvYXQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnR6KGZsb2F0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRwKGZsb2F0OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0cChmbG9hdDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0bihmbG9hdDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydG4oZmxvYXQ4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OChmbG9hdDgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdChmbG9hdDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0ZShjaGFyOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0ZShjaGFyOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnR6KGNoYXI4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnR6KGNoYXI4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydHAoY2hhcjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHAoY2hhcjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0bihjaGFyOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0bihjaGFyOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzgoY2hhcjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdChjaGFyOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRlKHVjaGFyOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0ZSh1Y2hhcjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0eih1Y2hhcjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHoodWNoYXI4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydHAodWNoYXI4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRwKHVjaGFyOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRuKHVjaGFyOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0bih1Y2hhcjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4KHVjaGFyOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0KHVjaGFyOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRlKHNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0ZShzaG9ydDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0eihzaG9ydDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHooc2hvcnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydHAoc2hvcnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRwKHNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRuKHNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0bihzaG9ydDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4KHNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0KHNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRlKHVzaG9ydDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydGUodXNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnR6KHVzaG9ydDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHoodXNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRwKHVzaG9ydDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHAodXNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRuKHVzaG9ydDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydG4odXNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzgodXNob3J0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0KHVzaG9ydDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0ZShpbnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRlKGludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0eihpbnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnR6KGludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0cChpbnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRwKGludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0bihpbnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRuKGludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4KGludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdChpbnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydGUodWludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydGUodWludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0eih1aW50OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0eih1aW50OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRwKHVpbnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRwKHVpbnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydG4odWludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydG4odWludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4KHVpbnQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXQodWludDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0ZShsb25nOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0ZShsb25nOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnR6KGxvbmc4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnR6KGxvbmc4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydHAobG9uZzgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHAobG9uZzgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0bihsb25nOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0bihsb25nOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzgobG9uZzgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdChsb25nOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRlKHVsb25nOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0ZSh1bG9uZzgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0eih1bG9uZzgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHoodWxvbmc4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydHAodWxvbmc4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRwKHVsb25nOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRuKHVsb25nOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0bih1bG9uZzgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4KHVsb25nOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0KHVsb25nOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRlKGZsb2F0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0ZShmbG9hdDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0eihmbG9hdDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHooZmxvYXQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydHAoZmxvYXQ4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRwKGZsb2F0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRuKGZsb2F0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0bihmbG9hdDgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4KGZsb2F0OCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0KGZsb2F0OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydGUoY2hhcjgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0ZShjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydHooY2hhcjgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0eihjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydHAoY2hhcjgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0cChjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydG4oY2hhcjgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0bihjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOChjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXQoY2hhcjgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRlKHVjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRlKHVjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydHoodWNoYXI4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydHoodWNoYXI4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0cCh1Y2hhcjgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0cCh1Y2hhcjgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRuKHVjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRuKHVjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOCh1Y2hhcjgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0KHVjaGFyOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydGUoc2hvcnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydGUoc2hvcnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0eihzaG9ydDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0eihzaG9ydDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRwKHNob3J0OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRwKHNob3J0OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydG4oc2hvcnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydG4oc2hvcnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4KHNob3J0OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXQoc2hvcnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0ZSh1c2hvcnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydGUodXNob3J0OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydHoodXNob3J0OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnR6KHVzaG9ydDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRwKHVzaG9ydDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0cCh1c2hvcnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0bih1c2hvcnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydG4odXNob3J0OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOCh1c2hvcnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdCh1c2hvcnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0ZShpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydGUoaW50OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydHooaW50OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnR6KGludDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRwKGludDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0cChpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0bihpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydG4oaW50OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOChpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdChpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0ZSh1aW50OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRlKHVpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0eih1aW50OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnR6KHVpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0cCh1aW50OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRwKHVpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0bih1aW50OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRuKHVpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4KHVpbnQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdCh1aW50OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydGUobG9uZzgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0ZShsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydHoobG9uZzgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0eihsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydHAobG9uZzgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0cChsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydG4obG9uZzgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0bihsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOChsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXQobG9uZzgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRlKHVsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRlKHVsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydHoodWxvbmc4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydHoodWxvbmc4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0cCh1bG9uZzgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0cCh1bG9uZzgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRuKHVsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRuKHVsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOCh1bG9uZzgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0KHVsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydGUoZmxvYXQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydGUoZmxvYXQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0eihmbG9hdDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0eihmbG9hdDgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRwKGZsb2F0OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRwKGZsb2F0OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydG4oZmxvYXQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydG4oZmxvYXQ4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4KGZsb2F0OCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXQoZmxvYXQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0ZShjaGFyOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydHooY2hhcjgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRwKGNoYXI4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0bihjaGFyOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OChjaGFyOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydGUodWNoYXI4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0eih1Y2hhcjgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRwKHVjaGFyOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydG4odWNoYXI4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4KHVjaGFyOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydGUoc2hvcnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0eihzaG9ydDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRwKHNob3J0OCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydG4oc2hvcnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4KHNob3J0OCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydGUodXNob3J0OCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydHoodXNob3J0OCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydHAodXNob3J0OCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydG4odXNob3J0OCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OCh1c2hvcnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0ZShpbnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0eihpbnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0cChpbnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0bihpbnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4KGludDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRlKHVpbnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0eih1aW50OCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydHAodWludDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRuKHVpbnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4KHVpbnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0ZShsb25nOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydHoobG9uZzgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRwKGxvbmc4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0bihsb25nOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OChsb25nOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydGUodWxvbmc4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0eih1bG9uZzgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRwKHVsb25nOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydG4odWxvbmc4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4KHVsb25nOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydGUoZmxvYXQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0eihmbG9hdDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRwKGZsb2F0OCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydG4oZmxvYXQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4KGZsb2F0OCk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydGUoY2hhcjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydGUoY2hhcjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0eihjaGFyMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0eihjaGFyMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRwKGNoYXIxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRwKGNoYXIxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydG4oY2hhcjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydG4oY2hhcjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2KGNoYXIxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXQoY2hhcjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0ZSh1Y2hhcjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydGUodWNoYXIxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydHoodWNoYXIxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnR6KHVjaGFyMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRwKHVjaGFyMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0cCh1Y2hhcjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0bih1Y2hhcjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydG4odWNoYXIxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNih1Y2hhcjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdCh1Y2hhcjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0ZShzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydGUoc2hvcnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydHooc2hvcnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnR6KHNob3J0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRwKHNob3J0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0cChzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0bihzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydG4oc2hvcnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNihzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdChzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0ZSh1c2hvcnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRlKHVzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0eih1c2hvcnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnR6KHVzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0cCh1c2hvcnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRwKHVzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0bih1c2hvcnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRuKHVzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2KHVzaG9ydDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdCh1c2hvcnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydGUoaW50MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0ZShpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydHooaW50MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0eihpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydHAoaW50MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0cChpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydG4oaW50MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0bihpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNihpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXQoaW50MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRlKHVpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRlKHVpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydHoodWludDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydHoodWludDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0cCh1aW50MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0cCh1aW50MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRuKHVpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRuKHVpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNih1aW50MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0KHVpbnQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydGUobG9uZzE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydGUobG9uZzE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0eihsb25nMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0eihsb25nMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRwKGxvbmcxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRwKGxvbmcxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydG4obG9uZzE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydG4obG9uZzE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2KGxvbmcxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXQobG9uZzE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0ZSh1bG9uZzE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydGUodWxvbmcxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydHoodWxvbmcxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnR6KHVsb25nMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRwKHVsb25nMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0cCh1bG9uZzE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0bih1bG9uZzE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydG4odWxvbmcxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNih1bG9uZzE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdCh1bG9uZzE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0ZShmbG9hdDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydGUoZmxvYXQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydHooZmxvYXQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnR6KGZsb2F0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRwKGZsb2F0MTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0cChmbG9hdDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0bihmbG9hdDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydG4oZmxvYXQxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNihmbG9hdDE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdChmbG9hdDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRlKGNoYXIxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydGUoY2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnR6KGNoYXIxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydHooY2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRwKGNoYXIxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydHAoY2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRuKGNoYXIxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydG4oY2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTYoY2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0KGNoYXIxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0ZSh1Y2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0ZSh1Y2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnR6KHVjaGFyMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnR6KHVjaGFyMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydHAodWNoYXIxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydHAodWNoYXIxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0bih1Y2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0bih1Y2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTYodWNoYXIxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdCh1Y2hhcjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRlKHNob3J0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRlKHNob3J0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydHooc2hvcnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydHooc2hvcnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0cChzaG9ydDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0cChzaG9ydDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRuKHNob3J0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRuKHNob3J0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNihzaG9ydDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0KHNob3J0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydGUodXNob3J0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRlKHVzaG9ydDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnR6KHVzaG9ydDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0eih1c2hvcnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0cCh1c2hvcnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydHAodXNob3J0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydG4odXNob3J0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRuKHVzaG9ydDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTYodXNob3J0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXQodXNob3J0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydGUoaW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRlKGludDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnR6KGludDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0eihpbnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0cChpbnQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydHAoaW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydG4oaW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRuKGludDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTYoaW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXQoaW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydGUodWludDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0ZSh1aW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydHoodWludDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0eih1aW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydHAodWludDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0cCh1aW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydG4odWludDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0bih1aW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNih1aW50MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXQodWludDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRlKGxvbmcxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydGUobG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnR6KGxvbmcxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydHoobG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRwKGxvbmcxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydHAobG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRuKGxvbmcxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydG4obG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTYobG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0KGxvbmcxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0ZSh1bG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0ZSh1bG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnR6KHVsb25nMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnR6KHVsb25nMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydHAodWxvbmcxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydHAodWxvbmcxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0bih1bG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0bih1bG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTYodWxvbmcxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdCh1bG9uZzE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRlKGZsb2F0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRlKGZsb2F0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydHooZmxvYXQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydHooZmxvYXQxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0cChmbG9hdDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0cChmbG9hdDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRuKGZsb2F0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRuKGZsb2F0MTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNihmbG9hdDE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0KGZsb2F0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydGUoY2hhcjE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0ZShjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydHooY2hhcjE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0eihjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydHAoY2hhcjE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0cChjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydG4oY2hhcjE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0bihjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNihjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXQoY2hhcjE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRlKHVjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRlKHVjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydHoodWNoYXIxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydHoodWNoYXIxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0cCh1Y2hhcjE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0cCh1Y2hhcjE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRuKHVjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRuKHVjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNih1Y2hhcjE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0KHVjaGFyMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydGUoc2hvcnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydGUoc2hvcnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0eihzaG9ydDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0eihzaG9ydDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRwKHNob3J0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRwKHNob3J0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydG4oc2hvcnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydG4oc2hvcnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2KHNob3J0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXQoc2hvcnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0ZSh1c2hvcnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydGUodXNob3J0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydHoodXNob3J0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnR6KHVzaG9ydDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRwKHVzaG9ydDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0cCh1c2hvcnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0bih1c2hvcnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydG4odXNob3J0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNih1c2hvcnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdCh1c2hvcnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0ZShpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydGUoaW50MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydHooaW50MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnR6KGludDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRwKGludDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0cChpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0bihpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydG4oaW50MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNihpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdChpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0ZSh1aW50MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRlKHVpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0eih1aW50MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnR6KHVpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0cCh1aW50MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRwKHVpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0bih1aW50MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRuKHVpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2KHVpbnQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdCh1aW50MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydGUobG9uZzE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0ZShsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydHoobG9uZzE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0eihsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydHAobG9uZzE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0cChsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydG4obG9uZzE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0bihsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNihsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXQobG9uZzE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRlKHVsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRlKHVsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydHoodWxvbmcxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydHoodWxvbmcxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0cCh1bG9uZzE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0cCh1bG9uZzE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRuKHVsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRuKHVsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNih1bG9uZzE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0KHVsb25nMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydGUoZmxvYXQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydGUoZmxvYXQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0eihmbG9hdDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0eihmbG9hdDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRwKGZsb2F0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRwKGZsb2F0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydG4oZmxvYXQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydG4oZmxvYXQxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2KGZsb2F0MTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXQoZmxvYXQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRlKGNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0ZShjaGFyMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0eihjaGFyMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHooY2hhcjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydHAoY2hhcjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRwKGNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRuKGNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0bihjaGFyMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2KGNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0KGNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRlKHVjaGFyMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydGUodWNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnR6KHVjaGFyMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHoodWNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRwKHVjaGFyMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHAodWNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRuKHVjaGFyMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydG4odWNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTYodWNoYXIxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0KHVjaGFyMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0ZShzaG9ydDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRlKHNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0eihzaG9ydDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnR6KHNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0cChzaG9ydDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRwKHNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0bihzaG9ydDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRuKHNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2KHNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdChzaG9ydDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydGUodXNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydGUodXNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0eih1c2hvcnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0eih1c2hvcnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRwKHVzaG9ydDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRwKHVzaG9ydDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydG4odXNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydG4odXNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2KHVzaG9ydDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXQodXNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0ZShpbnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0ZShpbnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnR6KGludDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnR6KGludDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydHAoaW50MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHAoaW50MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0bihpbnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0bihpbnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTYoaW50MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdChpbnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRlKHVpbnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0ZSh1aW50MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0eih1aW50MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHoodWludDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydHAodWludDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRwKHVpbnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRuKHVpbnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0bih1aW50MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2KHVpbnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0KHVpbnQxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRlKGxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0ZShsb25nMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0eihsb25nMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHoobG9uZzE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydHAobG9uZzE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRwKGxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRuKGxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0bihsb25nMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2KGxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0KGxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRlKHVsb25nMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydGUodWxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnR6KHVsb25nMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHoodWxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRwKHVsb25nMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydHAodWxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRuKHVsb25nMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydG4odWxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTYodWxvbmcxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0KHVsb25nMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0ZShmbG9hdDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRlKGZsb2F0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0eihmbG9hdDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnR6KGZsb2F0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0cChmbG9hdDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRwKGZsb2F0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0bihmbG9hdDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRuKGZsb2F0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2KGZsb2F0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdChmbG9hdDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydGUoY2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRlKGNoYXIxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnR6KGNoYXIxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0eihjaGFyMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0cChjaGFyMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydHAoY2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydG4oY2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRuKGNoYXIxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTYoY2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXQoY2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydGUodWNoYXIxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0ZSh1Y2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHoodWNoYXIxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0eih1Y2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHAodWNoYXIxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0cCh1Y2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydG4odWNoYXIxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0bih1Y2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNih1Y2hhcjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXQodWNoYXIxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnRlKHNob3J0MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydGUoc2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnR6KHNob3J0MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydHooc2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnRwKHNob3J0MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydHAoc2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnRuKHNob3J0MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydG4oc2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTYoc2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0KHNob3J0MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0ZSh1c2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0ZSh1c2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnR6KHVzaG9ydDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnR6KHVzaG9ydDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHAodXNob3J0MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydHAodXNob3J0MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0bih1c2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0bih1c2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTYodXNob3J0MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdCh1c2hvcnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnRlKGludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRlKGludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHooaW50MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydHooaW50MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0cChpbnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0cChpbnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnRuKGludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRuKGludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNihpbnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0KGludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydGUodWludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRlKHVpbnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnR6KHVpbnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0eih1aW50MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0cCh1aW50MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydHAodWludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydG4odWludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRuKHVpbnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTYodWludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXQodWludDE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydGUobG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRlKGxvbmcxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnR6KGxvbmcxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0eihsb25nMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0cChsb25nMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydHAobG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydG4obG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRuKGxvbmcxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTYobG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXQobG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydGUodWxvbmcxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0ZSh1bG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHoodWxvbmcxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0eih1bG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHAodWxvbmcxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0cCh1bG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydG4odWxvbmcxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0bih1bG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNih1bG9uZzE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXQodWxvbmcxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnRlKGZsb2F0MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydGUoZmxvYXQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnR6KGZsb2F0MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydHooZmxvYXQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnRwKGZsb2F0MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydHAoZmxvYXQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnRuKGZsb2F0MTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydG4oZmxvYXQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTYoZmxvYXQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0KGZsb2F0MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRlKGNoYXIxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRlKGNoYXIxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydHooY2hhcjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydHooY2hhcjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0cChjaGFyMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0cChjaGFyMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRuKGNoYXIxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRuKGNoYXIxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNihjaGFyMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0KGNoYXIxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydGUodWNoYXIxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRlKHVjaGFyMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnR6KHVjaGFyMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0eih1Y2hhcjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0cCh1Y2hhcjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydHAodWNoYXIxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydG4odWNoYXIxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRuKHVjaGFyMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTYodWNoYXIxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXQodWNoYXIxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydGUoc2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRlKHNob3J0MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnR6KHNob3J0MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0eihzaG9ydDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0cChzaG9ydDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydHAoc2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydG4oc2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRuKHNob3J0MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTYoc2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXQoc2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydGUodXNob3J0MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0ZSh1c2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydHoodXNob3J0MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0eih1c2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydHAodXNob3J0MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0cCh1c2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydG4odXNob3J0MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0bih1c2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNih1c2hvcnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXQodXNob3J0MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRlKGludDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydGUoaW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnR6KGludDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydHooaW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRwKGludDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydHAoaW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRuKGludDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydG4oaW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTYoaW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0KGludDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0ZSh1aW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0ZSh1aW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnR6KHVpbnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnR6KHVpbnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydHAodWludDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydHAodWludDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0bih1aW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0bih1aW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTYodWludDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdCh1aW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRlKGxvbmcxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRlKGxvbmcxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydHoobG9uZzE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydHoobG9uZzE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0cChsb25nMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0cChsb25nMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRuKGxvbmcxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRuKGxvbmcxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNihsb25nMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0KGxvbmcxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydGUodWxvbmcxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRlKHVsb25nMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnR6KHVsb25nMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0eih1bG9uZzE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0cCh1bG9uZzE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydHAodWxvbmcxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydG4odWxvbmcxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRuKHVsb25nMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTYodWxvbmcxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXQodWxvbmcxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydGUoZmxvYXQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRlKGZsb2F0MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnR6KGZsb2F0MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0eihmbG9hdDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0cChmbG9hdDE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydHAoZmxvYXQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydG4oZmxvYXQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRuKGZsb2F0MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTYoZmxvYXQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXQoZmxvYXQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydGUoY2hhcjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydGUoY2hhcjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0eihjaGFyMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0eihjaGFyMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRwKGNoYXIxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRwKGNoYXIxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydG4oY2hhcjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydG4oY2hhcjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2KGNoYXIxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXQoY2hhcjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0ZSh1Y2hhcjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydGUodWNoYXIxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydHoodWNoYXIxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnR6KHVjaGFyMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRwKHVjaGFyMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0cCh1Y2hhcjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0bih1Y2hhcjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydG4odWNoYXIxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNih1Y2hhcjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdCh1Y2hhcjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0ZShzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydGUoc2hvcnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydHooc2hvcnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnR6KHNob3J0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRwKHNob3J0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0cChzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0bihzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydG4oc2hvcnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNihzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdChzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0ZSh1c2hvcnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRlKHVzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0eih1c2hvcnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnR6KHVzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0cCh1c2hvcnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRwKHVzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0bih1c2hvcnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRuKHVzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2KHVzaG9ydDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdCh1c2hvcnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydGUoaW50MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0ZShpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydHooaW50MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0eihpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydHAoaW50MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0cChpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydG4oaW50MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0bihpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNihpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXQoaW50MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRlKHVpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRlKHVpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydHoodWludDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydHoodWludDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0cCh1aW50MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0cCh1aW50MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRuKHVpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRuKHVpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNih1aW50MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0KHVpbnQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydGUobG9uZzE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydGUobG9uZzE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0eihsb25nMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0eihsb25nMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRwKGxvbmcxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRwKGxvbmcxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydG4obG9uZzE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydG4obG9uZzE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2KGxvbmcxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXQobG9uZzE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0ZSh1bG9uZzE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydGUodWxvbmcxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydHoodWxvbmcxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnR6KHVsb25nMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRwKHVsb25nMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0cCh1bG9uZzE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0bih1bG9uZzE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydG4odWxvbmcxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNih1bG9uZzE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdCh1bG9uZzE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0ZShmbG9hdDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydGUoZmxvYXQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydHooZmxvYXQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnR6KGZsb2F0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRwKGZsb2F0MTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0cChmbG9hdDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0bihmbG9hdDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydG4oZmxvYXQxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNihmbG9hdDE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdChmbG9hdDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRlKGNoYXIxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydGUoY2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnR6KGNoYXIxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydHooY2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRwKGNoYXIxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydHAoY2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRuKGNoYXIxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydG4oY2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTYoY2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0KGNoYXIxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0ZSh1Y2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0ZSh1Y2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnR6KHVjaGFyMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnR6KHVjaGFyMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydHAodWNoYXIxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydHAodWNoYXIxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0bih1Y2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0bih1Y2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTYodWNoYXIxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdCh1Y2hhcjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRlKHNob3J0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRlKHNob3J0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydHooc2hvcnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydHooc2hvcnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0cChzaG9ydDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0cChzaG9ydDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRuKHNob3J0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRuKHNob3J0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNihzaG9ydDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0KHNob3J0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydGUodXNob3J0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRlKHVzaG9ydDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnR6KHVzaG9ydDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0eih1c2hvcnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0cCh1c2hvcnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydHAodXNob3J0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydG4odXNob3J0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRuKHVzaG9ydDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTYodXNob3J0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXQodXNob3J0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydGUoaW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRlKGludDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnR6KGludDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0eihpbnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0cChpbnQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydHAoaW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydG4oaW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRuKGludDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTYoaW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXQoaW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydGUodWludDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0ZSh1aW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydHoodWludDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0eih1aW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydHAodWludDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0cCh1aW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydG4odWludDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0bih1aW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNih1aW50MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXQodWludDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRlKGxvbmcxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydGUobG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnR6KGxvbmcxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydHoobG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRwKGxvbmcxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydHAobG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRuKGxvbmcxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydG4obG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTYobG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0KGxvbmcxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0ZSh1bG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0ZSh1bG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnR6KHVsb25nMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnR6KHVsb25nMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydHAodWxvbmcxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydHAodWxvbmcxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0bih1bG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0bih1bG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTYodWxvbmcxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdCh1bG9uZzE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRlKGZsb2F0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRlKGZsb2F0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydHooZmxvYXQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydHooZmxvYXQxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0cChmbG9hdDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0cChmbG9hdDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRuKGZsb2F0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRuKGZsb2F0MTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNihmbG9hdDE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0KGZsb2F0MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydGUoY2hhcjE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnR6KGNoYXIxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0cChjaGFyMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydG4oY2hhcjE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTYoY2hhcjE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRlKHVjaGFyMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydHoodWNoYXIxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0cCh1Y2hhcjE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRuKHVjaGFyMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNih1Y2hhcjE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRlKHNob3J0MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydHooc2hvcnQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0cChzaG9ydDE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRuKHNob3J0MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNihzaG9ydDE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRlKHVzaG9ydDE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnR6KHVzaG9ydDE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRwKHVzaG9ydDE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRuKHVzaG9ydDE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTYodXNob3J0MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydGUoaW50MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydHooaW50MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydHAoaW50MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydG4oaW50MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNihpbnQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0ZSh1aW50MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydHoodWludDE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRwKHVpbnQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0bih1aW50MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNih1aW50MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydGUobG9uZzE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnR6KGxvbmcxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0cChsb25nMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydG4obG9uZzE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTYobG9uZzE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRlKHVsb25nMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydHoodWxvbmcxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0cCh1bG9uZzE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRuKHVsb25nMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNih1bG9uZzE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRlKGZsb2F0MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydHooZmxvYXQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0cChmbG9hdDE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRuKGZsb2F0MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNihmbG9hdDE2KTsKKworLy8gQ29udmVyc2lvbnMgd2l0aCBkb3VibGUgZGF0YSB0eXBlIHBhcmFtZXRlcnMgb3IgcmV0dXJuIHZhbHVlLgorCisjaWZkZWYgY2xfa2hyX2ZwNjQKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIoZG91YmxlKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRlKGRvdWJsZSk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0bihkb3VibGUpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydHAoZG91YmxlKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnR6KGRvdWJsZSk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdChkb3VibGUpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnRlKGRvdWJsZSk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdF9ydG4oZG91YmxlKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0cChkb3VibGUpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9zYXRfcnR6KGRvdWJsZSk7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjIoZG91YmxlMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRlKGRvdWJsZTIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0bihkb3VibGUyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydHAoZG91YmxlMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnR6KGRvdWJsZTIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdChkb3VibGUyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnRlKGRvdWJsZTIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydG4oZG91YmxlMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfc2F0X3J0cChkb3VibGUyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXRfcnR6KGRvdWJsZTIpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzKGRvdWJsZTMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0ZShkb3VibGUzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydG4oZG91YmxlMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRwKGRvdWJsZTMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0eihkb3VibGUzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXQoZG91YmxlMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0ZShkb3VibGUzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19zYXRfcnRuKGRvdWJsZTMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdF9ydHAoZG91YmxlMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0eihkb3VibGUzKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNChkb3VibGU0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydGUoZG91YmxlNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRuKGRvdWJsZTQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0cChkb3VibGU0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydHooZG91YmxlNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0KGRvdWJsZTQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydGUoZG91YmxlNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0X3J0bihkb3VibGU0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRwKGRvdWJsZTQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3NhdF9ydHooZG91YmxlNCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjgoZG91YmxlOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRlKGRvdWJsZTgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0bihkb3VibGU4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydHAoZG91YmxlOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnR6KGRvdWJsZTgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdChkb3VibGU4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnRlKGRvdWJsZTgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydG4oZG91YmxlOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfc2F0X3J0cChkb3VibGU4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXRfcnR6KGRvdWJsZTgpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTYoZG91YmxlMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRlKGRvdWJsZTE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0bihkb3VibGUxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydHAoZG91YmxlMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnR6KGRvdWJsZTE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdChkb3VibGUxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRlKGRvdWJsZTE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3NhdF9ydG4oZG91YmxlMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0X3J0cChkb3VibGUxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnR6KGRvdWJsZTE2KTsKKwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyKGRvdWJsZSk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRlKGRvdWJsZSk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRuKGRvdWJsZSk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRwKGRvdWJsZSk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnR6KGRvdWJsZSk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0KGRvdWJsZSk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0ZShkb3VibGUpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydG4oZG91YmxlKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRwKGRvdWJsZSk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0eihkb3VibGUpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjIoZG91YmxlMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydGUoZG91YmxlMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydG4oZG91YmxlMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydHAoZG91YmxlMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydHooZG91YmxlMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXQoZG91YmxlMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRlKGRvdWJsZTIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0bihkb3VibGUyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydHAoZG91YmxlMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnR6KGRvdWJsZTIpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjMoZG91YmxlMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydGUoZG91YmxlMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydG4oZG91YmxlMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydHAoZG91YmxlMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydHooZG91YmxlMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXQoZG91YmxlMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRlKGRvdWJsZTMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0bihkb3VibGUzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydHAoZG91YmxlMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnR6KGRvdWJsZTMpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjQoZG91YmxlNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydGUoZG91YmxlNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydG4oZG91YmxlNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHAoZG91YmxlNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHooZG91YmxlNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXQoZG91YmxlNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRlKGRvdWJsZTQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0bihkb3VibGU0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydHAoZG91YmxlNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnR6KGRvdWJsZTQpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjgoZG91YmxlOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydGUoZG91YmxlOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydG4oZG91YmxlOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydHAoZG91YmxlOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydHooZG91YmxlOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXQoZG91YmxlOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRlKGRvdWJsZTgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0bihkb3VibGU4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydHAoZG91YmxlOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnR6KGRvdWJsZTgpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNihkb3VibGUxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0ZShkb3VibGUxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0bihkb3VibGUxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0cChkb3VibGUxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0eihkb3VibGUxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdChkb3VibGUxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydGUoZG91YmxlMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRuKGRvdWJsZTE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0cChkb3VibGUxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydHooZG91YmxlMTYpOworCitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQoZG91YmxlKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydGUoZG91YmxlKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydG4oZG91YmxlKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHAoZG91YmxlKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydHooZG91YmxlKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXQoZG91YmxlKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRlKGRvdWJsZSk7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0bihkb3VibGUpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydHAoZG91YmxlKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnR6KGRvdWJsZSk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Mihkb3VibGUyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0ZShkb3VibGUyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0bihkb3VibGUyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0cChkb3VibGUyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0eihkb3VibGUyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdChkb3VibGUyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydGUoZG91YmxlMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRuKGRvdWJsZTIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0cChkb3VibGUyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHooZG91YmxlMik7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Myhkb3VibGUzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0ZShkb3VibGUzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0bihkb3VibGUzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0cChkb3VibGUzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0eihkb3VibGUzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdChkb3VibGUzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydGUoZG91YmxlMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRuKGRvdWJsZTMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0cChkb3VibGUzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydHooZG91YmxlMyk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NChkb3VibGU0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0ZShkb3VibGU0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0bihkb3VibGU0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0cChkb3VibGU0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0eihkb3VibGU0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdChkb3VibGU0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydGUoZG91YmxlNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRuKGRvdWJsZTQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0cChkb3VibGU0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydHooZG91YmxlNCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OChkb3VibGU4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0ZShkb3VibGU4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0bihkb3VibGU4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0cChkb3VibGU4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0eihkb3VibGU4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdChkb3VibGU4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydGUoZG91YmxlOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRuKGRvdWJsZTgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0cChkb3VibGU4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHooZG91YmxlOCk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2KGRvdWJsZTE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRlKGRvdWJsZTE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRuKGRvdWJsZTE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRwKGRvdWJsZTE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnR6KGRvdWJsZTE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0KGRvdWJsZTE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0ZShkb3VibGUxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydG4oZG91YmxlMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRwKGRvdWJsZTE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0eihkb3VibGUxNik7CisKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0KGRvdWJsZSk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydGUoZG91YmxlKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0bihkb3VibGUpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfcnRwKGRvdWJsZSk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9ydHooZG91YmxlKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdChkb3VibGUpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0ZShkb3VibGUpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0bihkb3VibGUpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0cChkb3VibGUpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0eihkb3VibGUpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Mihkb3VibGUyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRlKGRvdWJsZTIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9ydG4oZG91YmxlMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3J0cChkb3VibGUyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnR6KGRvdWJsZTIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXQoZG91YmxlMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydGUoZG91YmxlMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydG4oZG91YmxlMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydHAoZG91YmxlMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydHooZG91YmxlMik7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzKGRvdWJsZTMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydGUoZG91YmxlMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3J0bihkb3VibGUzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRwKGRvdWJsZTMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19ydHooZG91YmxlMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdChkb3VibGUzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0ZShkb3VibGUzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0bihkb3VibGUzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0cChkb3VibGUzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0eihkb3VibGUzKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDQoZG91YmxlNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0ZShkb3VibGU0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRuKGRvdWJsZTQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9ydHAoZG91YmxlNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3J0eihkb3VibGU0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0KGRvdWJsZTQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRlKGRvdWJsZTQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRuKGRvdWJsZTQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRwKGRvdWJsZTQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnR6KGRvdWJsZTQpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OChkb3VibGU4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRlKGRvdWJsZTgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9ydG4oZG91YmxlOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3J0cChkb3VibGU4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnR6KGRvdWJsZTgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXQoZG91YmxlOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydGUoZG91YmxlOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydG4oZG91YmxlOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydHAoZG91YmxlOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydHooZG91YmxlOCk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTYoZG91YmxlMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0ZShkb3VibGUxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfcnRuKGRvdWJsZTE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydHAoZG91YmxlMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3J0eihkb3VibGUxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0KGRvdWJsZTE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRlKGRvdWJsZTE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRuKGRvdWJsZTE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRwKGRvdWJsZTE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnR6KGRvdWJsZTE2KTsKKworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQoZG91YmxlKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0ZShkb3VibGUpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfcnRuKGRvdWJsZSk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9ydHAoZG91YmxlKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0eihkb3VibGUpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0KGRvdWJsZSk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRlKGRvdWJsZSk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRuKGRvdWJsZSk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRwKGRvdWJsZSk7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnR6KGRvdWJsZSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyKGRvdWJsZTIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydGUoZG91YmxlMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3J0bihkb3VibGUyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRwKGRvdWJsZTIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9ydHooZG91YmxlMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdChkb3VibGUyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0ZShkb3VibGUyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0bihkb3VibGUyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0cChkb3VibGUyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0eihkb3VibGUyKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDMoZG91YmxlMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0ZShkb3VibGUzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRuKGRvdWJsZTMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19ydHAoZG91YmxlMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3J0eihkb3VibGUzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0KGRvdWJsZTMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRlKGRvdWJsZTMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRuKGRvdWJsZTMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRwKGRvdWJsZTMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnR6KGRvdWJsZTMpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NChkb3VibGU0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRlKGRvdWJsZTQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9ydG4oZG91YmxlNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3J0cChkb3VibGU0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnR6KGRvdWJsZTQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXQoZG91YmxlNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydGUoZG91YmxlNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydG4oZG91YmxlNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydHAoZG91YmxlNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydHooZG91YmxlNCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4KGRvdWJsZTgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydGUoZG91YmxlOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3J0bihkb3VibGU4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRwKGRvdWJsZTgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9ydHooZG91YmxlOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdChkb3VibGU4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0ZShkb3VibGU4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0bihkb3VibGU4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0cChkb3VibGU4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0eihkb3VibGU4KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNihkb3VibGUxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnRlKGRvdWJsZTE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydG4oZG91YmxlMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3J0cChkb3VibGUxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfcnR6KGRvdWJsZTE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXQoZG91YmxlMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydGUoZG91YmxlMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydG4oZG91YmxlMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydHAoZG91YmxlMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydHooZG91YmxlMTYpOworCit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50KGRvdWJsZSk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0ZShkb3VibGUpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydG4oZG91YmxlKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRwKGRvdWJsZSk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0eihkb3VibGUpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXQoZG91YmxlKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0ZShkb3VibGUpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9zYXRfcnRuKGRvdWJsZSk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdF9ydHAoZG91YmxlKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0eihkb3VibGUpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyKGRvdWJsZTIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0ZShkb3VibGUyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydG4oZG91YmxlMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRwKGRvdWJsZTIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0eihkb3VibGUyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXQoZG91YmxlMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0ZShkb3VibGUyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXRfcnRuKGRvdWJsZTIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydHAoZG91YmxlMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfc2F0X3J0eihkb3VibGUyKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Myhkb3VibGUzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydGUoZG91YmxlMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRuKGRvdWJsZTMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0cChkb3VibGUzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydHooZG91YmxlMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0KGRvdWJsZTMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydGUoZG91YmxlMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0bihkb3VibGUzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19zYXRfcnRwKGRvdWJsZTMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdF9ydHooZG91YmxlMyk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDQoZG91YmxlNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRlKGRvdWJsZTQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0bihkb3VibGU0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydHAoZG91YmxlNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnR6KGRvdWJsZTQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdChkb3VibGU0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRlKGRvdWJsZTQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3NhdF9ydG4oZG91YmxlNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0X3J0cChkb3VibGU0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnR6KGRvdWJsZTQpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4KGRvdWJsZTgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0ZShkb3VibGU4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydG4oZG91YmxlOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRwKGRvdWJsZTgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0eihkb3VibGU4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXQoZG91YmxlOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0ZShkb3VibGU4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXRfcnRuKGRvdWJsZTgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydHAoZG91YmxlOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfc2F0X3J0eihkb3VibGU4KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2KGRvdWJsZTE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0ZShkb3VibGUxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydG4oZG91YmxlMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRwKGRvdWJsZTE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0eihkb3VibGUxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXQoZG91YmxlMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0ZShkb3VibGUxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRuKGRvdWJsZTE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3NhdF9ydHAoZG91YmxlMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0X3J0eihkb3VibGUxNik7CisKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcoZG91YmxlKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRlKGRvdWJsZSk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0bihkb3VibGUpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydHAoZG91YmxlKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnR6KGRvdWJsZSk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdChkb3VibGUpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnRlKGRvdWJsZSk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdF9ydG4oZG91YmxlKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0cChkb3VibGUpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19zYXRfcnR6KGRvdWJsZSk7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzIoZG91YmxlMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRlKGRvdWJsZTIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0bihkb3VibGUyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydHAoZG91YmxlMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnR6KGRvdWJsZTIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdChkb3VibGUyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnRlKGRvdWJsZTIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydG4oZG91YmxlMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfc2F0X3J0cChkb3VibGUyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXRfcnR6KGRvdWJsZTIpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczKGRvdWJsZTMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0ZShkb3VibGUzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydG4oZG91YmxlMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRwKGRvdWJsZTMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0eihkb3VibGUzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXQoZG91YmxlMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0ZShkb3VibGUzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19zYXRfcnRuKGRvdWJsZTMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdF9ydHAoZG91YmxlMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0eihkb3VibGUzKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNChkb3VibGU0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydGUoZG91YmxlNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRuKGRvdWJsZTQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0cChkb3VibGU0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydHooZG91YmxlNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0KGRvdWJsZTQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydGUoZG91YmxlNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0X3J0bihkb3VibGU0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRwKGRvdWJsZTQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3NhdF9ydHooZG91YmxlNCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzgoZG91YmxlOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRlKGRvdWJsZTgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0bihkb3VibGU4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydHAoZG91YmxlOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnR6KGRvdWJsZTgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdChkb3VibGU4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnRlKGRvdWJsZTgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydG4oZG91YmxlOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfc2F0X3J0cChkb3VibGU4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXRfcnR6KGRvdWJsZTgpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTYoZG91YmxlMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRlKGRvdWJsZTE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0bihkb3VibGUxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydHAoZG91YmxlMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnR6KGRvdWJsZTE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdChkb3VibGUxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRlKGRvdWJsZTE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3NhdF9ydG4oZG91YmxlMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0X3J0cChkb3VibGUxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnR6KGRvdWJsZTE2KTsKKwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nKGRvdWJsZSk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRlKGRvdWJsZSk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRuKGRvdWJsZSk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRwKGRvdWJsZSk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnR6KGRvdWJsZSk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0KGRvdWJsZSk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0ZShkb3VibGUpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydG4oZG91YmxlKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRwKGRvdWJsZSk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0eihkb3VibGUpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzIoZG91YmxlMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydGUoZG91YmxlMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydG4oZG91YmxlMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydHAoZG91YmxlMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydHooZG91YmxlMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXQoZG91YmxlMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRlKGRvdWJsZTIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0bihkb3VibGUyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydHAoZG91YmxlMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnR6KGRvdWJsZTIpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzMoZG91YmxlMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydGUoZG91YmxlMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydG4oZG91YmxlMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydHAoZG91YmxlMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydHooZG91YmxlMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXQoZG91YmxlMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRlKGRvdWJsZTMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0bihkb3VibGUzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydHAoZG91YmxlMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnR6KGRvdWJsZTMpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzQoZG91YmxlNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydGUoZG91YmxlNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydG4oZG91YmxlNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHAoZG91YmxlNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHooZG91YmxlNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXQoZG91YmxlNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRlKGRvdWJsZTQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0bihkb3VibGU0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydHAoZG91YmxlNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnR6KGRvdWJsZTQpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzgoZG91YmxlOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydGUoZG91YmxlOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydG4oZG91YmxlOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydHAoZG91YmxlOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydHooZG91YmxlOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXQoZG91YmxlOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRlKGRvdWJsZTgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0bihkb3VibGU4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydHAoZG91YmxlOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnR6KGRvdWJsZTgpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNihkb3VibGUxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0ZShkb3VibGUxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0bihkb3VibGUxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0cChkb3VibGUxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0eihkb3VibGUxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdChkb3VibGUxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydGUoZG91YmxlMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRuKGRvdWJsZTE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0cChkb3VibGUxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydHooZG91YmxlMTYpOworCitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQoZG91YmxlKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydGUoZG91YmxlKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydG4oZG91YmxlKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydHAoZG91YmxlKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydHooZG91YmxlKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyKGRvdWJsZTIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRlKGRvdWJsZTIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRuKGRvdWJsZTIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRwKGRvdWJsZTIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnR6KGRvdWJsZTIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDMoZG91YmxlMyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydGUoZG91YmxlMyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydG4oZG91YmxlMyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydHAoZG91YmxlMyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydHooZG91YmxlMyk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NChkb3VibGU0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0ZShkb3VibGU0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0bihkb3VibGU0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0cChkb3VibGU0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0eihkb3VibGU0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4KGRvdWJsZTgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRlKGRvdWJsZTgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRuKGRvdWJsZTgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRwKGRvdWJsZTgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnR6KGRvdWJsZTgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNihkb3VibGUxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0ZShkb3VibGUxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0bihkb3VibGUxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0cChkb3VibGUxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0eihkb3VibGUxNik7CisKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlKGNoYXIpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUoZG91YmxlKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlKGZsb2F0KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlKGludCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZShsb25nKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlKHNob3J0KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlKHVjaGFyKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlKHVpbnQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUodWxvbmcpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUodXNob3J0KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0ZShjaGFyKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0ZShkb3VibGUpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRlKGZsb2F0KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0ZShpbnQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRlKGxvbmcpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRlKHNob3J0KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0ZSh1Y2hhcik7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydGUodWludCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydGUodWxvbmcpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRlKHVzaG9ydCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydG4oY2hhcik7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydG4oZG91YmxlKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0bihmbG9hdCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydG4oaW50KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0bihsb25nKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0bihzaG9ydCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydG4odWNoYXIpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRuKHVpbnQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRuKHVsb25nKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0bih1c2hvcnQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRwKGNoYXIpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRwKGRvdWJsZSk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydHAoZmxvYXQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRwKGludCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydHAobG9uZyk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydHAoc2hvcnQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnRwKHVjaGFyKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0cCh1aW50KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0cCh1bG9uZyk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydHAodXNob3J0KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0eihjaGFyKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0eihkb3VibGUpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnR6KGZsb2F0KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0eihpbnQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnR6KGxvbmcpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnR6KHNob3J0KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0eih1Y2hhcik7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydHoodWludCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZV9ydHoodWxvbmcpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGVfcnR6KHVzaG9ydCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyKGNoYXIyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTIoZG91YmxlMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyKGZsb2F0Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyKGludDIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMihsb25nMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyKHNob3J0Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyKHVjaGFyMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyKHVpbnQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTIodWxvbmcyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTIodXNob3J0Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0ZShjaGFyMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0ZShkb3VibGUyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRlKGZsb2F0Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0ZShpbnQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRlKGxvbmcyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRlKHNob3J0Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0ZSh1Y2hhcjIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydGUodWludDIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydGUodWxvbmcyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRlKHVzaG9ydDIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydG4oY2hhcjIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydG4oZG91YmxlMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0bihmbG9hdDIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydG4oaW50Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0bihsb25nMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0bihzaG9ydDIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydG4odWNoYXIyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRuKHVpbnQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRuKHVsb25nMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0bih1c2hvcnQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRwKGNoYXIyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRwKGRvdWJsZTIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydHAoZmxvYXQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRwKGludDIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydHAobG9uZzIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydHAoc2hvcnQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnRwKHVjaGFyMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0cCh1aW50Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0cCh1bG9uZzIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydHAodXNob3J0Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0eihjaGFyMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0eihkb3VibGUyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnR6KGZsb2F0Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0eihpbnQyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnR6KGxvbmcyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnR6KHNob3J0Mik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUyX3J0eih1Y2hhcjIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydHoodWludDIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydHoodWxvbmcyKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTJfcnR6KHVzaG9ydDIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMyhjaGFyMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzKGRvdWJsZTMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMyhmbG9hdDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMyhpbnQzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTMobG9uZzMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMyhzaG9ydDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMyh1Y2hhcjMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMyh1aW50Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzKHVsb25nMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzKHVzaG9ydDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydGUoY2hhcjMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydGUoZG91YmxlMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0ZShmbG9hdDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydGUoaW50Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0ZShsb25nMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0ZShzaG9ydDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydGUodWNoYXIzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRlKHVpbnQzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRlKHVsb25nMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0ZSh1c2hvcnQzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRuKGNoYXIzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRuKGRvdWJsZTMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydG4oZmxvYXQzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRuKGludDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydG4obG9uZzMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydG4oc2hvcnQzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRuKHVjaGFyMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0bih1aW50Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0bih1bG9uZzMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydG4odXNob3J0Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0cChjaGFyMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0cChkb3VibGUzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRwKGZsb2F0Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0cChpbnQzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRwKGxvbmczKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRwKHNob3J0Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0cCh1Y2hhcjMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydHAodWludDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydHAodWxvbmczKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnRwKHVzaG9ydDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydHooY2hhcjMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydHooZG91YmxlMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0eihmbG9hdDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydHooaW50Myk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0eihsb25nMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0eihzaG9ydDMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlM19ydHoodWNoYXIzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnR6KHVpbnQzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTNfcnR6KHVsb25nMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0eih1c2hvcnQzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTQoY2hhcjQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNChkb3VibGU0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTQoZmxvYXQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTQoaW50NCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0KGxvbmc0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTQoc2hvcnQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTQodWNoYXI0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTQodWludDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNCh1bG9uZzQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNCh1c2hvcnQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRlKGNoYXI0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRlKGRvdWJsZTQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydGUoZmxvYXQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRlKGludDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydGUobG9uZzQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydGUoc2hvcnQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRlKHVjaGFyNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0ZSh1aW50NCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0ZSh1bG9uZzQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydGUodXNob3J0NCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0bihjaGFyNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0bihkb3VibGU0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRuKGZsb2F0NCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0bihpbnQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRuKGxvbmc0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRuKHNob3J0NCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0bih1Y2hhcjQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydG4odWludDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydG4odWxvbmc0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRuKHVzaG9ydDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydHAoY2hhcjQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydHAoZG91YmxlNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0cChmbG9hdDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydHAoaW50NCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0cChsb25nNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0cChzaG9ydDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydHAodWNoYXI0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRwKHVpbnQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRwKHVsb25nNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0cCh1c2hvcnQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnR6KGNoYXI0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnR6KGRvdWJsZTQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydHooZmxvYXQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnR6KGludDQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydHoobG9uZzQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydHooc2hvcnQ0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnR6KHVjaGFyNCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0eih1aW50NCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0X3J0eih1bG9uZzQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlNF9ydHoodXNob3J0NCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4KGNoYXI4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTgoZG91YmxlOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4KGZsb2F0OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4KGludDgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOChsb25nOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4KHNob3J0OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4KHVjaGFyOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4KHVpbnQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTgodWxvbmc4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTgodXNob3J0OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0ZShjaGFyOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0ZShkb3VibGU4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRlKGZsb2F0OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0ZShpbnQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRlKGxvbmc4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRlKHNob3J0OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0ZSh1Y2hhcjgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydGUodWludDgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydGUodWxvbmc4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRlKHVzaG9ydDgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydG4oY2hhcjgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydG4oZG91YmxlOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0bihmbG9hdDgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydG4oaW50OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0bihsb25nOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0bihzaG9ydDgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydG4odWNoYXI4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRuKHVpbnQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRuKHVsb25nOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0bih1c2hvcnQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRwKGNoYXI4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRwKGRvdWJsZTgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydHAoZmxvYXQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRwKGludDgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydHAobG9uZzgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydHAoc2hvcnQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnRwKHVjaGFyOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0cCh1aW50OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0cCh1bG9uZzgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydHAodXNob3J0OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0eihjaGFyOCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0eihkb3VibGU4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnR6KGZsb2F0OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0eihpbnQ4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnR6KGxvbmc4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnR6KHNob3J0OCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU4X3J0eih1Y2hhcjgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydHoodWludDgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydHoodWxvbmc4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZThfcnR6KHVzaG9ydDgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2KGNoYXIxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTYoZG91YmxlMTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2KGZsb2F0MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2KGludDE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNihsb25nMTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2KHNob3J0MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2KHVjaGFyMTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2KHVpbnQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTYodWxvbmcxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTYodXNob3J0MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0ZShjaGFyMTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0ZShkb3VibGUxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRlKGZsb2F0MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0ZShpbnQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRlKGxvbmcxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRlKHNob3J0MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0ZSh1Y2hhcjE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydGUodWludDE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydGUodWxvbmcxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRlKHVzaG9ydDE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydG4oY2hhcjE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydG4oZG91YmxlMTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0bihmbG9hdDE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydG4oaW50MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0bihsb25nMTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0bihzaG9ydDE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydG4odWNoYXIxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRuKHVpbnQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRuKHVsb25nMTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0bih1c2hvcnQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRwKGNoYXIxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRwKGRvdWJsZTE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydHAoZmxvYXQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRwKGludDE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydHAobG9uZzE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydHAoc2hvcnQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRwKHVjaGFyMTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0cCh1aW50MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0cCh1bG9uZzE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydHAodXNob3J0MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0eihjaGFyMTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0eihkb3VibGUxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnR6KGZsb2F0MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0eihpbnQxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnR6KGxvbmcxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnR6KHNob3J0MTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2X3J0eih1Y2hhcjE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydHoodWludDE2KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUxNl9ydHoodWxvbmcxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnR6KHVzaG9ydDE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisKKyNpZmRlZiBjbF9raHJfZnAxNgorLy8gQ29udmVydCBoYWxmIHR5cGVzIHRvIG5vbi1kb3VibGUgdHlwZXMuCit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIoaGFsZik7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnRlKGhhbGYpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3J0cChoYWxmKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9ydG4oaGFsZik7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfcnR6KGhhbGYpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdChoYWxmKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnRlKGhhbGYpOwordWNoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyX3NhdF9ydHAoaGFsZik7Cit1Y2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXJfc2F0X3J0bihoYWxmKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcl9zYXRfcnR6KGhhbGYpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjIoaGFsZjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnRlKGhhbGYyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3J0cChoYWxmMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9ydG4oaGFsZjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfcnR6KGhhbGYyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdChoYWxmMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnRlKGhhbGYyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIyX3NhdF9ydHAoaGFsZjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjJfc2F0X3J0bihoYWxmMik7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMl9zYXRfcnR6KGhhbGYyKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzKGhhbGYzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0ZShoYWxmMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19ydHAoaGFsZjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfcnRuKGhhbGYzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3J0eihoYWxmMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXQoaGFsZjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0ZShoYWxmMyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyM19zYXRfcnRwKGhhbGYzKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIzX3NhdF9ydG4oaGFsZjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjNfc2F0X3J0eihoYWxmMyk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNChoYWxmNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydGUoaGFsZjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfcnRwKGhhbGY0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3J0bihoYWxmNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9ydHooaGFsZjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0KGhhbGY0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydGUoaGFsZjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjRfc2F0X3J0cChoYWxmNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyNF9zYXRfcnRuKGhhbGY0KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI0X3NhdF9ydHooaGFsZjQpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjgoaGFsZjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnRlKGhhbGY4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3J0cChoYWxmOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9ydG4oaGFsZjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfcnR6KGhhbGY4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdChoYWxmOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnRlKGhhbGY4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXI4X3NhdF9ydHAoaGFsZjgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjhfc2F0X3J0bihoYWxmOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyOF9zYXRfcnR6KGhhbGY4KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTYoaGFsZjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnRlKGhhbGYxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3J0cChoYWxmMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9ydG4oaGFsZjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfcnR6KGhhbGYxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdChoYWxmMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnRlKGhhbGYxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91Y2hhcjE2X3NhdF9ydHAoaGFsZjE2KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VjaGFyMTZfc2F0X3J0bihoYWxmMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWNoYXIxNl9zYXRfcnR6KGhhbGYxNik7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydChoYWxmKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0ZShoYWxmKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0cChoYWxmKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0bihoYWxmKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3J0eihoYWxmKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdChoYWxmKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydGUoaGFsZik7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydF9zYXRfcnRwKGhhbGYpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnRfc2F0X3J0bihoYWxmKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0X3NhdF9ydHooaGFsZik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyKGhhbGYyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRlKGhhbGYyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRwKGhhbGYyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnRuKGhhbGYyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfcnR6KGhhbGYyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0KGhhbGYyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0ZShoYWxmMik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQyX3NhdF9ydHAoaGFsZjIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0Ml9zYXRfcnRuKGhhbGYyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDJfc2F0X3J0eihoYWxmMik7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzKGhhbGYzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRlKGhhbGYzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRwKGhhbGYzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnRuKGhhbGYzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfcnR6KGhhbGYzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0KGhhbGYzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0ZShoYWxmMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQzX3NhdF9ydHAoaGFsZjMpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0M19zYXRfcnRuKGhhbGYzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDNfc2F0X3J0eihoYWxmMyk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0KGhhbGY0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRlKGhhbGY0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRwKGhhbGY0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnRuKGhhbGY0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfcnR6KGhhbGY0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0KGhhbGY0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0ZShoYWxmNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ0X3NhdF9ydHAoaGFsZjQpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0NF9zYXRfcnRuKGhhbGY0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDRfc2F0X3J0eihoYWxmNCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4KGhhbGY4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRlKGhhbGY4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRwKGhhbGY4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnRuKGhhbGY4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfcnR6KGhhbGY4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0KGhhbGY4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0ZShoYWxmOCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQ4X3NhdF9ydHAoaGFsZjgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0OF9zYXRfcnRuKGhhbGY4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDhfc2F0X3J0eihoYWxmOCk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTYoaGFsZjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydGUoaGFsZjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydHAoaGFsZjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydG4oaGFsZjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9ydHooaGFsZjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXQoaGFsZjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnRlKGhhbGYxNik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdXNob3J0MTZfc2F0X3J0cChoYWxmMTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VzaG9ydDE2X3NhdF9ydG4oaGFsZjE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91c2hvcnQxNl9zYXRfcnR6KGhhbGYxNik7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50KGhhbGYpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydGUoaGFsZik7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3J0cChoYWxmKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfcnRuKGhhbGYpOwordWludCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludF9ydHooaGFsZik7Cit1aW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50X3NhdChoYWxmKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0ZShoYWxmKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0cChoYWxmKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0bihoYWxmKTsKK3VpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnRfc2F0X3J0eihoYWxmKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MihoYWxmMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnRlKGhhbGYyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9ydHAoaGFsZjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3J0bihoYWxmMik7Cit1aW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDJfcnR6KGhhbGYyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50Ml9zYXQoaGFsZjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydGUoaGFsZjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydHAoaGFsZjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydG4oaGFsZjIpOwordWludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQyX3NhdF9ydHooaGFsZjIpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzKGhhbGYzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydGUoaGFsZjMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3J0cChoYWxmMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfcnRuKGhhbGYzKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50M19ydHooaGFsZjMpOwordWludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQzX3NhdChoYWxmMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0ZShoYWxmMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0cChoYWxmMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0bihoYWxmMyk7Cit1aW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDNfc2F0X3J0eihoYWxmMyk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDQoaGFsZjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0ZShoYWxmNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfcnRwKGhhbGY0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9ydG4oaGFsZjQpOwordWludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ0X3J0eihoYWxmNCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDRfc2F0KGhhbGY0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRlKGhhbGY0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRwKGhhbGY0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnRuKGhhbGY0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50NF9zYXRfcnR6KGhhbGY0KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OChoYWxmOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnRlKGhhbGY4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9ydHAoaGFsZjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3J0bihoYWxmOCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDhfcnR6KGhhbGY4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50OF9zYXQoaGFsZjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydGUoaGFsZjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydHAoaGFsZjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydG4oaGFsZjgpOwordWludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQ4X3NhdF9ydHooaGFsZjgpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTYoaGFsZjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0ZShoYWxmMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfcnRwKGhhbGYxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9ydG4oaGFsZjE2KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWludDE2X3J0eihoYWxmMTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91aW50MTZfc2F0KGhhbGYxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRlKGhhbGYxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRwKGhhbGYxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnRuKGhhbGYxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3VpbnQxNl9zYXRfcnR6KGhhbGYxNik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcoaGFsZik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnRlKGhhbGYpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3J0cChoYWxmKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19ydG4oaGFsZik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfcnR6KGhhbGYpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdChoYWxmKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnRlKGhhbGYpOwordWxvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nX3NhdF9ydHAoaGFsZik7Cit1bG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmdfc2F0X3J0bihoYWxmKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZ19zYXRfcnR6KGhhbGYpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzIoaGFsZjIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnRlKGhhbGYyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3J0cChoYWxmMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9ydG4oaGFsZjIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfcnR6KGhhbGYyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdChoYWxmMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnRlKGhhbGYyKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcyX3NhdF9ydHAoaGFsZjIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzJfc2F0X3J0bihoYWxmMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMl9zYXRfcnR6KGhhbGYyKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczKGhhbGYzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0ZShoYWxmMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19ydHAoaGFsZjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfcnRuKGhhbGYzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3J0eihoYWxmMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXQoaGFsZjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0ZShoYWxmMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nM19zYXRfcnRwKGhhbGYzKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmczX3NhdF9ydG4oaGFsZjMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzNfc2F0X3J0eihoYWxmMyk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNChoYWxmNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydGUoaGFsZjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfcnRwKGhhbGY0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3J0bihoYWxmNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9ydHooaGFsZjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0KGhhbGY0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydGUoaGFsZjQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzRfc2F0X3J0cChoYWxmNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nNF9zYXRfcnRuKGhhbGY0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc0X3NhdF9ydHooaGFsZjQpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzgoaGFsZjgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnRlKGhhbGY4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3J0cChoYWxmOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9ydG4oaGFsZjgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfcnR6KGhhbGY4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdChoYWxmOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnRlKGhhbGY4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmc4X3NhdF9ydHAoaGFsZjgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzhfc2F0X3J0bihoYWxmOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nOF9zYXRfcnR6KGhhbGY4KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTYoaGFsZjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnRlKGhhbGYxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3J0cChoYWxmMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9ydG4oaGFsZjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfcnR6KGhhbGYxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdChoYWxmMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnRlKGhhbGYxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF91bG9uZzE2X3NhdF9ydHAoaGFsZjE2KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Vsb25nMTZfc2F0X3J0bihoYWxmMTYpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfdWxvbmcxNl9zYXRfcnR6KGhhbGYxNik7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyKGhhbGYpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydGUoaGFsZik7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3J0cChoYWxmKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfcnRuKGhhbGYpOworY2hhciBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcl9ydHooaGFsZik7CitjaGFyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyX3NhdChoYWxmKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0ZShoYWxmKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0cChoYWxmKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0bihoYWxmKTsKK2NoYXIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXJfc2F0X3J0eihoYWxmKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMihoYWxmMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnRlKGhhbGYyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9ydHAoaGFsZjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3J0bihoYWxmMik7CitjaGFyMiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjJfcnR6KGhhbGYyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMl9zYXQoaGFsZjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydGUoaGFsZjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHAoaGFsZjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydG4oaGFsZjIpOworY2hhcjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIyX3NhdF9ydHooaGFsZjIpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzKGhhbGYzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydGUoaGFsZjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3J0cChoYWxmMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfcnRuKGhhbGYzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyM19ydHooaGFsZjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIzX3NhdChoYWxmMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0ZShoYWxmMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0cChoYWxmMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0bihoYWxmMyk7CitjaGFyMyBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjNfc2F0X3J0eihoYWxmMyk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjQoaGFsZjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0ZShoYWxmNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfcnRwKGhhbGY0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9ydG4oaGFsZjQpOworY2hhcjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI0X3J0eihoYWxmNCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjRfc2F0KGhhbGY0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRlKGhhbGY0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRwKGhhbGY0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnRuKGhhbGY0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyNF9zYXRfcnR6KGhhbGY0KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOChoYWxmOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnRlKGhhbGY4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9ydHAoaGFsZjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3J0bihoYWxmOCk7CitjaGFyOCBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjhfcnR6KGhhbGY4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyOF9zYXQoaGFsZjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydGUoaGFsZjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHAoaGFsZjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydG4oaGFsZjgpOworY2hhcjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXI4X3NhdF9ydHooaGFsZjgpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTYoaGFsZjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0ZShoYWxmMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfcnRwKGhhbGYxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9ydG4oaGFsZjE2KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfY2hhcjE2X3J0eihoYWxmMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9jaGFyMTZfc2F0KGhhbGYxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRlKGhhbGYxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRwKGhhbGYxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnRuKGhhbGYxNik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2NoYXIxNl9zYXRfcnR6KGhhbGYxNik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQoaGFsZik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnRlKGhhbGYpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3J0cChoYWxmKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9ydG4oaGFsZik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfcnR6KGhhbGYpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdChoYWxmKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnRlKGhhbGYpOworc2hvcnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0X3NhdF9ydHAoaGFsZik7CitzaG9ydCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnRfc2F0X3J0bihoYWxmKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydF9zYXRfcnR6KGhhbGYpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDIoaGFsZjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnRlKGhhbGYyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3J0cChoYWxmMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9ydG4oaGFsZjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfcnR6KGhhbGYyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdChoYWxmMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnRlKGhhbGYyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQyX3NhdF9ydHAoaGFsZjIpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDJfc2F0X3J0bihoYWxmMik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0Ml9zYXRfcnR6KGhhbGYyKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzKGhhbGYzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0ZShoYWxmMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19ydHAoaGFsZjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfcnRuKGhhbGYzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3J0eihoYWxmMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXQoaGFsZjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0ZShoYWxmMyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0M19zYXRfcnRwKGhhbGYzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQzX3NhdF9ydG4oaGFsZjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDNfc2F0X3J0eihoYWxmMyk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NChoYWxmNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydGUoaGFsZjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfcnRwKGhhbGY0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3J0bihoYWxmNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9ydHooaGFsZjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0KGhhbGY0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydGUoaGFsZjQpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDRfc2F0X3J0cChoYWxmNCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0NF9zYXRfcnRuKGhhbGY0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ0X3NhdF9ydHooaGFsZjQpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDgoaGFsZjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnRlKGhhbGY4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3J0cChoYWxmOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9ydG4oaGFsZjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfcnR6KGhhbGY4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdChoYWxmOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnRlKGhhbGY4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQ4X3NhdF9ydHAoaGFsZjgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDhfc2F0X3J0bihoYWxmOCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0OF9zYXRfcnR6KGhhbGY4KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTYoaGFsZjE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnRlKGhhbGYxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3J0cChoYWxmMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9ydG4oaGFsZjE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfcnR6KGhhbGYxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdChoYWxmMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnRlKGhhbGYxNik7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9zaG9ydDE2X3NhdF9ydHAoaGFsZjE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X3Nob3J0MTZfc2F0X3J0bihoYWxmMTYpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfc2hvcnQxNl9zYXRfcnR6KGhhbGYxNik7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludChoYWxmKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0ZShoYWxmKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0cChoYWxmKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0bihoYWxmKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3J0eihoYWxmKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdChoYWxmKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydGUoaGFsZik7CitpbnQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludF9zYXRfcnRwKGhhbGYpOworaW50IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnRfc2F0X3J0bihoYWxmKTsKK2ludCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50X3NhdF9ydHooaGFsZik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyKGhhbGYyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRlKGhhbGYyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRwKGhhbGYyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnRuKGhhbGYyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfcnR6KGhhbGYyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0KGhhbGYyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0ZShoYWxmMik7CitpbnQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQyX3NhdF9ydHAoaGFsZjIpOworaW50MiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50Ml9zYXRfcnRuKGhhbGYyKTsKK2ludDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDJfc2F0X3J0eihoYWxmMik7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzKGhhbGYzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRlKGhhbGYzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRwKGhhbGYzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnRuKGhhbGYzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfcnR6KGhhbGYzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0KGhhbGYzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0ZShoYWxmMyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQzX3NhdF9ydHAoaGFsZjMpOworaW50MyBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50M19zYXRfcnRuKGhhbGYzKTsKK2ludDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDNfc2F0X3J0eihoYWxmMyk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0KGhhbGY0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRlKGhhbGY0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRwKGhhbGY0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnRuKGhhbGY0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfcnR6KGhhbGY0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0KGhhbGY0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0ZShoYWxmNCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ0X3NhdF9ydHAoaGFsZjQpOworaW50NCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50NF9zYXRfcnRuKGhhbGY0KTsKK2ludDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDRfc2F0X3J0eihoYWxmNCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4KGhhbGY4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRlKGhhbGY4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRwKGhhbGY4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnRuKGhhbGY4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfcnR6KGhhbGY4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0KGhhbGY4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0ZShoYWxmOCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQ4X3NhdF9ydHAoaGFsZjgpOworaW50OCBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50OF9zYXRfcnRuKGhhbGY4KTsKK2ludDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDhfc2F0X3J0eihoYWxmOCk7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTYoaGFsZjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydGUoaGFsZjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHAoaGFsZjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydG4oaGFsZjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9ydHooaGFsZjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXQoaGFsZjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnRlKGhhbGYxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaW50MTZfc2F0X3J0cChoYWxmMTYpOworaW50MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2ludDE2X3NhdF9ydG4oaGFsZjE2KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9pbnQxNl9zYXRfcnR6KGhhbGYxNik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nKGhhbGYpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydGUoaGFsZik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3J0cChoYWxmKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfcnRuKGhhbGYpOworbG9uZyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZ19ydHooaGFsZik7Citsb25nIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nX3NhdChoYWxmKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0ZShoYWxmKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0cChoYWxmKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0bihoYWxmKTsKK2xvbmcgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmdfc2F0X3J0eihoYWxmKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMihoYWxmMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnRlKGhhbGYyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9ydHAoaGFsZjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3J0bihoYWxmMik7Citsb25nMiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzJfcnR6KGhhbGYyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMl9zYXQoaGFsZjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydGUoaGFsZjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHAoaGFsZjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydG4oaGFsZjIpOworbG9uZzIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcyX3NhdF9ydHooaGFsZjIpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczKGhhbGYzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydGUoaGFsZjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3J0cChoYWxmMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfcnRuKGhhbGYzKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nM19ydHooaGFsZjMpOworbG9uZzMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmczX3NhdChoYWxmMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0ZShoYWxmMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0cChoYWxmMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0bihoYWxmMyk7Citsb25nMyBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzNfc2F0X3J0eihoYWxmMyk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzQoaGFsZjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0ZShoYWxmNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfcnRwKGhhbGY0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9ydG4oaGFsZjQpOworbG9uZzQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc0X3J0eihoYWxmNCk7Citsb25nNCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzRfc2F0KGhhbGY0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRlKGhhbGY0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRwKGhhbGY0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnRuKGhhbGY0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nNF9zYXRfcnR6KGhhbGY0KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOChoYWxmOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnRlKGhhbGY4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9ydHAoaGFsZjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3J0bihoYWxmOCk7Citsb25nOCBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzhfcnR6KGhhbGY4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nOF9zYXQoaGFsZjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydGUoaGFsZjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHAoaGFsZjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydG4oaGFsZjgpOworbG9uZzggX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmc4X3NhdF9ydHooaGFsZjgpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTYoaGFsZjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0ZShoYWxmMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfcnRwKGhhbGYxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9ydG4oaGFsZjE2KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfbG9uZzE2X3J0eihoYWxmMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9sb25nMTZfc2F0KGhhbGYxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRlKGhhbGYxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRwKGhhbGYxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnRuKGhhbGYxNik7Citsb25nMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2xvbmcxNl9zYXRfcnR6KGhhbGYxNik7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQoaGFsZik7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnRlKGhhbGYpOworZmxvYXQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0X3J0cChoYWxmKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdF9ydG4oaGFsZik7CitmbG9hdCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXRfcnR6KGhhbGYpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDIoaGFsZjIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnRlKGhhbGYyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQyX3J0cChoYWxmMik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0Ml9ydG4oaGFsZjIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDJfcnR6KGhhbGYyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzKGhhbGYzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0ZShoYWxmMyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0M19ydHAoaGFsZjMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDNfcnRuKGhhbGYzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQzX3J0eihoYWxmMyk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NChoYWxmNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydGUoaGFsZjQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDRfcnRwKGhhbGY0KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ0X3J0bihoYWxmNCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0NF9ydHooaGFsZjQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDgoaGFsZjgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnRlKGhhbGY4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQ4X3J0cChoYWxmOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0OF9ydG4oaGFsZjgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDhfcnR6KGhhbGY4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTYoaGFsZjE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnRlKGhhbGYxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9mbG9hdDE2X3J0cChoYWxmMTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZmxvYXQxNl9ydG4oaGFsZjE2KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2Zsb2F0MTZfcnR6KGhhbGYxNik7CisKKy8vIENvbnZlcnQgbm9uLWRvdWJsZSB0eXBlcyB0byBoYWxmIHR5cGVzLgoraGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZih1Y2hhcik7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmKHVzaG9ydCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmKHVpbnQpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZih1bG9uZyk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmKGNoYXIpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZihzaG9ydCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmKGludCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmKGxvbmcpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZihmbG9hdCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmKGhhbGYpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydGUodWNoYXIpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydGUodXNob3J0KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRlKHVpbnQpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydGUodWxvbmcpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydGUoY2hhcik7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0ZShzaG9ydCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0ZShpbnQpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydGUobG9uZyk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0ZShmbG9hdCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0ZShoYWxmKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRwKHVjaGFyKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRwKHVzaG9ydCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0cCh1aW50KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRwKHVsb25nKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRwKGNoYXIpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydHAoc2hvcnQpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydHAoaW50KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRwKGxvbmcpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydHAoZmxvYXQpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydHAoaGFsZik7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0bih1Y2hhcik7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0bih1c2hvcnQpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydG4odWludCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0bih1bG9uZyk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0bihjaGFyKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRuKHNob3J0KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRuKGludCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0bihsb25nKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRuKGZsb2F0KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRuKGhhbGYpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydHoodWNoYXIpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydHoodXNob3J0KTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnR6KHVpbnQpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydHoodWxvbmcpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydHooY2hhcik7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0eihzaG9ydCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0eihpbnQpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydHoobG9uZyk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0eihmbG9hdCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0eihoYWxmKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMihjaGFyMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjIodWNoYXIyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMihzaG9ydDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyKHVzaG9ydDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyKGludDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyKHVpbnQyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMihsb25nMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjIodWxvbmcyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMihmbG9hdDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyKGhhbGYyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydGUoY2hhcjIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0ZSh1Y2hhcjIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0ZShzaG9ydDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0ZSh1c2hvcnQyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydGUoaW50Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRlKHVpbnQyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydGUobG9uZzIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0ZSh1bG9uZzIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0ZShmbG9hdDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0ZShoYWxmMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRwKGNoYXIyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydHAodWNoYXIyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydHAoc2hvcnQyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydHAodXNob3J0Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRwKGludDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0cCh1aW50Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRwKGxvbmcyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydHAodWxvbmcyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydHAoZmxvYXQyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydHAoaGFsZjIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0bihjaGFyMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRuKHVjaGFyMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRuKHNob3J0Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRuKHVzaG9ydDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0bihpbnQyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydG4odWludDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0bihsb25nMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRuKHVsb25nMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRuKGZsb2F0Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRuKGhhbGYyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydHooY2hhcjIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0eih1Y2hhcjIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0eihzaG9ydDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0eih1c2hvcnQyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydHooaW50Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnR6KHVpbnQyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydHoobG9uZzIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0eih1bG9uZzIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0eihmbG9hdDIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0eihoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjMoY2hhcjMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzKHVjaGFyMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjMoc2hvcnQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMyh1c2hvcnQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMyhpbnQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMyh1aW50Myk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjMobG9uZzMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzKHVsb25nMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjMoZmxvYXQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMyhoYWxmMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRlKGNoYXIzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydGUodWNoYXIzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydGUoc2hvcnQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydGUodXNob3J0Myk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRlKGludDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0ZSh1aW50Myk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRlKGxvbmczKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydGUodWxvbmczKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydGUoZmxvYXQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydGUoaGFsZjMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0cChjaGFyMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRwKHVjaGFyMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRwKHNob3J0Myk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRwKHVzaG9ydDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0cChpbnQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHAodWludDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0cChsb25nMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRwKHVsb25nMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRwKGZsb2F0Myk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRwKGhhbGYzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydG4oY2hhcjMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0bih1Y2hhcjMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0bihzaG9ydDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0bih1c2hvcnQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydG4oaW50Myk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRuKHVpbnQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydG4obG9uZzMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0bih1bG9uZzMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0bihmbG9hdDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0bihoYWxmMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnR6KGNoYXIzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHoodWNoYXIzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHooc2hvcnQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHoodXNob3J0Myk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnR6KGludDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0eih1aW50Myk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnR6KGxvbmczKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHoodWxvbmczKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHooZmxvYXQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHooaGFsZjMpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0KGNoYXI0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNCh1Y2hhcjQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0KHNob3J0NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjQodXNob3J0NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjQoaW50NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjQodWludDQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0KGxvbmc0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNCh1bG9uZzQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0KGZsb2F0NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjQoaGFsZjQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0ZShjaGFyNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRlKHVjaGFyNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRlKHNob3J0NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRlKHVzaG9ydDQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0ZShpbnQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydGUodWludDQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0ZShsb25nNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRlKHVsb25nNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRlKGZsb2F0NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRlKGhhbGY0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydHAoY2hhcjQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0cCh1Y2hhcjQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0cChzaG9ydDQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0cCh1c2hvcnQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydHAoaW50NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRwKHVpbnQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydHAobG9uZzQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0cCh1bG9uZzQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0cChmbG9hdDQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0cChoYWxmNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRuKGNoYXI0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydG4odWNoYXI0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydG4oc2hvcnQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydG4odXNob3J0NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRuKGludDQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0bih1aW50NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRuKGxvbmc0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydG4odWxvbmc0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydG4oZmxvYXQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydG4oaGFsZjQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0eihjaGFyNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnR6KHVjaGFyNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnR6KHNob3J0NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnR6KHVzaG9ydDQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0eihpbnQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydHoodWludDQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0eihsb25nNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnR6KHVsb25nNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnR6KGZsb2F0NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnR6KGhhbGY0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOChjaGFyOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjgodWNoYXI4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOChzaG9ydDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4KHVzaG9ydDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4KGludDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4KHVpbnQ4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOChsb25nOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjgodWxvbmc4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOChmbG9hdDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4KGhhbGY4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydGUoY2hhcjgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0ZSh1Y2hhcjgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0ZShzaG9ydDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0ZSh1c2hvcnQ4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydGUoaW50OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRlKHVpbnQ4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydGUobG9uZzgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0ZSh1bG9uZzgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0ZShmbG9hdDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0ZShoYWxmOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRwKGNoYXI4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydHAodWNoYXI4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydHAoc2hvcnQ4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydHAodXNob3J0OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRwKGludDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0cCh1aW50OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRwKGxvbmc4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydHAodWxvbmc4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydHAoZmxvYXQ4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydHAoaGFsZjgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0bihjaGFyOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRuKHVjaGFyOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRuKHNob3J0OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRuKHVzaG9ydDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0bihpbnQ4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydG4odWludDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0bihsb25nOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRuKHVsb25nOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRuKGZsb2F0OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRuKGhhbGY4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydHooY2hhcjgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0eih1Y2hhcjgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0eihzaG9ydDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0eih1c2hvcnQ4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydHooaW50OCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnR6KHVpbnQ4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydHoobG9uZzgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0eih1bG9uZzgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0eihmbG9hdDgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0eihoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNihjaGFyMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTYodWNoYXIxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNihzaG9ydDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2KHVzaG9ydDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2KGludDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2KHVpbnQxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNihsb25nMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTYodWxvbmcxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNihmbG9hdDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2KGhhbGYxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydGUoY2hhcjE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0ZSh1Y2hhcjE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0ZShzaG9ydDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0ZSh1c2hvcnQxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydGUoaW50MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRlKHVpbnQxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydGUobG9uZzE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0ZSh1bG9uZzE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0ZShmbG9hdDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0ZShoYWxmMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRwKGNoYXIxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydHAodWNoYXIxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydHAoc2hvcnQxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydHAodXNob3J0MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRwKGludDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0cCh1aW50MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRwKGxvbmcxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydHAodWxvbmcxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydHAoZmxvYXQxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydHAoaGFsZjE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0bihjaGFyMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRuKHVjaGFyMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRuKHNob3J0MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRuKHVzaG9ydDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0bihpbnQxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydG4odWludDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0bihsb25nMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRuKHVsb25nMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRuKGZsb2F0MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRuKGhhbGYxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydHooY2hhcjE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0eih1Y2hhcjE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0eihzaG9ydDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0eih1c2hvcnQxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydHooaW50MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnR6KHVpbnQxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydHoobG9uZzE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0eih1bG9uZzE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0eihmbG9hdDE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0eihoYWxmMTYpOworCisvLyBDb252ZXJ0IGhhbGYgdHlwZXMgdG8gZG91YmxlIHR5cGVzLgorI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZShoYWxmKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0ZShoYWxmKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0cChoYWxmKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0bihoYWxmKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlX3J0eihoYWxmKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTIoaGFsZjIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydGUoaGFsZjIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydHAoaGFsZjIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydG4oaGFsZjIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMl9ydHooaGFsZjIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMyhoYWxmMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0ZShoYWxmMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0cChoYWxmMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0bihoYWxmMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGUzX3J0eihoYWxmMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9kb3VibGU0KGhhbGY0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRlKGhhbGY0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRwKGhhbGY0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnRuKGhhbGY0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTRfcnR6KGhhbGY0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTgoaGFsZjgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydGUoaGFsZjgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydHAoaGFsZjgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydG4oaGFsZjgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlOF9ydHooaGFsZjgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2RvdWJsZTE2KGhhbGYxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRlKGhhbGYxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRwKGhhbGYxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnRuKGhhbGYxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfZG91YmxlMTZfcnR6KGhhbGYxNik7CisKKy8vIENvbnZlcnQgZG91YmxlIHR5cGVzIHRvIGhhbGYgdHlwZXMuCitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmKGRvdWJsZSk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0ZShkb3VibGUpOworaGFsZiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZl9ydHAoZG91YmxlKTsKK2hhbGYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGZfcnRuKGRvdWJsZSk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmX3J0eihkb3VibGUpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyKGRvdWJsZTIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0ZShkb3VibGUyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMl9ydHAoZG91YmxlMik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjJfcnRuKGRvdWJsZTIpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYyX3J0eihkb3VibGUyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMyhkb3VibGUzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydGUoZG91YmxlMyk7CitoYWxmMyBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjNfcnRwKGRvdWJsZTMpOworaGFsZjMgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYzX3J0bihkb3VibGUzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmM19ydHooZG91YmxlMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjQoZG91YmxlNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnRlKGRvdWJsZTQpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY0X3J0cChkb3VibGU0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmNF9ydG4oZG91YmxlNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjRfcnR6KGRvdWJsZTQpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4KGRvdWJsZTgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0ZShkb3VibGU4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmOF9ydHAoZG91YmxlOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjhfcnRuKGRvdWJsZTgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGY4X3J0eihkb3VibGU4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2KGRvdWJsZTE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0ZShkb3VibGUxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb252ZXJ0X2hhbGYxNl9ydHAoZG91YmxlMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY29udmVydF9oYWxmMTZfcnRuKGRvdWJsZTE2KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvbnZlcnRfaGFsZjE2X3J0eihkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorCisjZW5kaWYgLy8gY2xfa2hyX2ZwMTYKKworLyoqCisgKiBPcGVuQ0wgdjEuMS8xLjIvMi4wIHM2LjIuNC4yIC0gYXNfdHlwZSBvcGVyYXRvcnMKKyAqIFJlaW50ZXJwcmV0cyBhIGRhdGEgdHlwZSBhcyBhbm90aGVyIGRhdGEgdHlwZSBvZiB0aGUgc2FtZSBzaXplCisgKi8KK2NoYXIgX19vdmxkIF9fY25mbiBhc19jaGFyKGNoYXIpOworY2hhciBfX292bGQgX19jbmZuIGFzX2NoYXIodWNoYXIpOworCitjaGFyMiBfX292bGQgX19jbmZuIGFzX2NoYXIyKGNoYXIyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjIodWNoYXIyKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjIoc2hvcnQpOworY2hhcjIgX19vdmxkIF9fY25mbiBhc19jaGFyMih1c2hvcnQpOworCitjaGFyMyBfX292bGQgX19jbmZuIGFzX2NoYXIzKGNoYXIzKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjMoY2hhcjQpOworY2hhcjMgX19vdmxkIF9fY25mbiBhc19jaGFyMyh1Y2hhcjMpOworY2hhcjMgX19vdmxkIF9fY25mbiBhc19jaGFyMyh1Y2hhcjQpOworY2hhcjMgX19vdmxkIF9fY25mbiBhc19jaGFyMyhzaG9ydDIpOworY2hhcjMgX19vdmxkIF9fY25mbiBhc19jaGFyMyh1c2hvcnQyKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjMoaW50KTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjModWludCk7CitjaGFyMyBfX292bGQgX19jbmZuIGFzX2NoYXIzKGZsb2F0KTsKKworY2hhcjQgX19vdmxkIF9fY25mbiBhc19jaGFyNChjaGFyMyk7CitjaGFyNCBfX292bGQgX19jbmZuIGFzX2NoYXI0KGNoYXI0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjQodWNoYXIzKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjQodWNoYXI0KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjQoc2hvcnQyKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjQodXNob3J0Mik7CitjaGFyNCBfX292bGQgX19jbmZuIGFzX2NoYXI0KGludCk7CitjaGFyNCBfX292bGQgX19jbmZuIGFzX2NoYXI0KHVpbnQpOworY2hhcjQgX19vdmxkIF9fY25mbiBhc19jaGFyNChmbG9hdCk7CisKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjgoY2hhcjgpOworY2hhcjggX19vdmxkIF9fY25mbiBhc19jaGFyOCh1Y2hhcjgpOworY2hhcjggX19vdmxkIF9fY25mbiBhc19jaGFyOChzaG9ydDMpOworY2hhcjggX19vdmxkIF9fY25mbiBhc19jaGFyOChzaG9ydDQpOworY2hhcjggX19vdmxkIF9fY25mbiBhc19jaGFyOCh1c2hvcnQzKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjgodXNob3J0NCk7CitjaGFyOCBfX292bGQgX19jbmZuIGFzX2NoYXI4KGludDIpOworY2hhcjggX19vdmxkIF9fY25mbiBhc19jaGFyOCh1aW50Mik7CitjaGFyOCBfX292bGQgX19jbmZuIGFzX2NoYXI4KGxvbmcpOworY2hhcjggX19vdmxkIF9fY25mbiBhc19jaGFyOCh1bG9uZyk7CitjaGFyOCBfX292bGQgX19jbmZuIGFzX2NoYXI4KGZsb2F0Mik7CisKK2NoYXIxNiBfX292bGQgX19jbmZuIGFzX2NoYXIxNihjaGFyMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjE2KHVjaGFyMTYpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjE2KHNob3J0OCk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBhc19jaGFyMTYodXNob3J0OCk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBhc19jaGFyMTYoaW50Myk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBhc19jaGFyMTYoaW50NCk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBhc19jaGFyMTYodWludDMpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjE2KHVpbnQ0KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGFzX2NoYXIxNihsb25nMik7CitjaGFyMTYgX19vdmxkIF9fY25mbiBhc19jaGFyMTYodWxvbmcyKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGFzX2NoYXIxNihmbG9hdDMpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjE2KGZsb2F0NCk7CisKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIoY2hhcik7Cit1Y2hhciBfX292bGQgX19jbmZuIGFzX3VjaGFyKHVjaGFyKTsKKwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIyKGNoYXIyKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGFzX3VjaGFyMih1Y2hhcjIpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIyKHNob3J0KTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGFzX3VjaGFyMih1c2hvcnQpOworCit1Y2hhcjMgX19vdmxkIF9fY25mbiBhc191Y2hhcjMoY2hhcjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIzKGNoYXI0KTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGFzX3VjaGFyMyh1Y2hhcjMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIzKHVjaGFyNCk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBhc191Y2hhcjMoc2hvcnQyKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGFzX3VjaGFyMyh1c2hvcnQyKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGFzX3VjaGFyMyhpbnQpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIzKHVpbnQpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIzKGZsb2F0KTsKKwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXI0KGNoYXIzKTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGFzX3VjaGFyNChjaGFyNCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBhc191Y2hhcjQodWNoYXIzKTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGFzX3VjaGFyNCh1Y2hhcjQpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXI0KHNob3J0Mik7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBhc191Y2hhcjQodXNob3J0Mik7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBhc191Y2hhcjQoaW50KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGFzX3VjaGFyNCh1aW50KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGFzX3VjaGFyNChmbG9hdCk7CisKK3VjaGFyOCBfX292bGQgX19jbmZuIGFzX3VjaGFyOChjaGFyOCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBhc191Y2hhcjgodWNoYXI4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGFzX3VjaGFyOChzaG9ydDMpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXI4KHNob3J0NCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBhc191Y2hhcjgodXNob3J0Myk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBhc191Y2hhcjgodXNob3J0NCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBhc191Y2hhcjgoaW50Mik7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBhc191Y2hhcjgodWludDIpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXI4KGxvbmcpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXI4KHVsb25nKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGFzX3VjaGFyOChmbG9hdDIpOworCit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIxNihjaGFyMTYpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGFzX3VjaGFyMTYodWNoYXIxNik7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIxNihzaG9ydDgpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGFzX3VjaGFyMTYodXNob3J0OCk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIxNihpbnQzKTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBhc191Y2hhcjE2KGludDQpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGFzX3VjaGFyMTYodWludDMpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGFzX3VjaGFyMTYodWludDQpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGFzX3VjaGFyMTYobG9uZzIpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGFzX3VjaGFyMTYodWxvbmcyKTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBhc191Y2hhcjE2KGZsb2F0Myk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXIxNihmbG9hdDQpOworCitzaG9ydCBfX292bGQgX19jbmZuIGFzX3Nob3J0KGNoYXIyKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQodWNoYXIyKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQoc2hvcnQpOworc2hvcnQgX19vdmxkIF9fY25mbiBhc19zaG9ydCh1c2hvcnQpOworCitzaG9ydDIgX19vdmxkIF9fY25mbiBhc19zaG9ydDIoY2hhcjMpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQyKGNoYXI0KTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGFzX3Nob3J0Mih1Y2hhcjMpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQyKHVjaGFyNCk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBhc19zaG9ydDIoc2hvcnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGFzX3Nob3J0Mih1c2hvcnQyKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGFzX3Nob3J0MihpbnQpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQyKHVpbnQpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQyKGZsb2F0KTsKKworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQzKGNoYXI4KTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGFzX3Nob3J0Myh1Y2hhcjgpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQzKHNob3J0Myk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBhc19zaG9ydDMoc2hvcnQ0KTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGFzX3Nob3J0Myh1c2hvcnQzKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGFzX3Nob3J0Myh1c2hvcnQ0KTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGFzX3Nob3J0MyhpbnQyKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGFzX3Nob3J0Myh1aW50Mik7CitzaG9ydDMgX19vdmxkIF9fY25mbiBhc19zaG9ydDMobG9uZyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBhc19zaG9ydDModWxvbmcpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQzKGZsb2F0Mik7CisKK3Nob3J0NCBfX292bGQgX19jbmZuIGFzX3Nob3J0NChjaGFyOCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBhc19zaG9ydDQodWNoYXI4KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGFzX3Nob3J0NChzaG9ydDMpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ0KHNob3J0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBhc19zaG9ydDQodXNob3J0Myk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBhc19zaG9ydDQodXNob3J0NCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBhc19zaG9ydDQoaW50Mik7CitzaG9ydDQgX19vdmxkIF9fY25mbiBhc19zaG9ydDQodWludDIpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ0KGxvbmcpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ0KHVsb25nKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGFzX3Nob3J0NChmbG9hdDIpOworCitzaG9ydDggX19vdmxkIF9fY25mbiBhc19zaG9ydDgoY2hhcjE2KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGFzX3Nob3J0OCh1Y2hhcjE2KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGFzX3Nob3J0OChzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ4KHVzaG9ydDgpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ4KGludDMpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ4KGludDQpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ4KHVpbnQzKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGFzX3Nob3J0OCh1aW50NCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBhc19zaG9ydDgobG9uZzIpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ4KHVsb25nMik7CitzaG9ydDggX19vdmxkIF9fY25mbiBhc19zaG9ydDgoZmxvYXQzKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGFzX3Nob3J0OChmbG9hdDQpOworCitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQxNihzaG9ydDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBhc19zaG9ydDE2KHVzaG9ydDE2KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBhc19zaG9ydDE2KGludDgpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGFzX3Nob3J0MTYodWludDgpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGFzX3Nob3J0MTYobG9uZzMpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGFzX3Nob3J0MTYobG9uZzQpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGFzX3Nob3J0MTYodWxvbmczKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBhc19zaG9ydDE2KHVsb25nNCk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQxNihmbG9hdDgpOworCit1c2hvcnQgX19vdmxkIF9fY25mbiBhc191c2hvcnQoY2hhcjIpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0KHVjaGFyMik7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBhc191c2hvcnQoc2hvcnQpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0KHVzaG9ydCk7CisKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBhc191c2hvcnQyKGNoYXIzKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBhc191c2hvcnQyKGNoYXI0KTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBhc191c2hvcnQyKHVjaGFyMyk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0Mih1Y2hhcjQpOwordXNob3J0MiBfX292bGQgX19jbmZuIGFzX3VzaG9ydDIoc2hvcnQyKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBhc191c2hvcnQyKHVzaG9ydDIpOwordXNob3J0MiBfX292bGQgX19jbmZuIGFzX3VzaG9ydDIoaW50KTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBhc191c2hvcnQyKHVpbnQpOwordXNob3J0MiBfX292bGQgX19jbmZuIGFzX3VzaG9ydDIoZmxvYXQpOworCit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MyhjaGFyOCk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0Myh1Y2hhcjgpOwordXNob3J0MyBfX292bGQgX19jbmZuIGFzX3VzaG9ydDMoc2hvcnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBhc191c2hvcnQzKHNob3J0NCk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0Myh1c2hvcnQzKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBhc191c2hvcnQzKHVzaG9ydDQpOwordXNob3J0MyBfX292bGQgX19jbmZuIGFzX3VzaG9ydDMoaW50Mik7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0Myh1aW50Mik7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0Myhsb25nKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBhc191c2hvcnQzKHVsb25nKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBhc191c2hvcnQzKGZsb2F0Mik7CisKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBhc191c2hvcnQ0KGNoYXI4KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBhc191c2hvcnQ0KHVjaGFyOCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0NChzaG9ydDMpOwordXNob3J0NCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDQoc2hvcnQ0KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBhc191c2hvcnQ0KHVzaG9ydDMpOwordXNob3J0NCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDQodXNob3J0NCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0NChpbnQyKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBhc191c2hvcnQ0KHVpbnQyKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBhc191c2hvcnQ0KGxvbmcpOwordXNob3J0NCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDQodWxvbmcpOwordXNob3J0NCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDQoZmxvYXQyKTsKKwordXNob3J0OCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDgoY2hhcjE2KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBhc191c2hvcnQ4KHVjaGFyMTYpOwordXNob3J0OCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDgoc2hvcnQ4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBhc191c2hvcnQ4KHVzaG9ydDgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDgoaW50Myk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0OChpbnQ0KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBhc191c2hvcnQ4KHVpbnQzKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBhc191c2hvcnQ4KHVpbnQ0KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBhc191c2hvcnQ4KGxvbmcyKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBhc191c2hvcnQ4KHVsb25nMik7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0OChmbG9hdDMpOwordXNob3J0OCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDgoZmxvYXQ0KTsKKwordXNob3J0MTYgX19vdmxkIF9fY25mbiBhc191c2hvcnQxNihzaG9ydDE2KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MTYodXNob3J0MTYpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBhc191c2hvcnQxNihpbnQ4KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MTYodWludDgpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBhc191c2hvcnQxNihsb25nMyk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGFzX3VzaG9ydDE2KGxvbmc0KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MTYodWxvbmczKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MTYodWxvbmc0KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MTYoZmxvYXQ4KTsKKworaW50IF9fb3ZsZCBfX2NuZm4gYXNfaW50KGNoYXIzKTsKK2ludCBfX292bGQgX19jbmZuIGFzX2ludChjaGFyNCk7CitpbnQgX19vdmxkIF9fY25mbiBhc19pbnQodWNoYXIzKTsKK2ludCBfX292bGQgX19jbmZuIGFzX2ludCh1Y2hhcjQpOworaW50IF9fb3ZsZCBfX2NuZm4gYXNfaW50KHNob3J0Mik7CitpbnQgX19vdmxkIF9fY25mbiBhc19pbnQodXNob3J0Mik7CitpbnQgX19vdmxkIF9fY25mbiBhc19pbnQoaW50KTsKK2ludCBfX292bGQgX19jbmZuIGFzX2ludCh1aW50KTsKK2ludCBfX292bGQgX19jbmZuIGFzX2ludChmbG9hdCk7CisKK2ludDIgX19vdmxkIF9fY25mbiBhc19pbnQyKGNoYXI4KTsKK2ludDIgX19vdmxkIF9fY25mbiBhc19pbnQyKHVjaGFyOCk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfaW50MihzaG9ydDMpOworaW50MiBfX292bGQgX19jbmZuIGFzX2ludDIoc2hvcnQ0KTsKK2ludDIgX19vdmxkIF9fY25mbiBhc19pbnQyKHVzaG9ydDMpOworaW50MiBfX292bGQgX19jbmZuIGFzX2ludDIodXNob3J0NCk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfaW50MihpbnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBhc19pbnQyKHVpbnQyKTsKK2ludDIgX19vdmxkIF9fY25mbiBhc19pbnQyKGxvbmcpOworaW50MiBfX292bGQgX19jbmZuIGFzX2ludDIodWxvbmcpOworaW50MiBfX292bGQgX19jbmZuIGFzX2ludDIoZmxvYXQyKTsKKworaW50MyBfX292bGQgX19jbmZuIGFzX2ludDMoY2hhcjE2KTsKK2ludDMgX19vdmxkIF9fY25mbiBhc19pbnQzKHVjaGFyMTYpOworaW50MyBfX292bGQgX19jbmZuIGFzX2ludDMoc2hvcnQ4KTsKK2ludDMgX19vdmxkIF9fY25mbiBhc19pbnQzKHVzaG9ydDgpOworaW50MyBfX292bGQgX19jbmZuIGFzX2ludDMoaW50Myk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gYXNfaW50MyhpbnQ0KTsKK2ludDMgX19vdmxkIF9fY25mbiBhc19pbnQzKHVpbnQzKTsKK2ludDMgX19vdmxkIF9fY25mbiBhc19pbnQzKHVpbnQ0KTsKK2ludDMgX19vdmxkIF9fY25mbiBhc19pbnQzKGxvbmcyKTsKK2ludDMgX19vdmxkIF9fY25mbiBhc19pbnQzKHVsb25nMik7CitpbnQzIF9fb3ZsZCBfX2NuZm4gYXNfaW50MyhmbG9hdDMpOworaW50MyBfX292bGQgX19jbmZuIGFzX2ludDMoZmxvYXQ0KTsKKworaW50NCBfX292bGQgX19jbmZuIGFzX2ludDQoY2hhcjE2KTsKK2ludDQgX19vdmxkIF9fY25mbiBhc19pbnQ0KHVjaGFyMTYpOworaW50NCBfX292bGQgX19jbmZuIGFzX2ludDQoc2hvcnQ4KTsKK2ludDQgX19vdmxkIF9fY25mbiBhc19pbnQ0KHVzaG9ydDgpOworaW50NCBfX292bGQgX19jbmZuIGFzX2ludDQoaW50Myk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gYXNfaW50NChpbnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBhc19pbnQ0KHVpbnQzKTsKK2ludDQgX19vdmxkIF9fY25mbiBhc19pbnQ0KHVpbnQ0KTsKK2ludDQgX19vdmxkIF9fY25mbiBhc19pbnQ0KGxvbmcyKTsKK2ludDQgX19vdmxkIF9fY25mbiBhc19pbnQ0KHVsb25nMik7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gYXNfaW50NChmbG9hdDMpOworaW50NCBfX292bGQgX19jbmZuIGFzX2ludDQoZmxvYXQ0KTsKKworaW50OCBfX292bGQgX19jbmZuIGFzX2ludDgoc2hvcnQxNik7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gYXNfaW50OCh1c2hvcnQxNik7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gYXNfaW50OChpbnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBhc19pbnQ4KHVpbnQ4KTsKK2ludDggX19vdmxkIF9fY25mbiBhc19pbnQ4KGxvbmczKTsKK2ludDggX19vdmxkIF9fY25mbiBhc19pbnQ4KGxvbmc0KTsKK2ludDggX19vdmxkIF9fY25mbiBhc19pbnQ4KHVsb25nMyk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gYXNfaW50OCh1bG9uZzQpOworaW50OCBfX292bGQgX19jbmZuIGFzX2ludDgoZmxvYXQ4KTsKKworaW50MTYgX19vdmxkIF9fY25mbiBhc19pbnQxNihpbnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGFzX2ludDE2KHVpbnQxNik7CitpbnQxNiBfX292bGQgX19jbmZuIGFzX2ludDE2KGxvbmc4KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gYXNfaW50MTYodWxvbmc4KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gYXNfaW50MTYoZmxvYXQxNik7CisKK3VpbnQgX19vdmxkIF9fY25mbiBhc191aW50KGNoYXIzKTsKK3VpbnQgX19vdmxkIF9fY25mbiBhc191aW50KGNoYXI0KTsKK3VpbnQgX19vdmxkIF9fY25mbiBhc191aW50KHVjaGFyMyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gYXNfdWludCh1Y2hhcjQpOwordWludCBfX292bGQgX19jbmZuIGFzX3VpbnQoc2hvcnQyKTsKK3VpbnQgX19vdmxkIF9fY25mbiBhc191aW50KHVzaG9ydDIpOwordWludCBfX292bGQgX19jbmZuIGFzX3VpbnQoaW50KTsKK3VpbnQgX19vdmxkIF9fY25mbiBhc191aW50KHVpbnQpOwordWludCBfX292bGQgX19jbmZuIGFzX3VpbnQoZmxvYXQpOworCit1aW50MiBfX292bGQgX19jbmZuIGFzX3VpbnQyKGNoYXI4KTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfdWludDIodWNoYXI4KTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfdWludDIoc2hvcnQzKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfdWludDIoc2hvcnQ0KTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfdWludDIodXNob3J0Myk7Cit1aW50MiBfX292bGQgX19jbmZuIGFzX3VpbnQyKHVzaG9ydDQpOwordWludDIgX19vdmxkIF9fY25mbiBhc191aW50MihpbnQyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfdWludDIodWludDIpOwordWludDIgX19vdmxkIF9fY25mbiBhc191aW50Mihsb25nKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfdWludDIodWxvbmcpOwordWludDIgX19vdmxkIF9fY25mbiBhc191aW50MihmbG9hdDIpOworCit1aW50MyBfX292bGQgX19jbmZuIGFzX3VpbnQzKGNoYXIxNik7Cit1aW50MyBfX292bGQgX19jbmZuIGFzX3VpbnQzKHVjaGFyMTYpOwordWludDMgX19vdmxkIF9fY25mbiBhc191aW50MyhzaG9ydDgpOwordWludDMgX19vdmxkIF9fY25mbiBhc191aW50Myh1c2hvcnQ4KTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gYXNfdWludDMoaW50Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGFzX3VpbnQzKGludDQpOwordWludDMgX19vdmxkIF9fY25mbiBhc191aW50Myh1aW50Myk7Cit1aW50MyBfX292bGQgX19jbmZuIGFzX3VpbnQzKHVpbnQ0KTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gYXNfdWludDMobG9uZzIpOwordWludDMgX19vdmxkIF9fY25mbiBhc191aW50Myh1bG9uZzIpOwordWludDMgX19vdmxkIF9fY25mbiBhc191aW50MyhmbG9hdDMpOwordWludDMgX19vdmxkIF9fY25mbiBhc191aW50MyhmbG9hdDQpOworCit1aW50NCBfX292bGQgX19jbmZuIGFzX3VpbnQ0KGNoYXIxNik7Cit1aW50NCBfX292bGQgX19jbmZuIGFzX3VpbnQ0KHVjaGFyMTYpOwordWludDQgX19vdmxkIF9fY25mbiBhc191aW50NChzaG9ydDgpOwordWludDQgX19vdmxkIF9fY25mbiBhc191aW50NCh1c2hvcnQ4KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gYXNfdWludDQoaW50Myk7Cit1aW50NCBfX292bGQgX19jbmZuIGFzX3VpbnQ0KGludDQpOwordWludDQgX19vdmxkIF9fY25mbiBhc191aW50NCh1aW50Myk7Cit1aW50NCBfX292bGQgX19jbmZuIGFzX3VpbnQ0KHVpbnQ0KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gYXNfdWludDQobG9uZzIpOwordWludDQgX19vdmxkIF9fY25mbiBhc191aW50NCh1bG9uZzIpOwordWludDQgX19vdmxkIF9fY25mbiBhc191aW50NChmbG9hdDMpOwordWludDQgX19vdmxkIF9fY25mbiBhc191aW50NChmbG9hdDQpOworCit1aW50OCBfX292bGQgX19jbmZuIGFzX3VpbnQ4KHNob3J0MTYpOwordWludDggX19vdmxkIF9fY25mbiBhc191aW50OCh1c2hvcnQxNik7Cit1aW50OCBfX292bGQgX19jbmZuIGFzX3VpbnQ4KGludDgpOwordWludDggX19vdmxkIF9fY25mbiBhc191aW50OCh1aW50OCk7Cit1aW50OCBfX292bGQgX19jbmZuIGFzX3VpbnQ4KGxvbmczKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gYXNfdWludDgobG9uZzQpOwordWludDggX19vdmxkIF9fY25mbiBhc191aW50OCh1bG9uZzMpOwordWludDggX19vdmxkIF9fY25mbiBhc191aW50OCh1bG9uZzQpOwordWludDggX19vdmxkIF9fY25mbiBhc191aW50OChmbG9hdDgpOworCit1aW50MTYgX19vdmxkIF9fY25mbiBhc191aW50MTYoaW50MTYpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gYXNfdWludDE2KHVpbnQxNik7Cit1aW50MTYgX19vdmxkIF9fY25mbiBhc191aW50MTYobG9uZzgpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gYXNfdWludDE2KHVsb25nOCk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBhc191aW50MTYoZmxvYXQxNik7CisKK2xvbmcgX19vdmxkIF9fY25mbiBhc19sb25nKGNoYXI4KTsKK2xvbmcgX19vdmxkIF9fY25mbiBhc19sb25nKHVjaGFyOCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZyhzaG9ydDMpOworbG9uZyBfX292bGQgX19jbmZuIGFzX2xvbmcoc2hvcnQ0KTsKK2xvbmcgX19vdmxkIF9fY25mbiBhc19sb25nKHVzaG9ydDMpOworbG9uZyBfX292bGQgX19jbmZuIGFzX2xvbmcodXNob3J0NCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZyhpbnQyKTsKK2xvbmcgX19vdmxkIF9fY25mbiBhc19sb25nKHVpbnQyKTsKK2xvbmcgX19vdmxkIF9fY25mbiBhc19sb25nKGxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGFzX2xvbmcodWxvbmcpOworbG9uZyBfX292bGQgX19jbmZuIGFzX2xvbmcoZmxvYXQyKTsKKworbG9uZzIgX19vdmxkIF9fY25mbiBhc19sb25nMihjaGFyMTYpOworbG9uZzIgX19vdmxkIF9fY25mbiBhc19sb25nMih1Y2hhcjE2KTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzIoc2hvcnQ4KTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzIodXNob3J0OCk7Citsb25nMiBfX292bGQgX19jbmZuIGFzX2xvbmcyKGludDMpOworbG9uZzIgX19vdmxkIF9fY25mbiBhc19sb25nMihpbnQ0KTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzIodWludDMpOworbG9uZzIgX19vdmxkIF9fY25mbiBhc19sb25nMih1aW50NCk7Citsb25nMiBfX292bGQgX19jbmZuIGFzX2xvbmcyKGxvbmcyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzIodWxvbmcyKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzIoZmxvYXQzKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzIoZmxvYXQ0KTsKKworbG9uZzMgX19vdmxkIF9fY25mbiBhc19sb25nMyhzaG9ydDE2KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzModXNob3J0MTYpOworbG9uZzMgX19vdmxkIF9fY25mbiBhc19sb25nMyhpbnQ4KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzModWludDgpOworbG9uZzMgX19vdmxkIF9fY25mbiBhc19sb25nMyhsb25nMyk7Citsb25nMyBfX292bGQgX19jbmZuIGFzX2xvbmczKGxvbmc0KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzModWxvbmczKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzModWxvbmc0KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzMoZmxvYXQ4KTsKKworbG9uZzQgX19vdmxkIF9fY25mbiBhc19sb25nNChzaG9ydDE2KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzQodXNob3J0MTYpOworbG9uZzQgX19vdmxkIF9fY25mbiBhc19sb25nNChpbnQ4KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzQodWludDgpOworbG9uZzQgX19vdmxkIF9fY25mbiBhc19sb25nNChsb25nMyk7Citsb25nNCBfX292bGQgX19jbmZuIGFzX2xvbmc0KGxvbmc0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzQodWxvbmczKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzQodWxvbmc0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzQoZmxvYXQ4KTsKKworbG9uZzggX19vdmxkIF9fY25mbiBhc19sb25nOChpbnQxNik7Citsb25nOCBfX292bGQgX19jbmZuIGFzX2xvbmc4KHVpbnQxNik7Citsb25nOCBfX292bGQgX19jbmZuIGFzX2xvbmc4KGxvbmc4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzgodWxvbmc4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzgoZmxvYXQxNik7CisKK2xvbmcxNiBfX292bGQgX19jbmZuIGFzX2xvbmcxNihsb25nMTYpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzE2KHVsb25nMTYpOworCit1bG9uZyBfX292bGQgX19jbmZuIGFzX3Vsb25nKGNoYXI4KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcodWNoYXI4KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcoc2hvcnQzKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcoc2hvcnQ0KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcodXNob3J0Myk7Cit1bG9uZyBfX292bGQgX19jbmZuIGFzX3Vsb25nKHVzaG9ydDQpOwordWxvbmcgX19vdmxkIF9fY25mbiBhc191bG9uZyhpbnQyKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcodWludDIpOwordWxvbmcgX19vdmxkIF9fY25mbiBhc191bG9uZyhsb25nKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcodWxvbmcpOwordWxvbmcgX19vdmxkIF9fY25mbiBhc191bG9uZyhmbG9hdDIpOworCit1bG9uZzIgX19vdmxkIF9fY25mbiBhc191bG9uZzIoY2hhcjE2KTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGFzX3Vsb25nMih1Y2hhcjE2KTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGFzX3Vsb25nMihzaG9ydDgpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcyKHVzaG9ydDgpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcyKGludDMpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcyKGludDQpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcyKHVpbnQzKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGFzX3Vsb25nMih1aW50NCk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBhc191bG9uZzIobG9uZzIpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcyKHVsb25nMik7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBhc191bG9uZzIoZmxvYXQzKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGFzX3Vsb25nMihmbG9hdDQpOworCit1bG9uZzMgX19vdmxkIF9fY25mbiBhc191bG9uZzMoc2hvcnQxNik7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBhc191bG9uZzModXNob3J0MTYpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmczKGludDgpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmczKHVpbnQ4KTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGFzX3Vsb25nMyhsb25nMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBhc191bG9uZzMobG9uZzQpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmczKHVsb25nMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBhc191bG9uZzModWxvbmc0KTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGFzX3Vsb25nMyhmbG9hdDgpOworCit1bG9uZzQgX19vdmxkIF9fY25mbiBhc191bG9uZzQoc2hvcnQxNik7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBhc191bG9uZzQodXNob3J0MTYpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmc0KGludDgpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmc0KHVpbnQ4KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGFzX3Vsb25nNChsb25nMyk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBhc191bG9uZzQobG9uZzQpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmc0KHVsb25nMyk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBhc191bG9uZzQodWxvbmc0KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGFzX3Vsb25nNChmbG9hdDgpOworCit1bG9uZzggX19vdmxkIF9fY25mbiBhc191bG9uZzgoaW50MTYpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmc4KHVpbnQxNik7Cit1bG9uZzggX19vdmxkIF9fY25mbiBhc191bG9uZzgobG9uZzgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmc4KHVsb25nOCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBhc191bG9uZzgoZmxvYXQxNik7CisKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBhc191bG9uZzE2KGxvbmcxNik7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcxNih1bG9uZzE2KTsKKworZmxvYXQgX19vdmxkIF9fY25mbiBhc19mbG9hdChjaGFyMyk7CitmbG9hdCBfX292bGQgX19jbmZuIGFzX2Zsb2F0KGNoYXI0KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQodWNoYXIzKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQodWNoYXI0KTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQoc2hvcnQyKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQodXNob3J0Mik7CitmbG9hdCBfX292bGQgX19jbmZuIGFzX2Zsb2F0KGludCk7CitmbG9hdCBfX292bGQgX19jbmZuIGFzX2Zsb2F0KHVpbnQpOworZmxvYXQgX19vdmxkIF9fY25mbiBhc19mbG9hdChmbG9hdCk7CisKK2Zsb2F0MiBfX292bGQgX19jbmZuIGFzX2Zsb2F0MihjaGFyOCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhc19mbG9hdDIodWNoYXI4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGFzX2Zsb2F0MihzaG9ydDMpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQyKHNob3J0NCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhc19mbG9hdDIodXNob3J0Myk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhc19mbG9hdDIodXNob3J0NCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhc19mbG9hdDIoaW50Mik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhc19mbG9hdDIodWludDIpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQyKGxvbmcpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQyKHVsb25nKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGFzX2Zsb2F0MihmbG9hdDIpOworCitmbG9hdDMgX19vdmxkIF9fY25mbiBhc19mbG9hdDMoY2hhcjE2KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGFzX2Zsb2F0Myh1Y2hhcjE2KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGFzX2Zsb2F0MyhzaG9ydDgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQzKHVzaG9ydDgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQzKGludDMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQzKGludDQpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQzKHVpbnQzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGFzX2Zsb2F0Myh1aW50NCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBhc19mbG9hdDMobG9uZzIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQzKHVsb25nMik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBhc19mbG9hdDMoZmxvYXQzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGFzX2Zsb2F0MyhmbG9hdDQpOworCitmbG9hdDQgX19vdmxkIF9fY25mbiBhc19mbG9hdDQoY2hhcjE2KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGFzX2Zsb2F0NCh1Y2hhcjE2KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGFzX2Zsb2F0NChzaG9ydDgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ0KHVzaG9ydDgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ0KGludDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ0KGludDQpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ0KHVpbnQzKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGFzX2Zsb2F0NCh1aW50NCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBhc19mbG9hdDQobG9uZzIpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ0KHVsb25nMik7CitmbG9hdDQgX19vdmxkIF9fY25mbiBhc19mbG9hdDQoZmxvYXQzKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGFzX2Zsb2F0NChmbG9hdDQpOworCitmbG9hdDggX19vdmxkIF9fY25mbiBhc19mbG9hdDgoc2hvcnQxNik7CitmbG9hdDggX19vdmxkIF9fY25mbiBhc19mbG9hdDgodXNob3J0MTYpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ4KGludDgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ4KHVpbnQ4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGFzX2Zsb2F0OChsb25nMyk7CitmbG9hdDggX19vdmxkIF9fY25mbiBhc19mbG9hdDgobG9uZzQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQ4KHVsb25nMyk7CitmbG9hdDggX19vdmxkIF9fY25mbiBhc19mbG9hdDgodWxvbmc0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGFzX2Zsb2F0OChmbG9hdDgpOworCitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQxNihpbnQxNik7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQxNih1aW50MTYpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGFzX2Zsb2F0MTYobG9uZzgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGFzX2Zsb2F0MTYodWxvbmc4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBhc19mbG9hdDE2KGZsb2F0MTYpOworCisjaWZkZWYgY2xfa2hyX2ZwNjQKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjgoZG91YmxlKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGFzX2NoYXIxNihkb3VibGUyKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGFzX3VjaGFyOChkb3VibGUpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGFzX3VjaGFyMTYoZG91YmxlMik7CitzaG9ydDMgX19vdmxkIF9fY25mbiBhc19zaG9ydDMoZG91YmxlKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGFzX3Nob3J0NChkb3VibGUpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ4KGRvdWJsZTIpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGFzX3Nob3J0MTYoZG91YmxlMyk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQxNihkb3VibGU0KTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBhc191c2hvcnQzKGRvdWJsZSk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0NChkb3VibGUpOwordXNob3J0OCBfX292bGQgX19jbmZuIGFzX3VzaG9ydDgoZG91YmxlMik7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGFzX3VzaG9ydDE2KGRvdWJsZTMpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBhc191c2hvcnQxNihkb3VibGU0KTsKK2ludDIgX19vdmxkIF9fY25mbiBhc19pbnQyKGRvdWJsZSk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gYXNfaW50Myhkb3VibGUyKTsKK2ludDQgX19vdmxkIF9fY25mbiBhc19pbnQ0KGRvdWJsZTIpOworaW50OCBfX292bGQgX19jbmZuIGFzX2ludDgoZG91YmxlMyk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gYXNfaW50OChkb3VibGU0KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gYXNfaW50MTYoZG91YmxlOCk7Cit1aW50MiBfX292bGQgX19jbmZuIGFzX3VpbnQyKGRvdWJsZSk7Cit1aW50MyBfX292bGQgX19jbmZuIGFzX3VpbnQzKGRvdWJsZTIpOwordWludDQgX19vdmxkIF9fY25mbiBhc191aW50NChkb3VibGUyKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gYXNfdWludDgoZG91YmxlMyk7Cit1aW50OCBfX292bGQgX19jbmZuIGFzX3VpbnQ4KGRvdWJsZTQpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gYXNfdWludDE2KGRvdWJsZTgpOworbG9uZyBfX292bGQgX19jbmZuIGFzX2xvbmcoZG91YmxlKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzIoZG91YmxlMik7Citsb25nMyBfX292bGQgX19jbmZuIGFzX2xvbmczKGRvdWJsZTMpOworbG9uZzMgX19vdmxkIF9fY25mbiBhc19sb25nMyhkb3VibGU0KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gYXNfbG9uZzQoZG91YmxlMyk7Citsb25nNCBfX292bGQgX19jbmZuIGFzX2xvbmc0KGRvdWJsZTQpOworbG9uZzggX19vdmxkIF9fY25mbiBhc19sb25nOChkb3VibGU4KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGFzX2xvbmcxNihkb3VibGUxNik7Cit1bG9uZyBfX292bGQgX19jbmZuIGFzX3Vsb25nKGRvdWJsZSk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBhc191bG9uZzIoZG91YmxlMik7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBhc191bG9uZzMoZG91YmxlMyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBhc191bG9uZzMoZG91YmxlNCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBhc191bG9uZzQoZG91YmxlMyk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBhc191bG9uZzQoZG91YmxlNCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBhc191bG9uZzgoZG91YmxlOCk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcxNihkb3VibGUxNik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhc19mbG9hdDIoZG91YmxlKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGFzX2Zsb2F0Myhkb3VibGUyKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGFzX2Zsb2F0NChkb3VibGUyKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGFzX2Zsb2F0OChkb3VibGUzKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGFzX2Zsb2F0OChkb3VibGU0KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBhc19mbG9hdDE2KGRvdWJsZTgpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlKGNoYXI4KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGFzX2RvdWJsZSh1Y2hhcjgpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlKHNob3J0Myk7Citkb3VibGUgX19vdmxkIF9fY25mbiBhc19kb3VibGUoc2hvcnQ0KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGFzX2RvdWJsZSh1c2hvcnQzKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGFzX2RvdWJsZSh1c2hvcnQ0KTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGFzX2RvdWJsZShpbnQyKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGFzX2RvdWJsZSh1aW50Mik7Citkb3VibGUgX19vdmxkIF9fY25mbiBhc19kb3VibGUobG9uZyk7Citkb3VibGUgX19vdmxkIF9fY25mbiBhc19kb3VibGUodWxvbmcpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlKGZsb2F0Mik7Citkb3VibGUgX19vdmxkIF9fY25mbiBhc19kb3VibGUoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhc19kb3VibGUyKGNoYXIxNik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMih1Y2hhcjE2KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhc19kb3VibGUyKHNob3J0OCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMih1c2hvcnQ4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhc19kb3VibGUyKGludDMpOworZG91YmxlMiBfX292bGQgX19jbmZuIGFzX2RvdWJsZTIoaW50NCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMih1aW50Myk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMih1aW50NCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMihsb25nMik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMih1bG9uZzIpOworZG91YmxlMiBfX292bGQgX19jbmZuIGFzX2RvdWJsZTIoZmxvYXQzKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhc19kb3VibGUyKGZsb2F0NCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMihkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBhc19kb3VibGUzKHNob3J0MTYpOworZG91YmxlMyBfX292bGQgX19jbmZuIGFzX2RvdWJsZTModXNob3J0MTYpOworZG91YmxlMyBfX292bGQgX19jbmZuIGFzX2RvdWJsZTMoaW50OCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMyh1aW50OCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMyhsb25nMyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMyhsb25nNCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMyh1bG9uZzMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGFzX2RvdWJsZTModWxvbmc0KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBhc19kb3VibGUzKGZsb2F0OCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMyhkb3VibGUzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBhc19kb3VibGUzKGRvdWJsZTQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGFzX2RvdWJsZTQoc2hvcnQxNik7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlNCh1c2hvcnQxNik7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlNChpbnQ4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBhc19kb3VibGU0KHVpbnQ4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBhc19kb3VibGU0KGxvbmczKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBhc19kb3VibGU0KGxvbmc0KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBhc19kb3VibGU0KHVsb25nMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlNCh1bG9uZzQpOworZG91YmxlNCBfX292bGQgX19jbmZuIGFzX2RvdWJsZTQoZmxvYXQ4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBhc19kb3VibGU0KGRvdWJsZTMpOworZG91YmxlNCBfX292bGQgX19jbmZuIGFzX2RvdWJsZTQoZG91YmxlNCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlOChpbnQxNik7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlOCh1aW50MTYpOworZG91YmxlOCBfX292bGQgX19jbmZuIGFzX2RvdWJsZTgobG9uZzgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGFzX2RvdWJsZTgodWxvbmc4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBhc19kb3VibGU4KGZsb2F0MTYpOworZG91YmxlOCBfX292bGQgX19jbmZuIGFzX2RvdWJsZTgoZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGFzX2RvdWJsZTE2KGxvbmcxNik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGFzX2RvdWJsZTE2KHVsb25nMTYpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBhc19kb3VibGUxNihkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorCisjaWZkZWYgY2xfa2hyX2ZwMTYKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjIoaGFsZik7CitjaGFyMyBfX292bGQgX19jbmZuIGFzX2NoYXIzKGhhbGYyKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gYXNfY2hhcjQoaGFsZjIpOworY2hhcjggX19vdmxkIF9fY25mbiBhc19jaGFyOChoYWxmMyk7CitjaGFyOCBfX292bGQgX19jbmZuIGFzX2NoYXI4KGhhbGY0KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGFzX2NoYXIxNihoYWxmOCk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBhc191Y2hhcjIoaGFsZik7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBhc191Y2hhcjMoaGFsZjIpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gYXNfdWNoYXI0KGhhbGYyKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGFzX3VjaGFyOChoYWxmMyk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBhc191Y2hhcjgoaGFsZjQpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGFzX3VjaGFyMTYoaGFsZjgpOworc2hvcnQgX19vdmxkIF9fY25mbiBhc19zaG9ydChoYWxmKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGFzX3Nob3J0MihoYWxmMik7CitzaG9ydDMgX19vdmxkIF9fY25mbiBhc19zaG9ydDMoaGFsZjMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQzKGhhbGY0KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGFzX3Nob3J0NChoYWxmMyk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBhc19zaG9ydDQoaGFsZjQpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfc2hvcnQ4KGhhbGY4KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBhc19zaG9ydDE2KGhhbGYxNik7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBhc191c2hvcnQoaGFsZik7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MihoYWxmMik7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MyhoYWxmMyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0MyhoYWxmNCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0NChoYWxmMyk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0NChoYWxmNCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYXNfdXNob3J0OChoYWxmOCk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGFzX3VzaG9ydDE2KGhhbGYxNik7CitpbnQgX19vdmxkIF9fY25mbiBhc19pbnQoaGFsZjIpOworaW50MiBfX292bGQgX19jbmZuIGFzX2ludDIoaGFsZjMpOworaW50MiBfX292bGQgX19jbmZuIGFzX2ludDIoaGFsZjQpOworaW50MyBfX292bGQgX19jbmZuIGFzX2ludDMoaGFsZjgpOworaW50NCBfX292bGQgX19jbmZuIGFzX2ludDQoaGFsZjgpOworaW50OCBfX292bGQgX19jbmZuIGFzX2ludDgoaGFsZjE2KTsKK3VpbnQgX19vdmxkIF9fY25mbiBhc191aW50KGhhbGYyKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gYXNfdWludDIoaGFsZjMpOwordWludDIgX19vdmxkIF9fY25mbiBhc191aW50MihoYWxmNCk7Cit1aW50MyBfX292bGQgX19jbmZuIGFzX3VpbnQzKGhhbGY4KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gYXNfdWludDQoaGFsZjgpOwordWludDggX19vdmxkIF9fY25mbiBhc191aW50OChoYWxmMTYpOworbG9uZyBfX292bGQgX19jbmZuIGFzX2xvbmcoaGFsZjMpOworbG9uZyBfX292bGQgX19jbmZuIGFzX2xvbmcoaGFsZjQpOworbG9uZzIgX19vdmxkIF9fY25mbiBhc19sb25nMihoYWxmOCk7Citsb25nMyBfX292bGQgX19jbmZuIGFzX2xvbmczKGhhbGYxNik7Citsb25nNCBfX292bGQgX19jbmZuIGFzX2xvbmc0KGhhbGYxNik7Cit1bG9uZyBfX292bGQgX19jbmZuIGFzX3Vsb25nKGhhbGYzKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcoaGFsZjQpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmcyKGhhbGY4KTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGFzX3Vsb25nMyhoYWxmMTYpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gYXNfdWxvbmc0KGhhbGYxNik7CitoYWxmIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZihjaGFyMik7CitoYWxmIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZih1Y2hhcjIpOworaGFsZiBfX292bGQgX19jbmZuIGFzX2hhbGYoc2hvcnQpOworaGFsZiBfX292bGQgX19jbmZuIGFzX2hhbGYodXNob3J0KTsKK2hhbGYgX19vdmxkIF9fY25mbiBhc19oYWxmKGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBhc19oYWxmMihjaGFyMyk7CitoYWxmMiBfX292bGQgX19jbmZuIGFzX2hhbGYyKGNoYXI0KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjIodWNoYXIzKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjIodWNoYXI0KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjIoc2hvcnQyKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjIodXNob3J0Mik7CitoYWxmMiBfX292bGQgX19jbmZuIGFzX2hhbGYyKGludCk7CitoYWxmMiBfX292bGQgX19jbmZuIGFzX2hhbGYyKHVpbnQpOworaGFsZjIgX19vdmxkIF9fY25mbiBhc19oYWxmMihoYWxmMik7CitoYWxmMiBfX292bGQgX19jbmZuIGFzX2hhbGYyKGZsb2F0KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjMoY2hhcjgpOworaGFsZjMgX19vdmxkIF9fY25mbiBhc19oYWxmMyh1Y2hhcjgpOworaGFsZjMgX19vdmxkIF9fY25mbiBhc19oYWxmMyhzaG9ydDMpOworaGFsZjMgX19vdmxkIF9fY25mbiBhc19oYWxmMyhzaG9ydDQpOworaGFsZjMgX19vdmxkIF9fY25mbiBhc19oYWxmMyh1c2hvcnQzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjModXNob3J0NCk7CitoYWxmMyBfX292bGQgX19jbmZuIGFzX2hhbGYzKGludDIpOworaGFsZjMgX19vdmxkIF9fY25mbiBhc19oYWxmMyh1aW50Mik7CitoYWxmMyBfX292bGQgX19jbmZuIGFzX2hhbGYzKGxvbmcpOworaGFsZjMgX19vdmxkIF9fY25mbiBhc19oYWxmMyh1bG9uZyk7CitoYWxmMyBfX292bGQgX19jbmZuIGFzX2hhbGYzKGhhbGYzKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjMoaGFsZjQpOworaGFsZjMgX19vdmxkIF9fY25mbiBhc19oYWxmMyhmbG9hdDIpOworaGFsZjQgX19vdmxkIF9fY25mbiBhc19oYWxmNChjaGFyOCk7CitoYWxmNCBfX292bGQgX19jbmZuIGFzX2hhbGY0KHVjaGFyOCk7CitoYWxmNCBfX292bGQgX19jbmZuIGFzX2hhbGY0KHNob3J0Myk7CitoYWxmNCBfX292bGQgX19jbmZuIGFzX2hhbGY0KHNob3J0NCk7CitoYWxmNCBfX292bGQgX19jbmZuIGFzX2hhbGY0KHVzaG9ydDMpOworaGFsZjQgX19vdmxkIF9fY25mbiBhc19oYWxmNCh1c2hvcnQ0KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjQoaW50Mik7CitoYWxmNCBfX292bGQgX19jbmZuIGFzX2hhbGY0KHVpbnQyKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjQobG9uZyk7CitoYWxmNCBfX292bGQgX19jbmZuIGFzX2hhbGY0KHVsb25nKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjQoaGFsZjMpOworaGFsZjQgX19vdmxkIF9fY25mbiBhc19oYWxmNChoYWxmNCk7CitoYWxmNCBfX292bGQgX19jbmZuIGFzX2hhbGY0KGZsb2F0Mik7CitoYWxmOCBfX292bGQgX19jbmZuIGFzX2hhbGY4KGNoYXIxNik7CitoYWxmOCBfX292bGQgX19jbmZuIGFzX2hhbGY4KHVjaGFyMTYpOworaGFsZjggX19vdmxkIF9fY25mbiBhc19oYWxmOChzaG9ydDgpOworaGFsZjggX19vdmxkIF9fY25mbiBhc19oYWxmOCh1c2hvcnQ4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjgoaW50Myk7CitoYWxmOCBfX292bGQgX19jbmZuIGFzX2hhbGY4KGludDQpOworaGFsZjggX19vdmxkIF9fY25mbiBhc19oYWxmOCh1aW50Myk7CitoYWxmOCBfX292bGQgX19jbmZuIGFzX2hhbGY4KHVpbnQ0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjgobG9uZzIpOworaGFsZjggX19vdmxkIF9fY25mbiBhc19oYWxmOCh1bG9uZzIpOworaGFsZjggX19vdmxkIF9fY25mbiBhc19oYWxmOChoYWxmOCk7CitoYWxmOCBfX292bGQgX19jbmZuIGFzX2hhbGY4KGZsb2F0Myk7CitoYWxmOCBfX292bGQgX19jbmZuIGFzX2hhbGY4KGZsb2F0NCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBhc19oYWxmMTYoc2hvcnQxNik7CitoYWxmMTYgX19vdmxkIF9fY25mbiBhc19oYWxmMTYodXNob3J0MTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjE2KGludDgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjE2KHVpbnQ4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGFzX2hhbGYxNihsb25nMyk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBhc19oYWxmMTYobG9uZzQpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjE2KHVsb25nMyk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBhc19oYWxmMTYodWxvbmc0KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGFzX2hhbGYxNihoYWxmMTYpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjE2KGZsb2F0OCk7CitmbG9hdCBfX292bGQgX19jbmZuIGFzX2Zsb2F0KGhhbGYyKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGFzX2Zsb2F0MihoYWxmMyk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhc19mbG9hdDIoaGFsZjQpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXNfZmxvYXQzKGhhbGY4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGFzX2Zsb2F0NChoYWxmOCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBhc19mbG9hdDgoaGFsZjE2KTsKKworI2lmZGVmIGNsX2tocl9mcDY0CitoYWxmMyBfX292bGQgX19jbmZuIGFzX2hhbGYzKGRvdWJsZSk7CitoYWxmNCBfX292bGQgX19jbmZuIGFzX2hhbGY0KGRvdWJsZSk7CitoYWxmOCBfX292bGQgX19jbmZuIGFzX2hhbGY4KGRvdWJsZTIpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjE2KGRvdWJsZTMpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYXNfaGFsZjE2KGRvdWJsZTQpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlKGhhbGYzKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGFzX2RvdWJsZShoYWxmNCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMihoYWxmOCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gYXNfZG91YmxlMyhoYWxmMTYpOworZG91YmxlNCBfX292bGQgX19jbmZuIGFzX2RvdWJsZTQoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvLyBPcGVuQ0wgdjEuMSBzNi45LCB2MS4yLzIuMCBzNi4xMCAtIEZ1bmN0aW9uIHF1YWxpZmllcnMKKworI2RlZmluZSBfX2tlcm5lbF9leGVjKFgsIHR5cGVuKSBfX2tlcm5lbCBcCisJX19hdHRyaWJ1dGVfXygod29ya19ncm91cF9zaXplX2hpbnQoWCwgMSwgMSkpKSBcCisJX19hdHRyaWJ1dGVfXygodmVjX3R5cGVfaGludCh0eXBlbikpKQorCisjZGVmaW5lIGtlcm5lbF9leGVjKFgsIHR5cGVuKSBfX2tlcm5lbCBcCisJX19hdHRyaWJ1dGVfXygod29ya19ncm91cF9zaXplX2hpbnQoWCwgMSwgMSkpKSBcCisJX19hdHRyaWJ1dGVfXygodmVjX3R5cGVfaGludCh0eXBlbikpKQorCisvLyBPcGVuQ0wgdjEuMSBzNi4xMS4xLCB2MS4yIHM2LjEyLjEsIHYyLjAgczYuMTMuMSAtIFdvcmstaXRlbSBGdW5jdGlvbnMKKworLyoqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGltZW5zaW9ucyBpbiB1c2UuIFRoaXMgaXMgdGhlCisgKiB2YWx1ZSBnaXZlbiB0byB0aGUgd29ya19kaW0gYXJndW1lbnQgc3BlY2lmaWVkIGluCisgKiBjbEVucXVldWVORFJhbmdlS2VybmVsLgorICogRm9yIGNsRW5xdWV1ZVRhc2ssIHRoaXMgcmV0dXJucyAxLgorICovCit1aW50IF9fb3ZsZCBfX2NuZm4gZ2V0X3dvcmtfZGltKHZvaWQpOworCisvKioKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBnbG9iYWwgd29yay1pdGVtcyBzcGVjaWZpZWQgZm9yCisgKiBkaW1lbnNpb24gaWRlbnRpZmllZCBieSBkaW1pbmR4LiBUaGlzIHZhbHVlIGlzIGdpdmVuIGJ5CisgKiB0aGUgZ2xvYmFsX3dvcmtfc2l6ZSBhcmd1bWVudCB0bworICogY2xFbnF1ZXVlTkRSYW5nZUtlcm5lbC4gVmFsaWQgdmFsdWVzIG9mIGRpbWluZHgKKyAqIGFyZSAwIHRvIGdldF93b3JrX2RpbSgpIC0gMS4gRm9yIG90aGVyIHZhbHVlcyBvZgorICogZGltaW5keCwgZ2V0X2dsb2JhbF9zaXplKCkgcmV0dXJucyAxLgorICogRm9yIGNsRW5xdWV1ZVRhc2ssIHRoaXMgYWx3YXlzIHJldHVybnMgMS4KKyAqLworc2l6ZV90IF9fb3ZsZCBfX2NuZm4gZ2V0X2dsb2JhbF9zaXplKHVpbnQgZGltaW5keCk7CisKKy8qKgorICogUmV0dXJucyB0aGUgdW5pcXVlIGdsb2JhbCB3b3JrLWl0ZW0gSUQgdmFsdWUgZm9yCisgKiBkaW1lbnNpb24gaWRlbnRpZmllZCBieSBkaW1pbmR4LiBUaGUgZ2xvYmFsIHdvcmstaXRlbQorICogSUQgc3BlY2lmaWVzIHRoZSB3b3JrLWl0ZW0gSUQgYmFzZWQgb24gdGhlIG51bWJlciBvZgorICogZ2xvYmFsIHdvcmstaXRlbXMgc3BlY2lmaWVkIHRvIGV4ZWN1dGUgdGhlIGtlcm5lbC4gVmFsaWQKKyAqIHZhbHVlcyBvZiBkaW1pbmR4IGFyZSAwIHRvIGdldF93b3JrX2RpbSgpIC0gMS4gRm9yCisgKiBvdGhlciB2YWx1ZXMgb2YgZGltaW5keCwgZ2V0X2dsb2JhbF9pZCgpIHJldHVybnMgMC4KKyAqIEZvciBjbEVucXVldWVUYXNrLCB0aGlzIHJldHVybnMgMC4KKyAqLworc2l6ZV90IF9fb3ZsZCBfX2NuZm4gZ2V0X2dsb2JhbF9pZCh1aW50IGRpbWluZHgpOworCisvKioKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBsb2NhbCB3b3JrLWl0ZW1zIHNwZWNpZmllZCBpbgorICogZGltZW5zaW9uIGlkZW50aWZpZWQgYnkgZGltaW5keC4gVGhpcyB2YWx1ZSBpcyBnaXZlbiBieQorICogdGhlIGxvY2FsX3dvcmtfc2l6ZSBhcmd1bWVudCB0bworICogY2xFbnF1ZXVlTkRSYW5nZUtlcm5lbCBpZiBsb2NhbF93b3JrX3NpemUgaXMgbm90CisgKiBOVUxMOyBvdGhlcndpc2UgdGhlIE9wZW5DTCBpbXBsZW1lbnRhdGlvbiBjaG9vc2VzCisgKiBhbiBhcHByb3ByaWF0ZSBsb2NhbF93b3JrX3NpemUgdmFsdWUgd2hpY2ggaXMgcmV0dXJuZWQKKyAqIGJ5IHRoaXMgZnVuY3Rpb24uIFZhbGlkIHZhbHVlcyBvZiBkaW1pbmR4IGFyZSAwIHRvCisgKiBnZXRfd29ya19kaW0oKSAtIDEuIEZvciBvdGhlciB2YWx1ZXMgb2YgZGltaW5keCwKKyAqIGdldF9sb2NhbF9zaXplKCkgcmV0dXJucyAxLgorICogRm9yIGNsRW5xdWV1ZVRhc2ssIHRoaXMgYWx3YXlzIHJldHVybnMgMS4KKyAqLworc2l6ZV90IF9fb3ZsZCBfX2NuZm4gZ2V0X2xvY2FsX3NpemUodWludCBkaW1pbmR4KTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSB1bmlxdWUgbG9jYWwgd29yay1pdGVtIElEIGkuZS4gYSB3b3JrLWl0ZW0KKyAqIHdpdGhpbiBhIHNwZWNpZmljIHdvcmstZ3JvdXAgZm9yIGRpbWVuc2lvbiBpZGVudGlmaWVkIGJ5CisgKiBkaW1pbmR4LiBWYWxpZCB2YWx1ZXMgb2YgZGltaW5keCBhcmUgMCB0bworICogZ2V0X3dvcmtfZGltKCkgLSAxLiBGb3Igb3RoZXIgdmFsdWVzIG9mIGRpbWluZHgsCisgKiBnZXRfbG9jYWxfaWQoKSByZXR1cm5zIDAuCisgKiBGb3IgY2xFbnF1ZXVlVGFzaywgdGhpcyByZXR1cm5zIDAuCisgKi8KK3NpemVfdCBfX292bGQgX19jbmZuIGdldF9sb2NhbF9pZCh1aW50IGRpbWluZHgpOworCisvKioKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3b3JrLWdyb3VwcyB0aGF0IHdpbGwgZXhlY3V0ZSBhCisgKiBrZXJuZWwgZm9yIGRpbWVuc2lvbiBpZGVudGlmaWVkIGJ5IGRpbWluZHguCisgKiBWYWxpZCB2YWx1ZXMgb2YgZGltaW5keCBhcmUgMCB0byBnZXRfd29ya19kaW0oKSAtIDEuCisgKiBGb3Igb3RoZXIgdmFsdWVzIG9mIGRpbWluZHgsIGdldF9udW1fZ3JvdXBzICgpIHJldHVybnMKKyAqIDEuCisgKiBGb3IgY2xFbnF1ZXVlVGFzaywgdGhpcyBhbHdheXMgcmV0dXJucyAxLgorICovCitzaXplX3QgX19vdmxkIF9fY25mbiBnZXRfbnVtX2dyb3Vwcyh1aW50IGRpbWluZHgpOworCisvKioKKyAqIGdldF9ncm91cF9pZCByZXR1cm5zIHRoZSB3b3JrLWdyb3VwIElEIHdoaWNoIGlzIGEKKyAqIG51bWJlciBmcm9tIDAgLi4gZ2V0X251bV9ncm91cHMoZGltaW5keCkgLSAxLgorICogVmFsaWQgdmFsdWVzIG9mIGRpbWluZHggYXJlIDAgdG8gZ2V0X3dvcmtfZGltKCkgLSAxLgorICogRm9yIG90aGVyIHZhbHVlcywgZ2V0X2dyb3VwX2lkKCkgcmV0dXJucyAwLgorICogRm9yIGNsRW5xdWV1ZVRhc2ssIHRoaXMgcmV0dXJucyAwLgorICovCitzaXplX3QgX19vdmxkIF9fY25mbiBnZXRfZ3JvdXBfaWQodWludCBkaW1pbmR4KTsKKworLyoqCisgKiBnZXRfZ2xvYmFsX29mZnNldCByZXR1cm5zIHRoZSBvZmZzZXQgdmFsdWVzIHNwZWNpZmllZCBpbgorICogZ2xvYmFsX3dvcmtfb2Zmc2V0IGFyZ3VtZW50IHRvCisgKiBjbEVucXVldWVORFJhbmdlS2VybmVsLgorICogVmFsaWQgdmFsdWVzIG9mIGRpbWluZHggYXJlIDAgdG8gZ2V0X3dvcmtfZGltKCkgLSAxLgorICogRm9yIG90aGVyIHZhbHVlcywgZ2V0X2dsb2JhbF9vZmZzZXQoKSByZXR1cm5zIDAuCisgKiBGb3IgY2xFbnF1ZXVlVGFzaywgdGhpcyByZXR1cm5zIDAuCisgKi8KK3NpemVfdCBfX292bGQgX19jbmZuIGdldF9nbG9iYWxfb2Zmc2V0KHVpbnQgZGltaW5keCk7CisKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorc2l6ZV90IF9fb3ZsZCBnZXRfZW5xdWV1ZWRfbG9jYWxfc2l6ZSh1aW50IGRpbWluZHgpOworc2l6ZV90IF9fb3ZsZCBnZXRfZ2xvYmFsX2xpbmVhcl9pZCh2b2lkKTsKK3NpemVfdCBfX292bGQgZ2V0X2xvY2FsX2xpbmVhcl9pZCh2b2lkKTsKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8vIE9wZW5DTCB2MS4xIHM2LjExLjIsIHYxLjIgczYuMTIuMiwgdjIuMCBzNi4xMy4yIC0gTWF0aCBmdW5jdGlvbnMKKworLyoqCisgKiBBcmMgY29zaW5lIGZ1bmN0aW9uLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGFjb3MoZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gYWNvcyhmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYWNvcyhmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYWNvcyhmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gYWNvcyhmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGFjb3MoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGFjb3MoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhY29zKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGFjb3MoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gYWNvcyhkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBhY29zKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBhY29zKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBhY29zKGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBhY29zKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gYWNvcyhoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGFjb3MoaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBhY29zKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGFjb3MoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogSW52ZXJzZSBoeXBlcmJvbGljIGNvc2luZS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBhY29zaChmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhY29zaChmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYWNvc2goZmxvYXQzKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGFjb3NoKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBhY29zaChmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGFjb3NoKGZsb2F0MTYpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBhY29zaChkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIGFjb3NoKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGFjb3NoKGRvdWJsZTMpOworZG91YmxlNCBfX292bGQgX19jbmZuIGFjb3NoKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIGFjb3NoKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBhY29zaChkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gYWNvc2goaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIGFjb3NoKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gYWNvc2goaGFsZjMpOworaGFsZjQgX19vdmxkIF9fY25mbiBhY29zaChoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIGFjb3NoKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGFjb3NoKGhhbGYxNik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgYWNvcyAoeCkgLyBQSS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBhY29zcGkoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhY29zcGkoZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYWNvc3BpKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGFjb3NwaShmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBhY29zcGkoZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGFjb3NwaShmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBhY29zcGkoZG91YmxlIHgpOworZG91YmxlMiBfX292bGQgX19jbmZuIGFjb3NwaShkb3VibGUyIHgpOworZG91YmxlMyBfX292bGQgX19jbmZuIGFjb3NwaShkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIGFjb3NwaShkb3VibGU0IHgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGFjb3NwaShkb3VibGU4IHgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBhY29zcGkoZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gYWNvc3BpKGhhbGYgeCk7CitoYWxmMiBfX292bGQgX19jbmZuIGFjb3NwaShoYWxmMiB4KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gYWNvc3BpKGhhbGYzIHgpOworaGFsZjQgX19vdmxkIF9fY25mbiBhY29zcGkoaGFsZjQgeCk7CitoYWxmOCBfX292bGQgX19jbmZuIGFjb3NwaShoYWxmOCB4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGFjb3NwaShoYWxmMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIEFyYyBzaW5lIGZ1bmN0aW9uLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGFzaW4oZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gYXNpbihmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXNpbihmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYXNpbihmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gYXNpbihmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGFzaW4oZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGFzaW4oZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhc2luKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGFzaW4oZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gYXNpbihkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBhc2luKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBhc2luKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBhc2luKGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBhc2luKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gYXNpbihoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGFzaW4oaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBhc2luKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGFzaW4oaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogSW52ZXJzZSBoeXBlcmJvbGljIHNpbmUuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gYXNpbmgoZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gYXNpbmgoZmxvYXQyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGFzaW5oKGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBhc2luaChmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gYXNpbmgoZmxvYXQ4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBhc2luaChmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gYXNpbmgoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhc2luaChkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBhc2luaChkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBhc2luaChkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBhc2luaChkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gYXNpbmgoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGFzaW5oKGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBhc2luaChoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIGFzaW5oKGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYXNpbmgoaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBhc2luaChoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBhc2luaChoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIGFzaW4gKHgpIC8gUEkuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gYXNpbnBpKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gYXNpbnBpKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGFzaW5waShmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBhc2lucGkoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gYXNpbnBpKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBhc2lucGkoZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gYXNpbnBpKGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBhc2lucGkoZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBhc2lucGkoZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBhc2lucGkoZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBhc2lucGkoZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gYXNpbnBpKGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGFzaW5waShoYWxmIHgpOworaGFsZjIgX19vdmxkIF9fY25mbiBhc2lucGkoaGFsZjIgeCk7CitoYWxmMyBfX292bGQgX19jbmZuIGFzaW5waShoYWxmMyB4KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYXNpbnBpKGhhbGY0IHgpOworaGFsZjggX19vdmxkIF9fY25mbiBhc2lucGkoaGFsZjggeCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBhc2lucGkoaGFsZjE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBBcmMgdGFuZ2VudCBmdW5jdGlvbi4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBhdGFuKGZsb2F0IHlfb3Zlcl94KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGF0YW4oZmxvYXQyIHlfb3Zlcl94KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGF0YW4oZmxvYXQzIHlfb3Zlcl94KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGF0YW4oZmxvYXQ0IHlfb3Zlcl94KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGF0YW4oZmxvYXQ4IHlfb3Zlcl94KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBhdGFuKGZsb2F0MTYgeV9vdmVyX3gpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBhdGFuKGRvdWJsZSB5X292ZXJfeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYXRhbihkb3VibGUyIHlfb3Zlcl94KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBhdGFuKGRvdWJsZTMgeV9vdmVyX3gpOworZG91YmxlNCBfX292bGQgX19jbmZuIGF0YW4oZG91YmxlNCB5X292ZXJfeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gYXRhbihkb3VibGU4IHlfb3Zlcl94KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gYXRhbihkb3VibGUxNiB5X292ZXJfeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gYXRhbihoYWxmIHlfb3Zlcl94KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gYXRhbihoYWxmMiB5X292ZXJfeCk7CitoYWxmMyBfX292bGQgX19jbmZuIGF0YW4oaGFsZjMgeV9vdmVyX3gpOworaGFsZjQgX19vdmxkIF9fY25mbiBhdGFuKGhhbGY0IHlfb3Zlcl94KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gYXRhbihoYWxmOCB5X292ZXJfeCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBhdGFuKGhhbGYxNiB5X292ZXJfeCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIEFyYyB0YW5nZW50IG9mIHkgLyB4LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGF0YW4yKGZsb2F0IHksIGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gYXRhbjIoZmxvYXQyIHksIGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGF0YW4yKGZsb2F0MyB5LCBmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBhdGFuMihmbG9hdDQgeSwgZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gYXRhbjIoZmxvYXQ4IHksIGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBhdGFuMihmbG9hdDE2IHksIGZsb2F0MTYgeCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGF0YW4yKGRvdWJsZSB5LCBkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gYXRhbjIoZG91YmxlMiB5LCBkb3VibGUyIHgpOworZG91YmxlMyBfX292bGQgX19jbmZuIGF0YW4yKGRvdWJsZTMgeSwgZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBhdGFuMihkb3VibGU0IHksIGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gYXRhbjIoZG91YmxlOCB5LCBkb3VibGU4IHgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBhdGFuMihkb3VibGUxNiB5LCBkb3VibGUxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBhdGFuMihoYWxmIHksIGhhbGYgeCk7CitoYWxmMiBfX292bGQgX19jbmZuIGF0YW4yKGhhbGYyIHksIGhhbGYyIHgpOworaGFsZjMgX19vdmxkIF9fY25mbiBhdGFuMihoYWxmMyB5LCBoYWxmMyB4KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gYXRhbjIoaGFsZjQgeSwgaGFsZjQgeCk7CitoYWxmOCBfX292bGQgX19jbmZuIGF0YW4yKGhhbGY4IHksIGhhbGY4IHgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYXRhbjIoaGFsZjE2IHksIGhhbGYxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogSHlwZXJib2xpYyBhcmMgdGFuZ2VudC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBhdGFuaChmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhdGFuaChmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXRhbmgoZmxvYXQzKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGF0YW5oKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBhdGFuaChmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGF0YW5oKGZsb2F0MTYpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBhdGFuaChkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIGF0YW5oKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGF0YW5oKGRvdWJsZTMpOworZG91YmxlNCBfX292bGQgX19jbmZuIGF0YW5oKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIGF0YW5oKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBhdGFuaChkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gYXRhbmgoaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIGF0YW5oKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gYXRhbmgoaGFsZjMpOworaGFsZjQgX19vdmxkIF9fY25mbiBhdGFuaChoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIGF0YW5oKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGF0YW5oKGhhbGYxNik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgYXRhbiAoeCkgLyBQSS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBhdGFucGkoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBhdGFucGkoZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYXRhbnBpKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGF0YW5waShmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBhdGFucGkoZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGF0YW5waShmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBhdGFucGkoZG91YmxlIHgpOworZG91YmxlMiBfX292bGQgX19jbmZuIGF0YW5waShkb3VibGUyIHgpOworZG91YmxlMyBfX292bGQgX19jbmZuIGF0YW5waShkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIGF0YW5waShkb3VibGU0IHgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGF0YW5waShkb3VibGU4IHgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBhdGFucGkoZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gYXRhbnBpKGhhbGYgeCk7CitoYWxmMiBfX292bGQgX19jbmZuIGF0YW5waShoYWxmMiB4KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gYXRhbnBpKGhhbGYzIHgpOworaGFsZjQgX19vdmxkIF9fY25mbiBhdGFucGkoaGFsZjQgeCk7CitoYWxmOCBfX292bGQgX19jbmZuIGF0YW5waShoYWxmOCB4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGF0YW5waShoYWxmMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgYXRhbjIgKHksIHgpIC8gUEkuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gYXRhbjJwaShmbG9hdCB5LCBmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGF0YW4ycGkoZmxvYXQyIHksIGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGF0YW4ycGkoZmxvYXQzIHksIGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGF0YW4ycGkoZmxvYXQ0IHksIGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGF0YW4ycGkoZmxvYXQ4IHksIGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBhdGFuMnBpKGZsb2F0MTYgeSwgZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gYXRhbjJwaShkb3VibGUgeSwgZG91YmxlIHgpOworZG91YmxlMiBfX292bGQgX19jbmZuIGF0YW4ycGkoZG91YmxlMiB5LCBkb3VibGUyIHgpOworZG91YmxlMyBfX292bGQgX19jbmZuIGF0YW4ycGkoZG91YmxlMyB5LCBkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIGF0YW4ycGkoZG91YmxlNCB5LCBkb3VibGU0IHgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGF0YW4ycGkoZG91YmxlOCB5LCBkb3VibGU4IHgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBhdGFuMnBpKGRvdWJsZTE2IHksIGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGF0YW4ycGkoaGFsZiB5LCBoYWxmIHgpOworaGFsZjIgX19vdmxkIF9fY25mbiBhdGFuMnBpKGhhbGYyIHksIGhhbGYyIHgpOworaGFsZjMgX19vdmxkIF9fY25mbiBhdGFuMnBpKGhhbGYzIHksIGhhbGYzIHgpOworaGFsZjQgX19vdmxkIF9fY25mbiBhdGFuMnBpKGhhbGY0IHksIGhhbGY0IHgpOworaGFsZjggX19vdmxkIF9fY25mbiBhdGFuMnBpKGhhbGY4IHksIGhhbGY4IHgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYXRhbjJwaShoYWxmMTYgeSwgaGFsZjE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIGN1YmUtcm9vdC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBjYnJ0KGZsb2F0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNicnQoZmxvYXQyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNicnQoZmxvYXQzKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNicnQoZmxvYXQ0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNicnQoZmxvYXQ4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjYnJ0KGZsb2F0MTYpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBjYnJ0KGRvdWJsZSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY2JydChkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjYnJ0KGRvdWJsZTMpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNicnQoZG91YmxlNCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY2JydChkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY2JydChkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gY2JydChoYWxmKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY2JydChoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIGNicnQoaGFsZjMpOworaGFsZjQgX19vdmxkIF9fY25mbiBjYnJ0KGhhbGY0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY2JydChoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjYnJ0KGhhbGYxNik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJvdW5kIHRvIGludGVncmFsIHZhbHVlIHVzaW5nIHRoZSByb3VuZCB0byBwb3NpdGl2ZQorICogaW5maW5pdHkgcm91bmRpbmcgbW9kZS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBjZWlsKGZsb2F0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNlaWwoZmxvYXQyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNlaWwoZmxvYXQzKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNlaWwoZmxvYXQ0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNlaWwoZmxvYXQ4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjZWlsKGZsb2F0MTYpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBjZWlsKGRvdWJsZSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY2VpbChkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjZWlsKGRvdWJsZTMpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNlaWwoZG91YmxlNCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY2VpbChkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY2VpbChkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gY2VpbChoYWxmKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY2VpbChoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIGNlaWwoaGFsZjMpOworaGFsZjQgX19vdmxkIF9fY25mbiBjZWlsKGhhbGY0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY2VpbChoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjZWlsKGhhbGYxNik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgeCB3aXRoIGl0cyBzaWduIGNoYW5nZWQgdG8gbWF0Y2ggdGhlIHNpZ24gb2YgeS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBjb3B5c2lnbihmbG9hdCB4LCBmbG9hdCB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvcHlzaWduKGZsb2F0MiB4LCBmbG9hdDIgeSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjb3B5c2lnbihmbG9hdDMgeCwgZmxvYXQzIHkpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29weXNpZ24oZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvcHlzaWduKGZsb2F0OCB4LCBmbG9hdDggeSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY29weXNpZ24oZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBjb3B5c2lnbihkb3VibGUgeCwgZG91YmxlIHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvcHlzaWduKGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb3B5c2lnbihkb3VibGUzIHgsIGRvdWJsZTMgeSk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29weXNpZ24oZG91YmxlNCB4LCBkb3VibGU0IHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvcHlzaWduKGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29weXNpZ24oZG91YmxlMTYgeCwgZG91YmxlMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29weXNpZ24oaGFsZiB4LCBoYWxmIHkpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb3B5c2lnbihoYWxmMiB4LCBoYWxmMiB5KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29weXNpZ24oaGFsZjMgeCwgaGFsZjMgeSk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvcHlzaWduKGhhbGY0IHgsIGhhbGY0IHkpOworaGFsZjggX19vdmxkIF9fY25mbiBjb3B5c2lnbihoYWxmOCB4LCBoYWxmOCB5KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvcHlzaWduKGhhbGYxNiB4LCBoYWxmMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgY29zaW5lLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGNvcyhmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjb3MoZmxvYXQyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvcyhmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29zKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjb3MoZmxvYXQ4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb3MoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvcyhkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNvcyhkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb3MoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29zKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNvcyhkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29zKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBjb3MoaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIGNvcyhoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIGNvcyhoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvcyhoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIGNvcyhoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb3MoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSBoeXBlcmJvbGljIGNvc2luZS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBjb3NoKGZsb2F0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGNvc2goZmxvYXQyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNvc2goZmxvYXQzKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGNvc2goZmxvYXQ0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGNvc2goZmxvYXQ4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjb3NoKGZsb2F0MTYpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBjb3NoKGRvdWJsZSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gY29zaChkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjb3NoKGRvdWJsZTMpOworZG91YmxlNCBfX292bGQgX19jbmZuIGNvc2goZG91YmxlNCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gY29zaChkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY29zaChkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gY29zaChoYWxmKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY29zaChoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIGNvc2goaGFsZjMpOworaGFsZjQgX19vdmxkIF9fY25mbiBjb3NoKGhhbGY0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY29zaChoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBjb3NoKGhhbGYxNik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgY29zIChQSSAqIHgpLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGNvc3BpKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY29zcGkoZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gY29zcGkoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gY29zcGkoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY29zcGkoZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGNvc3BpKGZsb2F0MTYgeCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGNvc3BpKGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBjb3NwaShkb3VibGUyIHgpOworZG91YmxlMyBfX292bGQgX19jbmZuIGNvc3BpKGRvdWJsZTMgeCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY29zcGkoZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBjb3NwaShkb3VibGU4IHgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBjb3NwaShkb3VibGUxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBjb3NwaShoYWxmIHgpOworaGFsZjIgX19vdmxkIF9fY25mbiBjb3NwaShoYWxmMiB4KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY29zcGkoaGFsZjMgeCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNvc3BpKGhhbGY0IHgpOworaGFsZjggX19vdmxkIF9fY25mbiBjb3NwaShoYWxmOCB4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGNvc3BpKGhhbGYxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcGxlbWVudGFyeSBlcnJvciBmdW5jdGlvbi4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBlcmZjKGZsb2F0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGVyZmMoZmxvYXQyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGVyZmMoZmxvYXQzKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGVyZmMoZmxvYXQ0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGVyZmMoZmxvYXQ4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBlcmZjKGZsb2F0MTYpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBlcmZjKGRvdWJsZSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gZXJmYyhkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBlcmZjKGRvdWJsZTMpOworZG91YmxlNCBfX292bGQgX19jbmZuIGVyZmMoZG91YmxlNCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gZXJmYyhkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gZXJmYyhkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gZXJmYyhoYWxmKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gZXJmYyhoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIGVyZmMoaGFsZjMpOworaGFsZjQgX19vdmxkIF9fY25mbiBlcmZjKGhhbGY0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gZXJmYyhoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBlcmZjKGhhbGYxNik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIEVycm9yIGZ1bmN0aW9uIGVuY291bnRlcmVkIGluIGludGVncmF0aW5nIHRoZQorICogbm9ybWFsIGRpc3RyaWJ1dGlvbi4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBlcmYoZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gZXJmKGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBlcmYoZmxvYXQzKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGVyZihmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gZXJmKGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gZXJmKGZsb2F0MTYpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBlcmYoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBlcmYoZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gZXJmKGRvdWJsZTMpOworZG91YmxlNCBfX292bGQgX19jbmZuIGVyZihkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBlcmYoZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGVyZihkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gZXJmKGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBlcmYoaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiBlcmYoaGFsZjMpOworaGFsZjQgX19vdmxkIF9fY25mbiBlcmYoaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBlcmYoaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gZXJmKGhhbGYxNik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgdGhlIGJhc2UgZSBleHBvbmVudGlhbCBmdW5jdGlvbiBvZiB4LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGV4cChmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGV4cChmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBleHAoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gZXhwKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGV4cChmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gZXhwKGZsb2F0MTYgeCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGV4cChkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gZXhwKGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gZXhwKGRvdWJsZTMgeCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gZXhwKGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gZXhwKGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGV4cChkb3VibGUxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBleHAoaGFsZiB4KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gZXhwKGhhbGYyIHgpOworaGFsZjMgX19vdmxkIF9fY25mbiBleHAoaGFsZjMgeCk7CitoYWxmNCBfX292bGQgX19jbmZuIGV4cChoYWxmNCB4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gZXhwKGhhbGY4IHgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gZXhwKGhhbGYxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogRXhwb25lbnRpYWwgYmFzZSAyIGZ1bmN0aW9uLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGV4cDIoZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gZXhwMihmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gZXhwMihmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gZXhwMihmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gZXhwMihmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGV4cDIoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGV4cDIoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBleHAyKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGV4cDIoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gZXhwMihkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBleHAyKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBleHAyKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBleHAyKGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBleHAyKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gZXhwMihoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGV4cDIoaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBleHAyKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGV4cDIoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogRXhwb25lbnRpYWwgYmFzZSAxMCBmdW5jdGlvbi4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBleHAxMChmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBleHAxMChmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gZXhwMTAoZmxvYXQzKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGV4cDEwKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBleHAxMChmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGV4cDEwKGZsb2F0MTYpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBleHAxMChkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIGV4cDEwKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGV4cDEwKGRvdWJsZTMpOworZG91YmxlNCBfX292bGQgX19jbmZuIGV4cDEwKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIGV4cDEwKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBleHAxMChkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gZXhwMTAoaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIGV4cDEwKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gZXhwMTAoaGFsZjMpOworaGFsZjQgX19vdmxkIF9fY25mbiBleHAxMChoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIGV4cDEwKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGV4cDEwKGhhbGYxNik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgZV54LSAxLjAuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZXhwbTEoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBleHBtMShmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBleHBtMShmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBleHBtMShmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBleHBtMShmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gZXhwbTEoZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gZXhwbTEoZG91YmxlIHgpOworZG91YmxlMiBfX292bGQgX19jbmZuIGV4cG0xKGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gZXhwbTEoZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBleHBtMShkb3VibGU0IHgpOworZG91YmxlOCBfX292bGQgX19jbmZuIGV4cG0xKGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGV4cG0xKGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGV4cG0xKGhhbGYgeCk7CitoYWxmMiBfX292bGQgX19jbmZuIGV4cG0xKGhhbGYyIHgpOworaGFsZjMgX19vdmxkIF9fY25mbiBleHBtMShoYWxmMyB4KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gZXhwbTEoaGFsZjQgeCk7CitoYWxmOCBfX292bGQgX19jbmZuIGV4cG0xKGhhbGY4IHgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gZXhwbTEoaGFsZjE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIGFic29sdXRlIHZhbHVlIG9mIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGZhYnMoZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gZmFicyhmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gZmFicyhmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gZmFicyhmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gZmFicyhmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGZhYnMoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGZhYnMoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBmYWJzKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGZhYnMoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gZmFicyhkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBmYWJzKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBmYWJzKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBmYWJzKGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBmYWJzKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gZmFicyhoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGZhYnMoaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBmYWJzKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGZhYnMoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogeCAtIHkgaWYgeCA+IHksICswIGlmIHggaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHkuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZmRpbShmbG9hdCB4LCBmbG9hdCB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGZkaW0oZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGZkaW0oZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGZkaW0oZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGZkaW0oZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBmZGltKGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gZmRpbShkb3VibGUgeCwgZG91YmxlIHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIGZkaW0oZG91YmxlMiB4LCBkb3VibGUyIHkpOworZG91YmxlMyBfX292bGQgX19jbmZuIGZkaW0oZG91YmxlMyB4LCBkb3VibGUzIHkpOworZG91YmxlNCBfX292bGQgX19jbmZuIGZkaW0oZG91YmxlNCB4LCBkb3VibGU0IHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIGZkaW0oZG91YmxlOCB4LCBkb3VibGU4IHkpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBmZGltKGRvdWJsZTE2IHgsIGRvdWJsZTE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGZkaW0oaGFsZiB4LCBoYWxmIHkpOworaGFsZjIgX19vdmxkIF9fY25mbiBmZGltKGhhbGYyIHgsIGhhbGYyIHkpOworaGFsZjMgX19vdmxkIF9fY25mbiBmZGltKGhhbGYzIHgsIGhhbGYzIHkpOworaGFsZjQgX19vdmxkIF9fY25mbiBmZGltKGhhbGY0IHgsIGhhbGY0IHkpOworaGFsZjggX19vdmxkIF9fY25mbiBmZGltKGhhbGY4IHgsIGhhbGY4IHkpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gZmRpbShoYWxmMTYgeCwgaGFsZjE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSb3VuZCB0byBpbnRlZ3JhbCB2YWx1ZSB1c2luZyB0aGUgcm91bmQgdG8gLXZlCisgKiBpbmZpbml0eSByb3VuZGluZyBtb2RlLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGZsb29yKGZsb2F0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGZsb29yKGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBmbG9vcihmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gZmxvb3IoZmxvYXQ0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGZsb29yKGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gZmxvb3IoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGZsb29yKGRvdWJsZSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gZmxvb3IoZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gZmxvb3IoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gZmxvb3IoZG91YmxlNCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gZmxvb3IoZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGZsb29yKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBmbG9vcihoYWxmKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gZmxvb3IoaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiBmbG9vcihoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGZsb29yKGhhbGY0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gZmxvb3IoaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gZmxvb3IoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJucyB0aGUgY29ycmVjdGx5IHJvdW5kZWQgZmxvYXRpbmctcG9pbnQKKyAqIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdW0gb2YgYyB3aXRoIHRoZSBpbmZpbml0ZWx5CisgKiBwcmVjaXNlIHByb2R1Y3Qgb2YgYSBhbmQgYi4gUm91bmRpbmcgb2YKKyAqIGludGVybWVkaWF0ZSBwcm9kdWN0cyBzaGFsbCBub3Qgb2NjdXIuIEVkZ2UgY2FzZQorICogYmVoYXZpb3IgaXMgcGVyIHRoZSBJRUVFIDc1NC0yMDA4IHN0YW5kYXJkLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGZtYShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBjKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGZtYShmbG9hdDIgYSwgZmxvYXQyIGIsIGZsb2F0MiBjKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGZtYShmbG9hdDMgYSwgZmxvYXQzIGIsIGZsb2F0MyBjKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGZtYShmbG9hdDQgYSwgZmxvYXQ0IGIsIGZsb2F0NCBjKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGZtYShmbG9hdDggYSwgZmxvYXQ4IGIsIGZsb2F0OCBjKTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBmbWEoZmxvYXQxNiBhLCBmbG9hdDE2IGIsIGZsb2F0MTYgYyk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGZtYShkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBmbWEoZG91YmxlMiBhLCBkb3VibGUyIGIsIGRvdWJsZTIgYyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gZm1hKGRvdWJsZTMgYSwgZG91YmxlMyBiLCBkb3VibGUzIGMpOworZG91YmxlNCBfX292bGQgX19jbmZuIGZtYShkb3VibGU0IGEsIGRvdWJsZTQgYiwgZG91YmxlNCBjKTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBmbWEoZG91YmxlOCBhLCBkb3VibGU4IGIsIGRvdWJsZTggYyk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGZtYShkb3VibGUxNiBhLCBkb3VibGUxNiBiLCBkb3VibGUxNiBjKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBmbWEoaGFsZiBhLCBoYWxmIGIsIGhhbGYgYyk7CitoYWxmMiBfX292bGQgX19jbmZuIGZtYShoYWxmMiBhLCBoYWxmMiBiLCBoYWxmMiBjKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gZm1hKGhhbGYzIGEsIGhhbGYzIGIsIGhhbGYzIGMpOworaGFsZjQgX19vdmxkIF9fY25mbiBmbWEoaGFsZjQgYSwgaGFsZjQgYiwgaGFsZjQgYyk7CitoYWxmOCBfX292bGQgX19jbmZuIGZtYShoYWxmOCBhLCBoYWxmOCBiLCBoYWxmOCBjKTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGZtYShoYWxmMTYgYSwgaGFsZjE2IGIsIGhhbGYxNiBjKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJucyB5IGlmIHggPCB5LCBvdGhlcndpc2UgaXQgcmV0dXJucyB4LiBJZiBvbmUKKyAqIGFyZ3VtZW50IGlzIGEgTmFOLCBmbWF4KCkgcmV0dXJucyB0aGUgb3RoZXIKKyAqIGFyZ3VtZW50LiBJZiBib3RoIGFyZ3VtZW50cyBhcmUgTmFOcywgZm1heCgpCisgKiByZXR1cm5zIGEgTmFOLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGZtYXgoZmxvYXQgeCwgZmxvYXQgeSk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBmbWF4KGZsb2F0MiB4LCBmbG9hdDIgeSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBmbWF4KGZsb2F0MyB4LCBmbG9hdDMgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBmbWF4KGZsb2F0NCB4LCBmbG9hdDQgeSk7CitmbG9hdDggX19vdmxkIF9fY25mbiBmbWF4KGZsb2F0OCB4LCBmbG9hdDggeSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gZm1heChmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBmbWF4KGZsb2F0MiB4LCBmbG9hdCB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGZtYXgoZmxvYXQzIHgsIGZsb2F0IHkpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gZm1heChmbG9hdDQgeCwgZmxvYXQgeSk7CitmbG9hdDggX19vdmxkIF9fY25mbiBmbWF4KGZsb2F0OCB4LCBmbG9hdCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBmbWF4KGZsb2F0MTYgeCwgZmxvYXQgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGZtYXgoZG91YmxlIHgsIGRvdWJsZSB5KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBmbWF4KGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBmbWF4KGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBmbWF4KGRvdWJsZTQgeCwgZG91YmxlNCB5KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBmbWF4KGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gZm1heChkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBmbWF4KGRvdWJsZTIgeCwgZG91YmxlIHkpOworZG91YmxlMyBfX292bGQgX19jbmZuIGZtYXgoZG91YmxlMyB4LCBkb3VibGUgeSk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gZm1heChkb3VibGU0IHgsIGRvdWJsZSB5KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBmbWF4KGRvdWJsZTggeCwgZG91YmxlIHkpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBmbWF4KGRvdWJsZTE2IHgsIGRvdWJsZSB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBmbWF4KGhhbGYgeCwgaGFsZiB5KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gZm1heChoYWxmMiB4LCBoYWxmMiB5KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gZm1heChoYWxmMyB4LCBoYWxmMyB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gZm1heChoYWxmNCB4LCBoYWxmNCB5KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gZm1heChoYWxmOCB4LCBoYWxmOCB5KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGZtYXgoaGFsZjE2IHgsIGhhbGYxNiB5KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gZm1heChoYWxmMiB4LCBoYWxmIHkpOworaGFsZjMgX19vdmxkIF9fY25mbiBmbWF4KGhhbGYzIHgsIGhhbGYgeSk7CitoYWxmNCBfX292bGQgX19jbmZuIGZtYXgoaGFsZjQgeCwgaGFsZiB5KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gZm1heChoYWxmOCB4LCBoYWxmIHkpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gZm1heChoYWxmMTYgeCwgaGFsZiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJucyB5IGlmIHkgPCB4LCBvdGhlcndpc2UgaXQgcmV0dXJucyB4LiBJZiBvbmUKKyAqIGFyZ3VtZW50IGlzIGEgTmFOLCBmbWluKCkgcmV0dXJucyB0aGUgb3RoZXIKKyAqIGFyZ3VtZW50LiBJZiBib3RoIGFyZ3VtZW50cyBhcmUgTmFOcywgZm1pbigpCisgKiByZXR1cm5zIGEgTmFOLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGZtaW4oZmxvYXQgeCwgZmxvYXQgeSk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBmbWluKGZsb2F0MiB4LCBmbG9hdDIgeSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBmbWluKGZsb2F0MyB4LCBmbG9hdDMgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBmbWluKGZsb2F0NCB4LCBmbG9hdDQgeSk7CitmbG9hdDggX19vdmxkIF9fY25mbiBmbWluKGZsb2F0OCB4LCBmbG9hdDggeSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gZm1pbihmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBmbWluKGZsb2F0MiB4LCBmbG9hdCB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGZtaW4oZmxvYXQzIHgsIGZsb2F0IHkpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gZm1pbihmbG9hdDQgeCwgZmxvYXQgeSk7CitmbG9hdDggX19vdmxkIF9fY25mbiBmbWluKGZsb2F0OCB4LCBmbG9hdCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBmbWluKGZsb2F0MTYgeCwgZmxvYXQgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGZtaW4oZG91YmxlIHgsIGRvdWJsZSB5KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBmbWluKGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBmbWluKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBmbWluKGRvdWJsZTQgeCwgZG91YmxlNCB5KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBmbWluKGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gZm1pbihkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBmbWluKGRvdWJsZTIgeCwgZG91YmxlIHkpOworZG91YmxlMyBfX292bGQgX19jbmZuIGZtaW4oZG91YmxlMyB4LCBkb3VibGUgeSk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gZm1pbihkb3VibGU0IHgsIGRvdWJsZSB5KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBmbWluKGRvdWJsZTggeCwgZG91YmxlIHkpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBmbWluKGRvdWJsZTE2IHgsIGRvdWJsZSB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBmbWluKGhhbGYgeCwgaGFsZiB5KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gZm1pbihoYWxmMiB4LCBoYWxmMiB5KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gZm1pbihoYWxmMyB4LCBoYWxmMyB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gZm1pbihoYWxmNCB4LCBoYWxmNCB5KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gZm1pbihoYWxmOCB4LCBoYWxmOCB5KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGZtaW4oaGFsZjE2IHgsIGhhbGYxNiB5KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gZm1pbihoYWxmMiB4LCBoYWxmIHkpOworaGFsZjMgX19vdmxkIF9fY25mbiBmbWluKGhhbGYzIHgsIGhhbGYgeSk7CitoYWxmNCBfX292bGQgX19jbmZuIGZtaW4oaGFsZjQgeCwgaGFsZiB5KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gZm1pbihoYWxmOCB4LCBoYWxmIHkpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gZm1pbihoYWxmMTYgeCwgaGFsZiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogTW9kdWx1cy4gUmV0dXJucyB4IC0geSAqIHRydW5jICh4L3kpLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGZtb2QoZmxvYXQgeCwgZmxvYXQgeSk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBmbW9kKGZsb2F0MiB4LCBmbG9hdDIgeSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBmbW9kKGZsb2F0MyB4LCBmbG9hdDMgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBmbW9kKGZsb2F0NCB4LCBmbG9hdDQgeSk7CitmbG9hdDggX19vdmxkIF9fY25mbiBmbW9kKGZsb2F0OCB4LCBmbG9hdDggeSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gZm1vZChmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGZtb2QoZG91YmxlIHgsIGRvdWJsZSB5KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBmbW9kKGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBmbW9kKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBmbW9kKGRvdWJsZTQgeCwgZG91YmxlNCB5KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBmbW9kKGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gZm1vZChkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBmbW9kKGhhbGYgeCwgaGFsZiB5KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gZm1vZChoYWxmMiB4LCBoYWxmMiB5KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gZm1vZChoYWxmMyB4LCBoYWxmMyB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gZm1vZChoYWxmNCB4LCBoYWxmNCB5KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gZm1vZChoYWxmOCB4LCBoYWxmOCB5KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGZtb2QoaGFsZjE2IHgsIGhhbGYxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJucyBmbWluKHggLSBmbG9vciAoeCksIDB4MS5mZmZmZmVwLTFmICkuCisgKiBmbG9vcih4KSBpcyByZXR1cm5lZCBpbiBpcHRyLgorICovCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2Zsb2F0IF9fb3ZsZCBmcmFjdChmbG9hdCB4LCBmbG9hdCAqaXB0cik7CitmbG9hdDIgX19vdmxkIGZyYWN0KGZsb2F0MiB4LCBmbG9hdDIgKmlwdHIpOworZmxvYXQzIF9fb3ZsZCBmcmFjdChmbG9hdDMgeCwgZmxvYXQzICppcHRyKTsKK2Zsb2F0NCBfX292bGQgZnJhY3QoZmxvYXQ0IHgsIGZsb2F0NCAqaXB0cik7CitmbG9hdDggX19vdmxkIGZyYWN0KGZsb2F0OCB4LCBmbG9hdDggKmlwdHIpOworZmxvYXQxNiBfX292bGQgZnJhY3QoZmxvYXQxNiB4LCBmbG9hdDE2ICppcHRyKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBmcmFjdChkb3VibGUgeCwgZG91YmxlICppcHRyKTsKK2RvdWJsZTIgX19vdmxkIGZyYWN0KGRvdWJsZTIgeCwgZG91YmxlMiAqaXB0cik7Citkb3VibGUzIF9fb3ZsZCBmcmFjdChkb3VibGUzIHgsIGRvdWJsZTMgKmlwdHIpOworZG91YmxlNCBfX292bGQgZnJhY3QoZG91YmxlNCB4LCBkb3VibGU0ICppcHRyKTsKK2RvdWJsZTggX19vdmxkIGZyYWN0KGRvdWJsZTggeCwgZG91YmxlOCAqaXB0cik7Citkb3VibGUxNiBfX292bGQgZnJhY3QoZG91YmxlMTYgeCwgZG91YmxlMTYgKmlwdHIpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgZnJhY3QoaGFsZiB4LCBoYWxmICppcHRyKTsKK2hhbGYyIF9fb3ZsZCBmcmFjdChoYWxmMiB4LCBoYWxmMiAqaXB0cik7CitoYWxmMyBfX292bGQgZnJhY3QoaGFsZjMgeCwgaGFsZjMgKmlwdHIpOworaGFsZjQgX19vdmxkIGZyYWN0KGhhbGY0IHgsIGhhbGY0ICppcHRyKTsKK2hhbGY4IF9fb3ZsZCBmcmFjdChoYWxmOCB4LCBoYWxmOCAqaXB0cik7CitoYWxmMTYgX19vdmxkIGZyYWN0KGhhbGYxNiB4LCBoYWxmMTYgKmlwdHIpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKyNlbHNlCitmbG9hdCBfX292bGQgZnJhY3QoZmxvYXQgeCwgX19nbG9iYWwgZmxvYXQgKmlwdHIpOworZmxvYXQyIF9fb3ZsZCBmcmFjdChmbG9hdDIgeCwgX19nbG9iYWwgZmxvYXQyICppcHRyKTsKK2Zsb2F0MyBfX292bGQgZnJhY3QoZmxvYXQzIHgsIF9fZ2xvYmFsIGZsb2F0MyAqaXB0cik7CitmbG9hdDQgX19vdmxkIGZyYWN0KGZsb2F0NCB4LCBfX2dsb2JhbCBmbG9hdDQgKmlwdHIpOworZmxvYXQ4IF9fb3ZsZCBmcmFjdChmbG9hdDggeCwgX19nbG9iYWwgZmxvYXQ4ICppcHRyKTsKK2Zsb2F0MTYgX19vdmxkIGZyYWN0KGZsb2F0MTYgeCwgX19nbG9iYWwgZmxvYXQxNiAqaXB0cik7CitmbG9hdCBfX292bGQgZnJhY3QoZmxvYXQgeCwgX19sb2NhbCBmbG9hdCAqaXB0cik7CitmbG9hdDIgX19vdmxkIGZyYWN0KGZsb2F0MiB4LCBfX2xvY2FsIGZsb2F0MiAqaXB0cik7CitmbG9hdDMgX19vdmxkIGZyYWN0KGZsb2F0MyB4LCBfX2xvY2FsIGZsb2F0MyAqaXB0cik7CitmbG9hdDQgX19vdmxkIGZyYWN0KGZsb2F0NCB4LCBfX2xvY2FsIGZsb2F0NCAqaXB0cik7CitmbG9hdDggX19vdmxkIGZyYWN0KGZsb2F0OCB4LCBfX2xvY2FsIGZsb2F0OCAqaXB0cik7CitmbG9hdDE2IF9fb3ZsZCBmcmFjdChmbG9hdDE2IHgsIF9fbG9jYWwgZmxvYXQxNiAqaXB0cik7CitmbG9hdCBfX292bGQgZnJhY3QoZmxvYXQgeCwgX19wcml2YXRlIGZsb2F0ICppcHRyKTsKK2Zsb2F0MiBfX292bGQgZnJhY3QoZmxvYXQyIHgsIF9fcHJpdmF0ZSBmbG9hdDIgKmlwdHIpOworZmxvYXQzIF9fb3ZsZCBmcmFjdChmbG9hdDMgeCwgX19wcml2YXRlIGZsb2F0MyAqaXB0cik7CitmbG9hdDQgX19vdmxkIGZyYWN0KGZsb2F0NCB4LCBfX3ByaXZhdGUgZmxvYXQ0ICppcHRyKTsKK2Zsb2F0OCBfX292bGQgZnJhY3QoZmxvYXQ4IHgsIF9fcHJpdmF0ZSBmbG9hdDggKmlwdHIpOworZmxvYXQxNiBfX292bGQgZnJhY3QoZmxvYXQxNiB4LCBfX3ByaXZhdGUgZmxvYXQxNiAqaXB0cik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgZnJhY3QoZG91YmxlIHgsIF9fZ2xvYmFsIGRvdWJsZSAqaXB0cik7Citkb3VibGUyIF9fb3ZsZCBmcmFjdChkb3VibGUyIHgsIF9fZ2xvYmFsIGRvdWJsZTIgKmlwdHIpOworZG91YmxlMyBfX292bGQgZnJhY3QoZG91YmxlMyB4LCBfX2dsb2JhbCBkb3VibGUzICppcHRyKTsKK2RvdWJsZTQgX19vdmxkIGZyYWN0KGRvdWJsZTQgeCwgX19nbG9iYWwgZG91YmxlNCAqaXB0cik7Citkb3VibGU4IF9fb3ZsZCBmcmFjdChkb3VibGU4IHgsIF9fZ2xvYmFsIGRvdWJsZTggKmlwdHIpOworZG91YmxlMTYgX19vdmxkIGZyYWN0KGRvdWJsZTE2IHgsIF9fZ2xvYmFsIGRvdWJsZTE2ICppcHRyKTsKK2RvdWJsZSBfX292bGQgZnJhY3QoZG91YmxlIHgsIF9fbG9jYWwgZG91YmxlICppcHRyKTsKK2RvdWJsZTIgX19vdmxkIGZyYWN0KGRvdWJsZTIgeCwgX19sb2NhbCBkb3VibGUyICppcHRyKTsKK2RvdWJsZTMgX19vdmxkIGZyYWN0KGRvdWJsZTMgeCwgX19sb2NhbCBkb3VibGUzICppcHRyKTsKK2RvdWJsZTQgX19vdmxkIGZyYWN0KGRvdWJsZTQgeCwgX19sb2NhbCBkb3VibGU0ICppcHRyKTsKK2RvdWJsZTggX19vdmxkIGZyYWN0KGRvdWJsZTggeCwgX19sb2NhbCBkb3VibGU4ICppcHRyKTsKK2RvdWJsZTE2IF9fb3ZsZCBmcmFjdChkb3VibGUxNiB4LCBfX2xvY2FsIGRvdWJsZTE2ICppcHRyKTsKK2RvdWJsZSBfX292bGQgZnJhY3QoZG91YmxlIHgsIF9fcHJpdmF0ZSBkb3VibGUgKmlwdHIpOworZG91YmxlMiBfX292bGQgZnJhY3QoZG91YmxlMiB4LCBfX3ByaXZhdGUgZG91YmxlMiAqaXB0cik7Citkb3VibGUzIF9fb3ZsZCBmcmFjdChkb3VibGUzIHgsIF9fcHJpdmF0ZSBkb3VibGUzICppcHRyKTsKK2RvdWJsZTQgX19vdmxkIGZyYWN0KGRvdWJsZTQgeCwgX19wcml2YXRlIGRvdWJsZTQgKmlwdHIpOworZG91YmxlOCBfX292bGQgZnJhY3QoZG91YmxlOCB4LCBfX3ByaXZhdGUgZG91YmxlOCAqaXB0cik7Citkb3VibGUxNiBfX292bGQgZnJhY3QoZG91YmxlMTYgeCwgX19wcml2YXRlIGRvdWJsZTE2ICppcHRyKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIGZyYWN0KGhhbGYgeCwgX19nbG9iYWwgaGFsZiAqaXB0cik7CitoYWxmMiBfX292bGQgZnJhY3QoaGFsZjIgeCwgX19nbG9iYWwgaGFsZjIgKmlwdHIpOworaGFsZjMgX19vdmxkIGZyYWN0KGhhbGYzIHgsIF9fZ2xvYmFsIGhhbGYzICppcHRyKTsKK2hhbGY0IF9fb3ZsZCBmcmFjdChoYWxmNCB4LCBfX2dsb2JhbCBoYWxmNCAqaXB0cik7CitoYWxmOCBfX292bGQgZnJhY3QoaGFsZjggeCwgX19nbG9iYWwgaGFsZjggKmlwdHIpOworaGFsZjE2IF9fb3ZsZCBmcmFjdChoYWxmMTYgeCwgX19nbG9iYWwgaGFsZjE2ICppcHRyKTsKK2hhbGYgX19vdmxkIGZyYWN0KGhhbGYgeCwgX19sb2NhbCBoYWxmICppcHRyKTsKK2hhbGYyIF9fb3ZsZCBmcmFjdChoYWxmMiB4LCBfX2xvY2FsIGhhbGYyICppcHRyKTsKK2hhbGYzIF9fb3ZsZCBmcmFjdChoYWxmMyB4LCBfX2xvY2FsIGhhbGYzICppcHRyKTsKK2hhbGY0IF9fb3ZsZCBmcmFjdChoYWxmNCB4LCBfX2xvY2FsIGhhbGY0ICppcHRyKTsKK2hhbGY4IF9fb3ZsZCBmcmFjdChoYWxmOCB4LCBfX2xvY2FsIGhhbGY4ICppcHRyKTsKK2hhbGYxNiBfX292bGQgZnJhY3QoaGFsZjE2IHgsIF9fbG9jYWwgaGFsZjE2ICppcHRyKTsKK2hhbGYgX19vdmxkIGZyYWN0KGhhbGYgeCwgX19wcml2YXRlIGhhbGYgKmlwdHIpOworaGFsZjIgX19vdmxkIGZyYWN0KGhhbGYyIHgsIF9fcHJpdmF0ZSBoYWxmMiAqaXB0cik7CitoYWxmMyBfX292bGQgZnJhY3QoaGFsZjMgeCwgX19wcml2YXRlIGhhbGYzICppcHRyKTsKK2hhbGY0IF9fb3ZsZCBmcmFjdChoYWxmNCB4LCBfX3ByaXZhdGUgaGFsZjQgKmlwdHIpOworaGFsZjggX19vdmxkIGZyYWN0KGhhbGY4IHgsIF9fcHJpdmF0ZSBoYWxmOCAqaXB0cik7CitoYWxmMTYgX19vdmxkIGZyYWN0KGhhbGYxNiB4LCBfX3ByaXZhdGUgaGFsZjE2ICppcHRyKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvKioKKyAqIEV4dHJhY3QgbWFudGlzc2EgYW5kIGV4cG9uZW50IGZyb20geC4gRm9yIGVhY2gKKyAqIGNvbXBvbmVudCB0aGUgbWFudGlzc2EgcmV0dXJuZWQgaXMgYSBmbG9hdCB3aXRoCisgKiBtYWduaXR1ZGUgaW4gdGhlIGludGVydmFsIFsxLzIsIDEpIG9yIDAuIEVhY2gKKyAqIGNvbXBvbmVudCBvZiB4IGVxdWFscyBtYW50aXNzYSByZXR1cm5lZCAqIDJeZXhwLgorICovCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2Zsb2F0IF9fb3ZsZCBmcmV4cChmbG9hdCB4LCBpbnQgKmV4cCk7CitmbG9hdDIgX19vdmxkIGZyZXhwKGZsb2F0MiB4LCBpbnQyICpleHApOworZmxvYXQzIF9fb3ZsZCBmcmV4cChmbG9hdDMgeCwgaW50MyAqZXhwKTsKK2Zsb2F0NCBfX292bGQgZnJleHAoZmxvYXQ0IHgsIGludDQgKmV4cCk7CitmbG9hdDggX19vdmxkIGZyZXhwKGZsb2F0OCB4LCBpbnQ4ICpleHApOworZmxvYXQxNiBfX292bGQgZnJleHAoZmxvYXQxNiB4LCBpbnQxNiAqZXhwKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBmcmV4cChkb3VibGUgeCwgaW50ICpleHApOworZG91YmxlMiBfX292bGQgZnJleHAoZG91YmxlMiB4LCBpbnQyICpleHApOworZG91YmxlMyBfX292bGQgZnJleHAoZG91YmxlMyB4LCBpbnQzICpleHApOworZG91YmxlNCBfX292bGQgZnJleHAoZG91YmxlNCB4LCBpbnQ0ICpleHApOworZG91YmxlOCBfX292bGQgZnJleHAoZG91YmxlOCB4LCBpbnQ4ICpleHApOworZG91YmxlMTYgX19vdmxkIGZyZXhwKGRvdWJsZTE2IHgsIGludDE2ICpleHApOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgZnJleHAoaGFsZiB4LCBpbnQgKmV4cCk7CitoYWxmMiBfX292bGQgZnJleHAoaGFsZjIgeCwgaW50MiAqZXhwKTsKK2hhbGYzIF9fb3ZsZCBmcmV4cChoYWxmMyB4LCBpbnQzICpleHApOworaGFsZjQgX19vdmxkIGZyZXhwKGhhbGY0IHgsIGludDQgKmV4cCk7CitoYWxmOCBfX292bGQgZnJleHAoaGFsZjggeCwgaW50OCAqZXhwKTsKK2hhbGYxNiBfX292bGQgZnJleHAoaGFsZjE2IHgsIGludDE2ICpleHApOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKyNlbHNlCitmbG9hdCBfX292bGQgZnJleHAoZmxvYXQgeCwgX19nbG9iYWwgaW50ICpleHApOworZmxvYXQyIF9fb3ZsZCBmcmV4cChmbG9hdDIgeCwgX19nbG9iYWwgaW50MiAqZXhwKTsKK2Zsb2F0MyBfX292bGQgZnJleHAoZmxvYXQzIHgsIF9fZ2xvYmFsIGludDMgKmV4cCk7CitmbG9hdDQgX19vdmxkIGZyZXhwKGZsb2F0NCB4LCBfX2dsb2JhbCBpbnQ0ICpleHApOworZmxvYXQ4IF9fb3ZsZCBmcmV4cChmbG9hdDggeCwgX19nbG9iYWwgaW50OCAqZXhwKTsKK2Zsb2F0MTYgX19vdmxkIGZyZXhwKGZsb2F0MTYgeCwgX19nbG9iYWwgaW50MTYgKmV4cCk7CitmbG9hdCBfX292bGQgZnJleHAoZmxvYXQgeCwgX19sb2NhbCBpbnQgKmV4cCk7CitmbG9hdDIgX19vdmxkIGZyZXhwKGZsb2F0MiB4LCBfX2xvY2FsIGludDIgKmV4cCk7CitmbG9hdDMgX19vdmxkIGZyZXhwKGZsb2F0MyB4LCBfX2xvY2FsIGludDMgKmV4cCk7CitmbG9hdDQgX19vdmxkIGZyZXhwKGZsb2F0NCB4LCBfX2xvY2FsIGludDQgKmV4cCk7CitmbG9hdDggX19vdmxkIGZyZXhwKGZsb2F0OCB4LCBfX2xvY2FsIGludDggKmV4cCk7CitmbG9hdDE2IF9fb3ZsZCBmcmV4cChmbG9hdDE2IHgsIF9fbG9jYWwgaW50MTYgKmV4cCk7CitmbG9hdCBfX292bGQgZnJleHAoZmxvYXQgeCwgX19wcml2YXRlIGludCAqZXhwKTsKK2Zsb2F0MiBfX292bGQgZnJleHAoZmxvYXQyIHgsIF9fcHJpdmF0ZSBpbnQyICpleHApOworZmxvYXQzIF9fb3ZsZCBmcmV4cChmbG9hdDMgeCwgX19wcml2YXRlIGludDMgKmV4cCk7CitmbG9hdDQgX19vdmxkIGZyZXhwKGZsb2F0NCB4LCBfX3ByaXZhdGUgaW50NCAqZXhwKTsKK2Zsb2F0OCBfX292bGQgZnJleHAoZmxvYXQ4IHgsIF9fcHJpdmF0ZSBpbnQ4ICpleHApOworZmxvYXQxNiBfX292bGQgZnJleHAoZmxvYXQxNiB4LCBfX3ByaXZhdGUgaW50MTYgKmV4cCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgZnJleHAoZG91YmxlIHgsIF9fZ2xvYmFsIGludCAqZXhwKTsKK2RvdWJsZTIgX19vdmxkIGZyZXhwKGRvdWJsZTIgeCwgX19nbG9iYWwgaW50MiAqZXhwKTsKK2RvdWJsZTMgX19vdmxkIGZyZXhwKGRvdWJsZTMgeCwgX19nbG9iYWwgaW50MyAqZXhwKTsKK2RvdWJsZTQgX19vdmxkIGZyZXhwKGRvdWJsZTQgeCwgX19nbG9iYWwgaW50NCAqZXhwKTsKK2RvdWJsZTggX19vdmxkIGZyZXhwKGRvdWJsZTggeCwgX19nbG9iYWwgaW50OCAqZXhwKTsKK2RvdWJsZTE2IF9fb3ZsZCBmcmV4cChkb3VibGUxNiB4LCBfX2dsb2JhbCBpbnQxNiAqZXhwKTsKK2RvdWJsZSBfX292bGQgZnJleHAoZG91YmxlIHgsIF9fbG9jYWwgaW50ICpleHApOworZG91YmxlMiBfX292bGQgZnJleHAoZG91YmxlMiB4LCBfX2xvY2FsIGludDIgKmV4cCk7Citkb3VibGUzIF9fb3ZsZCBmcmV4cChkb3VibGUzIHgsIF9fbG9jYWwgaW50MyAqZXhwKTsKK2RvdWJsZTQgX19vdmxkIGZyZXhwKGRvdWJsZTQgeCwgX19sb2NhbCBpbnQ0ICpleHApOworZG91YmxlOCBfX292bGQgZnJleHAoZG91YmxlOCB4LCBfX2xvY2FsIGludDggKmV4cCk7Citkb3VibGUxNiBfX292bGQgZnJleHAoZG91YmxlMTYgeCwgX19sb2NhbCBpbnQxNiAqZXhwKTsKK2RvdWJsZSBfX292bGQgZnJleHAoZG91YmxlIHgsIF9fcHJpdmF0ZSBpbnQgKmV4cCk7Citkb3VibGUyIF9fb3ZsZCBmcmV4cChkb3VibGUyIHgsIF9fcHJpdmF0ZSBpbnQyICpleHApOworZG91YmxlMyBfX292bGQgZnJleHAoZG91YmxlMyB4LCBfX3ByaXZhdGUgaW50MyAqZXhwKTsKK2RvdWJsZTQgX19vdmxkIGZyZXhwKGRvdWJsZTQgeCwgX19wcml2YXRlIGludDQgKmV4cCk7Citkb3VibGU4IF9fb3ZsZCBmcmV4cChkb3VibGU4IHgsIF9fcHJpdmF0ZSBpbnQ4ICpleHApOworZG91YmxlMTYgX19vdmxkIGZyZXhwKGRvdWJsZTE2IHgsIF9fcHJpdmF0ZSBpbnQxNiAqZXhwKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIGZyZXhwKGhhbGYgeCwgX19nbG9iYWwgaW50ICpleHApOworaGFsZjIgX19vdmxkIGZyZXhwKGhhbGYyIHgsIF9fZ2xvYmFsIGludDIgKmV4cCk7CitoYWxmMyBfX292bGQgZnJleHAoaGFsZjMgeCwgX19nbG9iYWwgaW50MyAqZXhwKTsKK2hhbGY0IF9fb3ZsZCBmcmV4cChoYWxmNCB4LCBfX2dsb2JhbCBpbnQ0ICpleHApOworaGFsZjggX19vdmxkIGZyZXhwKGhhbGY4IHgsIF9fZ2xvYmFsIGludDggKmV4cCk7CitoYWxmMTYgX19vdmxkIGZyZXhwKGhhbGYxNiB4LCBfX2dsb2JhbCBpbnQxNiAqZXhwKTsKK2hhbGYgX19vdmxkIGZyZXhwKGhhbGYgeCwgX19sb2NhbCBpbnQgKmV4cCk7CitoYWxmMiBfX292bGQgZnJleHAoaGFsZjIgeCwgX19sb2NhbCBpbnQyICpleHApOworaGFsZjMgX19vdmxkIGZyZXhwKGhhbGYzIHgsIF9fbG9jYWwgaW50MyAqZXhwKTsKK2hhbGY0IF9fb3ZsZCBmcmV4cChoYWxmNCB4LCBfX2xvY2FsIGludDQgKmV4cCk7CitoYWxmOCBfX292bGQgZnJleHAoaGFsZjggeCwgX19sb2NhbCBpbnQ4ICpleHApOworaGFsZjE2IF9fb3ZsZCBmcmV4cChoYWxmMTYgeCwgX19sb2NhbCBpbnQxNiAqZXhwKTsKK2hhbGYgX19vdmxkIGZyZXhwKGhhbGYgeCwgX19wcml2YXRlIGludCAqZXhwKTsKK2hhbGYyIF9fb3ZsZCBmcmV4cChoYWxmMiB4LCBfX3ByaXZhdGUgaW50MiAqZXhwKTsKK2hhbGYzIF9fb3ZsZCBmcmV4cChoYWxmMyB4LCBfX3ByaXZhdGUgaW50MyAqZXhwKTsKK2hhbGY0IF9fb3ZsZCBmcmV4cChoYWxmNCB4LCBfX3ByaXZhdGUgaW50NCAqZXhwKTsKK2hhbGY4IF9fb3ZsZCBmcmV4cChoYWxmOCB4LCBfX3ByaXZhdGUgaW50OCAqZXhwKTsKK2hhbGYxNiBfX292bGQgZnJleHAoaGFsZjE2IHgsIF9fcHJpdmF0ZSBpbnQxNiAqZXhwKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvKioKKyAqIENvbXB1dGUgdGhlIHZhbHVlIG9mIHRoZSBzcXVhcmUgcm9vdCBvZiB4XjIgKyB5XjIKKyAqIHdpdGhvdXQgdW5kdWUgb3ZlcmZsb3cgb3IgdW5kZXJmbG93LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGh5cG90KGZsb2F0IHgsIGZsb2F0IHkpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gaHlwb3QoZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGh5cG90KGZsb2F0MyB4LCBmbG9hdDMgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBoeXBvdChmbG9hdDQgeCwgZmxvYXQ0IHkpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gaHlwb3QoZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBoeXBvdChmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGh5cG90KGRvdWJsZSB4LCBkb3VibGUgeSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gaHlwb3QoZG91YmxlMiB4LCBkb3VibGUyIHkpOworZG91YmxlMyBfX292bGQgX19jbmZuIGh5cG90KGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBoeXBvdChkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gaHlwb3QoZG91YmxlOCB4LCBkb3VibGU4IHkpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBoeXBvdChkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBoeXBvdChoYWxmIHgsIGhhbGYgeSk7CitoYWxmMiBfX292bGQgX19jbmZuIGh5cG90KGhhbGYyIHgsIGhhbGYyIHkpOworaGFsZjMgX19vdmxkIF9fY25mbiBoeXBvdChoYWxmMyB4LCBoYWxmMyB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gaHlwb3QoaGFsZjQgeCwgaGFsZjQgeSk7CitoYWxmOCBfX292bGQgX19jbmZuIGh5cG90KGhhbGY4IHgsIGhhbGY4IHkpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gaHlwb3QoaGFsZjE2IHgsIGhhbGYxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJuIHRoZSBleHBvbmVudCBhcyBhbiBpbnRlZ2VyIHZhbHVlLgorICovCitpbnQgX19vdmxkIF9fY25mbiBpbG9nYihmbG9hdCB4KTsKK2ludDIgX19vdmxkIF9fY25mbiBpbG9nYihmbG9hdDIgeCk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gaWxvZ2IoZmxvYXQzIHgpOworaW50NCBfX292bGQgX19jbmZuIGlsb2diKGZsb2F0NCB4KTsKK2ludDggX19vdmxkIF9fY25mbiBpbG9nYihmbG9hdDggeCk7CitpbnQxNiBfX292bGQgX19jbmZuIGlsb2diKGZsb2F0MTYgeCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2ludCBfX292bGQgX19jbmZuIGlsb2diKGRvdWJsZSB4KTsKK2ludDIgX19vdmxkIF9fY25mbiBpbG9nYihkb3VibGUyIHgpOworaW50MyBfX292bGQgX19jbmZuIGlsb2diKGRvdWJsZTMgeCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gaWxvZ2IoZG91YmxlNCB4KTsKK2ludDggX19vdmxkIF9fY25mbiBpbG9nYihkb3VibGU4IHgpOworaW50MTYgX19vdmxkIF9fY25mbiBpbG9nYihkb3VibGUxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2ludCBfX292bGQgX19jbmZuIGlsb2diKGhhbGYgeCk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gaWxvZ2IoaGFsZjIgeCk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gaWxvZ2IoaGFsZjMgeCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gaWxvZ2IoaGFsZjQgeCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gaWxvZ2IoaGFsZjggeCk7CitpbnQxNiBfX292bGQgX19jbmZuIGlsb2diKGhhbGYxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogTXVsdGlwbHkgeCBieSAyIHRvIHRoZSBwb3dlciBuLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGxkZXhwKGZsb2F0IHgsIGludCBuKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGxkZXhwKGZsb2F0MiB4LCBpbnQyIG4pOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbGRleHAoZmxvYXQzIHgsIGludDMgbik7CitmbG9hdDQgX19vdmxkIF9fY25mbiBsZGV4cChmbG9hdDQgeCwgaW50NCBuKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGxkZXhwKGZsb2F0OCB4LCBpbnQ4IG4pOworZmxvYXQxNiBfX292bGQgX19jbmZuIGxkZXhwKGZsb2F0MTYgeCwgaW50MTYgbik7CitmbG9hdDIgX19vdmxkIF9fY25mbiBsZGV4cChmbG9hdDIgeCwgaW50IG4pOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbGRleHAoZmxvYXQzIHgsIGludCBuKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGxkZXhwKGZsb2F0NCB4LCBpbnQgbik7CitmbG9hdDggX19vdmxkIF9fY25mbiBsZGV4cChmbG9hdDggeCwgaW50IG4pOworZmxvYXQxNiBfX292bGQgX19jbmZuIGxkZXhwKGZsb2F0MTYgeCwgaW50IG4pOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBsZGV4cChkb3VibGUgeCwgaW50IG4pOworZG91YmxlMiBfX292bGQgX19jbmZuIGxkZXhwKGRvdWJsZTIgeCwgaW50MiBuKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBsZGV4cChkb3VibGUzIHgsIGludDMgbik7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gbGRleHAoZG91YmxlNCB4LCBpbnQ0IG4pOworZG91YmxlOCBfX292bGQgX19jbmZuIGxkZXhwKGRvdWJsZTggeCwgaW50OCBuKTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbGRleHAoZG91YmxlMTYgeCwgaW50MTYgbik7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gbGRleHAoZG91YmxlMiB4LCBpbnQgbik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbGRleHAoZG91YmxlMyB4LCBpbnQgbik7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gbGRleHAoZG91YmxlNCB4LCBpbnQgbik7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gbGRleHAoZG91YmxlOCB4LCBpbnQgbik7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGxkZXhwKGRvdWJsZTE2IHgsIGludCBuKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBsZGV4cChoYWxmIHgsIGludCBuKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gbGRleHAoaGFsZjIgeCwgaW50MiBuKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gbGRleHAoaGFsZjMgeCwgaW50MyBuKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gbGRleHAoaGFsZjQgeCwgaW50NCBuKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gbGRleHAoaGFsZjggeCwgaW50OCBuKTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGxkZXhwKGhhbGYxNiB4LCBpbnQxNiBuKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gbGRleHAoaGFsZjIgeCwgaW50IG4pOworaGFsZjMgX19vdmxkIF9fY25mbiBsZGV4cChoYWxmMyB4LCBpbnQgbik7CitoYWxmNCBfX292bGQgX19jbmZuIGxkZXhwKGhhbGY0IHgsIGludCBuKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gbGRleHAoaGFsZjggeCwgaW50IG4pOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gbGRleHAoaGFsZjE2IHgsIGludCBuKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogTG9nIGdhbW1hIGZ1bmN0aW9uLiBSZXR1cm5zIHRoZSBuYXR1cmFsCisgKiBsb2dhcml0aG0gb2YgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBnYW1tYQorICogZnVuY3Rpb24uIFRoZSBzaWduIG9mIHRoZSBnYW1tYSBmdW5jdGlvbiBpcworICogcmV0dXJuZWQgaW4gdGhlIHNpZ25wIGFyZ3VtZW50IG9mIGxnYW1tYV9yLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGxnYW1tYShmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGxnYW1tYShmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBsZ2FtbWEoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbGdhbW1hKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGxnYW1tYShmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbGdhbW1hKGZsb2F0MTYgeCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGxnYW1tYShkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gbGdhbW1hKGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbGdhbW1hKGRvdWJsZTMgeCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gbGdhbW1hKGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gbGdhbW1hKGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGxnYW1tYShkb3VibGUxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBsZ2FtbWEoaGFsZiB4KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gbGdhbW1hKGhhbGYyIHgpOworaGFsZjMgX19vdmxkIF9fY25mbiBsZ2FtbWEoaGFsZjMgeCk7CitoYWxmNCBfX292bGQgX19jbmZuIGxnYW1tYShoYWxmNCB4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gbGdhbW1hKGhhbGY4IHgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gbGdhbW1hKGhhbGYxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorZmxvYXQgX19vdmxkIGxnYW1tYV9yKGZsb2F0IHgsIGludCAqc2lnbnApOworZmxvYXQyIF9fb3ZsZCBsZ2FtbWFfcihmbG9hdDIgeCwgaW50MiAqc2lnbnApOworZmxvYXQzIF9fb3ZsZCBsZ2FtbWFfcihmbG9hdDMgeCwgaW50MyAqc2lnbnApOworZmxvYXQ0IF9fb3ZsZCBsZ2FtbWFfcihmbG9hdDQgeCwgaW50NCAqc2lnbnApOworZmxvYXQ4IF9fb3ZsZCBsZ2FtbWFfcihmbG9hdDggeCwgaW50OCAqc2lnbnApOworZmxvYXQxNiBfX292bGQgbGdhbW1hX3IoZmxvYXQxNiB4LCBpbnQxNiAqc2lnbnApOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIGxnYW1tYV9yKGRvdWJsZSB4LCBpbnQgKnNpZ25wKTsKK2RvdWJsZTIgX19vdmxkIGxnYW1tYV9yKGRvdWJsZTIgeCwgaW50MiAqc2lnbnApOworZG91YmxlMyBfX292bGQgbGdhbW1hX3IoZG91YmxlMyB4LCBpbnQzICpzaWducCk7Citkb3VibGU0IF9fb3ZsZCBsZ2FtbWFfcihkb3VibGU0IHgsIGludDQgKnNpZ25wKTsKK2RvdWJsZTggX19vdmxkIGxnYW1tYV9yKGRvdWJsZTggeCwgaW50OCAqc2lnbnApOworZG91YmxlMTYgX19vdmxkIGxnYW1tYV9yKGRvdWJsZTE2IHgsIGludDE2ICpzaWducCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBsZ2FtbWFfcihoYWxmIHgsIGludCAqc2lnbnApOworaGFsZjIgX19vdmxkIGxnYW1tYV9yKGhhbGYyIHgsIGludDIgKnNpZ25wKTsKK2hhbGYzIF9fb3ZsZCBsZ2FtbWFfcihoYWxmMyB4LCBpbnQzICpzaWducCk7CitoYWxmNCBfX292bGQgbGdhbW1hX3IoaGFsZjQgeCwgaW50NCAqc2lnbnApOworaGFsZjggX19vdmxkIGxnYW1tYV9yKGhhbGY4IHgsIGludDggKnNpZ25wKTsKK2hhbGYxNiBfX292bGQgbGdhbW1hX3IoaGFsZjE2IHgsIGludDE2ICpzaWducCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorI2Vsc2UKK2Zsb2F0IF9fb3ZsZCBsZ2FtbWFfcihmbG9hdCB4LCBfX2dsb2JhbCBpbnQgKnNpZ25wKTsKK2Zsb2F0MiBfX292bGQgbGdhbW1hX3IoZmxvYXQyIHgsIF9fZ2xvYmFsIGludDIgKnNpZ25wKTsKK2Zsb2F0MyBfX292bGQgbGdhbW1hX3IoZmxvYXQzIHgsIF9fZ2xvYmFsIGludDMgKnNpZ25wKTsKK2Zsb2F0NCBfX292bGQgbGdhbW1hX3IoZmxvYXQ0IHgsIF9fZ2xvYmFsIGludDQgKnNpZ25wKTsKK2Zsb2F0OCBfX292bGQgbGdhbW1hX3IoZmxvYXQ4IHgsIF9fZ2xvYmFsIGludDggKnNpZ25wKTsKK2Zsb2F0MTYgX19vdmxkIGxnYW1tYV9yKGZsb2F0MTYgeCwgX19nbG9iYWwgaW50MTYgKnNpZ25wKTsKK2Zsb2F0IF9fb3ZsZCBsZ2FtbWFfcihmbG9hdCB4LCBfX2xvY2FsIGludCAqc2lnbnApOworZmxvYXQyIF9fb3ZsZCBsZ2FtbWFfcihmbG9hdDIgeCwgX19sb2NhbCBpbnQyICpzaWducCk7CitmbG9hdDMgX19vdmxkIGxnYW1tYV9yKGZsb2F0MyB4LCBfX2xvY2FsIGludDMgKnNpZ25wKTsKK2Zsb2F0NCBfX292bGQgbGdhbW1hX3IoZmxvYXQ0IHgsIF9fbG9jYWwgaW50NCAqc2lnbnApOworZmxvYXQ4IF9fb3ZsZCBsZ2FtbWFfcihmbG9hdDggeCwgX19sb2NhbCBpbnQ4ICpzaWducCk7CitmbG9hdDE2IF9fb3ZsZCBsZ2FtbWFfcihmbG9hdDE2IHgsIF9fbG9jYWwgaW50MTYgKnNpZ25wKTsKK2Zsb2F0IF9fb3ZsZCBsZ2FtbWFfcihmbG9hdCB4LCBfX3ByaXZhdGUgaW50ICpzaWducCk7CitmbG9hdDIgX19vdmxkIGxnYW1tYV9yKGZsb2F0MiB4LCBfX3ByaXZhdGUgaW50MiAqc2lnbnApOworZmxvYXQzIF9fb3ZsZCBsZ2FtbWFfcihmbG9hdDMgeCwgX19wcml2YXRlIGludDMgKnNpZ25wKTsKK2Zsb2F0NCBfX292bGQgbGdhbW1hX3IoZmxvYXQ0IHgsIF9fcHJpdmF0ZSBpbnQ0ICpzaWducCk7CitmbG9hdDggX19vdmxkIGxnYW1tYV9yKGZsb2F0OCB4LCBfX3ByaXZhdGUgaW50OCAqc2lnbnApOworZmxvYXQxNiBfX292bGQgbGdhbW1hX3IoZmxvYXQxNiB4LCBfX3ByaXZhdGUgaW50MTYgKnNpZ25wKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBsZ2FtbWFfcihkb3VibGUgeCwgX19nbG9iYWwgaW50ICpzaWducCk7Citkb3VibGUyIF9fb3ZsZCBsZ2FtbWFfcihkb3VibGUyIHgsIF9fZ2xvYmFsIGludDIgKnNpZ25wKTsKK2RvdWJsZTMgX19vdmxkIGxnYW1tYV9yKGRvdWJsZTMgeCwgX19nbG9iYWwgaW50MyAqc2lnbnApOworZG91YmxlNCBfX292bGQgbGdhbW1hX3IoZG91YmxlNCB4LCBfX2dsb2JhbCBpbnQ0ICpzaWducCk7Citkb3VibGU4IF9fb3ZsZCBsZ2FtbWFfcihkb3VibGU4IHgsIF9fZ2xvYmFsIGludDggKnNpZ25wKTsKK2RvdWJsZTE2IF9fb3ZsZCBsZ2FtbWFfcihkb3VibGUxNiB4LCBfX2dsb2JhbCBpbnQxNiAqc2lnbnApOworZG91YmxlIF9fb3ZsZCBsZ2FtbWFfcihkb3VibGUgeCwgX19sb2NhbCBpbnQgKnNpZ25wKTsKK2RvdWJsZTIgX19vdmxkIGxnYW1tYV9yKGRvdWJsZTIgeCwgX19sb2NhbCBpbnQyICpzaWducCk7Citkb3VibGUzIF9fb3ZsZCBsZ2FtbWFfcihkb3VibGUzIHgsIF9fbG9jYWwgaW50MyAqc2lnbnApOworZG91YmxlNCBfX292bGQgbGdhbW1hX3IoZG91YmxlNCB4LCBfX2xvY2FsIGludDQgKnNpZ25wKTsKK2RvdWJsZTggX19vdmxkIGxnYW1tYV9yKGRvdWJsZTggeCwgX19sb2NhbCBpbnQ4ICpzaWducCk7Citkb3VibGUxNiBfX292bGQgbGdhbW1hX3IoZG91YmxlMTYgeCwgX19sb2NhbCBpbnQxNiAqc2lnbnApOworZG91YmxlIF9fb3ZsZCBsZ2FtbWFfcihkb3VibGUgeCwgX19wcml2YXRlIGludCAqc2lnbnApOworZG91YmxlMiBfX292bGQgbGdhbW1hX3IoZG91YmxlMiB4LCBfX3ByaXZhdGUgaW50MiAqc2lnbnApOworZG91YmxlMyBfX292bGQgbGdhbW1hX3IoZG91YmxlMyB4LCBfX3ByaXZhdGUgaW50MyAqc2lnbnApOworZG91YmxlNCBfX292bGQgbGdhbW1hX3IoZG91YmxlNCB4LCBfX3ByaXZhdGUgaW50NCAqc2lnbnApOworZG91YmxlOCBfX292bGQgbGdhbW1hX3IoZG91YmxlOCB4LCBfX3ByaXZhdGUgaW50OCAqc2lnbnApOworZG91YmxlMTYgX19vdmxkIGxnYW1tYV9yKGRvdWJsZTE2IHgsIF9fcHJpdmF0ZSBpbnQxNiAqc2lnbnApOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgbGdhbW1hX3IoaGFsZiB4LCBfX2dsb2JhbCBpbnQgKnNpZ25wKTsKK2hhbGYyIF9fb3ZsZCBsZ2FtbWFfcihoYWxmMiB4LCBfX2dsb2JhbCBpbnQyICpzaWducCk7CitoYWxmMyBfX292bGQgbGdhbW1hX3IoaGFsZjMgeCwgX19nbG9iYWwgaW50MyAqc2lnbnApOworaGFsZjQgX19vdmxkIGxnYW1tYV9yKGhhbGY0IHgsIF9fZ2xvYmFsIGludDQgKnNpZ25wKTsKK2hhbGY4IF9fb3ZsZCBsZ2FtbWFfcihoYWxmOCB4LCBfX2dsb2JhbCBpbnQ4ICpzaWducCk7CitoYWxmMTYgX19vdmxkIGxnYW1tYV9yKGhhbGYxNiB4LCBfX2dsb2JhbCBpbnQxNiAqc2lnbnApOworaGFsZiBfX292bGQgbGdhbW1hX3IoaGFsZiB4LCBfX2xvY2FsIGludCAqc2lnbnApOworaGFsZjIgX19vdmxkIGxnYW1tYV9yKGhhbGYyIHgsIF9fbG9jYWwgaW50MiAqc2lnbnApOworaGFsZjMgX19vdmxkIGxnYW1tYV9yKGhhbGYzIHgsIF9fbG9jYWwgaW50MyAqc2lnbnApOworaGFsZjQgX19vdmxkIGxnYW1tYV9yKGhhbGY0IHgsIF9fbG9jYWwgaW50NCAqc2lnbnApOworaGFsZjggX19vdmxkIGxnYW1tYV9yKGhhbGY4IHgsIF9fbG9jYWwgaW50OCAqc2lnbnApOworaGFsZjE2IF9fb3ZsZCBsZ2FtbWFfcihoYWxmMTYgeCwgX19sb2NhbCBpbnQxNiAqc2lnbnApOworaGFsZiBfX292bGQgbGdhbW1hX3IoaGFsZiB4LCBfX3ByaXZhdGUgaW50ICpzaWducCk7CitoYWxmMiBfX292bGQgbGdhbW1hX3IoaGFsZjIgeCwgX19wcml2YXRlIGludDIgKnNpZ25wKTsKK2hhbGYzIF9fb3ZsZCBsZ2FtbWFfcihoYWxmMyB4LCBfX3ByaXZhdGUgaW50MyAqc2lnbnApOworaGFsZjQgX19vdmxkIGxnYW1tYV9yKGhhbGY0IHgsIF9fcHJpdmF0ZSBpbnQ0ICpzaWducCk7CitoYWxmOCBfX292bGQgbGdhbW1hX3IoaGFsZjggeCwgX19wcml2YXRlIGludDggKnNpZ25wKTsKK2hhbGYxNiBfX292bGQgbGdhbW1hX3IoaGFsZjE2IHgsIF9fcHJpdmF0ZSBpbnQxNiAqc2lnbnApOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8qKgorICogQ29tcHV0ZSBuYXR1cmFsIGxvZ2FyaXRobS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBsb2coZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbG9nKGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBsb2coZmxvYXQzKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGxvZyhmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbG9nKGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbG9nKGZsb2F0MTYpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBsb2coZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBsb2coZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbG9nKGRvdWJsZTMpOworZG91YmxlNCBfX292bGQgX19jbmZuIGxvZyhkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBsb2coZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGxvZyhkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gbG9nKGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBsb2coaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiBsb2coaGFsZjMpOworaGFsZjQgX19vdmxkIF9fY25mbiBsb2coaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBsb2coaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gbG9nKGhhbGYxNik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgYSBiYXNlIDIgbG9nYXJpdGhtLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGxvZzIoZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbG9nMihmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbG9nMihmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbG9nMihmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbG9nMihmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGxvZzIoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGxvZzIoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBsb2cyKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIGxvZzIoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gbG9nMihkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBsb2cyKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBsb2cyKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBsb2cyKGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBsb2cyKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gbG9nMihoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGxvZzIoaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBsb2cyKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGxvZzIoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSBhIGJhc2UgMTAgbG9nYXJpdGhtLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGxvZzEwKGZsb2F0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGxvZzEwKGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiBsb2cxMChmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbG9nMTAoZmxvYXQ0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGxvZzEwKGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbG9nMTAoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGxvZzEwKGRvdWJsZSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gbG9nMTAoZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbG9nMTAoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gbG9nMTAoZG91YmxlNCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gbG9nMTAoZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGxvZzEwKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBsb2cxMChoYWxmKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gbG9nMTAoaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiBsb2cxMChoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIGxvZzEwKGhhbGY0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gbG9nMTAoaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gbG9nMTAoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSBhIGJhc2UgZSBsb2dhcml0aG0gb2YgKDEuMCArIHgpLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGxvZzFwKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbG9nMXAoZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbG9nMXAoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbG9nMXAoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbG9nMXAoZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGxvZzFwKGZsb2F0MTYgeCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIGxvZzFwKGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBsb2cxcChkb3VibGUyIHgpOworZG91YmxlMyBfX292bGQgX19jbmZuIGxvZzFwKGRvdWJsZTMgeCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gbG9nMXAoZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBsb2cxcChkb3VibGU4IHgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBsb2cxcChkb3VibGUxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBsb2cxcChoYWxmIHgpOworaGFsZjIgX19vdmxkIF9fY25mbiBsb2cxcChoYWxmMiB4KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gbG9nMXAoaGFsZjMgeCk7CitoYWxmNCBfX292bGQgX19jbmZuIGxvZzFwKGhhbGY0IHgpOworaGFsZjggX19vdmxkIF9fY25mbiBsb2cxcChoYWxmOCB4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGxvZzFwKGhhbGYxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSB0aGUgZXhwb25lbnQgb2YgeCwgd2hpY2ggaXMgdGhlIGludGVncmFsCisgKiBwYXJ0IG9mIGxvZ3IgfCB4IHwuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbG9nYihmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGxvZ2IoZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbG9nYihmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBsb2diKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGxvZ2IoZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGxvZ2IoZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gbG9nYihkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gbG9nYihkb3VibGUyIHgpOworZG91YmxlMyBfX292bGQgX19jbmZuIGxvZ2IoZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBsb2diKGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gbG9nYihkb3VibGU4IHgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBsb2diKGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGxvZ2IoaGFsZiB4KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gbG9nYihoYWxmMiB4KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gbG9nYihoYWxmMyB4KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gbG9nYihoYWxmNCB4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gbG9nYihoYWxmOCB4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGxvZ2IoaGFsZjE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBtYWQgYXBwcm94aW1hdGVzIGEgKiBiICsgYy4gV2hldGhlciBvciBob3cgdGhlCisgKiBwcm9kdWN0IG9mIGEgKiBiIGlzIHJvdW5kZWQgYW5kIGhvdyBzdXBlcm5vcm1hbCBvcgorICogc3Vibm9ybWFsIGludGVybWVkaWF0ZSBwcm9kdWN0cyBhcmUgaGFuZGxlZCBpcyBub3QKKyAqIGRlZmluZWQuIG1hZCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdoZXJlIHNwZWVkIGlzCisgKiBwcmVmZXJyZWQgb3ZlciBhY2N1cmFjeS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBtYWQoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgYyk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBtYWQoZmxvYXQyIGEsIGZsb2F0MiBiLCBmbG9hdDIgYyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBtYWQoZmxvYXQzIGEsIGZsb2F0MyBiLCBmbG9hdDMgYyk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBtYWQoZmxvYXQ0IGEsIGZsb2F0NCBiLCBmbG9hdDQgYyk7CitmbG9hdDggX19vdmxkIF9fY25mbiBtYWQoZmxvYXQ4IGEsIGZsb2F0OCBiLCBmbG9hdDggYyk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbWFkKGZsb2F0MTYgYSwgZmxvYXQxNiBiLCBmbG9hdDE2IGMpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBtYWQoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYyk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gbWFkKGRvdWJsZTIgYSwgZG91YmxlMiBiLCBkb3VibGUyIGMpOworZG91YmxlMyBfX292bGQgX19jbmZuIG1hZChkb3VibGUzIGEsIGRvdWJsZTMgYiwgZG91YmxlMyBjKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBtYWQoZG91YmxlNCBhLCBkb3VibGU0IGIsIGRvdWJsZTQgYyk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gbWFkKGRvdWJsZTggYSwgZG91YmxlOCBiLCBkb3VibGU4IGMpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBtYWQoZG91YmxlMTYgYSwgZG91YmxlMTYgYiwgZG91YmxlMTYgYyk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gbWFkKGhhbGYgYSwgaGFsZiBiLCBoYWxmIGMpOworaGFsZjIgX19vdmxkIF9fY25mbiBtYWQoaGFsZjIgYSwgaGFsZjIgYiwgaGFsZjIgYyk7CitoYWxmMyBfX292bGQgX19jbmZuIG1hZChoYWxmMyBhLCBoYWxmMyBiLCBoYWxmMyBjKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gbWFkKGhhbGY0IGEsIGhhbGY0IGIsIGhhbGY0IGMpOworaGFsZjggX19vdmxkIF9fY25mbiBtYWQoaGFsZjggYSwgaGFsZjggYiwgaGFsZjggYyk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBtYWQoaGFsZjE2IGEsIGhhbGYxNiBiLCBoYWxmMTYgYyk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgeCBpZiB8IHggfCA+IHwgeSB8LCB5IGlmIHwgeSB8ID4gfCB4IHwsIG90aGVyd2lzZQorICogZm1heCh4LCB5KS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBtYXhtYWcoZmxvYXQgeCwgZmxvYXQgeSk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBtYXhtYWcoZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG1heG1hZyhmbG9hdDMgeCwgZmxvYXQzIHkpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbWF4bWFnKGZsb2F0NCB4LCBmbG9hdDQgeSk7CitmbG9hdDggX19vdmxkIF9fY25mbiBtYXhtYWcoZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBtYXhtYWcoZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBtYXhtYWcoZG91YmxlIHgsIGRvdWJsZSB5KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBtYXhtYWcoZG91YmxlMiB4LCBkb3VibGUyIHkpOworZG91YmxlMyBfX292bGQgX19jbmZuIG1heG1hZyhkb3VibGUzIHgsIGRvdWJsZTMgeSk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gbWF4bWFnKGRvdWJsZTQgeCwgZG91YmxlNCB5KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBtYXhtYWcoZG91YmxlOCB4LCBkb3VibGU4IHkpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBtYXhtYWcoZG91YmxlMTYgeCwgZG91YmxlMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gbWF4bWFnKGhhbGYgeCwgaGFsZiB5KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gbWF4bWFnKGhhbGYyIHgsIGhhbGYyIHkpOworaGFsZjMgX19vdmxkIF9fY25mbiBtYXhtYWcoaGFsZjMgeCwgaGFsZjMgeSk7CitoYWxmNCBfX292bGQgX19jbmZuIG1heG1hZyhoYWxmNCB4LCBoYWxmNCB5KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gbWF4bWFnKGhhbGY4IHgsIGhhbGY4IHkpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gbWF4bWFnKGhhbGYxNiB4LCBoYWxmMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgeCBpZiB8IHggfCA8IHwgeSB8LCB5IGlmIHwgeSB8IDwgfCB4IHwsIG90aGVyd2lzZQorICogZm1pbih4LCB5KS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBtaW5tYWcoZmxvYXQgeCwgZmxvYXQgeSk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBtaW5tYWcoZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG1pbm1hZyhmbG9hdDMgeCwgZmxvYXQzIHkpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbWlubWFnKGZsb2F0NCB4LCBmbG9hdDQgeSk7CitmbG9hdDggX19vdmxkIF9fY25mbiBtaW5tYWcoZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBtaW5tYWcoZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBtaW5tYWcoZG91YmxlIHgsIGRvdWJsZSB5KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBtaW5tYWcoZG91YmxlMiB4LCBkb3VibGUyIHkpOworZG91YmxlMyBfX292bGQgX19jbmZuIG1pbm1hZyhkb3VibGUzIHgsIGRvdWJsZTMgeSk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gbWlubWFnKGRvdWJsZTQgeCwgZG91YmxlNCB5KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBtaW5tYWcoZG91YmxlOCB4LCBkb3VibGU4IHkpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBtaW5tYWcoZG91YmxlMTYgeCwgZG91YmxlMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gbWlubWFnKGhhbGYgeCwgaGFsZiB5KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gbWlubWFnKGhhbGYyIHgsIGhhbGYyIHkpOworaGFsZjMgX19vdmxkIF9fY25mbiBtaW5tYWcoaGFsZjMgeCwgaGFsZjMgeSk7CitoYWxmNCBfX292bGQgX19jbmZuIG1pbm1hZyhoYWxmNCB4LCBoYWxmNCB5KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gbWlubWFnKGhhbGY4IHgsIGhhbGY4IHkpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gbWlubWFnKGhhbGYxNiB4LCBoYWxmMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIERlY29tcG9zZSBhIGZsb2F0aW5nLXBvaW50IG51bWJlci4gVGhlIG1vZGYKKyAqIGZ1bmN0aW9uIGJyZWFrcyB0aGUgYXJndW1lbnQgeCBpbnRvIGludGVncmFsIGFuZAorICogZnJhY3Rpb25hbCBwYXJ0cywgZWFjaCBvZiB3aGljaCBoYXMgdGhlIHNhbWUgc2lnbiBhcworICogdGhlIGFyZ3VtZW50LiBJdCBzdG9yZXMgdGhlIGludGVncmFsIHBhcnQgaW4gdGhlIG9iamVjdAorICogcG9pbnRlZCB0byBieSBpcHRyLgorICovCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2Zsb2F0IF9fb3ZsZCBtb2RmKGZsb2F0IHgsIGZsb2F0ICppcHRyKTsKK2Zsb2F0MiBfX292bGQgbW9kZihmbG9hdDIgeCwgZmxvYXQyICppcHRyKTsKK2Zsb2F0MyBfX292bGQgbW9kZihmbG9hdDMgeCwgZmxvYXQzICppcHRyKTsKK2Zsb2F0NCBfX292bGQgbW9kZihmbG9hdDQgeCwgZmxvYXQ0ICppcHRyKTsKK2Zsb2F0OCBfX292bGQgbW9kZihmbG9hdDggeCwgZmxvYXQ4ICppcHRyKTsKK2Zsb2F0MTYgX19vdmxkIG1vZGYoZmxvYXQxNiB4LCBmbG9hdDE2ICppcHRyKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBtb2RmKGRvdWJsZSB4LCBkb3VibGUgKmlwdHIpOworZG91YmxlMiBfX292bGQgbW9kZihkb3VibGUyIHgsIGRvdWJsZTIgKmlwdHIpOworZG91YmxlMyBfX292bGQgbW9kZihkb3VibGUzIHgsIGRvdWJsZTMgKmlwdHIpOworZG91YmxlNCBfX292bGQgbW9kZihkb3VibGU0IHgsIGRvdWJsZTQgKmlwdHIpOworZG91YmxlOCBfX292bGQgbW9kZihkb3VibGU4IHgsIGRvdWJsZTggKmlwdHIpOworZG91YmxlMTYgX19vdmxkIG1vZGYoZG91YmxlMTYgeCwgZG91YmxlMTYgKmlwdHIpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgbW9kZihoYWxmIHgsIGhhbGYgKmlwdHIpOworaGFsZjIgX19vdmxkIG1vZGYoaGFsZjIgeCwgaGFsZjIgKmlwdHIpOworaGFsZjMgX19vdmxkIG1vZGYoaGFsZjMgeCwgaGFsZjMgKmlwdHIpOworaGFsZjQgX19vdmxkIG1vZGYoaGFsZjQgeCwgaGFsZjQgKmlwdHIpOworaGFsZjggX19vdmxkIG1vZGYoaGFsZjggeCwgaGFsZjggKmlwdHIpOworaGFsZjE2IF9fb3ZsZCBtb2RmKGhhbGYxNiB4LCBoYWxmMTYgKmlwdHIpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKyNlbHNlCitmbG9hdCBfX292bGQgbW9kZihmbG9hdCB4LCBfX2dsb2JhbCBmbG9hdCAqaXB0cik7CitmbG9hdDIgX19vdmxkIG1vZGYoZmxvYXQyIHgsIF9fZ2xvYmFsIGZsb2F0MiAqaXB0cik7CitmbG9hdDMgX19vdmxkIG1vZGYoZmxvYXQzIHgsIF9fZ2xvYmFsIGZsb2F0MyAqaXB0cik7CitmbG9hdDQgX19vdmxkIG1vZGYoZmxvYXQ0IHgsIF9fZ2xvYmFsIGZsb2F0NCAqaXB0cik7CitmbG9hdDggX19vdmxkIG1vZGYoZmxvYXQ4IHgsIF9fZ2xvYmFsIGZsb2F0OCAqaXB0cik7CitmbG9hdDE2IF9fb3ZsZCBtb2RmKGZsb2F0MTYgeCwgX19nbG9iYWwgZmxvYXQxNiAqaXB0cik7CitmbG9hdCBfX292bGQgbW9kZihmbG9hdCB4LCBfX2xvY2FsIGZsb2F0ICppcHRyKTsKK2Zsb2F0MiBfX292bGQgbW9kZihmbG9hdDIgeCwgX19sb2NhbCBmbG9hdDIgKmlwdHIpOworZmxvYXQzIF9fb3ZsZCBtb2RmKGZsb2F0MyB4LCBfX2xvY2FsIGZsb2F0MyAqaXB0cik7CitmbG9hdDQgX19vdmxkIG1vZGYoZmxvYXQ0IHgsIF9fbG9jYWwgZmxvYXQ0ICppcHRyKTsKK2Zsb2F0OCBfX292bGQgbW9kZihmbG9hdDggeCwgX19sb2NhbCBmbG9hdDggKmlwdHIpOworZmxvYXQxNiBfX292bGQgbW9kZihmbG9hdDE2IHgsIF9fbG9jYWwgZmxvYXQxNiAqaXB0cik7CitmbG9hdCBfX292bGQgbW9kZihmbG9hdCB4LCBfX3ByaXZhdGUgZmxvYXQgKmlwdHIpOworZmxvYXQyIF9fb3ZsZCBtb2RmKGZsb2F0MiB4LCBfX3ByaXZhdGUgZmxvYXQyICppcHRyKTsKK2Zsb2F0MyBfX292bGQgbW9kZihmbG9hdDMgeCwgX19wcml2YXRlIGZsb2F0MyAqaXB0cik7CitmbG9hdDQgX19vdmxkIG1vZGYoZmxvYXQ0IHgsIF9fcHJpdmF0ZSBmbG9hdDQgKmlwdHIpOworZmxvYXQ4IF9fb3ZsZCBtb2RmKGZsb2F0OCB4LCBfX3ByaXZhdGUgZmxvYXQ4ICppcHRyKTsKK2Zsb2F0MTYgX19vdmxkIG1vZGYoZmxvYXQxNiB4LCBfX3ByaXZhdGUgZmxvYXQxNiAqaXB0cik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgbW9kZihkb3VibGUgeCwgX19nbG9iYWwgZG91YmxlICppcHRyKTsKK2RvdWJsZTIgX19vdmxkIG1vZGYoZG91YmxlMiB4LCBfX2dsb2JhbCBkb3VibGUyICppcHRyKTsKK2RvdWJsZTMgX19vdmxkIG1vZGYoZG91YmxlMyB4LCBfX2dsb2JhbCBkb3VibGUzICppcHRyKTsKK2RvdWJsZTQgX19vdmxkIG1vZGYoZG91YmxlNCB4LCBfX2dsb2JhbCBkb3VibGU0ICppcHRyKTsKK2RvdWJsZTggX19vdmxkIG1vZGYoZG91YmxlOCB4LCBfX2dsb2JhbCBkb3VibGU4ICppcHRyKTsKK2RvdWJsZTE2IF9fb3ZsZCBtb2RmKGRvdWJsZTE2IHgsIF9fZ2xvYmFsIGRvdWJsZTE2ICppcHRyKTsKK2RvdWJsZSBfX292bGQgbW9kZihkb3VibGUgeCwgX19sb2NhbCBkb3VibGUgKmlwdHIpOworZG91YmxlMiBfX292bGQgbW9kZihkb3VibGUyIHgsIF9fbG9jYWwgZG91YmxlMiAqaXB0cik7Citkb3VibGUzIF9fb3ZsZCBtb2RmKGRvdWJsZTMgeCwgX19sb2NhbCBkb3VibGUzICppcHRyKTsKK2RvdWJsZTQgX19vdmxkIG1vZGYoZG91YmxlNCB4LCBfX2xvY2FsIGRvdWJsZTQgKmlwdHIpOworZG91YmxlOCBfX292bGQgbW9kZihkb3VibGU4IHgsIF9fbG9jYWwgZG91YmxlOCAqaXB0cik7Citkb3VibGUxNiBfX292bGQgbW9kZihkb3VibGUxNiB4LCBfX2xvY2FsIGRvdWJsZTE2ICppcHRyKTsKK2RvdWJsZSBfX292bGQgbW9kZihkb3VibGUgeCwgX19wcml2YXRlIGRvdWJsZSAqaXB0cik7Citkb3VibGUyIF9fb3ZsZCBtb2RmKGRvdWJsZTIgeCwgX19wcml2YXRlIGRvdWJsZTIgKmlwdHIpOworZG91YmxlMyBfX292bGQgbW9kZihkb3VibGUzIHgsIF9fcHJpdmF0ZSBkb3VibGUzICppcHRyKTsKK2RvdWJsZTQgX19vdmxkIG1vZGYoZG91YmxlNCB4LCBfX3ByaXZhdGUgZG91YmxlNCAqaXB0cik7Citkb3VibGU4IF9fb3ZsZCBtb2RmKGRvdWJsZTggeCwgX19wcml2YXRlIGRvdWJsZTggKmlwdHIpOworZG91YmxlMTYgX19vdmxkIG1vZGYoZG91YmxlMTYgeCwgX19wcml2YXRlIGRvdWJsZTE2ICppcHRyKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIG1vZGYoaGFsZiB4LCBfX2dsb2JhbCBoYWxmICppcHRyKTsKK2hhbGYyIF9fb3ZsZCBtb2RmKGhhbGYyIHgsIF9fZ2xvYmFsIGhhbGYyICppcHRyKTsKK2hhbGYzIF9fb3ZsZCBtb2RmKGhhbGYzIHgsIF9fZ2xvYmFsIGhhbGYzICppcHRyKTsKK2hhbGY0IF9fb3ZsZCBtb2RmKGhhbGY0IHgsIF9fZ2xvYmFsIGhhbGY0ICppcHRyKTsKK2hhbGY4IF9fb3ZsZCBtb2RmKGhhbGY4IHgsIF9fZ2xvYmFsIGhhbGY4ICppcHRyKTsKK2hhbGYxNiBfX292bGQgbW9kZihoYWxmMTYgeCwgX19nbG9iYWwgaGFsZjE2ICppcHRyKTsKK2hhbGYgX19vdmxkIG1vZGYoaGFsZiB4LCBfX2xvY2FsIGhhbGYgKmlwdHIpOworaGFsZjIgX19vdmxkIG1vZGYoaGFsZjIgeCwgX19sb2NhbCBoYWxmMiAqaXB0cik7CitoYWxmMyBfX292bGQgbW9kZihoYWxmMyB4LCBfX2xvY2FsIGhhbGYzICppcHRyKTsKK2hhbGY0IF9fb3ZsZCBtb2RmKGhhbGY0IHgsIF9fbG9jYWwgaGFsZjQgKmlwdHIpOworaGFsZjggX19vdmxkIG1vZGYoaGFsZjggeCwgX19sb2NhbCBoYWxmOCAqaXB0cik7CitoYWxmMTYgX19vdmxkIG1vZGYoaGFsZjE2IHgsIF9fbG9jYWwgaGFsZjE2ICppcHRyKTsKK2hhbGYgX19vdmxkIG1vZGYoaGFsZiB4LCBfX3ByaXZhdGUgaGFsZiAqaXB0cik7CitoYWxmMiBfX292bGQgbW9kZihoYWxmMiB4LCBfX3ByaXZhdGUgaGFsZjIgKmlwdHIpOworaGFsZjMgX19vdmxkIG1vZGYoaGFsZjMgeCwgX19wcml2YXRlIGhhbGYzICppcHRyKTsKK2hhbGY0IF9fb3ZsZCBtb2RmKGhhbGY0IHgsIF9fcHJpdmF0ZSBoYWxmNCAqaXB0cik7CitoYWxmOCBfX292bGQgbW9kZihoYWxmOCB4LCBfX3ByaXZhdGUgaGFsZjggKmlwdHIpOworaGFsZjE2IF9fb3ZsZCBtb2RmKGhhbGYxNiB4LCBfX3ByaXZhdGUgaGFsZjE2ICppcHRyKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvKioKKyAqIFJldHVybnMgYSBxdWlldCBOYU4uIFRoZSBuYW5jb2RlIG1heSBiZSBwbGFjZWQKKyAqIGluIHRoZSBzaWduaWZpY2FuZCBvZiB0aGUgcmVzdWx0aW5nIE5hTi4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBuYW4odWludCBuYW5jb2RlKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG5hbih1aW50MiBuYW5jb2RlKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG5hbih1aW50MyBuYW5jb2RlKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIG5hbih1aW50NCBuYW5jb2RlKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG5hbih1aW50OCBuYW5jb2RlKTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBuYW4odWludDE2IG5hbmNvZGUpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBuYW4odWxvbmcgbmFuY29kZSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gbmFuKHVsb25nMiBuYW5jb2RlKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBuYW4odWxvbmczIG5hbmNvZGUpOworZG91YmxlNCBfX292bGQgX19jbmZuIG5hbih1bG9uZzQgbmFuY29kZSk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gbmFuKHVsb25nOCBuYW5jb2RlKTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbmFuKHVsb25nMTYgbmFuY29kZSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gbmFuKHVzaG9ydCBuYW5jb2RlKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gbmFuKHVzaG9ydDIgbmFuY29kZSk7CitoYWxmMyBfX292bGQgX19jbmZuIG5hbih1c2hvcnQzIG5hbmNvZGUpOworaGFsZjQgX19vdmxkIF9fY25mbiBuYW4odXNob3J0NCBuYW5jb2RlKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gbmFuKHVzaG9ydDggbmFuY29kZSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBuYW4odXNob3J0MTYgbmFuY29kZSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGVzIHRoZSBuZXh0IHJlcHJlc2VudGFibGUgc2luZ2xlLXByZWNpc2lvbgorICogZmxvYXRpbmctcG9pbnQgdmFsdWUgZm9sbG93aW5nIHggaW4gdGhlIGRpcmVjdGlvbiBvZgorICogeS4gVGh1cywgaWYgeSBpcyBsZXNzIHRoYW4geCwgbmV4dGFmdGVyKCkgcmV0dXJucyB0aGUKKyAqIGxhcmdlc3QgcmVwcmVzZW50YWJsZSBmbG9hdGluZy1wb2ludCBudW1iZXIgbGVzcworICogdGhhbiB4LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIG5leHRhZnRlcihmbG9hdCB4LCBmbG9hdCB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG5leHRhZnRlcihmbG9hdDIgeCwgZmxvYXQyIHkpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbmV4dGFmdGVyKGZsb2F0MyB4LCBmbG9hdDMgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBuZXh0YWZ0ZXIoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG5leHRhZnRlcihmbG9hdDggeCwgZmxvYXQ4IHkpOworZmxvYXQxNiBfX292bGQgX19jbmZuIG5leHRhZnRlcihmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIG5leHRhZnRlcihkb3VibGUgeCwgZG91YmxlIHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIG5leHRhZnRlcihkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbmV4dGFmdGVyKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBuZXh0YWZ0ZXIoZG91YmxlNCB4LCBkb3VibGU0IHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIG5leHRhZnRlcihkb3VibGU4IHgsIGRvdWJsZTggeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIG5leHRhZnRlcihkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBuZXh0YWZ0ZXIoaGFsZiB4LCBoYWxmIHkpOworaGFsZjIgX19vdmxkIF9fY25mbiBuZXh0YWZ0ZXIoaGFsZjIgeCwgaGFsZjIgeSk7CitoYWxmMyBfX292bGQgX19jbmZuIG5leHRhZnRlcihoYWxmMyB4LCBoYWxmMyB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gbmV4dGFmdGVyKGhhbGY0IHgsIGhhbGY0IHkpOworaGFsZjggX19vdmxkIF9fY25mbiBuZXh0YWZ0ZXIoaGFsZjggeCwgaGFsZjggeSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBuZXh0YWZ0ZXIoaGFsZjE2IHgsIGhhbGYxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSB4IHRvIHRoZSBwb3dlciB5LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIHBvdyhmbG9hdCB4LCBmbG9hdCB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHBvdyhmbG9hdDIgeCwgZmxvYXQyIHkpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gcG93KGZsb2F0MyB4LCBmbG9hdDMgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBwb3coZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHBvdyhmbG9hdDggeCwgZmxvYXQ4IHkpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHBvdyhmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIHBvdyhkb3VibGUgeCwgZG91YmxlIHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIHBvdyhkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gcG93KGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBwb3coZG91YmxlNCB4LCBkb3VibGU0IHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIHBvdyhkb3VibGU4IHgsIGRvdWJsZTggeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHBvdyhkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBwb3coaGFsZiB4LCBoYWxmIHkpOworaGFsZjIgX19vdmxkIF9fY25mbiBwb3coaGFsZjIgeCwgaGFsZjIgeSk7CitoYWxmMyBfX292bGQgX19jbmZuIHBvdyhoYWxmMyB4LCBoYWxmMyB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gcG93KGhhbGY0IHgsIGhhbGY0IHkpOworaGFsZjggX19vdmxkIF9fY25mbiBwb3coaGFsZjggeCwgaGFsZjggeSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBwb3coaGFsZjE2IHgsIGhhbGYxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSB4IHRvIHRoZSBwb3dlciB5LCB3aGVyZSB5IGlzIGFuIGludGVnZXIuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gcG93bihmbG9hdCB4LCBpbnQgeSk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBwb3duKGZsb2F0MiB4LCBpbnQyIHkpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gcG93bihmbG9hdDMgeCwgaW50MyB5KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHBvd24oZmxvYXQ0IHgsIGludDQgeSk7CitmbG9hdDggX19vdmxkIF9fY25mbiBwb3duKGZsb2F0OCB4LCBpbnQ4IHkpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHBvd24oZmxvYXQxNiB4LCBpbnQxNiB5KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gcG93bihkb3VibGUgeCwgaW50IHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIHBvd24oZG91YmxlMiB4LCBpbnQyIHkpOworZG91YmxlMyBfX292bGQgX19jbmZuIHBvd24oZG91YmxlMyB4LCBpbnQzIHkpOworZG91YmxlNCBfX292bGQgX19jbmZuIHBvd24oZG91YmxlNCB4LCBpbnQ0IHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIHBvd24oZG91YmxlOCB4LCBpbnQ4IHkpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBwb3duKGRvdWJsZTE2IHgsIGludDE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHBvd24oaGFsZiB4LCBpbnQgeSk7CitoYWxmMiBfX292bGQgX19jbmZuIHBvd24oaGFsZjIgeCwgaW50MiB5KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gcG93bihoYWxmMyB4LCBpbnQzIHkpOworaGFsZjQgX19vdmxkIF9fY25mbiBwb3duKGhhbGY0IHgsIGludDQgeSk7CitoYWxmOCBfX292bGQgX19jbmZuIHBvd24oaGFsZjggeCwgaW50OCB5KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHBvd24oaGFsZjE2IHgsIGludDE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIHggdG8gdGhlIHBvd2VyIHksIHdoZXJlIHggaXMgPj0gMC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBwb3dyKGZsb2F0IHgsIGZsb2F0IHkpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gcG93cihmbG9hdDIgeCwgZmxvYXQyIHkpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gcG93cihmbG9hdDMgeCwgZmxvYXQzIHkpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gcG93cihmbG9hdDQgeCwgZmxvYXQ0IHkpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gcG93cihmbG9hdDggeCwgZmxvYXQ4IHkpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHBvd3IoZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBwb3dyKGRvdWJsZSB4LCBkb3VibGUgeSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gcG93cihkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gcG93cihkb3VibGUzIHgsIGRvdWJsZTMgeSk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gcG93cihkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gcG93cihkb3VibGU4IHgsIGRvdWJsZTggeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHBvd3IoZG91YmxlMTYgeCwgZG91YmxlMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gcG93cihoYWxmIHgsIGhhbGYgeSk7CitoYWxmMiBfX292bGQgX19jbmZuIHBvd3IoaGFsZjIgeCwgaGFsZjIgeSk7CitoYWxmMyBfX292bGQgX19jbmZuIHBvd3IoaGFsZjMgeCwgaGFsZjMgeSk7CitoYWxmNCBfX292bGQgX19jbmZuIHBvd3IoaGFsZjQgeCwgaGFsZjQgeSk7CitoYWxmOCBfX292bGQgX19jbmZuIHBvd3IoaGFsZjggeCwgaGFsZjggeSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBwb3dyKGhhbGYxNiB4LCBoYWxmMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgdGhlIHZhbHVlIHIgc3VjaCB0aGF0IHIgPSB4IC0gbip5LCB3aGVyZSBuCisgKiBpcyB0aGUgaW50ZWdlciBuZWFyZXN0IHRoZSBleGFjdCB2YWx1ZSBvZiB4L3kuIElmIHRoZXJlCisgKiBhcmUgdHdvIGludGVnZXJzIGNsb3Nlc3QgdG8geC95LCBuIHNoYWxsIGJlIHRoZSBldmVuCisgKiBvbmUuIElmIHIgaXMgemVybywgaXQgaXMgZ2l2ZW4gdGhlIHNhbWUgc2lnbiBhcyB4LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIHJlbWFpbmRlcihmbG9hdCB4LCBmbG9hdCB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHJlbWFpbmRlcihmbG9hdDIgeCwgZmxvYXQyIHkpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gcmVtYWluZGVyKGZsb2F0MyB4LCBmbG9hdDMgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiByZW1haW5kZXIoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHJlbWFpbmRlcihmbG9hdDggeCwgZmxvYXQ4IHkpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHJlbWFpbmRlcihmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIHJlbWFpbmRlcihkb3VibGUgeCwgZG91YmxlIHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIHJlbWFpbmRlcihkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gcmVtYWluZGVyKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiByZW1haW5kZXIoZG91YmxlNCB4LCBkb3VibGU0IHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIHJlbWFpbmRlcihkb3VibGU4IHgsIGRvdWJsZTggeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHJlbWFpbmRlcihkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiByZW1haW5kZXIoaGFsZiB4LCBoYWxmIHkpOworaGFsZjIgX19vdmxkIF9fY25mbiByZW1haW5kZXIoaGFsZjIgeCwgaGFsZjIgeSk7CitoYWxmMyBfX292bGQgX19jbmZuIHJlbWFpbmRlcihoYWxmMyB4LCBoYWxmMyB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gcmVtYWluZGVyKGhhbGY0IHgsIGhhbGY0IHkpOworaGFsZjggX19vdmxkIF9fY25mbiByZW1haW5kZXIoaGFsZjggeCwgaGFsZjggeSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiByZW1haW5kZXIoaGFsZjE2IHgsIGhhbGYxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogVGhlIHJlbXF1byBmdW5jdGlvbiBjb21wdXRlcyB0aGUgdmFsdWUgciBzdWNoCisgKiB0aGF0IHIgPSB4IC0gbip5LCB3aGVyZSBuIGlzIHRoZSBpbnRlZ2VyIG5lYXJlc3QgdGhlCisgKiBleGFjdCB2YWx1ZSBvZiB4L3kuIElmIHRoZXJlIGFyZSB0d28gaW50ZWdlcnMgY2xvc2VzdAorICogdG8geC95LCBuIHNoYWxsIGJlIHRoZSBldmVuIG9uZS4gSWYgciBpcyB6ZXJvLCBpdCBpcworICogZ2l2ZW4gdGhlIHNhbWUgc2lnbiBhcyB4LiBUaGlzIGlzIHRoZSBzYW1lIHZhbHVlCisgKiB0aGF0IGlzIHJldHVybmVkIGJ5IHRoZSByZW1haW5kZXIgZnVuY3Rpb24uCisgKiByZW1xdW8gYWxzbyBjYWxjdWxhdGVzIHRoZSBsb3dlciBzZXZlbiBiaXRzIG9mIHRoZQorICogaW50ZWdyYWwgcXVvdGllbnQgeC95LCBhbmQgZ2l2ZXMgdGhhdCB2YWx1ZSB0aGUgc2FtZQorICogc2lnbiBhcyB4L3kuIEl0IHN0b3JlcyB0aGlzIHNpZ25lZCB2YWx1ZSBpbiB0aGUgb2JqZWN0CisgKiBwb2ludGVkIHRvIGJ5IHF1by4KKyAqLworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCitmbG9hdCBfX292bGQgcmVtcXVvKGZsb2F0IHgsIGZsb2F0IHksIGludCAqcXVvKTsKK2Zsb2F0MiBfX292bGQgcmVtcXVvKGZsb2F0MiB4LCBmbG9hdDIgeSwgaW50MiAqcXVvKTsKK2Zsb2F0MyBfX292bGQgcmVtcXVvKGZsb2F0MyB4LCBmbG9hdDMgeSwgaW50MyAqcXVvKTsKK2Zsb2F0NCBfX292bGQgcmVtcXVvKGZsb2F0NCB4LCBmbG9hdDQgeSwgaW50NCAqcXVvKTsKK2Zsb2F0OCBfX292bGQgcmVtcXVvKGZsb2F0OCB4LCBmbG9hdDggeSwgaW50OCAqcXVvKTsKK2Zsb2F0MTYgX19vdmxkIHJlbXF1byhmbG9hdDE2IHgsIGZsb2F0MTYgeSwgaW50MTYgKnF1byk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgcmVtcXVvKGRvdWJsZSB4LCBkb3VibGUgeSwgaW50ICpxdW8pOworZG91YmxlMiBfX292bGQgcmVtcXVvKGRvdWJsZTIgeCwgZG91YmxlMiB5LCBpbnQyICpxdW8pOworZG91YmxlMyBfX292bGQgcmVtcXVvKGRvdWJsZTMgeCwgZG91YmxlMyB5LCBpbnQzICpxdW8pOworZG91YmxlNCBfX292bGQgcmVtcXVvKGRvdWJsZTQgeCwgZG91YmxlNCB5LCBpbnQ0ICpxdW8pOworZG91YmxlOCBfX292bGQgcmVtcXVvKGRvdWJsZTggeCwgZG91YmxlOCB5LCBpbnQ4ICpxdW8pOworZG91YmxlMTYgX19vdmxkIHJlbXF1byhkb3VibGUxNiB4LCBkb3VibGUxNiB5LCBpbnQxNiAqcXVvKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIHJlbXF1byhoYWxmIHgsIGhhbGYgeSwgaW50ICpxdW8pOworaGFsZjIgX19vdmxkIHJlbXF1byhoYWxmMiB4LCBoYWxmMiB5LCBpbnQyICpxdW8pOworaGFsZjMgX19vdmxkIHJlbXF1byhoYWxmMyB4LCBoYWxmMyB5LCBpbnQzICpxdW8pOworaGFsZjQgX19vdmxkIHJlbXF1byhoYWxmNCB4LCBoYWxmNCB5LCBpbnQ0ICpxdW8pOworaGFsZjggX19vdmxkIHJlbXF1byhoYWxmOCB4LCBoYWxmOCB5LCBpbnQ4ICpxdW8pOworaGFsZjE2IF9fb3ZsZCByZW1xdW8oaGFsZjE2IHgsIGhhbGYxNiB5LCBpbnQxNiAqcXVvKTsKKworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKyNlbHNlCitmbG9hdCBfX292bGQgcmVtcXVvKGZsb2F0IHgsIGZsb2F0IHksIF9fZ2xvYmFsIGludCAqcXVvKTsKK2Zsb2F0MiBfX292bGQgcmVtcXVvKGZsb2F0MiB4LCBmbG9hdDIgeSwgX19nbG9iYWwgaW50MiAqcXVvKTsKK2Zsb2F0MyBfX292bGQgcmVtcXVvKGZsb2F0MyB4LCBmbG9hdDMgeSwgX19nbG9iYWwgaW50MyAqcXVvKTsKK2Zsb2F0NCBfX292bGQgcmVtcXVvKGZsb2F0NCB4LCBmbG9hdDQgeSwgX19nbG9iYWwgaW50NCAqcXVvKTsKK2Zsb2F0OCBfX292bGQgcmVtcXVvKGZsb2F0OCB4LCBmbG9hdDggeSwgX19nbG9iYWwgaW50OCAqcXVvKTsKK2Zsb2F0MTYgX19vdmxkIHJlbXF1byhmbG9hdDE2IHgsIGZsb2F0MTYgeSwgX19nbG9iYWwgaW50MTYgKnF1byk7CitmbG9hdCBfX292bGQgcmVtcXVvKGZsb2F0IHgsIGZsb2F0IHksIF9fbG9jYWwgaW50ICpxdW8pOworZmxvYXQyIF9fb3ZsZCByZW1xdW8oZmxvYXQyIHgsIGZsb2F0MiB5LCBfX2xvY2FsIGludDIgKnF1byk7CitmbG9hdDMgX19vdmxkIHJlbXF1byhmbG9hdDMgeCwgZmxvYXQzIHksIF9fbG9jYWwgaW50MyAqcXVvKTsKK2Zsb2F0NCBfX292bGQgcmVtcXVvKGZsb2F0NCB4LCBmbG9hdDQgeSwgX19sb2NhbCBpbnQ0ICpxdW8pOworZmxvYXQ4IF9fb3ZsZCByZW1xdW8oZmxvYXQ4IHgsIGZsb2F0OCB5LCBfX2xvY2FsIGludDggKnF1byk7CitmbG9hdDE2IF9fb3ZsZCByZW1xdW8oZmxvYXQxNiB4LCBmbG9hdDE2IHksIF9fbG9jYWwgaW50MTYgKnF1byk7CitmbG9hdCBfX292bGQgcmVtcXVvKGZsb2F0IHgsIGZsb2F0IHksIF9fcHJpdmF0ZSBpbnQgKnF1byk7CitmbG9hdDIgX19vdmxkIHJlbXF1byhmbG9hdDIgeCwgZmxvYXQyIHksIF9fcHJpdmF0ZSBpbnQyICpxdW8pOworZmxvYXQzIF9fb3ZsZCByZW1xdW8oZmxvYXQzIHgsIGZsb2F0MyB5LCBfX3ByaXZhdGUgaW50MyAqcXVvKTsKK2Zsb2F0NCBfX292bGQgcmVtcXVvKGZsb2F0NCB4LCBmbG9hdDQgeSwgX19wcml2YXRlIGludDQgKnF1byk7CitmbG9hdDggX19vdmxkIHJlbXF1byhmbG9hdDggeCwgZmxvYXQ4IHksIF9fcHJpdmF0ZSBpbnQ4ICpxdW8pOworZmxvYXQxNiBfX292bGQgcmVtcXVvKGZsb2F0MTYgeCwgZmxvYXQxNiB5LCBfX3ByaXZhdGUgaW50MTYgKnF1byk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgcmVtcXVvKGRvdWJsZSB4LCBkb3VibGUgeSwgX19nbG9iYWwgaW50ICpxdW8pOworZG91YmxlMiBfX292bGQgcmVtcXVvKGRvdWJsZTIgeCwgZG91YmxlMiB5LCBfX2dsb2JhbCBpbnQyICpxdW8pOworZG91YmxlMyBfX292bGQgcmVtcXVvKGRvdWJsZTMgeCwgZG91YmxlMyB5LCBfX2dsb2JhbCBpbnQzICpxdW8pOworZG91YmxlNCBfX292bGQgcmVtcXVvKGRvdWJsZTQgeCwgZG91YmxlNCB5LCBfX2dsb2JhbCBpbnQ0ICpxdW8pOworZG91YmxlOCBfX292bGQgcmVtcXVvKGRvdWJsZTggeCwgZG91YmxlOCB5LCBfX2dsb2JhbCBpbnQ4ICpxdW8pOworZG91YmxlMTYgX19vdmxkIHJlbXF1byhkb3VibGUxNiB4LCBkb3VibGUxNiB5LCBfX2dsb2JhbCBpbnQxNiAqcXVvKTsKK2RvdWJsZSBfX292bGQgcmVtcXVvKGRvdWJsZSB4LCBkb3VibGUgeSwgX19sb2NhbCBpbnQgKnF1byk7Citkb3VibGUyIF9fb3ZsZCByZW1xdW8oZG91YmxlMiB4LCBkb3VibGUyIHksIF9fbG9jYWwgaW50MiAqcXVvKTsKK2RvdWJsZTMgX19vdmxkIHJlbXF1byhkb3VibGUzIHgsIGRvdWJsZTMgeSwgX19sb2NhbCBpbnQzICpxdW8pOworZG91YmxlNCBfX292bGQgcmVtcXVvKGRvdWJsZTQgeCwgZG91YmxlNCB5LCBfX2xvY2FsIGludDQgKnF1byk7Citkb3VibGU4IF9fb3ZsZCByZW1xdW8oZG91YmxlOCB4LCBkb3VibGU4IHksIF9fbG9jYWwgaW50OCAqcXVvKTsKK2RvdWJsZTE2IF9fb3ZsZCByZW1xdW8oZG91YmxlMTYgeCwgZG91YmxlMTYgeSwgX19sb2NhbCBpbnQxNiAqcXVvKTsKK2RvdWJsZSBfX292bGQgcmVtcXVvKGRvdWJsZSB4LCBkb3VibGUgeSwgX19wcml2YXRlIGludCAqcXVvKTsKK2RvdWJsZTIgX19vdmxkIHJlbXF1byhkb3VibGUyIHgsIGRvdWJsZTIgeSwgX19wcml2YXRlIGludDIgKnF1byk7Citkb3VibGUzIF9fb3ZsZCByZW1xdW8oZG91YmxlMyB4LCBkb3VibGUzIHksIF9fcHJpdmF0ZSBpbnQzICpxdW8pOworZG91YmxlNCBfX292bGQgcmVtcXVvKGRvdWJsZTQgeCwgZG91YmxlNCB5LCBfX3ByaXZhdGUgaW50NCAqcXVvKTsKK2RvdWJsZTggX19vdmxkIHJlbXF1byhkb3VibGU4IHgsIGRvdWJsZTggeSwgX19wcml2YXRlIGludDggKnF1byk7Citkb3VibGUxNiBfX292bGQgcmVtcXVvKGRvdWJsZTE2IHgsIGRvdWJsZTE2IHksIF9fcHJpdmF0ZSBpbnQxNiAqcXVvKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIHJlbXF1byhoYWxmIHgsIGhhbGYgeSwgX19nbG9iYWwgaW50ICpxdW8pOworaGFsZjIgX19vdmxkIHJlbXF1byhoYWxmMiB4LCBoYWxmMiB5LCBfX2dsb2JhbCBpbnQyICpxdW8pOworaGFsZjMgX19vdmxkIHJlbXF1byhoYWxmMyB4LCBoYWxmMyB5LCBfX2dsb2JhbCBpbnQzICpxdW8pOworaGFsZjQgX19vdmxkIHJlbXF1byhoYWxmNCB4LCBoYWxmNCB5LCBfX2dsb2JhbCBpbnQ0ICpxdW8pOworaGFsZjggX19vdmxkIHJlbXF1byhoYWxmOCB4LCBoYWxmOCB5LCBfX2dsb2JhbCBpbnQ4ICpxdW8pOworaGFsZjE2IF9fb3ZsZCByZW1xdW8oaGFsZjE2IHgsIGhhbGYxNiB5LCBfX2dsb2JhbCBpbnQxNiAqcXVvKTsKK2hhbGYgX19vdmxkIHJlbXF1byhoYWxmIHgsIGhhbGYgeSwgX19sb2NhbCBpbnQgKnF1byk7CitoYWxmMiBfX292bGQgcmVtcXVvKGhhbGYyIHgsIGhhbGYyIHksIF9fbG9jYWwgaW50MiAqcXVvKTsKK2hhbGYzIF9fb3ZsZCByZW1xdW8oaGFsZjMgeCwgaGFsZjMgeSwgX19sb2NhbCBpbnQzICpxdW8pOworaGFsZjQgX19vdmxkIHJlbXF1byhoYWxmNCB4LCBoYWxmNCB5LCBfX2xvY2FsIGludDQgKnF1byk7CitoYWxmOCBfX292bGQgcmVtcXVvKGhhbGY4IHgsIGhhbGY4IHksIF9fbG9jYWwgaW50OCAqcXVvKTsKK2hhbGYxNiBfX292bGQgcmVtcXVvKGhhbGYxNiB4LCBoYWxmMTYgeSwgX19sb2NhbCBpbnQxNiAqcXVvKTsKK2hhbGYgX19vdmxkIHJlbXF1byhoYWxmIHgsIGhhbGYgeSwgX19wcml2YXRlIGludCAqcXVvKTsKK2hhbGYyIF9fb3ZsZCByZW1xdW8oaGFsZjIgeCwgaGFsZjIgeSwgX19wcml2YXRlIGludDIgKnF1byk7CitoYWxmMyBfX292bGQgcmVtcXVvKGhhbGYzIHgsIGhhbGYzIHksIF9fcHJpdmF0ZSBpbnQzICpxdW8pOworaGFsZjQgX19vdmxkIHJlbXF1byhoYWxmNCB4LCBoYWxmNCB5LCBfX3ByaXZhdGUgaW50NCAqcXVvKTsKK2hhbGY4IF9fb3ZsZCByZW1xdW8oaGFsZjggeCwgaGFsZjggeSwgX19wcml2YXRlIGludDggKnF1byk7CitoYWxmMTYgX19vdmxkIHJlbXF1byhoYWxmMTYgeCwgaGFsZjE2IHksIF9fcHJpdmF0ZSBpbnQxNiAqcXVvKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorLyoqCisgKiBSb3VuZCB0byBpbnRlZ3JhbCB2YWx1ZSAodXNpbmcgcm91bmQgdG8gbmVhcmVzdAorICogZXZlbiByb3VuZGluZyBtb2RlKSBpbiBmbG9hdGluZy1wb2ludCBmb3JtYXQuCisgKiBSZWZlciB0byBzZWN0aW9uIDcuMSBmb3IgZGVzY3JpcHRpb24gb2Ygcm91bmRpbmcKKyAqIG1vZGVzLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIHJpbnQoZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gcmludChmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gcmludChmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gcmludChmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gcmludChmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHJpbnQoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIHJpbnQoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiByaW50KGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIHJpbnQoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gcmludChkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiByaW50KGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiByaW50KGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiByaW50KGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiByaW50KGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gcmludChoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIHJpbnQoaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiByaW50KGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHJpbnQoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSB4IHRvIHRoZSBwb3dlciAxL3kuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gcm9vdG4oZmxvYXQgeCwgaW50IHkpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gcm9vdG4oZmxvYXQyIHgsIGludDIgeSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiByb290bihmbG9hdDMgeCwgaW50MyB5KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHJvb3RuKGZsb2F0NCB4LCBpbnQ0IHkpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gcm9vdG4oZmxvYXQ4IHgsIGludDggeSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gcm9vdG4oZmxvYXQxNiB4LCBpbnQxNiB5KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gcm9vdG4oZG91YmxlIHgsIGludCB5KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiByb290bihkb3VibGUyIHgsIGludDIgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gcm9vdG4oZG91YmxlMyB4LCBpbnQzIHkpOworZG91YmxlNCBfX292bGQgX19jbmZuIHJvb3RuKGRvdWJsZTQgeCwgaW50NCB5KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiByb290bihkb3VibGU4IHgsIGludDggeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHJvb3RuKGRvdWJsZTE2IHgsIGludDE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHJvb3RuKGhhbGYgeCwgaW50IHkpOworaGFsZjIgX19vdmxkIF9fY25mbiByb290bihoYWxmMiB4LCBpbnQyIHkpOworaGFsZjMgX19vdmxkIF9fY25mbiByb290bihoYWxmMyB4LCBpbnQzIHkpOworaGFsZjQgX19vdmxkIF9fY25mbiByb290bihoYWxmNCB4LCBpbnQ0IHkpOworaGFsZjggX19vdmxkIF9fY25mbiByb290bihoYWxmOCB4LCBpbnQ4IHkpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gcm9vdG4oaGFsZjE2IHgsIGludDE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm4gdGhlIGludGVncmFsIHZhbHVlIG5lYXJlc3QgdG8geCByb3VuZGluZworICogaGFsZndheSBjYXNlcyBhd2F5IGZyb20gemVybywgcmVnYXJkbGVzcyBvZiB0aGUKKyAqIGN1cnJlbnQgcm91bmRpbmcgZGlyZWN0aW9uLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIHJvdW5kKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gcm91bmQoZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gcm91bmQoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gcm91bmQoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gcm91bmQoZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHJvdW5kKGZsb2F0MTYgeCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIHJvdW5kKGRvdWJsZSB4KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiByb3VuZChkb3VibGUyIHgpOworZG91YmxlMyBfX292bGQgX19jbmZuIHJvdW5kKGRvdWJsZTMgeCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gcm91bmQoZG91YmxlNCB4KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiByb3VuZChkb3VibGU4IHgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiByb3VuZChkb3VibGUxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiByb3VuZChoYWxmIHgpOworaGFsZjIgX19vdmxkIF9fY25mbiByb3VuZChoYWxmMiB4KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gcm91bmQoaGFsZjMgeCk7CitoYWxmNCBfX292bGQgX19jbmZuIHJvdW5kKGhhbGY0IHgpOworaGFsZjggX19vdmxkIF9fY25mbiByb3VuZChoYWxmOCB4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHJvdW5kKGhhbGYxNiB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSBpbnZlcnNlIHNxdWFyZSByb290LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIHJzcXJ0KGZsb2F0KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHJzcXJ0KGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiByc3FydChmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gcnNxcnQoZmxvYXQ0KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHJzcXJ0KGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gcnNxcnQoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIHJzcXJ0KGRvdWJsZSk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gcnNxcnQoZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gcnNxcnQoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gcnNxcnQoZG91YmxlNCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gcnNxcnQoZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHJzcXJ0KGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiByc3FydChoYWxmKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gcnNxcnQoaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiByc3FydChoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIHJzcXJ0KGhhbGY0KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gcnNxcnQoaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gcnNxcnQoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSBzaW5lLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIHNpbihmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzaW4oZmxvYXQyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHNpbihmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gc2luKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzaW4oZmxvYXQ4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzaW4oZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIHNpbihkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIHNpbihkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBzaW4oZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gc2luKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIHNpbihkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gc2luKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBzaW4oaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIHNpbihoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIHNpbihoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIHNpbihoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIHNpbihoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBzaW4oaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSBzaW5lIGFuZCBjb3NpbmUgb2YgeC4gVGhlIGNvbXB1dGVkIHNpbmUKKyAqIGlzIHRoZSByZXR1cm4gdmFsdWUgYW5kIGNvbXB1dGVkIGNvc2luZSBpcyByZXR1cm5lZAorICogaW4gY29zdmFsLgorICovCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2Zsb2F0IF9fb3ZsZCBzaW5jb3MoZmxvYXQgeCwgZmxvYXQgKmNvc3ZhbCk7CitmbG9hdDIgX19vdmxkIHNpbmNvcyhmbG9hdDIgeCwgZmxvYXQyICpjb3N2YWwpOworZmxvYXQzIF9fb3ZsZCBzaW5jb3MoZmxvYXQzIHgsIGZsb2F0MyAqY29zdmFsKTsKK2Zsb2F0NCBfX292bGQgc2luY29zKGZsb2F0NCB4LCBmbG9hdDQgKmNvc3ZhbCk7CitmbG9hdDggX19vdmxkIHNpbmNvcyhmbG9hdDggeCwgZmxvYXQ4ICpjb3N2YWwpOworZmxvYXQxNiBfX292bGQgc2luY29zKGZsb2F0MTYgeCwgZmxvYXQxNiAqY29zdmFsKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBzaW5jb3MoZG91YmxlIHgsIGRvdWJsZSAqY29zdmFsKTsKK2RvdWJsZTIgX19vdmxkIHNpbmNvcyhkb3VibGUyIHgsIGRvdWJsZTIgKmNvc3ZhbCk7Citkb3VibGUzIF9fb3ZsZCBzaW5jb3MoZG91YmxlMyB4LCBkb3VibGUzICpjb3N2YWwpOworZG91YmxlNCBfX292bGQgc2luY29zKGRvdWJsZTQgeCwgZG91YmxlNCAqY29zdmFsKTsKK2RvdWJsZTggX19vdmxkIHNpbmNvcyhkb3VibGU4IHgsIGRvdWJsZTggKmNvc3ZhbCk7Citkb3VibGUxNiBfX292bGQgc2luY29zKGRvdWJsZTE2IHgsIGRvdWJsZTE2ICpjb3N2YWwpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgc2luY29zKGhhbGYgeCwgaGFsZiAqY29zdmFsKTsKK2hhbGYyIF9fb3ZsZCBzaW5jb3MoaGFsZjIgeCwgaGFsZjIgKmNvc3ZhbCk7CitoYWxmMyBfX292bGQgc2luY29zKGhhbGYzIHgsIGhhbGYzICpjb3N2YWwpOworaGFsZjQgX19vdmxkIHNpbmNvcyhoYWxmNCB4LCBoYWxmNCAqY29zdmFsKTsKK2hhbGY4IF9fb3ZsZCBzaW5jb3MoaGFsZjggeCwgaGFsZjggKmNvc3ZhbCk7CitoYWxmMTYgX19vdmxkIHNpbmNvcyhoYWxmMTYgeCwgaGFsZjE2ICpjb3N2YWwpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKyNlbHNlCitmbG9hdCBfX292bGQgc2luY29zKGZsb2F0IHgsIF9fZ2xvYmFsIGZsb2F0ICpjb3N2YWwpOworZmxvYXQyIF9fb3ZsZCBzaW5jb3MoZmxvYXQyIHgsIF9fZ2xvYmFsIGZsb2F0MiAqY29zdmFsKTsKK2Zsb2F0MyBfX292bGQgc2luY29zKGZsb2F0MyB4LCBfX2dsb2JhbCBmbG9hdDMgKmNvc3ZhbCk7CitmbG9hdDQgX19vdmxkIHNpbmNvcyhmbG9hdDQgeCwgX19nbG9iYWwgZmxvYXQ0ICpjb3N2YWwpOworZmxvYXQ4IF9fb3ZsZCBzaW5jb3MoZmxvYXQ4IHgsIF9fZ2xvYmFsIGZsb2F0OCAqY29zdmFsKTsKK2Zsb2F0MTYgX19vdmxkIHNpbmNvcyhmbG9hdDE2IHgsIF9fZ2xvYmFsIGZsb2F0MTYgKmNvc3ZhbCk7CitmbG9hdCBfX292bGQgc2luY29zKGZsb2F0IHgsIF9fbG9jYWwgZmxvYXQgKmNvc3ZhbCk7CitmbG9hdDIgX19vdmxkIHNpbmNvcyhmbG9hdDIgeCwgX19sb2NhbCBmbG9hdDIgKmNvc3ZhbCk7CitmbG9hdDMgX19vdmxkIHNpbmNvcyhmbG9hdDMgeCwgX19sb2NhbCBmbG9hdDMgKmNvc3ZhbCk7CitmbG9hdDQgX19vdmxkIHNpbmNvcyhmbG9hdDQgeCwgX19sb2NhbCBmbG9hdDQgKmNvc3ZhbCk7CitmbG9hdDggX19vdmxkIHNpbmNvcyhmbG9hdDggeCwgX19sb2NhbCBmbG9hdDggKmNvc3ZhbCk7CitmbG9hdDE2IF9fb3ZsZCBzaW5jb3MoZmxvYXQxNiB4LCBfX2xvY2FsIGZsb2F0MTYgKmNvc3ZhbCk7CitmbG9hdCBfX292bGQgc2luY29zKGZsb2F0IHgsIF9fcHJpdmF0ZSBmbG9hdCAqY29zdmFsKTsKK2Zsb2F0MiBfX292bGQgc2luY29zKGZsb2F0MiB4LCBfX3ByaXZhdGUgZmxvYXQyICpjb3N2YWwpOworZmxvYXQzIF9fb3ZsZCBzaW5jb3MoZmxvYXQzIHgsIF9fcHJpdmF0ZSBmbG9hdDMgKmNvc3ZhbCk7CitmbG9hdDQgX19vdmxkIHNpbmNvcyhmbG9hdDQgeCwgX19wcml2YXRlIGZsb2F0NCAqY29zdmFsKTsKK2Zsb2F0OCBfX292bGQgc2luY29zKGZsb2F0OCB4LCBfX3ByaXZhdGUgZmxvYXQ4ICpjb3N2YWwpOworZmxvYXQxNiBfX292bGQgc2luY29zKGZsb2F0MTYgeCwgX19wcml2YXRlIGZsb2F0MTYgKmNvc3ZhbCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgc2luY29zKGRvdWJsZSB4LCBfX2dsb2JhbCBkb3VibGUgKmNvc3ZhbCk7Citkb3VibGUyIF9fb3ZsZCBzaW5jb3MoZG91YmxlMiB4LCBfX2dsb2JhbCBkb3VibGUyICpjb3N2YWwpOworZG91YmxlMyBfX292bGQgc2luY29zKGRvdWJsZTMgeCwgX19nbG9iYWwgZG91YmxlMyAqY29zdmFsKTsKK2RvdWJsZTQgX19vdmxkIHNpbmNvcyhkb3VibGU0IHgsIF9fZ2xvYmFsIGRvdWJsZTQgKmNvc3ZhbCk7Citkb3VibGU4IF9fb3ZsZCBzaW5jb3MoZG91YmxlOCB4LCBfX2dsb2JhbCBkb3VibGU4ICpjb3N2YWwpOworZG91YmxlMTYgX19vdmxkIHNpbmNvcyhkb3VibGUxNiB4LCBfX2dsb2JhbCBkb3VibGUxNiAqY29zdmFsKTsKK2RvdWJsZSBfX292bGQgc2luY29zKGRvdWJsZSB4LCBfX2xvY2FsIGRvdWJsZSAqY29zdmFsKTsKK2RvdWJsZTIgX19vdmxkIHNpbmNvcyhkb3VibGUyIHgsIF9fbG9jYWwgZG91YmxlMiAqY29zdmFsKTsKK2RvdWJsZTMgX19vdmxkIHNpbmNvcyhkb3VibGUzIHgsIF9fbG9jYWwgZG91YmxlMyAqY29zdmFsKTsKK2RvdWJsZTQgX19vdmxkIHNpbmNvcyhkb3VibGU0IHgsIF9fbG9jYWwgZG91YmxlNCAqY29zdmFsKTsKK2RvdWJsZTggX19vdmxkIHNpbmNvcyhkb3VibGU4IHgsIF9fbG9jYWwgZG91YmxlOCAqY29zdmFsKTsKK2RvdWJsZTE2IF9fb3ZsZCBzaW5jb3MoZG91YmxlMTYgeCwgX19sb2NhbCBkb3VibGUxNiAqY29zdmFsKTsKK2RvdWJsZSBfX292bGQgc2luY29zKGRvdWJsZSB4LCBfX3ByaXZhdGUgZG91YmxlICpjb3N2YWwpOworZG91YmxlMiBfX292bGQgc2luY29zKGRvdWJsZTIgeCwgX19wcml2YXRlIGRvdWJsZTIgKmNvc3ZhbCk7Citkb3VibGUzIF9fb3ZsZCBzaW5jb3MoZG91YmxlMyB4LCBfX3ByaXZhdGUgZG91YmxlMyAqY29zdmFsKTsKK2RvdWJsZTQgX19vdmxkIHNpbmNvcyhkb3VibGU0IHgsIF9fcHJpdmF0ZSBkb3VibGU0ICpjb3N2YWwpOworZG91YmxlOCBfX292bGQgc2luY29zKGRvdWJsZTggeCwgX19wcml2YXRlIGRvdWJsZTggKmNvc3ZhbCk7Citkb3VibGUxNiBfX292bGQgc2luY29zKGRvdWJsZTE2IHgsIF9fcHJpdmF0ZSBkb3VibGUxNiAqY29zdmFsKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIHNpbmNvcyhoYWxmIHgsIF9fZ2xvYmFsIGhhbGYgKmNvc3ZhbCk7CitoYWxmMiBfX292bGQgc2luY29zKGhhbGYyIHgsIF9fZ2xvYmFsIGhhbGYyICpjb3N2YWwpOworaGFsZjMgX19vdmxkIHNpbmNvcyhoYWxmMyB4LCBfX2dsb2JhbCBoYWxmMyAqY29zdmFsKTsKK2hhbGY0IF9fb3ZsZCBzaW5jb3MoaGFsZjQgeCwgX19nbG9iYWwgaGFsZjQgKmNvc3ZhbCk7CitoYWxmOCBfX292bGQgc2luY29zKGhhbGY4IHgsIF9fZ2xvYmFsIGhhbGY4ICpjb3N2YWwpOworaGFsZjE2IF9fb3ZsZCBzaW5jb3MoaGFsZjE2IHgsIF9fZ2xvYmFsIGhhbGYxNiAqY29zdmFsKTsKK2hhbGYgX19vdmxkIHNpbmNvcyhoYWxmIHgsIF9fbG9jYWwgaGFsZiAqY29zdmFsKTsKK2hhbGYyIF9fb3ZsZCBzaW5jb3MoaGFsZjIgeCwgX19sb2NhbCBoYWxmMiAqY29zdmFsKTsKK2hhbGYzIF9fb3ZsZCBzaW5jb3MoaGFsZjMgeCwgX19sb2NhbCBoYWxmMyAqY29zdmFsKTsKK2hhbGY0IF9fb3ZsZCBzaW5jb3MoaGFsZjQgeCwgX19sb2NhbCBoYWxmNCAqY29zdmFsKTsKK2hhbGY4IF9fb3ZsZCBzaW5jb3MoaGFsZjggeCwgX19sb2NhbCBoYWxmOCAqY29zdmFsKTsKK2hhbGYxNiBfX292bGQgc2luY29zKGhhbGYxNiB4LCBfX2xvY2FsIGhhbGYxNiAqY29zdmFsKTsKK2hhbGYgX19vdmxkIHNpbmNvcyhoYWxmIHgsIF9fcHJpdmF0ZSBoYWxmICpjb3N2YWwpOworaGFsZjIgX19vdmxkIHNpbmNvcyhoYWxmMiB4LCBfX3ByaXZhdGUgaGFsZjIgKmNvc3ZhbCk7CitoYWxmMyBfX292bGQgc2luY29zKGhhbGYzIHgsIF9fcHJpdmF0ZSBoYWxmMyAqY29zdmFsKTsKK2hhbGY0IF9fb3ZsZCBzaW5jb3MoaGFsZjQgeCwgX19wcml2YXRlIGhhbGY0ICpjb3N2YWwpOworaGFsZjggX19vdmxkIHNpbmNvcyhoYWxmOCB4LCBfX3ByaXZhdGUgaGFsZjggKmNvc3ZhbCk7CitoYWxmMTYgX19vdmxkIHNpbmNvcyhoYWxmMTYgeCwgX19wcml2YXRlIGhhbGYxNiAqY29zdmFsKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvKioKKyAqIENvbXB1dGUgaHlwZXJib2xpYyBzaW5lLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIHNpbmgoZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc2luaChmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gc2luaChmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gc2luaChmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gc2luaChmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHNpbmgoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIHNpbmgoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBzaW5oKGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIHNpbmgoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gc2luaChkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBzaW5oKGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBzaW5oKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBzaW5oKGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBzaW5oKGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gc2luaChoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIHNpbmgoaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBzaW5oKGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHNpbmgoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSBzaW4gKFBJICogeCkuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gc2lucGkoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzaW5waShmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBzaW5waShmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzaW5waShmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzaW5waShmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc2lucGkoZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gc2lucGkoZG91YmxlIHgpOworZG91YmxlMiBfX292bGQgX19jbmZuIHNpbnBpKGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gc2lucGkoZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBzaW5waShkb3VibGU0IHgpOworZG91YmxlOCBfX292bGQgX19jbmZuIHNpbnBpKGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHNpbnBpKGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHNpbnBpKGhhbGYgeCk7CitoYWxmMiBfX292bGQgX19jbmZuIHNpbnBpKGhhbGYyIHgpOworaGFsZjMgX19vdmxkIF9fY25mbiBzaW5waShoYWxmMyB4KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc2lucGkoaGFsZjQgeCk7CitoYWxmOCBfX292bGQgX19jbmZuIHNpbnBpKGhhbGY4IHgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gc2lucGkoaGFsZjE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIHNxdWFyZSByb290LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIHNxcnQoZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc3FydChmbG9hdDIpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gc3FydChmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gc3FydChmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gc3FydChmbG9hdDgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHNxcnQoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIHNxcnQoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBzcXJ0KGRvdWJsZTIpOworZG91YmxlMyBfX292bGQgX19jbmZuIHNxcnQoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gc3FydChkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBzcXJ0KGRvdWJsZTgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBzcXJ0KGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBzcXJ0KGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiBzcXJ0KGhhbGYyKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gc3FydChoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIHNxcnQoaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiBzcXJ0KGhhbGY4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHNxcnQoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSB0YW5nZW50LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIHRhbihmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiB0YW4oZmxvYXQyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHRhbihmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gdGFuKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiB0YW4oZmxvYXQ4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiB0YW4oZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIHRhbihkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIHRhbihkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiB0YW4oZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gdGFuKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIHRhbihkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gdGFuKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiB0YW4oaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIHRhbihoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIHRhbihoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIHRhbihoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIHRhbihoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiB0YW4oaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSBoeXBlcmJvbGljIHRhbmdlbnQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gdGFuaChmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiB0YW5oKGZsb2F0Mik7CitmbG9hdDMgX19vdmxkIF9fY25mbiB0YW5oKGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiB0YW5oKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiB0YW5oKGZsb2F0OCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gdGFuaChmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gdGFuaChkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIHRhbmgoZG91YmxlMik7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gdGFuaChkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiB0YW5oKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIHRhbmgoZG91YmxlOCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHRhbmgoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHRhbmgoaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIHRhbmgoaGFsZjIpOworaGFsZjMgX19vdmxkIF9fY25mbiB0YW5oKGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gdGFuaChoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIHRhbmgoaGFsZjgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gdGFuaChoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIHRhbiAoUEkgKiB4KS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiB0YW5waShmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHRhbnBpKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHRhbnBpKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHRhbnBpKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHRhbnBpKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiB0YW5waShmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiB0YW5waShkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gdGFucGkoZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiB0YW5waShkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIHRhbnBpKGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gdGFucGkoZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gdGFucGkoZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gdGFucGkoaGFsZiB4KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gdGFucGkoaGFsZjIgeCk7CitoYWxmMyBfX292bGQgX19jbmZuIHRhbnBpKGhhbGYzIHgpOworaGFsZjQgX19vdmxkIF9fY25mbiB0YW5waShoYWxmNCB4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gdGFucGkoaGFsZjggeCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiB0YW5waShoYWxmMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbXB1dGUgdGhlIGdhbW1hIGZ1bmN0aW9uLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIHRnYW1tYShmbG9hdCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiB0Z2FtbWEoZmxvYXQyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHRnYW1tYShmbG9hdDMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gdGdhbW1hKGZsb2F0NCk7CitmbG9hdDggX19vdmxkIF9fY25mbiB0Z2FtbWEoZmxvYXQ4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiB0Z2FtbWEoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIHRnYW1tYShkb3VibGUpOworZG91YmxlMiBfX292bGQgX19jbmZuIHRnYW1tYShkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiB0Z2FtbWEoZG91YmxlMyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gdGdhbW1hKGRvdWJsZTQpOworZG91YmxlOCBfX292bGQgX19jbmZuIHRnYW1tYShkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gdGdhbW1hKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiB0Z2FtbWEoaGFsZik7CitoYWxmMiBfX292bGQgX19jbmZuIHRnYW1tYShoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIHRnYW1tYShoYWxmMyk7CitoYWxmNCBfX292bGQgX19jbmZuIHRnYW1tYShoYWxmNCk7CitoYWxmOCBfX292bGQgX19jbmZuIHRnYW1tYShoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiB0Z2FtbWEoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUm91bmQgdG8gaW50ZWdyYWwgdmFsdWUgdXNpbmcgdGhlIHJvdW5kIHRvIHplcm8KKyAqIHJvdW5kaW5nIG1vZGUuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gdHJ1bmMoZmxvYXQpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gdHJ1bmMoZmxvYXQyKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHRydW5jKGZsb2F0Myk7CitmbG9hdDQgX19vdmxkIF9fY25mbiB0cnVuYyhmbG9hdDQpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gdHJ1bmMoZmxvYXQ4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiB0cnVuYyhmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gdHJ1bmMoZG91YmxlKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiB0cnVuYyhkb3VibGUyKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiB0cnVuYyhkb3VibGUzKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiB0cnVuYyhkb3VibGU0KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiB0cnVuYyhkb3VibGU4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gdHJ1bmMoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHRydW5jKGhhbGYpOworaGFsZjIgX19vdmxkIF9fY25mbiB0cnVuYyhoYWxmMik7CitoYWxmMyBfX292bGQgX19jbmZuIHRydW5jKGhhbGYzKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gdHJ1bmMoaGFsZjQpOworaGFsZjggX19vdmxkIF9fY25mbiB0cnVuYyhoYWxmOCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiB0cnVuYyhoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb21wdXRlIGNvc2luZS4geCBtdXN0IGJlIGluIHRoZSByYW5nZSAtMl4xNiAuLi4gKzJeMTYuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gaGFsZl9jb3MoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBoYWxmX2NvcyhmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBoYWxmX2NvcyhmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBoYWxmX2NvcyhmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBoYWxmX2NvcyhmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gaGFsZl9jb3MoZmxvYXQxNiB4KTsKKworLyoqCisgKiBDb21wdXRlIHggLyB5LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGhhbGZfZGl2aWRlKGZsb2F0IHgsIGZsb2F0IHkpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gaGFsZl9kaXZpZGUoZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGhhbGZfZGl2aWRlKGZsb2F0MyB4LCBmbG9hdDMgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBoYWxmX2RpdmlkZShmbG9hdDQgeCwgZmxvYXQ0IHkpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gaGFsZl9kaXZpZGUoZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBoYWxmX2RpdmlkZShmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisKKy8qKgorICogQ29tcHV0ZSB0aGUgYmFzZS0gZSBleHBvbmVudGlhbCBvZiB4LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGhhbGZfZXhwKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gaGFsZl9leHAoZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gaGFsZl9leHAoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gaGFsZl9leHAoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gaGFsZl9leHAoZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGhhbGZfZXhwKGZsb2F0MTYgeCk7CisKKy8qKgorICogQ29tcHV0ZSB0aGUgYmFzZS0gMiBleHBvbmVudGlhbCBvZiB4LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGhhbGZfZXhwMihmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGhhbGZfZXhwMihmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBoYWxmX2V4cDIoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gaGFsZl9leHAyKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGhhbGZfZXhwMihmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gaGFsZl9leHAyKGZsb2F0MTYgeCk7CisKKy8qKgorICogQ29tcHV0ZSB0aGUgYmFzZS0gMTAgZXhwb25lbnRpYWwgb2YgeC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBoYWxmX2V4cDEwKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gaGFsZl9leHAxMChmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBoYWxmX2V4cDEwKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGhhbGZfZXhwMTAoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gaGFsZl9leHAxMChmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gaGFsZl9leHAxMChmbG9hdDE2IHgpOworCisvKioKKyAqIENvbXB1dGUgbmF0dXJhbCBsb2dhcml0aG0uCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gaGFsZl9sb2coZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBoYWxmX2xvZyhmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBoYWxmX2xvZyhmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBoYWxmX2xvZyhmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBoYWxmX2xvZyhmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gaGFsZl9sb2coZmxvYXQxNiB4KTsKKworLyoqCisgKiBDb21wdXRlIGEgYmFzZSAyIGxvZ2FyaXRobS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBoYWxmX2xvZzIoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBoYWxmX2xvZzIoZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gaGFsZl9sb2cyKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGhhbGZfbG9nMihmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBoYWxmX2xvZzIoZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGhhbGZfbG9nMihmbG9hdDE2IHgpOworCisvKioKKyAqIENvbXB1dGUgYSBiYXNlIDEwIGxvZ2FyaXRobS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBoYWxmX2xvZzEwKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gaGFsZl9sb2cxMChmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBoYWxmX2xvZzEwKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGhhbGZfbG9nMTAoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gaGFsZl9sb2cxMChmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gaGFsZl9sb2cxMChmbG9hdDE2IHgpOworCisvKioKKyAqIENvbXB1dGUgeCB0byB0aGUgcG93ZXIgeSwgd2hlcmUgeCBpcyA+PSAwLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGhhbGZfcG93cihmbG9hdCB4LCBmbG9hdCB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGhhbGZfcG93cihmbG9hdDIgeCwgZmxvYXQyIHkpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gaGFsZl9wb3dyKGZsb2F0MyB4LCBmbG9hdDMgeSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBoYWxmX3Bvd3IoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGhhbGZfcG93cihmbG9hdDggeCwgZmxvYXQ4IHkpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGhhbGZfcG93cihmbG9hdDE2IHgsIGZsb2F0MTYgeSk7CisKKy8qKgorICogQ29tcHV0ZSByZWNpcHJvY2FsLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGhhbGZfcmVjaXAoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBoYWxmX3JlY2lwKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGhhbGZfcmVjaXAoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gaGFsZl9yZWNpcChmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBoYWxmX3JlY2lwKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBoYWxmX3JlY2lwKGZsb2F0MTYgeCk7CisKKy8qKgorICogQ29tcHV0ZSBpbnZlcnNlIHNxdWFyZSByb290LgorICovCitmbG9hdCBfX292bGQgX19jbmZuIGhhbGZfcnNxcnQoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBoYWxmX3JzcXJ0KGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGhhbGZfcnNxcnQoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gaGFsZl9yc3FydChmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBoYWxmX3JzcXJ0KGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBoYWxmX3JzcXJ0KGZsb2F0MTYgeCk7CisKKy8qKgorICogQ29tcHV0ZSBzaW5lLiB4IG11c3QgYmUgaW4gdGhlIHJhbmdlIC0yXjE2IC4uLiArMl4xNi4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBoYWxmX3NpbihmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGhhbGZfc2luKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGhhbGZfc2luKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGhhbGZfc2luKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGhhbGZfc2luKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBoYWxmX3NpbihmbG9hdDE2IHgpOworCisvKioKKyAqIENvbXB1dGUgc3F1YXJlIHJvb3QuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gaGFsZl9zcXJ0KGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gaGFsZl9zcXJ0KGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGhhbGZfc3FydChmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBoYWxmX3NxcnQoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gaGFsZl9zcXJ0KGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBoYWxmX3NxcnQoZmxvYXQxNiB4KTsKKworLyoqCisgKiBDb21wdXRlIHRhbmdlbnQuIHggbXVzdCBiZSBpbiB0aGUgcmFuZ2UgLTIxNiAuLi4gKzIxNi4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBoYWxmX3RhbihmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGhhbGZfdGFuKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGhhbGZfdGFuKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIGhhbGZfdGFuKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGhhbGZfdGFuKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBoYWxmX3RhbihmbG9hdDE2IHgpOworCisvKioKKyAqIENvbXB1dGUgY29zaW5lIG92ZXIgYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCByYW5nZS4KKyAqIFRoZSBtYXhpbXVtIGVycm9yIGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2NvcyhmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG5hdGl2ZV9jb3MoZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2NvcyhmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBuYXRpdmVfY29zKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG5hdGl2ZV9jb3MoZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIG5hdGl2ZV9jb3MoZmxvYXQxNiB4KTsKKworLyoqCisgKiBDb21wdXRlIHggLyB5IG92ZXIgYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCByYW5nZS4KKyAqIFRoZSBtYXhpbXVtIGVycm9yIGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2RpdmlkZShmbG9hdCB4LCBmbG9hdCB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG5hdGl2ZV9kaXZpZGUoZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG5hdGl2ZV9kaXZpZGUoZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIG5hdGl2ZV9kaXZpZGUoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG5hdGl2ZV9kaXZpZGUoZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBuYXRpdmVfZGl2aWRlKGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKKworLyoqCisgKiBDb21wdXRlIHRoZSBiYXNlLSBlIGV4cG9uZW50aWFsIG9mIHggb3ZlciBhbgorICogaW1wbGVtZW50YXRpb24tZGVmaW5lZCByYW5nZS4gVGhlIG1heGltdW0gZXJyb3IgaXMKKyAqIGltcGxlbWVudGF0aW9uLWRlZmluZWQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cChmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG5hdGl2ZV9leHAoZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cChmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG5hdGl2ZV9leHAoZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIG5hdGl2ZV9leHAoZmxvYXQxNiB4KTsKKworLyoqCisgKiBDb21wdXRlIHRoZSBiYXNlLSAyIGV4cG9uZW50aWFsIG9mIHggb3ZlciBhbgorICogaW1wbGVtZW50YXRpb24tZGVmaW5lZCByYW5nZS4gVGhlIG1heGltdW0gZXJyb3IgaXMKKyAqIGltcGxlbWVudGF0aW9uLWRlZmluZWQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cDIoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwMihmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwMihmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwMihmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwMihmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cDIoZmxvYXQxNiB4KTsKKworLyoqCisgKiBDb21wdXRlIHRoZSBiYXNlLSAxMCBleHBvbmVudGlhbCBvZiB4IG92ZXIgYW4KKyAqIGltcGxlbWVudGF0aW9uLWRlZmluZWQgcmFuZ2UuIFRoZSBtYXhpbXVtIGVycm9yIGlzCisgKiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIG5hdGl2ZV9leHAxMChmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG5hdGl2ZV9leHAxMChmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBuYXRpdmVfZXhwMTAoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cDEwKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG5hdGl2ZV9leHAxMChmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2V4cDEwKGZsb2F0MTYgeCk7CisKKy8qKgorICogQ29tcHV0ZSBuYXR1cmFsIGxvZ2FyaXRobSBvdmVyIGFuIGltcGxlbWVudGF0aW9uZGVmaW5lZAorICogcmFuZ2UuIFRoZSBtYXhpbXVtIGVycm9yIGlzIGltcGxlbWVudGF0aW9uCisgKiBkZWZpbmVkLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2coZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2coZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2xvZyhmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nKGZsb2F0MTYgeCk7CisKKy8qKgorICogQ29tcHV0ZSBhIGJhc2UgMiBsb2dhcml0aG0gb3ZlciBhbiBpbXBsZW1lbnRhdGlvbmRlZmluZWQKKyAqIHJhbmdlLiBUaGUgbWF4aW11bSBlcnJvciBpcyBpbXBsZW1lbnRhdGlvbmRlZmluZWQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2xvZzIoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nMihmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nMihmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nMihmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nMihmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2xvZzIoZmxvYXQxNiB4KTsKKworLyoqCisgKiBDb21wdXRlIGEgYmFzZSAxMCBsb2dhcml0aG0gb3ZlciBhbiBpbXBsZW1lbnRhdGlvbmRlZmluZWQKKyAqIHJhbmdlLiBUaGUgbWF4aW11bSBlcnJvciBpcyBpbXBsZW1lbnRhdGlvbmRlZmluZWQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2xvZzEwKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2xvZzEwKGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIG5hdGl2ZV9sb2cxMChmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nMTAoZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX2xvZzEwKGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBuYXRpdmVfbG9nMTAoZmxvYXQxNiB4KTsKKworLyoqCisgKiBDb21wdXRlIHggdG8gdGhlIHBvd2VyIHksIHdoZXJlIHggaXMgPj0gMC4gVGhlIHJhbmdlIG9mCisgKiB4IGFuZCB5IGFyZSBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLiBUaGUgbWF4aW11bSBlcnJvcgorICogaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBuYXRpdmVfcG93cihmbG9hdCB4LCBmbG9hdCB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG5hdGl2ZV9wb3dyKGZsb2F0MiB4LCBmbG9hdDIgeSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBuYXRpdmVfcG93cihmbG9hdDMgeCwgZmxvYXQzIHkpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3Bvd3IoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG5hdGl2ZV9wb3dyKGZsb2F0OCB4LCBmbG9hdDggeSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3Bvd3IoZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworCisvKioKKyAqIENvbXB1dGUgcmVjaXByb2NhbCBvdmVyIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQKKyAqIHJhbmdlLiBUaGUgbWF4aW11bSBlcnJvciBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIG5hdGl2ZV9yZWNpcChmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG5hdGl2ZV9yZWNpcChmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBuYXRpdmVfcmVjaXAoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3JlY2lwKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG5hdGl2ZV9yZWNpcChmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3JlY2lwKGZsb2F0MTYgeCk7CisKKy8qKgorICogQ29tcHV0ZSBpbnZlcnNlIHNxdWFyZSByb290IG92ZXIgYW4gaW1wbGVtZW50YXRpb25kZWZpbmVkCisgKiByYW5nZS4gVGhlIG1heGltdW0gZXJyb3IgaXMgaW1wbGVtZW50YXRpb25kZWZpbmVkLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIG5hdGl2ZV9yc3FydChmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG5hdGl2ZV9yc3FydChmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBuYXRpdmVfcnNxcnQoZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3JzcXJ0KGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG5hdGl2ZV9yc3FydChmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3JzcXJ0KGZsb2F0MTYgeCk7CisKKy8qKgorICogQ29tcHV0ZSBzaW5lIG92ZXIgYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCByYW5nZS4KKyAqIFRoZSBtYXhpbXVtIGVycm9yIGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3NpbihmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG5hdGl2ZV9zaW4oZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3NpbihmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBuYXRpdmVfc2luKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG5hdGl2ZV9zaW4oZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIG5hdGl2ZV9zaW4oZmxvYXQxNiB4KTsKKworLyoqCisgKiBDb21wdXRlIHNxdWFyZSByb290IG92ZXIgYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZAorICogcmFuZ2UuIFRoZSBtYXhpbXVtIGVycm9yIGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3NxcnQoZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBuYXRpdmVfc3FydChmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBuYXRpdmVfc3FydChmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBuYXRpdmVfc3FydChmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBuYXRpdmVfc3FydChmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3NxcnQoZmxvYXQxNiB4KTsKKworLyoqCisgKiBDb21wdXRlIHRhbmdlbnQgb3ZlciBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHJhbmdlLgorICogVGhlIG1heGltdW0gZXJyb3IgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBuYXRpdmVfdGFuKGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3RhbihmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBuYXRpdmVfdGFuKGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIG5hdGl2ZV90YW4oZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3RhbihmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbmF0aXZlX3RhbihmbG9hdDE2IHgpOworCisvLyBPcGVuQ0wgdjEuMSBzNi4xMS4zLCB2MS4yIHM2LjEyLjMsIHYyLjAgczYuMTMuMyAtIEludGVnZXIgRnVuY3Rpb25zCisKKy8qKgorICogUmV0dXJucyB8IHggfC4KKyAqLwordWNoYXIgX19vdmxkIF9fY25mbiBhYnMoY2hhciB4KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gYWJzKHVjaGFyIHgpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gYWJzKGNoYXIyIHgpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gYWJzKHVjaGFyMiB4KTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGFicyhjaGFyMyB4KTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGFicyh1Y2hhcjMgeCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBhYnMoY2hhcjQgeCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBhYnModWNoYXI0IHgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gYWJzKGNoYXI4IHgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gYWJzKHVjaGFyOCB4KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBhYnMoY2hhcjE2IHgpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGFicyh1Y2hhcjE2IHgpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gYWJzKHNob3J0IHgpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gYWJzKHVzaG9ydCB4KTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBhYnMoc2hvcnQyIHgpOwordXNob3J0MiBfX292bGQgX19jbmZuIGFicyh1c2hvcnQyIHgpOwordXNob3J0MyBfX292bGQgX19jbmZuIGFicyhzaG9ydDMgeCk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gYWJzKHVzaG9ydDMgeCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYWJzKHNob3J0NCB4KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBhYnModXNob3J0NCB4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBhYnMoc2hvcnQ4IHgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGFicyh1c2hvcnQ4IHgpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBhYnMoc2hvcnQxNiB4KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYWJzKHVzaG9ydDE2IHgpOwordWludCBfX292bGQgX19jbmZuIGFicyhpbnQgeCk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gYWJzKHVpbnQgeCk7Cit1aW50MiBfX292bGQgX19jbmZuIGFicyhpbnQyIHgpOwordWludDIgX19vdmxkIF9fY25mbiBhYnModWludDIgeCk7Cit1aW50MyBfX292bGQgX19jbmZuIGFicyhpbnQzIHgpOwordWludDMgX19vdmxkIF9fY25mbiBhYnModWludDMgeCk7Cit1aW50NCBfX292bGQgX19jbmZuIGFicyhpbnQ0IHgpOwordWludDQgX19vdmxkIF9fY25mbiBhYnModWludDQgeCk7Cit1aW50OCBfX292bGQgX19jbmZuIGFicyhpbnQ4IHgpOwordWludDggX19vdmxkIF9fY25mbiBhYnModWludDggeCk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBhYnMoaW50MTYgeCk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBhYnModWludDE2IHgpOwordWxvbmcgX19vdmxkIF9fY25mbiBhYnMobG9uZyB4KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gYWJzKHVsb25nIHgpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gYWJzKGxvbmcyIHgpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gYWJzKHVsb25nMiB4KTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGFicyhsb25nMyB4KTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGFicyh1bG9uZzMgeCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBhYnMobG9uZzQgeCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBhYnModWxvbmc0IHgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gYWJzKGxvbmc4IHgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gYWJzKHVsb25nOCB4KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBhYnMobG9uZzE2IHgpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGFicyh1bG9uZzE2IHgpOworCisvKioKKyAqIFJldHVybnMgfCB4IC0geSB8IHdpdGhvdXQgbW9kdWxvIG92ZXJmbG93LgorICovCit1Y2hhciBfX292bGQgX19jbmZuIGFic19kaWZmKGNoYXIgeCwgY2hhciB5KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodWNoYXIgeCwgdWNoYXIgeSk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBhYnNfZGlmZihjaGFyMiB4LCBjaGFyMiB5KTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGFic19kaWZmKHVjaGFyMiB4LCB1Y2hhcjIgeSk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBhYnNfZGlmZihjaGFyMyB4LCBjaGFyMyB5KTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGFic19kaWZmKHVjaGFyMyB4LCB1Y2hhcjMgeSk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBhYnNfZGlmZihjaGFyNCB4LCBjaGFyNCB5KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGFic19kaWZmKHVjaGFyNCB4LCB1Y2hhcjQgeSk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBhYnNfZGlmZihjaGFyOCB4LCBjaGFyOCB5KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGFic19kaWZmKHVjaGFyOCB4LCB1Y2hhcjggeSk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYoY2hhcjE2IHgsIGNoYXIxNiB5KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBhYnNfZGlmZih1Y2hhcjE2IHgsIHVjaGFyMTYgeSk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBhYnNfZGlmZihzaG9ydCB4LCBzaG9ydCB5KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGFic19kaWZmKHVzaG9ydCB4LCB1c2hvcnQgeSk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYoc2hvcnQyIHgsIHNob3J0MiB5KTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBhYnNfZGlmZih1c2hvcnQyIHgsIHVzaG9ydDIgeSk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYoc2hvcnQzIHgsIHNob3J0MyB5KTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBhYnNfZGlmZih1c2hvcnQzIHgsIHVzaG9ydDMgeSk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYoc2hvcnQ0IHgsIHNob3J0NCB5KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBhYnNfZGlmZih1c2hvcnQ0IHgsIHVzaG9ydDQgeSk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYoc2hvcnQ4IHgsIHNob3J0OCB5KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBhYnNfZGlmZih1c2hvcnQ4IHgsIHVzaG9ydDggeSk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGFic19kaWZmKHNob3J0MTYgeCwgc2hvcnQxNiB5KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodXNob3J0MTYgeCwgdXNob3J0MTYgeSk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYoaW50IHgsIGludCB5KTsKK3VpbnQgX19vdmxkIF9fY25mbiBhYnNfZGlmZih1aW50IHgsIHVpbnQgeSk7Cit1aW50MiBfX292bGQgX19jbmZuIGFic19kaWZmKGludDIgeCwgaW50MiB5KTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodWludDIgeCwgdWludDIgeSk7Cit1aW50MyBfX292bGQgX19jbmZuIGFic19kaWZmKGludDMgeCwgaW50MyB5KTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodWludDMgeCwgdWludDMgeSk7Cit1aW50NCBfX292bGQgX19jbmZuIGFic19kaWZmKGludDQgeCwgaW50NCB5KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodWludDQgeCwgdWludDQgeSk7Cit1aW50OCBfX292bGQgX19jbmZuIGFic19kaWZmKGludDggeCwgaW50OCB5KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodWludDggeCwgdWludDggeSk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBhYnNfZGlmZihpbnQxNiB4LCBpbnQxNiB5KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGFic19kaWZmKHVpbnQxNiB4LCB1aW50MTYgeSk7Cit1bG9uZyBfX292bGQgX19jbmZuIGFic19kaWZmKGxvbmcgeCwgbG9uZyB5KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYodWxvbmcgeCwgdWxvbmcgeSk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBhYnNfZGlmZihsb25nMiB4LCBsb25nMiB5KTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGFic19kaWZmKHVsb25nMiB4LCB1bG9uZzIgeSk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBhYnNfZGlmZihsb25nMyB4LCBsb25nMyB5KTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGFic19kaWZmKHVsb25nMyB4LCB1bG9uZzMgeSk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBhYnNfZGlmZihsb25nNCB4LCBsb25nNCB5KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGFic19kaWZmKHVsb25nNCB4LCB1bG9uZzQgeSk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBhYnNfZGlmZihsb25nOCB4LCBsb25nOCB5KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGFic19kaWZmKHVsb25nOCB4LCB1bG9uZzggeSk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gYWJzX2RpZmYobG9uZzE2IHgsIGxvbmcxNiB5KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBhYnNfZGlmZih1bG9uZzE2IHgsIHVsb25nMTYgeSk7CisKKy8qKgorICogUmV0dXJucyB4ICsgeSBhbmQgc2F0dXJhdGVzIHRoZSByZXN1bHQuCisgKi8KK2NoYXIgX19vdmxkIF9fY25mbiBhZGRfc2F0KGNoYXIgeCwgY2hhciB5KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1Y2hhciB4LCB1Y2hhciB5KTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChjaGFyMiB4LCBjaGFyMiB5KTsKK3VjaGFyMiBfX292bGQgX19jbmZuIGFkZF9zYXQodWNoYXIyIHgsIHVjaGFyMiB5KTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChjaGFyMyB4LCBjaGFyMyB5KTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGFkZF9zYXQodWNoYXIzIHgsIHVjaGFyMyB5KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChjaGFyNCB4LCBjaGFyNCB5KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGFkZF9zYXQodWNoYXI0IHgsIHVjaGFyNCB5KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChjaGFyOCB4LCBjaGFyOCB5KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIGFkZF9zYXQodWNoYXI4IHgsIHVjaGFyOCB5KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGFkZF9zYXQoY2hhcjE2IHgsIGNoYXIxNiB5KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBhZGRfc2F0KHVjaGFyMTYgeCwgdWNoYXIxNiB5KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChzaG9ydCB4LCBzaG9ydCB5KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGFkZF9zYXQodXNob3J0IHgsIHVzaG9ydCB5KTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGFkZF9zYXQoc2hvcnQyIHgsIHNob3J0MiB5KTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBhZGRfc2F0KHVzaG9ydDIgeCwgdXNob3J0MiB5KTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGFkZF9zYXQoc2hvcnQzIHgsIHNob3J0MyB5KTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBhZGRfc2F0KHVzaG9ydDMgeCwgdXNob3J0MyB5KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGFkZF9zYXQoc2hvcnQ0IHgsIHNob3J0NCB5KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBhZGRfc2F0KHVzaG9ydDQgeCwgdXNob3J0NCB5KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGFkZF9zYXQoc2hvcnQ4IHgsIHNob3J0OCB5KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBhZGRfc2F0KHVzaG9ydDggeCwgdXNob3J0OCB5KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBhZGRfc2F0KHNob3J0MTYgeCwgc2hvcnQxNiB5KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1c2hvcnQxNiB4LCB1c2hvcnQxNiB5KTsKK2ludCBfX292bGQgX19jbmZuIGFkZF9zYXQoaW50IHgsIGludCB5KTsKK3VpbnQgX19vdmxkIF9fY25mbiBhZGRfc2F0KHVpbnQgeCwgdWludCB5KTsKK2ludDIgX19vdmxkIF9fY25mbiBhZGRfc2F0KGludDIgeCwgaW50MiB5KTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1aW50MiB4LCB1aW50MiB5KTsKK2ludDMgX19vdmxkIF9fY25mbiBhZGRfc2F0KGludDMgeCwgaW50MyB5KTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1aW50MyB4LCB1aW50MyB5KTsKK2ludDQgX19vdmxkIF9fY25mbiBhZGRfc2F0KGludDQgeCwgaW50NCB5KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1aW50NCB4LCB1aW50NCB5KTsKK2ludDggX19vdmxkIF9fY25mbiBhZGRfc2F0KGludDggeCwgaW50OCB5KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1aW50OCB4LCB1aW50OCB5KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChpbnQxNiB4LCBpbnQxNiB5KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGFkZF9zYXQodWludDE2IHgsIHVpbnQxNiB5KTsKK2xvbmcgX19vdmxkIF9fY25mbiBhZGRfc2F0KGxvbmcgeCwgbG9uZyB5KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gYWRkX3NhdCh1bG9uZyB4LCB1bG9uZyB5KTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChsb25nMiB4LCBsb25nMiB5KTsKK3Vsb25nMiBfX292bGQgX19jbmZuIGFkZF9zYXQodWxvbmcyIHgsIHVsb25nMiB5KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChsb25nMyB4LCBsb25nMyB5KTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGFkZF9zYXQodWxvbmczIHgsIHVsb25nMyB5KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChsb25nNCB4LCBsb25nNCB5KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGFkZF9zYXQodWxvbmc0IHgsIHVsb25nNCB5KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gYWRkX3NhdChsb25nOCB4LCBsb25nOCB5KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIGFkZF9zYXQodWxvbmc4IHgsIHVsb25nOCB5KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGFkZF9zYXQobG9uZzE2IHgsIGxvbmcxNiB5KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBhZGRfc2F0KHVsb25nMTYgeCwgdWxvbmcxNiB5KTsKKworLyoqCisgKiBSZXR1cm5zICh4ICsgeSkgPj4gMS4gVGhlIGludGVybWVkaWF0ZSBzdW0gZG9lcworICogbm90IG1vZHVsbyBvdmVyZmxvdy4KKyAqLworY2hhciBfX292bGQgX19jbmZuIGhhZGQoY2hhciB4LCBjaGFyIHkpOwordWNoYXIgX19vdmxkIF9fY25mbiBoYWRkKHVjaGFyIHgsIHVjaGFyIHkpOworY2hhcjIgX19vdmxkIF9fY25mbiBoYWRkKGNoYXIyIHgsIGNoYXIyIHkpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gaGFkZCh1Y2hhcjIgeCwgdWNoYXIyIHkpOworY2hhcjMgX19vdmxkIF9fY25mbiBoYWRkKGNoYXIzIHgsIGNoYXIzIHkpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gaGFkZCh1Y2hhcjMgeCwgdWNoYXIzIHkpOworY2hhcjQgX19vdmxkIF9fY25mbiBoYWRkKGNoYXI0IHgsIGNoYXI0IHkpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gaGFkZCh1Y2hhcjQgeCwgdWNoYXI0IHkpOworY2hhcjggX19vdmxkIF9fY25mbiBoYWRkKGNoYXI4IHgsIGNoYXI4IHkpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gaGFkZCh1Y2hhcjggeCwgdWNoYXI4IHkpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gaGFkZChjaGFyMTYgeCwgY2hhcjE2IHkpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGhhZGQodWNoYXIxNiB4LCB1Y2hhcjE2IHkpOworc2hvcnQgX19vdmxkIF9fY25mbiBoYWRkKHNob3J0IHgsIHNob3J0IHkpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gaGFkZCh1c2hvcnQgeCwgdXNob3J0IHkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gaGFkZChzaG9ydDIgeCwgc2hvcnQyIHkpOwordXNob3J0MiBfX292bGQgX19jbmZuIGhhZGQodXNob3J0MiB4LCB1c2hvcnQyIHkpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gaGFkZChzaG9ydDMgeCwgc2hvcnQzIHkpOwordXNob3J0MyBfX292bGQgX19jbmZuIGhhZGQodXNob3J0MyB4LCB1c2hvcnQzIHkpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gaGFkZChzaG9ydDQgeCwgc2hvcnQ0IHkpOwordXNob3J0NCBfX292bGQgX19jbmZuIGhhZGQodXNob3J0NCB4LCB1c2hvcnQ0IHkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gaGFkZChzaG9ydDggeCwgc2hvcnQ4IHkpOwordXNob3J0OCBfX292bGQgX19jbmZuIGhhZGQodXNob3J0OCB4LCB1c2hvcnQ4IHkpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGhhZGQoc2hvcnQxNiB4LCBzaG9ydDE2IHkpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBoYWRkKHVzaG9ydDE2IHgsIHVzaG9ydDE2IHkpOworaW50IF9fb3ZsZCBfX2NuZm4gaGFkZChpbnQgeCwgaW50IHkpOwordWludCBfX292bGQgX19jbmZuIGhhZGQodWludCB4LCB1aW50IHkpOworaW50MiBfX292bGQgX19jbmZuIGhhZGQoaW50MiB4LCBpbnQyIHkpOwordWludDIgX19vdmxkIF9fY25mbiBoYWRkKHVpbnQyIHgsIHVpbnQyIHkpOworaW50MyBfX292bGQgX19jbmZuIGhhZGQoaW50MyB4LCBpbnQzIHkpOwordWludDMgX19vdmxkIF9fY25mbiBoYWRkKHVpbnQzIHgsIHVpbnQzIHkpOworaW50NCBfX292bGQgX19jbmZuIGhhZGQoaW50NCB4LCBpbnQ0IHkpOwordWludDQgX19vdmxkIF9fY25mbiBoYWRkKHVpbnQ0IHgsIHVpbnQ0IHkpOworaW50OCBfX292bGQgX19jbmZuIGhhZGQoaW50OCB4LCBpbnQ4IHkpOwordWludDggX19vdmxkIF9fY25mbiBoYWRkKHVpbnQ4IHgsIHVpbnQ4IHkpOworaW50MTYgX19vdmxkIF9fY25mbiBoYWRkKGludDE2IHgsIGludDE2IHkpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gaGFkZCh1aW50MTYgeCwgdWludDE2IHkpOworbG9uZyBfX292bGQgX19jbmZuIGhhZGQobG9uZyB4LCBsb25nIHkpOwordWxvbmcgX19vdmxkIF9fY25mbiBoYWRkKHVsb25nIHgsIHVsb25nIHkpOworbG9uZzIgX19vdmxkIF9fY25mbiBoYWRkKGxvbmcyIHgsIGxvbmcyIHkpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gaGFkZCh1bG9uZzIgeCwgdWxvbmcyIHkpOworbG9uZzMgX19vdmxkIF9fY25mbiBoYWRkKGxvbmczIHgsIGxvbmczIHkpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gaGFkZCh1bG9uZzMgeCwgdWxvbmczIHkpOworbG9uZzQgX19vdmxkIF9fY25mbiBoYWRkKGxvbmc0IHgsIGxvbmc0IHkpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gaGFkZCh1bG9uZzQgeCwgdWxvbmc0IHkpOworbG9uZzggX19vdmxkIF9fY25mbiBoYWRkKGxvbmc4IHgsIGxvbmc4IHkpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gaGFkZCh1bG9uZzggeCwgdWxvbmc4IHkpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gaGFkZChsb25nMTYgeCwgbG9uZzE2IHkpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGhhZGQodWxvbmcxNiB4LCB1bG9uZzE2IHkpOworCisvKioKKyAqIFJldHVybnMgKHggKyB5ICsgMSkgPj4gMS4gVGhlIGludGVybWVkaWF0ZSBzdW0KKyAqIGRvZXMgbm90IG1vZHVsbyBvdmVyZmxvdy4KKyAqLworY2hhciBfX292bGQgX19jbmZuIHJoYWRkKGNoYXIgeCwgY2hhciB5KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gcmhhZGQodWNoYXIgeCwgdWNoYXIgeSk7CitjaGFyMiBfX292bGQgX19jbmZuIHJoYWRkKGNoYXIyIHgsIGNoYXIyIHkpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gcmhhZGQodWNoYXIyIHgsIHVjaGFyMiB5KTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gcmhhZGQoY2hhcjMgeCwgY2hhcjMgeSk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiByaGFkZCh1Y2hhcjMgeCwgdWNoYXIzIHkpOworY2hhcjQgX19vdmxkIF9fY25mbiByaGFkZChjaGFyNCB4LCBjaGFyNCB5KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIHJoYWRkKHVjaGFyNCB4LCB1Y2hhcjQgeSk7CitjaGFyOCBfX292bGQgX19jbmZuIHJoYWRkKGNoYXI4IHgsIGNoYXI4IHkpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gcmhhZGQodWNoYXI4IHgsIHVjaGFyOCB5KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIHJoYWRkKGNoYXIxNiB4LCBjaGFyMTYgeSk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gcmhhZGQodWNoYXIxNiB4LCB1Y2hhcjE2IHkpOworc2hvcnQgX19vdmxkIF9fY25mbiByaGFkZChzaG9ydCB4LCBzaG9ydCB5KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIHJoYWRkKHVzaG9ydCB4LCB1c2hvcnQgeSk7CitzaG9ydDIgX19vdmxkIF9fY25mbiByaGFkZChzaG9ydDIgeCwgc2hvcnQyIHkpOwordXNob3J0MiBfX292bGQgX19jbmZuIHJoYWRkKHVzaG9ydDIgeCwgdXNob3J0MiB5KTsKK3Nob3J0MyBfX292bGQgX19jbmZuIHJoYWRkKHNob3J0MyB4LCBzaG9ydDMgeSk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gcmhhZGQodXNob3J0MyB4LCB1c2hvcnQzIHkpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gcmhhZGQoc2hvcnQ0IHgsIHNob3J0NCB5KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiByaGFkZCh1c2hvcnQ0IHgsIHVzaG9ydDQgeSk7CitzaG9ydDggX19vdmxkIF9fY25mbiByaGFkZChzaG9ydDggeCwgc2hvcnQ4IHkpOwordXNob3J0OCBfX292bGQgX19jbmZuIHJoYWRkKHVzaG9ydDggeCwgdXNob3J0OCB5KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiByaGFkZChzaG9ydDE2IHgsIHNob3J0MTYgeSk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIHJoYWRkKHVzaG9ydDE2IHgsIHVzaG9ydDE2IHkpOworaW50IF9fb3ZsZCBfX2NuZm4gcmhhZGQoaW50IHgsIGludCB5KTsKK3VpbnQgX19vdmxkIF9fY25mbiByaGFkZCh1aW50IHgsIHVpbnQgeSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gcmhhZGQoaW50MiB4LCBpbnQyIHkpOwordWludDIgX19vdmxkIF9fY25mbiByaGFkZCh1aW50MiB4LCB1aW50MiB5KTsKK2ludDMgX19vdmxkIF9fY25mbiByaGFkZChpbnQzIHgsIGludDMgeSk7Cit1aW50MyBfX292bGQgX19jbmZuIHJoYWRkKHVpbnQzIHgsIHVpbnQzIHkpOworaW50NCBfX292bGQgX19jbmZuIHJoYWRkKGludDQgeCwgaW50NCB5KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gcmhhZGQodWludDQgeCwgdWludDQgeSk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gcmhhZGQoaW50OCB4LCBpbnQ4IHkpOwordWludDggX19vdmxkIF9fY25mbiByaGFkZCh1aW50OCB4LCB1aW50OCB5KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gcmhhZGQoaW50MTYgeCwgaW50MTYgeSk7Cit1aW50MTYgX19vdmxkIF9fY25mbiByaGFkZCh1aW50MTYgeCwgdWludDE2IHkpOworbG9uZyBfX292bGQgX19jbmZuIHJoYWRkKGxvbmcgeCwgbG9uZyB5KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gcmhhZGQodWxvbmcgeCwgdWxvbmcgeSk7Citsb25nMiBfX292bGQgX19jbmZuIHJoYWRkKGxvbmcyIHgsIGxvbmcyIHkpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gcmhhZGQodWxvbmcyIHgsIHVsb25nMiB5KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gcmhhZGQobG9uZzMgeCwgbG9uZzMgeSk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiByaGFkZCh1bG9uZzMgeCwgdWxvbmczIHkpOworbG9uZzQgX19vdmxkIF9fY25mbiByaGFkZChsb25nNCB4LCBsb25nNCB5KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIHJoYWRkKHVsb25nNCB4LCB1bG9uZzQgeSk7Citsb25nOCBfX292bGQgX19jbmZuIHJoYWRkKGxvbmc4IHgsIGxvbmc4IHkpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gcmhhZGQodWxvbmc4IHgsIHVsb25nOCB5KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIHJoYWRkKGxvbmcxNiB4LCBsb25nMTYgeSk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gcmhhZGQodWxvbmcxNiB4LCB1bG9uZzE2IHkpOworCisvKioKKyAqIFJldHVybnMgbWluKG1heCh4LCBtaW52YWwpLCBtYXh2YWwpLgorICogUmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmIG1pbnZhbCA+IG1heHZhbC4KKyAqLworY2hhciBfX292bGQgX19jbmZuIGNsYW1wKGNoYXIgeCwgY2hhciBtaW52YWwsIGNoYXIgbWF4dmFsKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY2xhbXAodWNoYXIgeCwgdWNoYXIgbWludmFsLCB1Y2hhciBtYXh2YWwpOworY2hhcjIgX19vdmxkIF9fY25mbiBjbGFtcChjaGFyMiB4LCBjaGFyMiBtaW52YWwsIGNoYXIyIG1heHZhbCk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBjbGFtcCh1Y2hhcjIgeCwgdWNoYXIyIG1pbnZhbCwgdWNoYXIyIG1heHZhbCk7CitjaGFyMyBfX292bGQgX19jbmZuIGNsYW1wKGNoYXIzIHgsIGNoYXIzIG1pbnZhbCwgY2hhcjMgbWF4dmFsKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNsYW1wKHVjaGFyMyB4LCB1Y2hhcjMgbWludmFsLCB1Y2hhcjMgbWF4dmFsKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY2xhbXAoY2hhcjQgeCwgY2hhcjQgbWludmFsLCBjaGFyNCBtYXh2YWwpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY2xhbXAodWNoYXI0IHgsIHVjaGFyNCBtaW52YWwsIHVjaGFyNCBtYXh2YWwpOworY2hhcjggX19vdmxkIF9fY25mbiBjbGFtcChjaGFyOCB4LCBjaGFyOCBtaW52YWwsIGNoYXI4IG1heHZhbCk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBjbGFtcCh1Y2hhcjggeCwgdWNoYXI4IG1pbnZhbCwgdWNoYXI4IG1heHZhbCk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBjbGFtcChjaGFyMTYgeCwgY2hhcjE2IG1pbnZhbCwgY2hhcjE2IG1heHZhbCk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAodWNoYXIxNiB4LCB1Y2hhcjE2IG1pbnZhbCwgdWNoYXIxNiBtYXh2YWwpOworc2hvcnQgX19vdmxkIF9fY25mbiBjbGFtcChzaG9ydCB4LCBzaG9ydCBtaW52YWwsIHNob3J0IG1heHZhbCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjbGFtcCh1c2hvcnQgeCwgdXNob3J0IG1pbnZhbCwgdXNob3J0IG1heHZhbCk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjbGFtcChzaG9ydDIgeCwgc2hvcnQyIG1pbnZhbCwgc2hvcnQyIG1heHZhbCk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gY2xhbXAodXNob3J0MiB4LCB1c2hvcnQyIG1pbnZhbCwgdXNob3J0MiBtYXh2YWwpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY2xhbXAoc2hvcnQzIHgsIHNob3J0MyBtaW52YWwsIHNob3J0MyBtYXh2YWwpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNsYW1wKHVzaG9ydDMgeCwgdXNob3J0MyBtaW52YWwsIHVzaG9ydDMgbWF4dmFsKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNsYW1wKHNob3J0NCB4LCBzaG9ydDQgbWludmFsLCBzaG9ydDQgbWF4dmFsKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBjbGFtcCh1c2hvcnQ0IHgsIHVzaG9ydDQgbWludmFsLCB1c2hvcnQ0IG1heHZhbCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjbGFtcChzaG9ydDggeCwgc2hvcnQ4IG1pbnZhbCwgc2hvcnQ4IG1heHZhbCk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gY2xhbXAodXNob3J0OCB4LCB1c2hvcnQ4IG1pbnZhbCwgdXNob3J0OCBtYXh2YWwpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNsYW1wKHNob3J0MTYgeCwgc2hvcnQxNiBtaW52YWwsIHNob3J0MTYgbWF4dmFsKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAodXNob3J0MTYgeCwgdXNob3J0MTYgbWludmFsLCB1c2hvcnQxNiBtYXh2YWwpOworaW50IF9fb3ZsZCBfX2NuZm4gY2xhbXAoaW50IHgsIGludCBtaW52YWwsIGludCBtYXh2YWwpOwordWludCBfX292bGQgX19jbmZuIGNsYW1wKHVpbnQgeCwgdWludCBtaW52YWwsIHVpbnQgbWF4dmFsKTsKK2ludDIgX19vdmxkIF9fY25mbiBjbGFtcChpbnQyIHgsIGludDIgbWludmFsLCBpbnQyIG1heHZhbCk7Cit1aW50MiBfX292bGQgX19jbmZuIGNsYW1wKHVpbnQyIHgsIHVpbnQyIG1pbnZhbCwgdWludDIgbWF4dmFsKTsKK2ludDMgX19vdmxkIF9fY25mbiBjbGFtcChpbnQzIHgsIGludDMgbWludmFsLCBpbnQzIG1heHZhbCk7Cit1aW50MyBfX292bGQgX19jbmZuIGNsYW1wKHVpbnQzIHgsIHVpbnQzIG1pbnZhbCwgdWludDMgbWF4dmFsKTsKK2ludDQgX19vdmxkIF9fY25mbiBjbGFtcChpbnQ0IHgsIGludDQgbWludmFsLCBpbnQ0IG1heHZhbCk7Cit1aW50NCBfX292bGQgX19jbmZuIGNsYW1wKHVpbnQ0IHgsIHVpbnQ0IG1pbnZhbCwgdWludDQgbWF4dmFsKTsKK2ludDggX19vdmxkIF9fY25mbiBjbGFtcChpbnQ4IHgsIGludDggbWludmFsLCBpbnQ4IG1heHZhbCk7Cit1aW50OCBfX292bGQgX19jbmZuIGNsYW1wKHVpbnQ4IHgsIHVpbnQ4IG1pbnZhbCwgdWludDggbWF4dmFsKTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAoaW50MTYgeCwgaW50MTYgbWludmFsLCBpbnQxNiBtYXh2YWwpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAodWludDE2IHgsIHVpbnQxNiBtaW52YWwsIHVpbnQxNiBtYXh2YWwpOworbG9uZyBfX292bGQgX19jbmZuIGNsYW1wKGxvbmcgeCwgbG9uZyBtaW52YWwsIGxvbmcgbWF4dmFsKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY2xhbXAodWxvbmcgeCwgdWxvbmcgbWludmFsLCB1bG9uZyBtYXh2YWwpOworbG9uZzIgX19vdmxkIF9fY25mbiBjbGFtcChsb25nMiB4LCBsb25nMiBtaW52YWwsIGxvbmcyIG1heHZhbCk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBjbGFtcCh1bG9uZzIgeCwgdWxvbmcyIG1pbnZhbCwgdWxvbmcyIG1heHZhbCk7Citsb25nMyBfX292bGQgX19jbmZuIGNsYW1wKGxvbmczIHgsIGxvbmczIG1pbnZhbCwgbG9uZzMgbWF4dmFsKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNsYW1wKHVsb25nMyB4LCB1bG9uZzMgbWludmFsLCB1bG9uZzMgbWF4dmFsKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY2xhbXAobG9uZzQgeCwgbG9uZzQgbWludmFsLCBsb25nNCBtYXh2YWwpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY2xhbXAodWxvbmc0IHgsIHVsb25nNCBtaW52YWwsIHVsb25nNCBtYXh2YWwpOworbG9uZzggX19vdmxkIF9fY25mbiBjbGFtcChsb25nOCB4LCBsb25nOCBtaW52YWwsIGxvbmc4IG1heHZhbCk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBjbGFtcCh1bG9uZzggeCwgdWxvbmc4IG1pbnZhbCwgdWxvbmc4IG1heHZhbCk7Citsb25nMTYgX19vdmxkIF9fY25mbiBjbGFtcChsb25nMTYgeCwgbG9uZzE2IG1pbnZhbCwgbG9uZzE2IG1heHZhbCk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAodWxvbmcxNiB4LCB1bG9uZzE2IG1pbnZhbCwgdWxvbmcxNiBtYXh2YWwpOworY2hhciBfX292bGQgX19jbmZuIGNsYW1wKGNoYXIgeCwgY2hhciBtaW52YWwsIGNoYXIgbWF4dmFsKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gY2xhbXAodWNoYXIgeCwgdWNoYXIgbWludmFsLCB1Y2hhciBtYXh2YWwpOworY2hhcjIgX19vdmxkIF9fY25mbiBjbGFtcChjaGFyMiB4LCBjaGFyIG1pbnZhbCwgY2hhciBtYXh2YWwpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY2xhbXAodWNoYXIyIHgsIHVjaGFyIG1pbnZhbCwgdWNoYXIgbWF4dmFsKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY2xhbXAoY2hhcjMgeCwgY2hhciBtaW52YWwsIGNoYXIgbWF4dmFsKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIGNsYW1wKHVjaGFyMyB4LCB1Y2hhciBtaW52YWwsIHVjaGFyIG1heHZhbCk7CitjaGFyNCBfX292bGQgX19jbmZuIGNsYW1wKGNoYXI0IHgsIGNoYXIgbWludmFsLCBjaGFyIG1heHZhbCk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBjbGFtcCh1Y2hhcjQgeCwgdWNoYXIgbWludmFsLCB1Y2hhciBtYXh2YWwpOworY2hhcjggX19vdmxkIF9fY25mbiBjbGFtcChjaGFyOCB4LCBjaGFyIG1pbnZhbCwgY2hhciBtYXh2YWwpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY2xhbXAodWNoYXI4IHgsIHVjaGFyIG1pbnZhbCwgdWNoYXIgbWF4dmFsKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNsYW1wKGNoYXIxNiB4LCBjaGFyIG1pbnZhbCwgY2hhciBtYXh2YWwpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGNsYW1wKHVjaGFyMTYgeCwgdWNoYXIgbWludmFsLCB1Y2hhciBtYXh2YWwpOworc2hvcnQgX19vdmxkIF9fY25mbiBjbGFtcChzaG9ydCB4LCBzaG9ydCBtaW52YWwsIHNob3J0IG1heHZhbCk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBjbGFtcCh1c2hvcnQgeCwgdXNob3J0IG1pbnZhbCwgdXNob3J0IG1heHZhbCk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjbGFtcChzaG9ydDIgeCwgc2hvcnQgbWludmFsLCBzaG9ydCBtYXh2YWwpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNsYW1wKHVzaG9ydDIgeCwgdXNob3J0IG1pbnZhbCwgdXNob3J0IG1heHZhbCk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBjbGFtcChzaG9ydDMgeCwgc2hvcnQgbWludmFsLCBzaG9ydCBtYXh2YWwpOwordXNob3J0MyBfX292bGQgX19jbmZuIGNsYW1wKHVzaG9ydDMgeCwgdXNob3J0IG1pbnZhbCwgdXNob3J0IG1heHZhbCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBjbGFtcChzaG9ydDQgeCwgc2hvcnQgbWludmFsLCBzaG9ydCBtYXh2YWwpOwordXNob3J0NCBfX292bGQgX19jbmZuIGNsYW1wKHVzaG9ydDQgeCwgdXNob3J0IG1pbnZhbCwgdXNob3J0IG1heHZhbCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjbGFtcChzaG9ydDggeCwgc2hvcnQgbWludmFsLCBzaG9ydCBtYXh2YWwpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNsYW1wKHVzaG9ydDggeCwgdXNob3J0IG1pbnZhbCwgdXNob3J0IG1heHZhbCk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAoc2hvcnQxNiB4LCBzaG9ydCBtaW52YWwsIHNob3J0IG1heHZhbCk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGNsYW1wKHVzaG9ydDE2IHgsIHVzaG9ydCBtaW52YWwsIHVzaG9ydCBtYXh2YWwpOworaW50IF9fb3ZsZCBfX2NuZm4gY2xhbXAoaW50IHgsIGludCBtaW52YWwsIGludCBtYXh2YWwpOwordWludCBfX292bGQgX19jbmZuIGNsYW1wKHVpbnQgeCwgdWludCBtaW52YWwsIHVpbnQgbWF4dmFsKTsKK2ludDIgX19vdmxkIF9fY25mbiBjbGFtcChpbnQyIHgsIGludCBtaW52YWwsIGludCBtYXh2YWwpOwordWludDIgX19vdmxkIF9fY25mbiBjbGFtcCh1aW50MiB4LCB1aW50IG1pbnZhbCwgdWludCBtYXh2YWwpOworaW50MyBfX292bGQgX19jbmZuIGNsYW1wKGludDMgeCwgaW50IG1pbnZhbCwgaW50IG1heHZhbCk7Cit1aW50MyBfX292bGQgX19jbmZuIGNsYW1wKHVpbnQzIHgsIHVpbnQgbWludmFsLCB1aW50IG1heHZhbCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gY2xhbXAoaW50NCB4LCBpbnQgbWludmFsLCBpbnQgbWF4dmFsKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY2xhbXAodWludDQgeCwgdWludCBtaW52YWwsIHVpbnQgbWF4dmFsKTsKK2ludDggX19vdmxkIF9fY25mbiBjbGFtcChpbnQ4IHgsIGludCBtaW52YWwsIGludCBtYXh2YWwpOwordWludDggX19vdmxkIF9fY25mbiBjbGFtcCh1aW50OCB4LCB1aW50IG1pbnZhbCwgdWludCBtYXh2YWwpOworaW50MTYgX19vdmxkIF9fY25mbiBjbGFtcChpbnQxNiB4LCBpbnQgbWludmFsLCBpbnQgbWF4dmFsKTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNsYW1wKHVpbnQxNiB4LCB1aW50IG1pbnZhbCwgdWludCBtYXh2YWwpOworbG9uZyBfX292bGQgX19jbmZuIGNsYW1wKGxvbmcgeCwgbG9uZyBtaW52YWwsIGxvbmcgbWF4dmFsKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gY2xhbXAodWxvbmcgeCwgdWxvbmcgbWludmFsLCB1bG9uZyBtYXh2YWwpOworbG9uZzIgX19vdmxkIF9fY25mbiBjbGFtcChsb25nMiB4LCBsb25nIG1pbnZhbCwgbG9uZyBtYXh2YWwpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY2xhbXAodWxvbmcyIHgsIHVsb25nIG1pbnZhbCwgdWxvbmcgbWF4dmFsKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY2xhbXAobG9uZzMgeCwgbG9uZyBtaW52YWwsIGxvbmcgbWF4dmFsKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIGNsYW1wKHVsb25nMyB4LCB1bG9uZyBtaW52YWwsIHVsb25nIG1heHZhbCk7Citsb25nNCBfX292bGQgX19jbmZuIGNsYW1wKGxvbmc0IHgsIGxvbmcgbWludmFsLCBsb25nIG1heHZhbCk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBjbGFtcCh1bG9uZzQgeCwgdWxvbmcgbWludmFsLCB1bG9uZyBtYXh2YWwpOworbG9uZzggX19vdmxkIF9fY25mbiBjbGFtcChsb25nOCB4LCBsb25nIG1pbnZhbCwgbG9uZyBtYXh2YWwpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY2xhbXAodWxvbmc4IHgsIHVsb25nIG1pbnZhbCwgdWxvbmcgbWF4dmFsKTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNsYW1wKGxvbmcxNiB4LCBsb25nIG1pbnZhbCwgbG9uZyBtYXh2YWwpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGNsYW1wKHVsb25nMTYgeCwgdWxvbmcgbWludmFsLCB1bG9uZyBtYXh2YWwpOworCisvKioKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBsZWFkaW5nIDAtYml0cyBpbiB4LCBzdGFydGluZworICogYXQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHBvc2l0aW9uLgorICovCitjaGFyIF9fb3ZsZCBfX2NuZm4gY2x6KGNoYXIgeCk7Cit1Y2hhciBfX292bGQgX19jbmZuIGNseih1Y2hhciB4KTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gY2x6KGNoYXIyIHgpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gY2x6KHVjaGFyMiB4KTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gY2x6KGNoYXIzIHgpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gY2x6KHVjaGFyMyB4KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gY2x6KGNoYXI0IHgpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gY2x6KHVjaGFyNCB4KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gY2x6KGNoYXI4IHgpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gY2x6KHVjaGFyOCB4KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIGNseihjaGFyMTYgeCk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gY2x6KHVjaGFyMTYgeCk7CitzaG9ydCBfX292bGQgX19jbmZuIGNseihzaG9ydCB4KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIGNseih1c2hvcnQgeCk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBjbHooc2hvcnQyIHgpOwordXNob3J0MiBfX292bGQgX19jbmZuIGNseih1c2hvcnQyIHgpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gY2x6KHNob3J0MyB4KTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBjbHoodXNob3J0MyB4KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGNseihzaG9ydDQgeCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gY2x6KHVzaG9ydDQgeCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBjbHooc2hvcnQ4IHgpOwordXNob3J0OCBfX292bGQgX19jbmZuIGNseih1c2hvcnQ4IHgpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGNseihzaG9ydDE2IHgpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBjbHoodXNob3J0MTYgeCk7CitpbnQgX19vdmxkIF9fY25mbiBjbHooaW50IHgpOwordWludCBfX292bGQgX19jbmZuIGNseih1aW50IHgpOworaW50MiBfX292bGQgX19jbmZuIGNseihpbnQyIHgpOwordWludDIgX19vdmxkIF9fY25mbiBjbHoodWludDIgeCk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gY2x6KGludDMgeCk7Cit1aW50MyBfX292bGQgX19jbmZuIGNseih1aW50MyB4KTsKK2ludDQgX19vdmxkIF9fY25mbiBjbHooaW50NCB4KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gY2x6KHVpbnQ0IHgpOworaW50OCBfX292bGQgX19jbmZuIGNseihpbnQ4IHgpOwordWludDggX19vdmxkIF9fY25mbiBjbHoodWludDggeCk7CitpbnQxNiBfX292bGQgX19jbmZuIGNseihpbnQxNiB4KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGNseih1aW50MTYgeCk7Citsb25nIF9fb3ZsZCBfX2NuZm4gY2x6KGxvbmcgeCk7Cit1bG9uZyBfX292bGQgX19jbmZuIGNseih1bG9uZyB4KTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gY2x6KGxvbmcyIHgpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gY2x6KHVsb25nMiB4KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gY2x6KGxvbmczIHgpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gY2x6KHVsb25nMyB4KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gY2x6KGxvbmc0IHgpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gY2x6KHVsb25nNCB4KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gY2x6KGxvbmc4IHgpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gY2x6KHVsb25nOCB4KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGNseihsb25nMTYgeCk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gY2x6KHVsb25nMTYgeCk7CisKKy8qKgorICogUmV0dXJucyB0aGUgY291bnQgb2YgdHJhaWxpbmcgMC1iaXRzIGluIHguIElmIHggaXMgMCwKKyAqIHJldHVybnMgdGhlIHNpemUgaW4gYml0cyBvZiB0aGUgdHlwZSBvZiB4IG9yCisgKiBjb21wb25lbnQgdHlwZSBvZiB4LCBpZiB4IGlzIGEgdmVjdG9yLgorICovCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2NoYXIgX19vdmxkIGN0eihjaGFyIHgpOwordWNoYXIgX19vdmxkIGN0eih1Y2hhciB4KTsKK2NoYXIyIF9fb3ZsZCBjdHooY2hhcjIgeCk7Cit1Y2hhcjIgX19vdmxkIGN0eih1Y2hhcjIgeCk7CitjaGFyMyBfX292bGQgY3R6KGNoYXIzIHgpOwordWNoYXIzIF9fb3ZsZCBjdHoodWNoYXIzIHgpOworY2hhcjQgX19vdmxkIGN0eihjaGFyNCB4KTsKK3VjaGFyNCBfX292bGQgY3R6KHVjaGFyNCB4KTsKK2NoYXI4IF9fb3ZsZCBjdHooY2hhcjggeCk7Cit1Y2hhcjggX19vdmxkIGN0eih1Y2hhcjggeCk7CitjaGFyMTYgX19vdmxkIGN0eihjaGFyMTYgeCk7Cit1Y2hhcjE2IF9fb3ZsZCBjdHoodWNoYXIxNiB4KTsKK3Nob3J0IF9fb3ZsZCBjdHooc2hvcnQgeCk7Cit1c2hvcnQgX19vdmxkIGN0eih1c2hvcnQgeCk7CitzaG9ydDIgX19vdmxkIGN0eihzaG9ydDIgeCk7Cit1c2hvcnQyIF9fb3ZsZCBjdHoodXNob3J0MiB4KTsKK3Nob3J0MyBfX292bGQgY3R6KHNob3J0MyB4KTsKK3VzaG9ydDMgX19vdmxkIGN0eih1c2hvcnQzIHgpOworc2hvcnQ0IF9fb3ZsZCBjdHooc2hvcnQ0IHgpOwordXNob3J0NCBfX292bGQgY3R6KHVzaG9ydDQgeCk7CitzaG9ydDggX19vdmxkIGN0eihzaG9ydDggeCk7Cit1c2hvcnQ4IF9fb3ZsZCBjdHoodXNob3J0OCB4KTsKK3Nob3J0MTYgX19vdmxkIGN0eihzaG9ydDE2IHgpOwordXNob3J0MTYgX19vdmxkIGN0eih1c2hvcnQxNiB4KTsKK2ludCBfX292bGQgY3R6KGludCB4KTsKK3VpbnQgX19vdmxkIGN0eih1aW50IHgpOworaW50MiBfX292bGQgY3R6KGludDIgeCk7Cit1aW50MiBfX292bGQgY3R6KHVpbnQyIHgpOworaW50MyBfX292bGQgY3R6KGludDMgeCk7Cit1aW50MyBfX292bGQgY3R6KHVpbnQzIHgpOworaW50NCBfX292bGQgY3R6KGludDQgeCk7Cit1aW50NCBfX292bGQgY3R6KHVpbnQ0IHgpOworaW50OCBfX292bGQgY3R6KGludDggeCk7Cit1aW50OCBfX292bGQgY3R6KHVpbnQ4IHgpOworaW50MTYgX19vdmxkIGN0eihpbnQxNiB4KTsKK3VpbnQxNiBfX292bGQgY3R6KHVpbnQxNiB4KTsKK2xvbmcgX19vdmxkIGN0eihsb25nIHgpOwordWxvbmcgX19vdmxkIGN0eih1bG9uZyB4KTsKK2xvbmcyIF9fb3ZsZCBjdHoobG9uZzIgeCk7Cit1bG9uZzIgX19vdmxkIGN0eih1bG9uZzIgeCk7Citsb25nMyBfX292bGQgY3R6KGxvbmczIHgpOwordWxvbmczIF9fb3ZsZCBjdHoodWxvbmczIHgpOworbG9uZzQgX19vdmxkIGN0eihsb25nNCB4KTsKK3Vsb25nNCBfX292bGQgY3R6KHVsb25nNCB4KTsKK2xvbmc4IF9fb3ZsZCBjdHoobG9uZzggeCk7Cit1bG9uZzggX19vdmxkIGN0eih1bG9uZzggeCk7Citsb25nMTYgX19vdmxkIGN0eihsb25nMTYgeCk7Cit1bG9uZzE2IF9fb3ZsZCBjdHoodWxvbmcxNiB4KTsKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8qKgorICogUmV0dXJucyBtdWxfaGkoYSwgYikgKyBjLgorICovCitjaGFyIF9fb3ZsZCBfX2NuZm4gbWFkX2hpKGNoYXIgYSwgY2hhciBiLCBjaGFyIGMpOwordWNoYXIgX19vdmxkIF9fY25mbiBtYWRfaGkodWNoYXIgYSwgdWNoYXIgYiwgdWNoYXIgYyk7CitjaGFyMiBfX292bGQgX19jbmZuIG1hZF9oaShjaGFyMiBhLCBjaGFyMiBiLCBjaGFyMiBjKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIG1hZF9oaSh1Y2hhcjIgYSwgdWNoYXIyIGIsIHVjaGFyMiBjKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gbWFkX2hpKGNoYXIzIGEsIGNoYXIzIGIsIGNoYXIzIGMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHVjaGFyMyBhLCB1Y2hhcjMgYiwgdWNoYXIzIGMpOworY2hhcjQgX19vdmxkIF9fY25mbiBtYWRfaGkoY2hhcjQgYSwgY2hhcjQgYiwgY2hhcjQgYyk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBtYWRfaGkodWNoYXI0IGEsIHVjaGFyNCBiLCB1Y2hhcjQgYyk7CitjaGFyOCBfX292bGQgX19jbmZuIG1hZF9oaShjaGFyOCBhLCBjaGFyOCBiLCBjaGFyOCBjKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIG1hZF9oaSh1Y2hhcjggYSwgdWNoYXI4IGIsIHVjaGFyOCBjKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIG1hZF9oaShjaGFyMTYgYSwgY2hhcjE2IGIsIGNoYXIxNiBjKTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBtYWRfaGkodWNoYXIxNiBhLCB1Y2hhcjE2IGIsIHVjaGFyMTYgYyk7CitzaG9ydCBfX292bGQgX19jbmZuIG1hZF9oaShzaG9ydCBhLCBzaG9ydCBiLCBzaG9ydCBjKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIG1hZF9oaSh1c2hvcnQgYSwgdXNob3J0IGIsIHVzaG9ydCBjKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIG1hZF9oaShzaG9ydDIgYSwgc2hvcnQyIGIsIHNob3J0MiBjKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBtYWRfaGkodXNob3J0MiBhLCB1c2hvcnQyIGIsIHVzaG9ydDIgYyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBtYWRfaGkoc2hvcnQzIGEsIHNob3J0MyBiLCBzaG9ydDMgYyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHVzaG9ydDMgYSwgdXNob3J0MyBiLCB1c2hvcnQzIGMpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHNob3J0NCBhLCBzaG9ydDQgYiwgc2hvcnQ0IGMpOwordXNob3J0NCBfX292bGQgX19jbmZuIG1hZF9oaSh1c2hvcnQ0IGEsIHVzaG9ydDQgYiwgdXNob3J0NCBjKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIG1hZF9oaShzaG9ydDggYSwgc2hvcnQ4IGIsIHNob3J0OCBjKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBtYWRfaGkodXNob3J0OCBhLCB1c2hvcnQ4IGIsIHVzaG9ydDggYyk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHNob3J0MTYgYSwgc2hvcnQxNiBiLCBzaG9ydDE2IGMpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBtYWRfaGkodXNob3J0MTYgYSwgdXNob3J0MTYgYiwgdXNob3J0MTYgYyk7CitpbnQgX19vdmxkIF9fY25mbiBtYWRfaGkoaW50IGEsIGludCBiLCBpbnQgYyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHVpbnQgYSwgdWludCBiLCB1aW50IGMpOworaW50MiBfX292bGQgX19jbmZuIG1hZF9oaShpbnQyIGEsIGludDIgYiwgaW50MiBjKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHVpbnQyIGEsIHVpbnQyIGIsIHVpbnQyIGMpOworaW50MyBfX292bGQgX19jbmZuIG1hZF9oaShpbnQzIGEsIGludDMgYiwgaW50MyBjKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHVpbnQzIGEsIHVpbnQzIGIsIHVpbnQzIGMpOworaW50NCBfX292bGQgX19jbmZuIG1hZF9oaShpbnQ0IGEsIGludDQgYiwgaW50NCBjKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHVpbnQ0IGEsIHVpbnQ0IGIsIHVpbnQ0IGMpOworaW50OCBfX292bGQgX19jbmZuIG1hZF9oaShpbnQ4IGEsIGludDggYiwgaW50OCBjKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHVpbnQ4IGEsIHVpbnQ4IGIsIHVpbnQ4IGMpOworaW50MTYgX19vdmxkIF9fY25mbiBtYWRfaGkoaW50MTYgYSwgaW50MTYgYiwgaW50MTYgYyk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBtYWRfaGkodWludDE2IGEsIHVpbnQxNiBiLCB1aW50MTYgYyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gbWFkX2hpKGxvbmcgYSwgbG9uZyBiLCBsb25nIGMpOwordWxvbmcgX19vdmxkIF9fY25mbiBtYWRfaGkodWxvbmcgYSwgdWxvbmcgYiwgdWxvbmcgYyk7Citsb25nMiBfX292bGQgX19jbmZuIG1hZF9oaShsb25nMiBhLCBsb25nMiBiLCBsb25nMiBjKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIG1hZF9oaSh1bG9uZzIgYSwgdWxvbmcyIGIsIHVsb25nMiBjKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gbWFkX2hpKGxvbmczIGEsIGxvbmczIGIsIGxvbmczIGMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gbWFkX2hpKHVsb25nMyBhLCB1bG9uZzMgYiwgdWxvbmczIGMpOworbG9uZzQgX19vdmxkIF9fY25mbiBtYWRfaGkobG9uZzQgYSwgbG9uZzQgYiwgbG9uZzQgYyk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBtYWRfaGkodWxvbmc0IGEsIHVsb25nNCBiLCB1bG9uZzQgYyk7Citsb25nOCBfX292bGQgX19jbmZuIG1hZF9oaShsb25nOCBhLCBsb25nOCBiLCBsb25nOCBjKTsKK3Vsb25nOCBfX292bGQgX19jbmZuIG1hZF9oaSh1bG9uZzggYSwgdWxvbmc4IGIsIHVsb25nOCBjKTsKK2xvbmcxNiBfX292bGQgX19jbmZuIG1hZF9oaShsb25nMTYgYSwgbG9uZzE2IGIsIGxvbmcxNiBjKTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBtYWRfaGkodWxvbmcxNiBhLCB1bG9uZzE2IGIsIHVsb25nMTYgYyk7CisKKy8qKgorICogUmV0dXJucyBhICogYiArIGMgYW5kIHNhdHVyYXRlcyB0aGUgcmVzdWx0LgorICovCitjaGFyIF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChjaGFyIGEsIGNoYXIgYiwgY2hhciBjKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gbWFkX3NhdCh1Y2hhciBhLCB1Y2hhciBiLCB1Y2hhciBjKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChjaGFyMiBhLCBjaGFyMiBiLCBjaGFyMiBjKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIG1hZF9zYXQodWNoYXIyIGEsIHVjaGFyMiBiLCB1Y2hhcjIgYyk7CitjaGFyMyBfX292bGQgX19jbmZuIG1hZF9zYXQoY2hhcjMgYSwgY2hhcjMgYiwgY2hhcjMgYyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBtYWRfc2F0KHVjaGFyMyBhLCB1Y2hhcjMgYiwgdWNoYXIzIGMpOworY2hhcjQgX19vdmxkIF9fY25mbiBtYWRfc2F0KGNoYXI0IGEsIGNoYXI0IGIsIGNoYXI0IGMpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdCh1Y2hhcjQgYSwgdWNoYXI0IGIsIHVjaGFyNCBjKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChjaGFyOCBhLCBjaGFyOCBiLCBjaGFyOCBjKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIG1hZF9zYXQodWNoYXI4IGEsIHVjaGFyOCBiLCB1Y2hhcjggYyk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBtYWRfc2F0KGNoYXIxNiBhLCBjaGFyMTYgYiwgY2hhcjE2IGMpOwordWNoYXIxNiBfX292bGQgX19jbmZuIG1hZF9zYXQodWNoYXIxNiBhLCB1Y2hhcjE2IGIsIHVjaGFyMTYgYyk7CitzaG9ydCBfX292bGQgX19jbmZuIG1hZF9zYXQoc2hvcnQgYSwgc2hvcnQgYiwgc2hvcnQgYyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBtYWRfc2F0KHVzaG9ydCBhLCB1c2hvcnQgYiwgdXNob3J0IGMpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChzaG9ydDIgYSwgc2hvcnQyIGIsIHNob3J0MiBjKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBtYWRfc2F0KHVzaG9ydDIgYSwgdXNob3J0MiBiLCB1c2hvcnQyIGMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChzaG9ydDMgYSwgc2hvcnQzIGIsIHNob3J0MyBjKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBtYWRfc2F0KHVzaG9ydDMgYSwgdXNob3J0MyBiLCB1c2hvcnQzIGMpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChzaG9ydDQgYSwgc2hvcnQ0IGIsIHNob3J0NCBjKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBtYWRfc2F0KHVzaG9ydDQgYSwgdXNob3J0NCBiLCB1c2hvcnQ0IGMpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChzaG9ydDggYSwgc2hvcnQ4IGIsIHNob3J0OCBjKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBtYWRfc2F0KHVzaG9ydDggYSwgdXNob3J0OCBiLCB1c2hvcnQ4IGMpOworc2hvcnQxNiBfX292bGQgX19jbmZuIG1hZF9zYXQoc2hvcnQxNiBhLCBzaG9ydDE2IGIsIHNob3J0MTYgYyk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIG1hZF9zYXQodXNob3J0MTYgYSwgdXNob3J0MTYgYiwgdXNob3J0MTYgYyk7CitpbnQgX19vdmxkIF9fY25mbiBtYWRfc2F0KGludCBhLCBpbnQgYiwgaW50IGMpOwordWludCBfX292bGQgX19jbmZuIG1hZF9zYXQodWludCBhLCB1aW50IGIsIHVpbnQgYyk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChpbnQyIGEsIGludDIgYiwgaW50MiBjKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gbWFkX3NhdCh1aW50MiBhLCB1aW50MiBiLCB1aW50MiBjKTsKK2ludDMgX19vdmxkIF9fY25mbiBtYWRfc2F0KGludDMgYSwgaW50MyBiLCBpbnQzIGMpOwordWludDMgX19vdmxkIF9fY25mbiBtYWRfc2F0KHVpbnQzIGEsIHVpbnQzIGIsIHVpbnQzIGMpOworaW50NCBfX292bGQgX19jbmZuIG1hZF9zYXQoaW50NCBhLCBpbnQ0IGIsIGludDQgYyk7Cit1aW50NCBfX292bGQgX19jbmZuIG1hZF9zYXQodWludDQgYSwgdWludDQgYiwgdWludDQgYyk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChpbnQ4IGEsIGludDggYiwgaW50OCBjKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdCh1aW50OCBhLCB1aW50OCBiLCB1aW50OCBjKTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChpbnQxNiBhLCBpbnQxNiBiLCBpbnQxNiBjKTsKK3VpbnQxNiBfX292bGQgX19jbmZuIG1hZF9zYXQodWludDE2IGEsIHVpbnQxNiBiLCB1aW50MTYgYyk7Citsb25nIF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChsb25nIGEsIGxvbmcgYiwgbG9uZyBjKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gbWFkX3NhdCh1bG9uZyBhLCB1bG9uZyBiLCB1bG9uZyBjKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChsb25nMiBhLCBsb25nMiBiLCBsb25nMiBjKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIG1hZF9zYXQodWxvbmcyIGEsIHVsb25nMiBiLCB1bG9uZzIgYyk7Citsb25nMyBfX292bGQgX19jbmZuIG1hZF9zYXQobG9uZzMgYSwgbG9uZzMgYiwgbG9uZzMgYyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBtYWRfc2F0KHVsb25nMyBhLCB1bG9uZzMgYiwgdWxvbmczIGMpOworbG9uZzQgX19vdmxkIF9fY25mbiBtYWRfc2F0KGxvbmc0IGEsIGxvbmc0IGIsIGxvbmc0IGMpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdCh1bG9uZzQgYSwgdWxvbmc0IGIsIHVsb25nNCBjKTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gbWFkX3NhdChsb25nOCBhLCBsb25nOCBiLCBsb25nOCBjKTsKK3Vsb25nOCBfX292bGQgX19jbmZuIG1hZF9zYXQodWxvbmc4IGEsIHVsb25nOCBiLCB1bG9uZzggYyk7Citsb25nMTYgX19vdmxkIF9fY25mbiBtYWRfc2F0KGxvbmcxNiBhLCBsb25nMTYgYiwgbG9uZzE2IGMpOwordWxvbmcxNiBfX292bGQgX19jbmZuIG1hZF9zYXQodWxvbmcxNiBhLCB1bG9uZzE2IGIsIHVsb25nMTYgYyk7CisKKy8qKgorICogUmV0dXJucyB5IGlmIHggPCB5LCBvdGhlcndpc2UgaXQgcmV0dXJucyB4LgorICovCitjaGFyIF9fb3ZsZCBfX2NuZm4gbWF4KGNoYXIgeCwgY2hhciB5KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gbWF4KHVjaGFyIHgsIHVjaGFyIHkpOworY2hhcjIgX19vdmxkIF9fY25mbiBtYXgoY2hhcjIgeCwgY2hhcjIgeSk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBtYXgodWNoYXIyIHgsIHVjaGFyMiB5KTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gbWF4KGNoYXIzIHgsIGNoYXIzIHkpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gbWF4KHVjaGFyMyB4LCB1Y2hhcjMgeSk7CitjaGFyNCBfX292bGQgX19jbmZuIG1heChjaGFyNCB4LCBjaGFyNCB5KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIG1heCh1Y2hhcjQgeCwgdWNoYXI0IHkpOworY2hhcjggX19vdmxkIF9fY25mbiBtYXgoY2hhcjggeCwgY2hhcjggeSk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBtYXgodWNoYXI4IHgsIHVjaGFyOCB5KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIG1heChjaGFyMTYgeCwgY2hhcjE2IHkpOwordWNoYXIxNiBfX292bGQgX19jbmZuIG1heCh1Y2hhcjE2IHgsIHVjaGFyMTYgeSk7CitzaG9ydCBfX292bGQgX19jbmZuIG1heChzaG9ydCB4LCBzaG9ydCB5KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIG1heCh1c2hvcnQgeCwgdXNob3J0IHkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gbWF4KHNob3J0MiB4LCBzaG9ydDIgeSk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gbWF4KHVzaG9ydDIgeCwgdXNob3J0MiB5KTsKK3Nob3J0MyBfX292bGQgX19jbmZuIG1heChzaG9ydDMgeCwgc2hvcnQzIHkpOwordXNob3J0MyBfX292bGQgX19jbmZuIG1heCh1c2hvcnQzIHgsIHVzaG9ydDMgeSk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBtYXgoc2hvcnQ0IHgsIHNob3J0NCB5KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBtYXgodXNob3J0NCB4LCB1c2hvcnQ0IHkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gbWF4KHNob3J0OCB4LCBzaG9ydDggeSk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gbWF4KHVzaG9ydDggeCwgdXNob3J0OCB5KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBtYXgoc2hvcnQxNiB4LCBzaG9ydDE2IHkpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBtYXgodXNob3J0MTYgeCwgdXNob3J0MTYgeSk7CitpbnQgX19vdmxkIF9fY25mbiBtYXgoaW50IHgsIGludCB5KTsKK3VpbnQgX19vdmxkIF9fY25mbiBtYXgodWludCB4LCB1aW50IHkpOworaW50MiBfX292bGQgX19jbmZuIG1heChpbnQyIHgsIGludDIgeSk7Cit1aW50MiBfX292bGQgX19jbmZuIG1heCh1aW50MiB4LCB1aW50MiB5KTsKK2ludDMgX19vdmxkIF9fY25mbiBtYXgoaW50MyB4LCBpbnQzIHkpOwordWludDMgX19vdmxkIF9fY25mbiBtYXgodWludDMgeCwgdWludDMgeSk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gbWF4KGludDQgeCwgaW50NCB5KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gbWF4KHVpbnQ0IHgsIHVpbnQ0IHkpOworaW50OCBfX292bGQgX19jbmZuIG1heChpbnQ4IHgsIGludDggeSk7Cit1aW50OCBfX292bGQgX19jbmZuIG1heCh1aW50OCB4LCB1aW50OCB5KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gbWF4KGludDE2IHgsIGludDE2IHkpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gbWF4KHVpbnQxNiB4LCB1aW50MTYgeSk7Citsb25nIF9fb3ZsZCBfX2NuZm4gbWF4KGxvbmcgeCwgbG9uZyB5KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gbWF4KHVsb25nIHgsIHVsb25nIHkpOworbG9uZzIgX19vdmxkIF9fY25mbiBtYXgobG9uZzIgeCwgbG9uZzIgeSk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBtYXgodWxvbmcyIHgsIHVsb25nMiB5KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gbWF4KGxvbmczIHgsIGxvbmczIHkpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gbWF4KHVsb25nMyB4LCB1bG9uZzMgeSk7Citsb25nNCBfX292bGQgX19jbmZuIG1heChsb25nNCB4LCBsb25nNCB5KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIG1heCh1bG9uZzQgeCwgdWxvbmc0IHkpOworbG9uZzggX19vdmxkIF9fY25mbiBtYXgobG9uZzggeCwgbG9uZzggeSk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBtYXgodWxvbmc4IHgsIHVsb25nOCB5KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIG1heChsb25nMTYgeCwgbG9uZzE2IHkpOwordWxvbmcxNiBfX292bGQgX19jbmZuIG1heCh1bG9uZzE2IHgsIHVsb25nMTYgeSk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gbWF4KGNoYXIgeCwgY2hhciB5KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gbWF4KHVjaGFyIHgsIHVjaGFyIHkpOworY2hhcjIgX19vdmxkIF9fY25mbiBtYXgoY2hhcjIgeCwgY2hhciB5KTsKK3VjaGFyMiBfX292bGQgX19jbmZuIG1heCh1Y2hhcjIgeCwgdWNoYXIgeSk7CitjaGFyMyBfX292bGQgX19jbmZuIG1heChjaGFyMyB4LCBjaGFyIHkpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gbWF4KHVjaGFyMyB4LCB1Y2hhciB5KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gbWF4KGNoYXI0IHgsIGNoYXIgeSk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBtYXgodWNoYXI0IHgsIHVjaGFyIHkpOworY2hhcjggX19vdmxkIF9fY25mbiBtYXgoY2hhcjggeCwgY2hhciB5KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIG1heCh1Y2hhcjggeCwgdWNoYXIgeSk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBtYXgoY2hhcjE2IHgsIGNoYXIgeSk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gbWF4KHVjaGFyMTYgeCwgdWNoYXIgeSk7CitzaG9ydCBfX292bGQgX19jbmZuIG1heChzaG9ydCB4LCBzaG9ydCB5KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIG1heCh1c2hvcnQgeCwgdXNob3J0IHkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gbWF4KHNob3J0MiB4LCBzaG9ydCB5KTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBtYXgodXNob3J0MiB4LCB1c2hvcnQgeSk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBtYXgoc2hvcnQzIHgsIHNob3J0IHkpOwordXNob3J0MyBfX292bGQgX19jbmZuIG1heCh1c2hvcnQzIHgsIHVzaG9ydCB5KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIG1heChzaG9ydDQgeCwgc2hvcnQgeSk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gbWF4KHVzaG9ydDQgeCwgdXNob3J0IHkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gbWF4KHNob3J0OCB4LCBzaG9ydCB5KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBtYXgodXNob3J0OCB4LCB1c2hvcnQgeSk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gbWF4KHNob3J0MTYgeCwgc2hvcnQgeSk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIG1heCh1c2hvcnQxNiB4LCB1c2hvcnQgeSk7CitpbnQgX19vdmxkIF9fY25mbiBtYXgoaW50IHgsIGludCB5KTsKK3VpbnQgX19vdmxkIF9fY25mbiBtYXgodWludCB4LCB1aW50IHkpOworaW50MiBfX292bGQgX19jbmZuIG1heChpbnQyIHgsIGludCB5KTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gbWF4KHVpbnQyIHgsIHVpbnQgeSk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gbWF4KGludDMgeCwgaW50IHkpOwordWludDMgX19vdmxkIF9fY25mbiBtYXgodWludDMgeCwgdWludCB5KTsKK2ludDQgX19vdmxkIF9fY25mbiBtYXgoaW50NCB4LCBpbnQgeSk7Cit1aW50NCBfX292bGQgX19jbmZuIG1heCh1aW50NCB4LCB1aW50IHkpOworaW50OCBfX292bGQgX19jbmZuIG1heChpbnQ4IHgsIGludCB5KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gbWF4KHVpbnQ4IHgsIHVpbnQgeSk7CitpbnQxNiBfX292bGQgX19jbmZuIG1heChpbnQxNiB4LCBpbnQgeSk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBtYXgodWludDE2IHgsIHVpbnQgeSk7Citsb25nIF9fb3ZsZCBfX2NuZm4gbWF4KGxvbmcgeCwgbG9uZyB5KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gbWF4KHVsb25nIHgsIHVsb25nIHkpOworbG9uZzIgX19vdmxkIF9fY25mbiBtYXgobG9uZzIgeCwgbG9uZyB5KTsKK3Vsb25nMiBfX292bGQgX19jbmZuIG1heCh1bG9uZzIgeCwgdWxvbmcgeSk7Citsb25nMyBfX292bGQgX19jbmZuIG1heChsb25nMyB4LCBsb25nIHkpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gbWF4KHVsb25nMyB4LCB1bG9uZyB5KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gbWF4KGxvbmc0IHgsIGxvbmcgeSk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBtYXgodWxvbmc0IHgsIHVsb25nIHkpOworbG9uZzggX19vdmxkIF9fY25mbiBtYXgobG9uZzggeCwgbG9uZyB5KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIG1heCh1bG9uZzggeCwgdWxvbmcgeSk7Citsb25nMTYgX19vdmxkIF9fY25mbiBtYXgobG9uZzE2IHgsIGxvbmcgeSk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gbWF4KHVsb25nMTYgeCwgdWxvbmcgeSk7CisKKy8qKgorICogUmV0dXJucyB5IGlmIHkgPCB4LCBvdGhlcndpc2UgaXQgcmV0dXJucyB4LgorICovCitjaGFyIF9fb3ZsZCBfX2NuZm4gbWluKGNoYXIgeCwgY2hhciB5KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gbWluKHVjaGFyIHgsIHVjaGFyIHkpOworY2hhcjIgX19vdmxkIF9fY25mbiBtaW4oY2hhcjIgeCwgY2hhcjIgeSk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBtaW4odWNoYXIyIHgsIHVjaGFyMiB5KTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gbWluKGNoYXIzIHgsIGNoYXIzIHkpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gbWluKHVjaGFyMyB4LCB1Y2hhcjMgeSk7CitjaGFyNCBfX292bGQgX19jbmZuIG1pbihjaGFyNCB4LCBjaGFyNCB5KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIG1pbih1Y2hhcjQgeCwgdWNoYXI0IHkpOworY2hhcjggX19vdmxkIF9fY25mbiBtaW4oY2hhcjggeCwgY2hhcjggeSk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBtaW4odWNoYXI4IHgsIHVjaGFyOCB5KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIG1pbihjaGFyMTYgeCwgY2hhcjE2IHkpOwordWNoYXIxNiBfX292bGQgX19jbmZuIG1pbih1Y2hhcjE2IHgsIHVjaGFyMTYgeSk7CitzaG9ydCBfX292bGQgX19jbmZuIG1pbihzaG9ydCB4LCBzaG9ydCB5KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIG1pbih1c2hvcnQgeCwgdXNob3J0IHkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gbWluKHNob3J0MiB4LCBzaG9ydDIgeSk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gbWluKHVzaG9ydDIgeCwgdXNob3J0MiB5KTsKK3Nob3J0MyBfX292bGQgX19jbmZuIG1pbihzaG9ydDMgeCwgc2hvcnQzIHkpOwordXNob3J0MyBfX292bGQgX19jbmZuIG1pbih1c2hvcnQzIHgsIHVzaG9ydDMgeSk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBtaW4oc2hvcnQ0IHgsIHNob3J0NCB5KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBtaW4odXNob3J0NCB4LCB1c2hvcnQ0IHkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gbWluKHNob3J0OCB4LCBzaG9ydDggeSk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gbWluKHVzaG9ydDggeCwgdXNob3J0OCB5KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBtaW4oc2hvcnQxNiB4LCBzaG9ydDE2IHkpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBtaW4odXNob3J0MTYgeCwgdXNob3J0MTYgeSk7CitpbnQgX19vdmxkIF9fY25mbiBtaW4oaW50IHgsIGludCB5KTsKK3VpbnQgX19vdmxkIF9fY25mbiBtaW4odWludCB4LCB1aW50IHkpOworaW50MiBfX292bGQgX19jbmZuIG1pbihpbnQyIHgsIGludDIgeSk7Cit1aW50MiBfX292bGQgX19jbmZuIG1pbih1aW50MiB4LCB1aW50MiB5KTsKK2ludDMgX19vdmxkIF9fY25mbiBtaW4oaW50MyB4LCBpbnQzIHkpOwordWludDMgX19vdmxkIF9fY25mbiBtaW4odWludDMgeCwgdWludDMgeSk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gbWluKGludDQgeCwgaW50NCB5KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gbWluKHVpbnQ0IHgsIHVpbnQ0IHkpOworaW50OCBfX292bGQgX19jbmZuIG1pbihpbnQ4IHgsIGludDggeSk7Cit1aW50OCBfX292bGQgX19jbmZuIG1pbih1aW50OCB4LCB1aW50OCB5KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gbWluKGludDE2IHgsIGludDE2IHkpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gbWluKHVpbnQxNiB4LCB1aW50MTYgeSk7Citsb25nIF9fb3ZsZCBfX2NuZm4gbWluKGxvbmcgeCwgbG9uZyB5KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gbWluKHVsb25nIHgsIHVsb25nIHkpOworbG9uZzIgX19vdmxkIF9fY25mbiBtaW4obG9uZzIgeCwgbG9uZzIgeSk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBtaW4odWxvbmcyIHgsIHVsb25nMiB5KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gbWluKGxvbmczIHgsIGxvbmczIHkpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gbWluKHVsb25nMyB4LCB1bG9uZzMgeSk7Citsb25nNCBfX292bGQgX19jbmZuIG1pbihsb25nNCB4LCBsb25nNCB5KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIG1pbih1bG9uZzQgeCwgdWxvbmc0IHkpOworbG9uZzggX19vdmxkIF9fY25mbiBtaW4obG9uZzggeCwgbG9uZzggeSk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBtaW4odWxvbmc4IHgsIHVsb25nOCB5KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIG1pbihsb25nMTYgeCwgbG9uZzE2IHkpOwordWxvbmcxNiBfX292bGQgX19jbmZuIG1pbih1bG9uZzE2IHgsIHVsb25nMTYgeSk7CitjaGFyIF9fb3ZsZCBfX2NuZm4gbWluKGNoYXIgeCwgY2hhciB5KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gbWluKHVjaGFyIHgsIHVjaGFyIHkpOworY2hhcjIgX19vdmxkIF9fY25mbiBtaW4oY2hhcjIgeCwgY2hhciB5KTsKK3VjaGFyMiBfX292bGQgX19jbmZuIG1pbih1Y2hhcjIgeCwgdWNoYXIgeSk7CitjaGFyMyBfX292bGQgX19jbmZuIG1pbihjaGFyMyB4LCBjaGFyIHkpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gbWluKHVjaGFyMyB4LCB1Y2hhciB5KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gbWluKGNoYXI0IHgsIGNoYXIgeSk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBtaW4odWNoYXI0IHgsIHVjaGFyIHkpOworY2hhcjggX19vdmxkIF9fY25mbiBtaW4oY2hhcjggeCwgY2hhciB5KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIG1pbih1Y2hhcjggeCwgdWNoYXIgeSk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBtaW4oY2hhcjE2IHgsIGNoYXIgeSk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gbWluKHVjaGFyMTYgeCwgdWNoYXIgeSk7CitzaG9ydCBfX292bGQgX19jbmZuIG1pbihzaG9ydCB4LCBzaG9ydCB5KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIG1pbih1c2hvcnQgeCwgdXNob3J0IHkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gbWluKHNob3J0MiB4LCBzaG9ydCB5KTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBtaW4odXNob3J0MiB4LCB1c2hvcnQgeSk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBtaW4oc2hvcnQzIHgsIHNob3J0IHkpOwordXNob3J0MyBfX292bGQgX19jbmZuIG1pbih1c2hvcnQzIHgsIHVzaG9ydCB5KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIG1pbihzaG9ydDQgeCwgc2hvcnQgeSk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gbWluKHVzaG9ydDQgeCwgdXNob3J0IHkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gbWluKHNob3J0OCB4LCBzaG9ydCB5KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBtaW4odXNob3J0OCB4LCB1c2hvcnQgeSk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gbWluKHNob3J0MTYgeCwgc2hvcnQgeSk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIG1pbih1c2hvcnQxNiB4LCB1c2hvcnQgeSk7CitpbnQgX19vdmxkIF9fY25mbiBtaW4oaW50IHgsIGludCB5KTsKK3VpbnQgX19vdmxkIF9fY25mbiBtaW4odWludCB4LCB1aW50IHkpOworaW50MiBfX292bGQgX19jbmZuIG1pbihpbnQyIHgsIGludCB5KTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gbWluKHVpbnQyIHgsIHVpbnQgeSk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gbWluKGludDMgeCwgaW50IHkpOwordWludDMgX19vdmxkIF9fY25mbiBtaW4odWludDMgeCwgdWludCB5KTsKK2ludDQgX19vdmxkIF9fY25mbiBtaW4oaW50NCB4LCBpbnQgeSk7Cit1aW50NCBfX292bGQgX19jbmZuIG1pbih1aW50NCB4LCB1aW50IHkpOworaW50OCBfX292bGQgX19jbmZuIG1pbihpbnQ4IHgsIGludCB5KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gbWluKHVpbnQ4IHgsIHVpbnQgeSk7CitpbnQxNiBfX292bGQgX19jbmZuIG1pbihpbnQxNiB4LCBpbnQgeSk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBtaW4odWludDE2IHgsIHVpbnQgeSk7Citsb25nIF9fb3ZsZCBfX2NuZm4gbWluKGxvbmcgeCwgbG9uZyB5KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gbWluKHVsb25nIHgsIHVsb25nIHkpOworbG9uZzIgX19vdmxkIF9fY25mbiBtaW4obG9uZzIgeCwgbG9uZyB5KTsKK3Vsb25nMiBfX292bGQgX19jbmZuIG1pbih1bG9uZzIgeCwgdWxvbmcgeSk7Citsb25nMyBfX292bGQgX19jbmZuIG1pbihsb25nMyB4LCBsb25nIHkpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gbWluKHVsb25nMyB4LCB1bG9uZyB5KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gbWluKGxvbmc0IHgsIGxvbmcgeSk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBtaW4odWxvbmc0IHgsIHVsb25nIHkpOworbG9uZzggX19vdmxkIF9fY25mbiBtaW4obG9uZzggeCwgbG9uZyB5KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIG1pbih1bG9uZzggeCwgdWxvbmcgeSk7Citsb25nMTYgX19vdmxkIF9fY25mbiBtaW4obG9uZzE2IHgsIGxvbmcgeSk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gbWluKHVsb25nMTYgeCwgdWxvbmcgeSk7CisKKy8qKgorICogQ29tcHV0ZXMgeCAqIHkgYW5kIHJldHVybnMgdGhlIGhpZ2ggaGFsZiBvZiB0aGUKKyAqIHByb2R1Y3Qgb2YgeCBhbmQgeS4KKyAqLworY2hhciBfX292bGQgX19jbmZuIG11bF9oaShjaGFyIHgsIGNoYXIgeSk7Cit1Y2hhciBfX292bGQgX19jbmZuIG11bF9oaSh1Y2hhciB4LCB1Y2hhciB5KTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gbXVsX2hpKGNoYXIyIHgsIGNoYXIyIHkpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHVjaGFyMiB4LCB1Y2hhcjIgeSk7CitjaGFyMyBfX292bGQgX19jbmZuIG11bF9oaShjaGFyMyB4LCBjaGFyMyB5KTsKK3VjaGFyMyBfX292bGQgX19jbmZuIG11bF9oaSh1Y2hhcjMgeCwgdWNoYXIzIHkpOworY2hhcjQgX19vdmxkIF9fY25mbiBtdWxfaGkoY2hhcjQgeCwgY2hhcjQgeSk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBtdWxfaGkodWNoYXI0IHgsIHVjaGFyNCB5KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gbXVsX2hpKGNoYXI4IHgsIGNoYXI4IHkpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHVjaGFyOCB4LCB1Y2hhcjggeSk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBtdWxfaGkoY2hhcjE2IHgsIGNoYXIxNiB5KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBtdWxfaGkodWNoYXIxNiB4LCB1Y2hhcjE2IHkpOworc2hvcnQgX19vdmxkIF9fY25mbiBtdWxfaGkoc2hvcnQgeCwgc2hvcnQgeSk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBtdWxfaGkodXNob3J0IHgsIHVzaG9ydCB5KTsKK3Nob3J0MiBfX292bGQgX19jbmZuIG11bF9oaShzaG9ydDIgeCwgc2hvcnQyIHkpOwordXNob3J0MiBfX292bGQgX19jbmZuIG11bF9oaSh1c2hvcnQyIHgsIHVzaG9ydDIgeSk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBtdWxfaGkoc2hvcnQzIHgsIHNob3J0MyB5KTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBtdWxfaGkodXNob3J0MyB4LCB1c2hvcnQzIHkpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHNob3J0NCB4LCBzaG9ydDQgeSk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHVzaG9ydDQgeCwgdXNob3J0NCB5KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIG11bF9oaShzaG9ydDggeCwgc2hvcnQ4IHkpOwordXNob3J0OCBfX292bGQgX19jbmZuIG11bF9oaSh1c2hvcnQ4IHgsIHVzaG9ydDggeSk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHNob3J0MTYgeCwgc2hvcnQxNiB5KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHVzaG9ydDE2IHgsIHVzaG9ydDE2IHkpOworaW50IF9fb3ZsZCBfX2NuZm4gbXVsX2hpKGludCB4LCBpbnQgeSk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHVpbnQgeCwgdWludCB5KTsKK2ludDIgX19vdmxkIF9fY25mbiBtdWxfaGkoaW50MiB4LCBpbnQyIHkpOwordWludDIgX19vdmxkIF9fY25mbiBtdWxfaGkodWludDIgeCwgdWludDIgeSk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gbXVsX2hpKGludDMgeCwgaW50MyB5KTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHVpbnQzIHgsIHVpbnQzIHkpOworaW50NCBfX292bGQgX19jbmZuIG11bF9oaShpbnQ0IHgsIGludDQgeSk7Cit1aW50NCBfX292bGQgX19jbmZuIG11bF9oaSh1aW50NCB4LCB1aW50NCB5KTsKK2ludDggX19vdmxkIF9fY25mbiBtdWxfaGkoaW50OCB4LCBpbnQ4IHkpOwordWludDggX19vdmxkIF9fY25mbiBtdWxfaGkodWludDggeCwgdWludDggeSk7CitpbnQxNiBfX292bGQgX19jbmZuIG11bF9oaShpbnQxNiB4LCBpbnQxNiB5KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIG11bF9oaSh1aW50MTYgeCwgdWludDE2IHkpOworbG9uZyBfX292bGQgX19jbmZuIG11bF9oaShsb25nIHgsIGxvbmcgeSk7Cit1bG9uZyBfX292bGQgX19jbmZuIG11bF9oaSh1bG9uZyB4LCB1bG9uZyB5KTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gbXVsX2hpKGxvbmcyIHgsIGxvbmcyIHkpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHVsb25nMiB4LCB1bG9uZzIgeSk7Citsb25nMyBfX292bGQgX19jbmZuIG11bF9oaShsb25nMyB4LCBsb25nMyB5KTsKK3Vsb25nMyBfX292bGQgX19jbmZuIG11bF9oaSh1bG9uZzMgeCwgdWxvbmczIHkpOworbG9uZzQgX19vdmxkIF9fY25mbiBtdWxfaGkobG9uZzQgeCwgbG9uZzQgeSk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBtdWxfaGkodWxvbmc0IHgsIHVsb25nNCB5KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gbXVsX2hpKGxvbmc4IHgsIGxvbmc4IHkpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gbXVsX2hpKHVsb25nOCB4LCB1bG9uZzggeSk7Citsb25nMTYgX19vdmxkIF9fY25mbiBtdWxfaGkobG9uZzE2IHgsIGxvbmcxNiB5KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBtdWxfaGkodWxvbmcxNiB4LCB1bG9uZzE2IHkpOworCisvKioKKyAqIEZvciBlYWNoIGVsZW1lbnQgaW4gdiwgdGhlIGJpdHMgYXJlIHNoaWZ0ZWQgbGVmdCBieQorICogdGhlIG51bWJlciBvZiBiaXRzIGdpdmVuIGJ5IHRoZSBjb3JyZXNwb25kaW5nCisgKiBlbGVtZW50IGluIGkgKHN1YmplY3QgdG8gdXN1YWwgc2hpZnQgbW9kdWxvIHJ1bGVzCisgKiBkZXNjcmliZWQgaW4gc2VjdGlvbiA2LjMpLiBCaXRzIHNoaWZ0ZWQgb2ZmIHRoZSBsZWZ0CisgKiBzaWRlIG9mIHRoZSBlbGVtZW50IGFyZSBzaGlmdGVkIGJhY2sgaW4gZnJvbSB0aGUKKyAqIHJpZ2h0LgorICovCitjaGFyIF9fb3ZsZCBfX2NuZm4gcm90YXRlKGNoYXIgdiwgY2hhciBpKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gcm90YXRlKHVjaGFyIHYsIHVjaGFyIGkpOworY2hhcjIgX19vdmxkIF9fY25mbiByb3RhdGUoY2hhcjIgdiwgY2hhcjIgaSk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiByb3RhdGUodWNoYXIyIHYsIHVjaGFyMiBpKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gcm90YXRlKGNoYXIzIHYsIGNoYXIzIGkpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gcm90YXRlKHVjaGFyMyB2LCB1Y2hhcjMgaSk7CitjaGFyNCBfX292bGQgX19jbmZuIHJvdGF0ZShjaGFyNCB2LCBjaGFyNCBpKTsKK3VjaGFyNCBfX292bGQgX19jbmZuIHJvdGF0ZSh1Y2hhcjQgdiwgdWNoYXI0IGkpOworY2hhcjggX19vdmxkIF9fY25mbiByb3RhdGUoY2hhcjggdiwgY2hhcjggaSk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiByb3RhdGUodWNoYXI4IHYsIHVjaGFyOCBpKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIHJvdGF0ZShjaGFyMTYgdiwgY2hhcjE2IGkpOwordWNoYXIxNiBfX292bGQgX19jbmZuIHJvdGF0ZSh1Y2hhcjE2IHYsIHVjaGFyMTYgaSk7CitzaG9ydCBfX292bGQgX19jbmZuIHJvdGF0ZShzaG9ydCB2LCBzaG9ydCBpKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIHJvdGF0ZSh1c2hvcnQgdiwgdXNob3J0IGkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gcm90YXRlKHNob3J0MiB2LCBzaG9ydDIgaSk7Cit1c2hvcnQyIF9fb3ZsZCBfX2NuZm4gcm90YXRlKHVzaG9ydDIgdiwgdXNob3J0MiBpKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIHJvdGF0ZShzaG9ydDMgdiwgc2hvcnQzIGkpOwordXNob3J0MyBfX292bGQgX19jbmZuIHJvdGF0ZSh1c2hvcnQzIHYsIHVzaG9ydDMgaSk7CitzaG9ydDQgX19vdmxkIF9fY25mbiByb3RhdGUoc2hvcnQ0IHYsIHNob3J0NCBpKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiByb3RhdGUodXNob3J0NCB2LCB1c2hvcnQ0IGkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gcm90YXRlKHNob3J0OCB2LCBzaG9ydDggaSk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gcm90YXRlKHVzaG9ydDggdiwgdXNob3J0OCBpKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiByb3RhdGUoc2hvcnQxNiB2LCBzaG9ydDE2IGkpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiByb3RhdGUodXNob3J0MTYgdiwgdXNob3J0MTYgaSk7CitpbnQgX19vdmxkIF9fY25mbiByb3RhdGUoaW50IHYsIGludCBpKTsKK3VpbnQgX19vdmxkIF9fY25mbiByb3RhdGUodWludCB2LCB1aW50IGkpOworaW50MiBfX292bGQgX19jbmZuIHJvdGF0ZShpbnQyIHYsIGludDIgaSk7Cit1aW50MiBfX292bGQgX19jbmZuIHJvdGF0ZSh1aW50MiB2LCB1aW50MiBpKTsKK2ludDMgX19vdmxkIF9fY25mbiByb3RhdGUoaW50MyB2LCBpbnQzIGkpOwordWludDMgX19vdmxkIF9fY25mbiByb3RhdGUodWludDMgdiwgdWludDMgaSk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gcm90YXRlKGludDQgdiwgaW50NCBpKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gcm90YXRlKHVpbnQ0IHYsIHVpbnQ0IGkpOworaW50OCBfX292bGQgX19jbmZuIHJvdGF0ZShpbnQ4IHYsIGludDggaSk7Cit1aW50OCBfX292bGQgX19jbmZuIHJvdGF0ZSh1aW50OCB2LCB1aW50OCBpKTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gcm90YXRlKGludDE2IHYsIGludDE2IGkpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gcm90YXRlKHVpbnQxNiB2LCB1aW50MTYgaSk7Citsb25nIF9fb3ZsZCBfX2NuZm4gcm90YXRlKGxvbmcgdiwgbG9uZyBpKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gcm90YXRlKHVsb25nIHYsIHVsb25nIGkpOworbG9uZzIgX19vdmxkIF9fY25mbiByb3RhdGUobG9uZzIgdiwgbG9uZzIgaSk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiByb3RhdGUodWxvbmcyIHYsIHVsb25nMiBpKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gcm90YXRlKGxvbmczIHYsIGxvbmczIGkpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gcm90YXRlKHVsb25nMyB2LCB1bG9uZzMgaSk7Citsb25nNCBfX292bGQgX19jbmZuIHJvdGF0ZShsb25nNCB2LCBsb25nNCBpKTsKK3Vsb25nNCBfX292bGQgX19jbmZuIHJvdGF0ZSh1bG9uZzQgdiwgdWxvbmc0IGkpOworbG9uZzggX19vdmxkIF9fY25mbiByb3RhdGUobG9uZzggdiwgbG9uZzggaSk7Cit1bG9uZzggX19vdmxkIF9fY25mbiByb3RhdGUodWxvbmc4IHYsIHVsb25nOCBpKTsKK2xvbmcxNiBfX292bGQgX19jbmZuIHJvdGF0ZShsb25nMTYgdiwgbG9uZzE2IGkpOwordWxvbmcxNiBfX292bGQgX19jbmZuIHJvdGF0ZSh1bG9uZzE2IHYsIHVsb25nMTYgaSk7CisKKy8qKgorICogUmV0dXJucyB4IC0geSBhbmQgc2F0dXJhdGVzIHRoZSByZXN1bHQuCisgKi8KK2NoYXIgX19vdmxkIF9fY25mbiBzdWJfc2F0KGNoYXIgeCwgY2hhciB5KTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1Y2hhciB4LCB1Y2hhciB5KTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChjaGFyMiB4LCBjaGFyMiB5KTsKK3VjaGFyMiBfX292bGQgX19jbmZuIHN1Yl9zYXQodWNoYXIyIHgsIHVjaGFyMiB5KTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChjaGFyMyB4LCBjaGFyMyB5KTsKK3VjaGFyMyBfX292bGQgX19jbmZuIHN1Yl9zYXQodWNoYXIzIHgsIHVjaGFyMyB5KTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChjaGFyNCB4LCBjaGFyNCB5KTsKK3VjaGFyNCBfX292bGQgX19jbmZuIHN1Yl9zYXQodWNoYXI0IHgsIHVjaGFyNCB5KTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChjaGFyOCB4LCBjaGFyOCB5KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIHN1Yl9zYXQodWNoYXI4IHgsIHVjaGFyOCB5KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIHN1Yl9zYXQoY2hhcjE2IHgsIGNoYXIxNiB5KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBzdWJfc2F0KHVjaGFyMTYgeCwgdWNoYXIxNiB5KTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChzaG9ydCB4LCBzaG9ydCB5KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIHN1Yl9zYXQodXNob3J0IHgsIHVzaG9ydCB5KTsKK3Nob3J0MiBfX292bGQgX19jbmZuIHN1Yl9zYXQoc2hvcnQyIHgsIHNob3J0MiB5KTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzdWJfc2F0KHVzaG9ydDIgeCwgdXNob3J0MiB5KTsKK3Nob3J0MyBfX292bGQgX19jbmZuIHN1Yl9zYXQoc2hvcnQzIHgsIHNob3J0MyB5KTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBzdWJfc2F0KHVzaG9ydDMgeCwgdXNob3J0MyB5KTsKK3Nob3J0NCBfX292bGQgX19jbmZuIHN1Yl9zYXQoc2hvcnQ0IHgsIHNob3J0NCB5KTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBzdWJfc2F0KHVzaG9ydDQgeCwgdXNob3J0NCB5KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIHN1Yl9zYXQoc2hvcnQ4IHgsIHNob3J0OCB5KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBzdWJfc2F0KHVzaG9ydDggeCwgdXNob3J0OCB5KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBzdWJfc2F0KHNob3J0MTYgeCwgc2hvcnQxNiB5KTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1c2hvcnQxNiB4LCB1c2hvcnQxNiB5KTsKK2ludCBfX292bGQgX19jbmZuIHN1Yl9zYXQoaW50IHgsIGludCB5KTsKK3VpbnQgX19vdmxkIF9fY25mbiBzdWJfc2F0KHVpbnQgeCwgdWludCB5KTsKK2ludDIgX19vdmxkIF9fY25mbiBzdWJfc2F0KGludDIgeCwgaW50MiB5KTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1aW50MiB4LCB1aW50MiB5KTsKK2ludDMgX19vdmxkIF9fY25mbiBzdWJfc2F0KGludDMgeCwgaW50MyB5KTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1aW50MyB4LCB1aW50MyB5KTsKK2ludDQgX19vdmxkIF9fY25mbiBzdWJfc2F0KGludDQgeCwgaW50NCB5KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1aW50NCB4LCB1aW50NCB5KTsKK2ludDggX19vdmxkIF9fY25mbiBzdWJfc2F0KGludDggeCwgaW50OCB5KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1aW50OCB4LCB1aW50OCB5KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChpbnQxNiB4LCBpbnQxNiB5KTsKK3VpbnQxNiBfX292bGQgX19jbmZuIHN1Yl9zYXQodWludDE2IHgsIHVpbnQxNiB5KTsKK2xvbmcgX19vdmxkIF9fY25mbiBzdWJfc2F0KGxvbmcgeCwgbG9uZyB5KTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gc3ViX3NhdCh1bG9uZyB4LCB1bG9uZyB5KTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChsb25nMiB4LCBsb25nMiB5KTsKK3Vsb25nMiBfX292bGQgX19jbmZuIHN1Yl9zYXQodWxvbmcyIHgsIHVsb25nMiB5KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChsb25nMyB4LCBsb25nMyB5KTsKK3Vsb25nMyBfX292bGQgX19jbmZuIHN1Yl9zYXQodWxvbmczIHgsIHVsb25nMyB5KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChsb25nNCB4LCBsb25nNCB5KTsKK3Vsb25nNCBfX292bGQgX19jbmZuIHN1Yl9zYXQodWxvbmc0IHgsIHVsb25nNCB5KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gc3ViX3NhdChsb25nOCB4LCBsb25nOCB5KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIHN1Yl9zYXQodWxvbmc4IHgsIHVsb25nOCB5KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIHN1Yl9zYXQobG9uZzE2IHgsIGxvbmcxNiB5KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBzdWJfc2F0KHVsb25nMTYgeCwgdWxvbmcxNiB5KTsKKworLyoqCisgKiByZXN1bHRbaV0gPSAoKHNob3J0KWhpW2ldIDw8IDgpIHwgbG9baV0KKyAqIHJlc3VsdFtpXSA9ICgodXNob3J0KWhpW2ldIDw8IDgpIHwgbG9baV0KKyAqLworc2hvcnQgX19vdmxkIF9fY25mbiB1cHNhbXBsZShjaGFyIGhpLCB1Y2hhciBsbyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiB1cHNhbXBsZSh1Y2hhciBoaSwgdWNoYXIgbG8pOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUoY2hhcjIgaGksIHVjaGFyMiBsbyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiB1cHNhbXBsZShjaGFyMyBoaSwgdWNoYXIzIGxvKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIHVwc2FtcGxlKGNoYXI0IGhpLCB1Y2hhcjQgbG8pOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUoY2hhcjggaGksIHVjaGFyOCBsbyk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUoY2hhcjE2IGhpLCB1Y2hhcjE2IGxvKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiB1cHNhbXBsZSh1Y2hhcjIgaGksIHVjaGFyMiBsbyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUodWNoYXIzIGhpLCB1Y2hhcjMgbG8pOwordXNob3J0NCBfX292bGQgX19jbmZuIHVwc2FtcGxlKHVjaGFyNCBoaSwgdWNoYXI0IGxvKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiB1cHNhbXBsZSh1Y2hhcjggaGksIHVjaGFyOCBsbyk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIHVwc2FtcGxlKHVjaGFyMTYgaGksIHVjaGFyMTYgbG8pOworCisvKioKKyAqIHJlc3VsdFtpXSA9ICgoaW50KWhpW2ldIDw8IDE2KSB8IGxvW2ldCisgKiByZXN1bHRbaV0gPSAoKHVpbnQpaGlbaV0gPDwgMTYpIHwgbG9baV0KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUoc2hvcnQgaGksIHVzaG9ydCBsbyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUodXNob3J0IGhpLCB1c2hvcnQgbG8pOworaW50MiBfX292bGQgX19jbmZuIHVwc2FtcGxlKHNob3J0MiBoaSwgdXNob3J0MiBsbyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUoc2hvcnQzIGhpLCB1c2hvcnQzIGxvKTsKK2ludDQgX19vdmxkIF9fY25mbiB1cHNhbXBsZShzaG9ydDQgaGksIHVzaG9ydDQgbG8pOworaW50OCBfX292bGQgX19jbmZuIHVwc2FtcGxlKHNob3J0OCBoaSwgdXNob3J0OCBsbyk7CitpbnQxNiBfX292bGQgX19jbmZuIHVwc2FtcGxlKHNob3J0MTYgaGksIHVzaG9ydDE2IGxvKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUodXNob3J0MiBoaSwgdXNob3J0MiBsbyk7Cit1aW50MyBfX292bGQgX19jbmZuIHVwc2FtcGxlKHVzaG9ydDMgaGksIHVzaG9ydDMgbG8pOwordWludDQgX19vdmxkIF9fY25mbiB1cHNhbXBsZSh1c2hvcnQ0IGhpLCB1c2hvcnQ0IGxvKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUodXNob3J0OCBoaSwgdXNob3J0OCBsbyk7Cit1aW50MTYgX19vdmxkIF9fY25mbiB1cHNhbXBsZSh1c2hvcnQxNiBoaSwgdXNob3J0MTYgbG8pOworLyoqCisgKiByZXN1bHRbaV0gPSAoKGxvbmcpaGlbaV0gPDwgMzIpIHwgbG9baV0KKyAqIHJlc3VsdFtpXSA9ICgodWxvbmcpaGlbaV0gPDwgMzIpIHwgbG9baV0KKyAqLworbG9uZyBfX292bGQgX19jbmZuIHVwc2FtcGxlKGludCBoaSwgdWludCBsbyk7Cit1bG9uZyBfX292bGQgX19jbmZuIHVwc2FtcGxlKHVpbnQgaGksIHVpbnQgbG8pOworbG9uZzIgX19vdmxkIF9fY25mbiB1cHNhbXBsZShpbnQyIGhpLCB1aW50MiBsbyk7Citsb25nMyBfX292bGQgX19jbmZuIHVwc2FtcGxlKGludDMgaGksIHVpbnQzIGxvKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUoaW50NCBoaSwgdWludDQgbG8pOworbG9uZzggX19vdmxkIF9fY25mbiB1cHNhbXBsZShpbnQ4IGhpLCB1aW50OCBsbyk7Citsb25nMTYgX19vdmxkIF9fY25mbiB1cHNhbXBsZShpbnQxNiBoaSwgdWludDE2IGxvKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIHVwc2FtcGxlKHVpbnQyIGhpLCB1aW50MiBsbyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiB1cHNhbXBsZSh1aW50MyBoaSwgdWludDMgbG8pOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUodWludDQgaGksIHVpbnQ0IGxvKTsKK3Vsb25nOCBfX292bGQgX19jbmZuIHVwc2FtcGxlKHVpbnQ4IGhpLCB1aW50OCBsbyk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gdXBzYW1wbGUodWludDE2IGhpLCB1aW50MTYgbG8pOworCisvKgorICogcG9wY291bnQoeCk6IHJldHVybnMgdGhlIG51bWJlciBvZiBzZXQgYml0IGluIHgKKyAqLworY2hhciBfX292bGQgX19jbmZuIHBvcGNvdW50KGNoYXIgeCk7Cit1Y2hhciBfX292bGQgX19jbmZuIHBvcGNvdW50KHVjaGFyIHgpOworY2hhcjIgX19vdmxkIF9fY25mbiBwb3Bjb3VudChjaGFyMiB4KTsKK3VjaGFyMiBfX292bGQgX19jbmZuIHBvcGNvdW50KHVjaGFyMiB4KTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gcG9wY291bnQoY2hhcjMgeCk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBwb3Bjb3VudCh1Y2hhcjMgeCk7CitjaGFyNCBfX292bGQgX19jbmZuIHBvcGNvdW50KGNoYXI0IHgpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodWNoYXI0IHgpOworY2hhcjggX19vdmxkIF9fY25mbiBwb3Bjb3VudChjaGFyOCB4KTsKK3VjaGFyOCBfX292bGQgX19jbmZuIHBvcGNvdW50KHVjaGFyOCB4KTsKK2NoYXIxNiBfX292bGQgX19jbmZuIHBvcGNvdW50KGNoYXIxNiB4KTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBwb3Bjb3VudCh1Y2hhcjE2IHgpOworc2hvcnQgX19vdmxkIF9fY25mbiBwb3Bjb3VudChzaG9ydCB4KTsKK3VzaG9ydCBfX292bGQgX19jbmZuIHBvcGNvdW50KHVzaG9ydCB4KTsKK3Nob3J0MiBfX292bGQgX19jbmZuIHBvcGNvdW50KHNob3J0MiB4KTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBwb3Bjb3VudCh1c2hvcnQyIHgpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gcG9wY291bnQoc2hvcnQzIHgpOwordXNob3J0MyBfX292bGQgX19jbmZuIHBvcGNvdW50KHVzaG9ydDMgeCk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBwb3Bjb3VudChzaG9ydDQgeCk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodXNob3J0NCB4KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIHBvcGNvdW50KHNob3J0OCB4KTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBwb3Bjb3VudCh1c2hvcnQ4IHgpOworc2hvcnQxNiBfX292bGQgX19jbmZuIHBvcGNvdW50KHNob3J0MTYgeCk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIHBvcGNvdW50KHVzaG9ydDE2IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQoaW50IHgpOwordWludCBfX292bGQgX19jbmZuIHBvcGNvdW50KHVpbnQgeCk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gcG9wY291bnQoaW50MiB4KTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodWludDIgeCk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gcG9wY291bnQoaW50MyB4KTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodWludDMgeCk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQoaW50NCB4KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodWludDQgeCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQoaW50OCB4KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodWludDggeCk7CitpbnQxNiBfX292bGQgX19jbmZuIHBvcGNvdW50KGludDE2IHgpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodWludDE2IHgpOworbG9uZyBfX292bGQgX19jbmZuIHBvcGNvdW50KGxvbmcgeCk7Cit1bG9uZyBfX292bGQgX19jbmZuIHBvcGNvdW50KHVsb25nIHgpOworbG9uZzIgX19vdmxkIF9fY25mbiBwb3Bjb3VudChsb25nMiB4KTsKK3Vsb25nMiBfX292bGQgX19jbmZuIHBvcGNvdW50KHVsb25nMiB4KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gcG9wY291bnQobG9uZzMgeCk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBwb3Bjb3VudCh1bG9uZzMgeCk7Citsb25nNCBfX292bGQgX19jbmZuIHBvcGNvdW50KGxvbmc0IHgpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gcG9wY291bnQodWxvbmc0IHgpOworbG9uZzggX19vdmxkIF9fY25mbiBwb3Bjb3VudChsb25nOCB4KTsKK3Vsb25nOCBfX292bGQgX19jbmZuIHBvcGNvdW50KHVsb25nOCB4KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIHBvcGNvdW50KGxvbmcxNiB4KTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBwb3Bjb3VudCh1bG9uZzE2IHgpOworCisvKioKKyAqIE11bHRpcGx5IHR3byAyNC1iaXQgaW50ZWdlciB2YWx1ZXMgeCBhbmQgeSBhbmQgYWRkCisgKiB0aGUgMzItYml0IGludGVnZXIgcmVzdWx0IHRvIHRoZSAzMi1iaXQgaW50ZWdlciB6LgorICogUmVmZXIgdG8gZGVmaW5pdGlvbiBvZiBtdWwyNCB0byBzZWUgaG93IHRoZSAyNC1iaXQKKyAqIGludGVnZXIgbXVsdGlwbGljYXRpb24gaXMgcGVyZm9ybWVkLgorICovCitpbnQgX19vdmxkIF9fY25mbiBtYWQyNChpbnQgeCwgaW50IHksIGludCB6KTsKK3VpbnQgX19vdmxkIF9fY25mbiBtYWQyNCh1aW50IHgsIHVpbnQgeSwgdWludCB6KTsKK2ludDIgX19vdmxkIF9fY25mbiBtYWQyNChpbnQyIHgsIGludDIgeSwgaW50MiB6KTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gbWFkMjQodWludDIgeCwgdWludDIgeSwgdWludDIgeik7CitpbnQzIF9fb3ZsZCBfX2NuZm4gbWFkMjQoaW50MyB4LCBpbnQzIHksIGludDMgeik7Cit1aW50MyBfX292bGQgX19jbmZuIG1hZDI0KHVpbnQzIHgsIHVpbnQzIHksIHVpbnQzIHopOworaW50NCBfX292bGQgX19jbmZuIG1hZDI0KGludDQgeCwgaW50NCB5LCBpbnQ0IHopOwordWludDQgX19vdmxkIF9fY25mbiBtYWQyNCh1aW50NCB4LCB1aW50NCB5LCB1aW50NCB6KTsKK2ludDggX19vdmxkIF9fY25mbiBtYWQyNChpbnQ4IHgsIGludDggeSwgaW50OCB6KTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gbWFkMjQodWludDggeCwgdWludDggeSwgdWludDggeik7CitpbnQxNiBfX292bGQgX19jbmZuIG1hZDI0KGludDE2IHgsIGludDE2IHksIGludDE2IHopOwordWludDE2IF9fb3ZsZCBfX2NuZm4gbWFkMjQodWludDE2IHgsIHVpbnQxNiB5LCB1aW50MTYgeik7CisKKy8qKgorICogTXVsdGlwbHkgdHdvIDI0LWJpdCBpbnRlZ2VyIHZhbHVlcyB4IGFuZCB5LiB4IGFuZCB5CisgKiBhcmUgMzItYml0IGludGVnZXJzIGJ1dCBvbmx5IHRoZSBsb3cgMjQtYml0cyBhcmUgdXNlZAorICogdG8gcGVyZm9ybSB0aGUgbXVsdGlwbGljYXRpb24uIG11bDI0IHNob3VsZCBvbmx5CisgKiBiZSB1c2VkIHdoZW4gdmFsdWVzIGluIHggYW5kIHkgYXJlIGluIHRoZSByYW5nZSBbLQorICogMl4yMywgMl4yMy0xXSBpZiB4IGFuZCB5IGFyZSBzaWduZWQgaW50ZWdlcnMgYW5kIGluIHRoZQorICogcmFuZ2UgWzAsIDJeMjQtMV0gaWYgeCBhbmQgeSBhcmUgdW5zaWduZWQgaW50ZWdlcnMuIElmCisgKiB4IGFuZCB5IGFyZSBub3QgaW4gdGhpcyByYW5nZSwgdGhlIG11bHRpcGxpY2F0aW9uCisgKiByZXN1bHQgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZC4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gbXVsMjQoaW50IHgsIGludCB5KTsKK3VpbnQgX19vdmxkIF9fY25mbiBtdWwyNCh1aW50IHgsIHVpbnQgeSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gbXVsMjQoaW50MiB4LCBpbnQyIHkpOwordWludDIgX19vdmxkIF9fY25mbiBtdWwyNCh1aW50MiB4LCB1aW50MiB5KTsKK2ludDMgX19vdmxkIF9fY25mbiBtdWwyNChpbnQzIHgsIGludDMgeSk7Cit1aW50MyBfX292bGQgX19jbmZuIG11bDI0KHVpbnQzIHgsIHVpbnQzIHkpOworaW50NCBfX292bGQgX19jbmZuIG11bDI0KGludDQgeCwgaW50NCB5KTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gbXVsMjQodWludDQgeCwgdWludDQgeSk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gbXVsMjQoaW50OCB4LCBpbnQ4IHkpOwordWludDggX19vdmxkIF9fY25mbiBtdWwyNCh1aW50OCB4LCB1aW50OCB5KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gbXVsMjQoaW50MTYgeCwgaW50MTYgeSk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBtdWwyNCh1aW50MTYgeCwgdWludDE2IHkpOworCisvLyBPcGVuQ0wgdjEuMSBzNi4xMS40LCB2MS4yIHM2LjEyLjQsIHYyLjAgczYuMTMuNCAtIENvbW1vbiBGdW5jdGlvbnMKKworLyoqCisgKiBSZXR1cm5zIGZtaW4oZm1heCh4LCBtaW52YWwpLCBtYXh2YWwpLgorICogUmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmIG1pbnZhbCA+IG1heHZhbC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBjbGFtcChmbG9hdCB4LCBmbG9hdCBtaW52YWwsIGZsb2F0IG1heHZhbCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBjbGFtcChmbG9hdDIgeCwgZmxvYXQyIG1pbnZhbCwgZmxvYXQyIG1heHZhbCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjbGFtcChmbG9hdDMgeCwgZmxvYXQzIG1pbnZhbCwgZmxvYXQzIG1heHZhbCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjbGFtcChmbG9hdDQgeCwgZmxvYXQ0IG1pbnZhbCwgZmxvYXQ0IG1heHZhbCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBjbGFtcChmbG9hdDggeCwgZmxvYXQ4IG1pbnZhbCwgZmxvYXQ4IG1heHZhbCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAoZmxvYXQxNiB4LCBmbG9hdDE2IG1pbnZhbCwgZmxvYXQxNiBtYXh2YWwpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gY2xhbXAoZmxvYXQyIHgsIGZsb2F0IG1pbnZhbCwgZmxvYXQgbWF4dmFsKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIGNsYW1wKGZsb2F0MyB4LCBmbG9hdCBtaW52YWwsIGZsb2F0IG1heHZhbCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBjbGFtcChmbG9hdDQgeCwgZmxvYXQgbWludmFsLCBmbG9hdCBtYXh2YWwpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gY2xhbXAoZmxvYXQ4IHgsIGZsb2F0IG1pbnZhbCwgZmxvYXQgbWF4dmFsKTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBjbGFtcChmbG9hdDE2IHgsIGZsb2F0IG1pbnZhbCwgZmxvYXQgbWF4dmFsKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gY2xhbXAoZG91YmxlIHgsIGRvdWJsZSBtaW52YWwsIGRvdWJsZSBtYXh2YWwpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNsYW1wKGRvdWJsZTIgeCwgZG91YmxlMiBtaW52YWwsIGRvdWJsZTIgbWF4dmFsKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjbGFtcChkb3VibGUzIHgsIGRvdWJsZTMgbWludmFsLCBkb3VibGUzIG1heHZhbCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gY2xhbXAoZG91YmxlNCB4LCBkb3VibGU0IG1pbnZhbCwgZG91YmxlNCBtYXh2YWwpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNsYW1wKGRvdWJsZTggeCwgZG91YmxlOCBtaW52YWwsIGRvdWJsZTggbWF4dmFsKTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAoZG91YmxlMTYgeCwgZG91YmxlMTYgbWludmFsLCBkb3VibGUxNiBtYXh2YWwpOworZG91YmxlMiBfX292bGQgX19jbmZuIGNsYW1wKGRvdWJsZTIgeCwgZG91YmxlIG1pbnZhbCwgZG91YmxlIG1heHZhbCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gY2xhbXAoZG91YmxlMyB4LCBkb3VibGUgbWludmFsLCBkb3VibGUgbWF4dmFsKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjbGFtcChkb3VibGU0IHgsIGRvdWJsZSBtaW52YWwsIGRvdWJsZSBtYXh2YWwpOworZG91YmxlOCBfX292bGQgX19jbmZuIGNsYW1wKGRvdWJsZTggeCwgZG91YmxlIG1pbnZhbCwgZG91YmxlIG1heHZhbCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIGNsYW1wKGRvdWJsZTE2IHgsIGRvdWJsZSBtaW52YWwsIGRvdWJsZSBtYXh2YWwpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGNsYW1wKGhhbGYgeCwgaGFsZiBtaW52YWwsIGhhbGYgbWF4dmFsKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gY2xhbXAoaGFsZjIgeCwgaGFsZjIgbWludmFsLCBoYWxmMiBtYXh2YWwpOworaGFsZjMgX19vdmxkIF9fY25mbiBjbGFtcChoYWxmMyB4LCBoYWxmMyBtaW52YWwsIGhhbGYzIG1heHZhbCk7CitoYWxmNCBfX292bGQgX19jbmZuIGNsYW1wKGhhbGY0IHgsIGhhbGY0IG1pbnZhbCwgaGFsZjQgbWF4dmFsKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gY2xhbXAoaGFsZjggeCwgaGFsZjggbWludmFsLCBoYWxmOCBtYXh2YWwpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAoaGFsZjE2IHgsIGhhbGYxNiBtaW52YWwsIGhhbGYxNiBtYXh2YWwpOworaGFsZjIgX19vdmxkIF9fY25mbiBjbGFtcChoYWxmMiB4LCBoYWxmIG1pbnZhbCwgaGFsZiBtYXh2YWwpOworaGFsZjMgX19vdmxkIF9fY25mbiBjbGFtcChoYWxmMyB4LCBoYWxmIG1pbnZhbCwgaGFsZiBtYXh2YWwpOworaGFsZjQgX19vdmxkIF9fY25mbiBjbGFtcChoYWxmNCB4LCBoYWxmIG1pbnZhbCwgaGFsZiBtYXh2YWwpOworaGFsZjggX19vdmxkIF9fY25mbiBjbGFtcChoYWxmOCB4LCBoYWxmIG1pbnZhbCwgaGFsZiBtYXh2YWwpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gY2xhbXAoaGFsZjE2IHgsIGhhbGYgbWludmFsLCBoYWxmIG1heHZhbCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIENvbnZlcnRzIHJhZGlhbnMgdG8gZGVncmVlcywgaS5lLiAoMTgwIC8gUEkpICoKKyAqIHJhZGlhbnMuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZGVncmVlcyhmbG9hdCByYWRpYW5zKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIGRlZ3JlZXMoZmxvYXQyIHJhZGlhbnMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gZGVncmVlcyhmbG9hdDMgcmFkaWFucyk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBkZWdyZWVzKGZsb2F0NCByYWRpYW5zKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIGRlZ3JlZXMoZmxvYXQ4IHJhZGlhbnMpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGRlZ3JlZXMoZmxvYXQxNiByYWRpYW5zKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gZGVncmVlcyhkb3VibGUgcmFkaWFucyk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gZGVncmVlcyhkb3VibGUyIHJhZGlhbnMpOworZG91YmxlMyBfX292bGQgX19jbmZuIGRlZ3JlZXMoZG91YmxlMyByYWRpYW5zKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBkZWdyZWVzKGRvdWJsZTQgcmFkaWFucyk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gZGVncmVlcyhkb3VibGU4IHJhZGlhbnMpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBkZWdyZWVzKGRvdWJsZTE2IHJhZGlhbnMpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGRlZ3JlZXMoaGFsZiByYWRpYW5zKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gZGVncmVlcyhoYWxmMiByYWRpYW5zKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gZGVncmVlcyhoYWxmMyByYWRpYW5zKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gZGVncmVlcyhoYWxmNCByYWRpYW5zKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gZGVncmVlcyhoYWxmOCByYWRpYW5zKTsKK2hhbGYxNiBfX292bGQgX19jbmZuIGRlZ3JlZXMoaGFsZjE2IHJhZGlhbnMpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm5zIHkgaWYgeCA8IHksIG90aGVyd2lzZSBpdCByZXR1cm5zIHguIElmIHggYW5kIHkKKyAqIGFyZSBpbmZpbml0ZSBvciBOYU4sIHRoZSByZXR1cm4gdmFsdWVzIGFyZSB1bmRlZmluZWQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbWF4KGZsb2F0IHgsIGZsb2F0IHkpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbWF4KGZsb2F0MiB4LCBmbG9hdDIgeSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBtYXgoZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIG1heChmbG9hdDQgeCwgZmxvYXQ0IHkpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbWF4KGZsb2F0OCB4LCBmbG9hdDggeSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbWF4KGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG1heChmbG9hdDIgeCwgZmxvYXQgeSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBtYXgoZmxvYXQzIHgsIGZsb2F0IHkpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbWF4KGZsb2F0NCB4LCBmbG9hdCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG1heChmbG9hdDggeCwgZmxvYXQgeSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbWF4KGZsb2F0MTYgeCwgZmxvYXQgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIG1heChkb3VibGUgeCwgZG91YmxlIHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIG1heChkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbWF4KGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBtYXgoZG91YmxlNCB4LCBkb3VibGU0IHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIG1heChkb3VibGU4IHgsIGRvdWJsZTggeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIG1heChkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBtYXgoZG91YmxlMiB4LCBkb3VibGUgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbWF4KGRvdWJsZTMgeCwgZG91YmxlIHkpOworZG91YmxlNCBfX292bGQgX19jbmZuIG1heChkb3VibGU0IHgsIGRvdWJsZSB5KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBtYXgoZG91YmxlOCB4LCBkb3VibGUgeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIG1heChkb3VibGUxNiB4LCBkb3VibGUgeSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gbWF4KGhhbGYgeCwgaGFsZiB5KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gbWF4KGhhbGYyIHgsIGhhbGYyIHkpOworaGFsZjMgX19vdmxkIF9fY25mbiBtYXgoaGFsZjMgeCwgaGFsZjMgeSk7CitoYWxmNCBfX292bGQgX19jbmZuIG1heChoYWxmNCB4LCBoYWxmNCB5KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gbWF4KGhhbGY4IHgsIGhhbGY4IHkpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gbWF4KGhhbGYxNiB4LCBoYWxmMTYgeSk7CitoYWxmMiBfX292bGQgX19jbmZuIG1heChoYWxmMiB4LCBoYWxmIHkpOworaGFsZjMgX19vdmxkIF9fY25mbiBtYXgoaGFsZjMgeCwgaGFsZiB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gbWF4KGhhbGY0IHgsIGhhbGYgeSk7CitoYWxmOCBfX292bGQgX19jbmZuIG1heChoYWxmOCB4LCBoYWxmIHkpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gbWF4KGhhbGYxNiB4LCBoYWxmIHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm5zIHkgaWYgeSA8IHgsIG90aGVyd2lzZSBpdCByZXR1cm5zIHguIElmIHggYW5kIHkKKyAqIGFyZSBpbmZpbml0ZSBvciBOYU4sIHRoZSByZXR1cm4gdmFsdWVzIGFyZSB1bmRlZmluZWQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbWluKGZsb2F0IHgsIGZsb2F0IHkpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbWluKGZsb2F0MiB4LCBmbG9hdDIgeSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBtaW4oZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIG1pbihmbG9hdDQgeCwgZmxvYXQ0IHkpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbWluKGZsb2F0OCB4LCBmbG9hdDggeSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbWluKGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG1pbihmbG9hdDIgeCwgZmxvYXQgeSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBtaW4oZmxvYXQzIHgsIGZsb2F0IHkpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbWluKGZsb2F0NCB4LCBmbG9hdCB5KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG1pbihmbG9hdDggeCwgZmxvYXQgeSk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gbWluKGZsb2F0MTYgeCwgZmxvYXQgeSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIG1pbihkb3VibGUgeCwgZG91YmxlIHkpOworZG91YmxlMiBfX292bGQgX19jbmZuIG1pbihkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbWluKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBtaW4oZG91YmxlNCB4LCBkb3VibGU0IHkpOworZG91YmxlOCBfX292bGQgX19jbmZuIG1pbihkb3VibGU4IHgsIGRvdWJsZTggeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIG1pbihkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBtaW4oZG91YmxlMiB4LCBkb3VibGUgeSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbWluKGRvdWJsZTMgeCwgZG91YmxlIHkpOworZG91YmxlNCBfX292bGQgX19jbmZuIG1pbihkb3VibGU0IHgsIGRvdWJsZSB5KTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBtaW4oZG91YmxlOCB4LCBkb3VibGUgeSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIG1pbihkb3VibGUxNiB4LCBkb3VibGUgeSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gbWluKGhhbGYgeCwgaGFsZiB5KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gbWluKGhhbGYyIHgsIGhhbGYyIHkpOworaGFsZjMgX19vdmxkIF9fY25mbiBtaW4oaGFsZjMgeCwgaGFsZjMgeSk7CitoYWxmNCBfX292bGQgX19jbmZuIG1pbihoYWxmNCB4LCBoYWxmNCB5KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gbWluKGhhbGY4IHgsIGhhbGY4IHkpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gbWluKGhhbGYxNiB4LCBoYWxmMTYgeSk7CitoYWxmMiBfX292bGQgX19jbmZuIG1pbihoYWxmMiB4LCBoYWxmIHkpOworaGFsZjMgX19vdmxkIF9fY25mbiBtaW4oaGFsZjMgeCwgaGFsZiB5KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gbWluKGhhbGY0IHgsIGhhbGYgeSk7CitoYWxmOCBfX292bGQgX19jbmZuIG1pbihoYWxmOCB4LCBoYWxmIHkpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gbWluKGhhbGYxNiB4LCBoYWxmIHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm5zIHRoZSBsaW5lYXIgYmxlbmQgb2YgeCAmIHkgaW1wbGVtZW50ZWQgYXM6CisgKiB4ICsgKHkgLSB4KSAqIGEKKyAqIGEgbXVzdCBiZSBhIHZhbHVlIGluIHRoZSByYW5nZSAwLjAgLi4uIDEuMC4gSWYgYSBpcyBub3QKKyAqIGluIHRoZSByYW5nZSAwLjAgLi4uIDEuMCwgdGhlIHJldHVybiB2YWx1ZXMgYXJlCisgKiB1bmRlZmluZWQuCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbWl4KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IGEpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gbWl4KGZsb2F0MiB4LCBmbG9hdDIgeSwgZmxvYXQyIGEpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbWl4KGZsb2F0MyB4LCBmbG9hdDMgeSwgZmxvYXQzIGEpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbWl4KGZsb2F0NCB4LCBmbG9hdDQgeSwgZmxvYXQ0IGEpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gbWl4KGZsb2F0OCB4LCBmbG9hdDggeSwgZmxvYXQ4IGEpOworZmxvYXQxNiBfX292bGQgX19jbmZuIG1peChmbG9hdDE2IHgsIGZsb2F0MTYgeSwgZmxvYXQxNiBhKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG1peChmbG9hdDIgeCwgZmxvYXQyIHksIGZsb2F0IGEpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gbWl4KGZsb2F0MyB4LCBmbG9hdDMgeSwgZmxvYXQgYSk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBtaXgoZmxvYXQ0IHgsIGZsb2F0NCB5LCBmbG9hdCBhKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIG1peChmbG9hdDggeCwgZmxvYXQ4IHksIGZsb2F0IGEpOworZmxvYXQxNiBfX292bGQgX19jbmZuIG1peChmbG9hdDE2IHgsIGZsb2F0MTYgeSwgZmxvYXQgYSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIG1peChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSBhKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBtaXgoZG91YmxlMiB4LCBkb3VibGUyIHksIGRvdWJsZTIgYSk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gbWl4KGRvdWJsZTMgeCwgZG91YmxlMyB5LCBkb3VibGUzIGEpOworZG91YmxlNCBfX292bGQgX19jbmZuIG1peChkb3VibGU0IHgsIGRvdWJsZTQgeSwgZG91YmxlNCBhKTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBtaXgoZG91YmxlOCB4LCBkb3VibGU4IHksIGRvdWJsZTggYSk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIG1peChkb3VibGUxNiB4LCBkb3VibGUxNiB5LCBkb3VibGUxNiBhKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBtaXgoZG91YmxlMiB4LCBkb3VibGUyIHksIGRvdWJsZSBhKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBtaXgoZG91YmxlMyB4LCBkb3VibGUzIHksIGRvdWJsZSBhKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBtaXgoZG91YmxlNCB4LCBkb3VibGU0IHksIGRvdWJsZSBhKTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBtaXgoZG91YmxlOCB4LCBkb3VibGU4IHksIGRvdWJsZSBhKTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gbWl4KGRvdWJsZTE2IHgsIGRvdWJsZTE2IHksIGRvdWJsZSBhKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBtaXgoaGFsZiB4LCBoYWxmIHksIGhhbGYgYSk7CitoYWxmMiBfX292bGQgX19jbmZuIG1peChoYWxmMiB4LCBoYWxmMiB5LCBoYWxmMiBhKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gbWl4KGhhbGYzIHgsIGhhbGYzIHksIGhhbGYzIGEpOworaGFsZjQgX19vdmxkIF9fY25mbiBtaXgoaGFsZjQgeCwgaGFsZjQgeSwgaGFsZjQgYSk7CitoYWxmOCBfX292bGQgX19jbmZuIG1peChoYWxmOCB4LCBoYWxmOCB5LCBoYWxmOCBhKTsKK2hhbGYxNiBfX292bGQgX19jbmZuIG1peChoYWxmMTYgeCwgaGFsZjE2IHksIGhhbGYxNiBhKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gbWl4KGhhbGYyIHgsIGhhbGYyIHksIGhhbGYgYSk7CitoYWxmMyBfX292bGQgX19jbmZuIG1peChoYWxmMyB4LCBoYWxmMyB5LCBoYWxmIGEpOworaGFsZjQgX19vdmxkIF9fY25mbiBtaXgoaGFsZjQgeCwgaGFsZjQgeSwgaGFsZiBhKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gbWl4KGhhbGY4IHgsIGhhbGY4IHksIGhhbGYgYSk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBtaXgoaGFsZjE2IHgsIGhhbGYxNiB5LCBoYWxmIGEpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBDb252ZXJ0cyBkZWdyZWVzIHRvIHJhZGlhbnMsIGkuZS4gKFBJIC8gMTgwKSAqCisgKiBkZWdyZWVzLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIHJhZGlhbnMoZmxvYXQgZGVncmVlcyk7CitmbG9hdDIgX19vdmxkIF9fY25mbiByYWRpYW5zKGZsb2F0MiBkZWdyZWVzKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHJhZGlhbnMoZmxvYXQzIGRlZ3JlZXMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gcmFkaWFucyhmbG9hdDQgZGVncmVlcyk7CitmbG9hdDggX19vdmxkIF9fY25mbiByYWRpYW5zKGZsb2F0OCBkZWdyZWVzKTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiByYWRpYW5zKGZsb2F0MTYgZGVncmVlcyk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jbmZuIHJhZGlhbnMoZG91YmxlIGRlZ3JlZXMpOworZG91YmxlMiBfX292bGQgX19jbmZuIHJhZGlhbnMoZG91YmxlMiBkZWdyZWVzKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiByYWRpYW5zKGRvdWJsZTMgZGVncmVlcyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gcmFkaWFucyhkb3VibGU0IGRlZ3JlZXMpOworZG91YmxlOCBfX292bGQgX19jbmZuIHJhZGlhbnMoZG91YmxlOCBkZWdyZWVzKTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gcmFkaWFucyhkb3VibGUxNiBkZWdyZWVzKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiByYWRpYW5zKGhhbGYgZGVncmVlcyk7CitoYWxmMiBfX292bGQgX19jbmZuIHJhZGlhbnMoaGFsZjIgZGVncmVlcyk7CitoYWxmMyBfX292bGQgX19jbmZuIHJhZGlhbnMoaGFsZjMgZGVncmVlcyk7CitoYWxmNCBfX292bGQgX19jbmZuIHJhZGlhbnMoaGFsZjQgZGVncmVlcyk7CitoYWxmOCBfX292bGQgX19jbmZuIHJhZGlhbnMoaGFsZjggZGVncmVlcyk7CitoYWxmMTYgX19vdmxkIF9fY25mbiByYWRpYW5zKGhhbGYxNiBkZWdyZWVzKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJucyAwLjAgaWYgeCA8IGVkZ2UsIG90aGVyd2lzZSBpdCByZXR1cm5zIDEuMC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBzdGVwKGZsb2F0IGVkZ2UsIGZsb2F0IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc3RlcChmbG9hdDIgZWRnZSwgZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gc3RlcChmbG9hdDMgZWRnZSwgZmxvYXQzIHgpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gc3RlcChmbG9hdDQgZWRnZSwgZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gc3RlcChmbG9hdDggZWRnZSwgZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHN0ZXAoZmxvYXQxNiBlZGdlLCBmbG9hdDE2IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc3RlcChmbG9hdCBlZGdlLCBmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBzdGVwKGZsb2F0IGVkZ2UsIGZsb2F0MyB4KTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHN0ZXAoZmxvYXQgZWRnZSwgZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gc3RlcChmbG9hdCBlZGdlLCBmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc3RlcChmbG9hdCBlZGdlLCBmbG9hdDE2IHgpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBzdGVwKGRvdWJsZSBlZGdlLCBkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gc3RlcChkb3VibGUyIGVkZ2UsIGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gc3RlcChkb3VibGUzIGVkZ2UsIGRvdWJsZTMgeCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gc3RlcChkb3VibGU0IGVkZ2UsIGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gc3RlcChkb3VibGU4IGVkZ2UsIGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHN0ZXAoZG91YmxlMTYgZWRnZSwgZG91YmxlMTYgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gc3RlcChkb3VibGUgZWRnZSwgZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBzdGVwKGRvdWJsZSBlZGdlLCBkb3VibGUzIHgpOworZG91YmxlNCBfX292bGQgX19jbmZuIHN0ZXAoZG91YmxlIGVkZ2UsIGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gc3RlcChkb3VibGUgZWRnZSwgZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gc3RlcChkb3VibGUgZWRnZSwgZG91YmxlMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gc3RlcChoYWxmIGVkZ2UsIGhhbGYgeCk7CitoYWxmMiBfX292bGQgX19jbmZuIHN0ZXAoaGFsZjIgZWRnZSwgaGFsZjIgeCk7CitoYWxmMyBfX292bGQgX19jbmZuIHN0ZXAoaGFsZjMgZWRnZSwgaGFsZjMgeCk7CitoYWxmNCBfX292bGQgX19jbmZuIHN0ZXAoaGFsZjQgZWRnZSwgaGFsZjQgeCk7CitoYWxmOCBfX292bGQgX19jbmZuIHN0ZXAoaGFsZjggZWRnZSwgaGFsZjggeCk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBzdGVwKGhhbGYxNiBlZGdlLCBoYWxmMTYgeCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gc3RlcChoYWxmIGVkZ2UsIGhhbGYgeCk7CitoYWxmMiBfX292bGQgX19jbmZuIHN0ZXAoaGFsZiBlZGdlLCBoYWxmMiB4KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gc3RlcChoYWxmIGVkZ2UsIGhhbGYzIHgpOworaGFsZjQgX19vdmxkIF9fY25mbiBzdGVwKGhhbGYgZWRnZSwgaGFsZjQgeCk7CitoYWxmOCBfX292bGQgX19jbmZuIHN0ZXAoaGFsZiBlZGdlLCBoYWxmOCB4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHN0ZXAoaGFsZiBlZGdlLCBoYWxmMTYgeCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgMC4wIGlmIHggPD0gZWRnZTAgYW5kIDEuMCBpZiB4ID49IGVkZ2UxIGFuZAorICogcGVyZm9ybXMgc21vb3RoIEhlcm1pdGUgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIDAKKyAqIGFuZCAxd2hlbiBlZGdlMCA8IHggPCBlZGdlMS4gVGhpcyBpcyB1c2VmdWwgaW4KKyAqIGNhc2VzIHdoZXJlIHlvdSB3b3VsZCB3YW50IGEgdGhyZXNob2xkIGZ1bmN0aW9uCisgKiB3aXRoIGEgc21vb3RoIHRyYW5zaXRpb24uCisgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG86CisgKiBnZW50eXBlIHQ7CisgKiB0ID0gY2xhbXAgKCh4IC0gZWRnZTApIC8gKGVkZ2UxIC0gZWRnZTApLCAwLCAxKTsKKyAqIHJldHVybiB0ICogdCAqICgzIC0gMiAqIHQpOworICogUmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmIGVkZ2UwID49IGVkZ2UxIG9yIGlmIHgsCisgKiBlZGdlMCBvciBlZGdlMSBpcyBhIE5hTi4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGZsb2F0IGVkZ2UwLCBmbG9hdCBlZGdlMSwgZmxvYXQgeCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGZsb2F0MiBlZGdlMCwgZmxvYXQyIGVkZ2UxLCBmbG9hdDIgeCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGZsb2F0MyBlZGdlMCwgZmxvYXQzIGVkZ2UxLCBmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGZsb2F0NCBlZGdlMCwgZmxvYXQ0IGVkZ2UxLCBmbG9hdDQgeCk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGZsb2F0OCBlZGdlMCwgZmxvYXQ4IGVkZ2UxLCBmbG9hdDggeCk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChmbG9hdDE2IGVkZ2UwLCBmbG9hdDE2IGVkZ2UxLCBmbG9hdDE2IHgpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChmbG9hdCBlZGdlMCwgZmxvYXQgZWRnZTEsIGZsb2F0MiB4KTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0IGVkZ2UxLCBmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGZsb2F0IGVkZ2UwLCBmbG9hdCBlZGdlMSwgZmxvYXQ0IHgpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChmbG9hdCBlZGdlMCwgZmxvYXQgZWRnZTEsIGZsb2F0OCB4KTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGZsb2F0IGVkZ2UwLCBmbG9hdCBlZGdlMSwgZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChkb3VibGUgZWRnZTAsIGRvdWJsZSBlZGdlMSwgZG91YmxlIHgpOworZG91YmxlMiBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoZG91YmxlMiBlZGdlMCwgZG91YmxlMiBlZGdlMSwgZG91YmxlMiB4KTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGRvdWJsZTMgZWRnZTAsIGRvdWJsZTMgZWRnZTEsIGRvdWJsZTMgeCk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChkb3VibGU0IGVkZ2UwLCBkb3VibGU0IGVkZ2UxLCBkb3VibGU0IHgpOworZG91YmxlOCBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoZG91YmxlOCBlZGdlMCwgZG91YmxlOCBlZGdlMSwgZG91YmxlOCB4KTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChkb3VibGUxNiBlZGdlMCwgZG91YmxlMTYgZWRnZTEsIGRvdWJsZTE2IHgpOworZG91YmxlMiBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoZG91YmxlIGVkZ2UwLCBkb3VibGUgZWRnZTEsIGRvdWJsZTIgeCk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChkb3VibGUgZWRnZTAsIGRvdWJsZSBlZGdlMSwgZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGRvdWJsZSBlZGdlMCwgZG91YmxlIGVkZ2UxLCBkb3VibGU0IHgpOworZG91YmxlOCBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoZG91YmxlIGVkZ2UwLCBkb3VibGUgZWRnZTEsIGRvdWJsZTggeCk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoZG91YmxlIGVkZ2UwLCBkb3VibGUgZWRnZTEsIGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoaGFsZiBlZGdlMCwgaGFsZiBlZGdlMSwgaGFsZiB4KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChoYWxmMiBlZGdlMCwgaGFsZjIgZWRnZTEsIGhhbGYyIHgpOworaGFsZjMgX19vdmxkIF9fY25mbiBzbW9vdGhzdGVwKGhhbGYzIGVkZ2UwLCBoYWxmMyBlZGdlMSwgaGFsZjMgeCk7CitoYWxmNCBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoaGFsZjQgZWRnZTAsIGhhbGY0IGVkZ2UxLCBoYWxmNCB4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChoYWxmOCBlZGdlMCwgaGFsZjggZWRnZTEsIGhhbGY4IHgpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChoYWxmMTYgZWRnZTAsIGhhbGYxNiBlZGdlMSwgaGFsZjE2IHgpOworaGFsZiBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoaGFsZiBlZGdlMCwgaGFsZiBlZGdlMSwgaGFsZiB4KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChoYWxmIGVkZ2UwLCBoYWxmIGVkZ2UxLCBoYWxmMiB4KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChoYWxmIGVkZ2UwLCBoYWxmIGVkZ2UxLCBoYWxmMyB4KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChoYWxmIGVkZ2UwLCBoYWxmIGVkZ2UxLCBoYWxmNCB4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gc21vb3Roc3RlcChoYWxmIGVkZ2UwLCBoYWxmIGVkZ2UxLCBoYWxmOCB4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHNtb290aHN0ZXAoaGFsZiBlZGdlMCwgaGFsZiBlZGdlMSwgaGFsZjE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm5zIDEuMCBpZiB4ID4gMCwgLTAuMCBpZiB4ID0gLTAuMCwgKzAuMCBpZiB4ID0KKyAqICswLjAsIG9yIC0xLjAgaWYgeCA8IDAuIFJldHVybnMgMC4wIGlmIHggaXMgYSBOYU4uCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gc2lnbihmbG9hdCB4KTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHNpZ24oZmxvYXQyIHgpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gc2lnbihmbG9hdDMgeCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzaWduKGZsb2F0NCB4KTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHNpZ24oZmxvYXQ4IHgpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHNpZ24oZmxvYXQxNiB4KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gc2lnbihkb3VibGUgeCk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gc2lnbihkb3VibGUyIHgpOworZG91YmxlMyBfX292bGQgX19jbmZuIHNpZ24oZG91YmxlMyB4KTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBzaWduKGRvdWJsZTQgeCk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gc2lnbihkb3VibGU4IHgpOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBzaWduKGRvdWJsZTE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIHNpZ24oaGFsZiB4KTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gc2lnbihoYWxmMiB4KTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gc2lnbihoYWxmMyB4KTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc2lnbihoYWxmNCB4KTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gc2lnbihoYWxmOCB4KTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHNpZ24oaGFsZjE2IHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLy8gT3BlbkNMIHYxLjEgczYuMTEuNSwgdjEuMiBzNi4xMi41LCB2Mi4wIHM2LjEzLjUgLSBHZW9tZXRyaWMgRnVuY3Rpb25zCisKKy8qKgorICogUmV0dXJucyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiBwMC54eXogYW5kIHAxLnh5ei4gVGhlCisgKiB3IGNvbXBvbmVudCBvZiBmbG9hdDQgcmVzdWx0IHJldHVybmVkIHdpbGwgYmUgMC4wLgorICovCitmbG9hdDQgX19vdmxkIF9fY25mbiBjcm9zcyhmbG9hdDQgcDAsIGZsb2F0NCBwMSk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBjcm9zcyhmbG9hdDMgcDAsIGZsb2F0MyBwMSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBjcm9zcyhkb3VibGU0IHAwLCBkb3VibGU0IHAxKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBjcm9zcyhkb3VibGUzIHAwLCBkb3VibGUzIHAxKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gY3Jvc3MoaGFsZjQgcDAsIGhhbGY0IHAxKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gY3Jvc3MoaGFsZjMgcDAsIGhhbGYzIHAxKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogQ29tcHV0ZSBkb3QgcHJvZHVjdC4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBkb3QoZmxvYXQgcDAsIGZsb2F0IHAxKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZG90KGZsb2F0MiBwMCwgZmxvYXQyIHAxKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZG90KGZsb2F0MyBwMCwgZmxvYXQzIHAxKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZG90KGZsb2F0NCBwMCwgZmxvYXQ0IHAxKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gZG90KGRvdWJsZSBwMCwgZG91YmxlIHAxKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGRvdChkb3VibGUyIHAwLCBkb3VibGUyIHAxKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGRvdChkb3VibGUzIHAwLCBkb3VibGUzIHAxKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGRvdChkb3VibGU0IHAwLCBkb3VibGU0IHAxKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBkb3QoaGFsZiBwMCwgaGFsZiBwMSk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gZG90KGhhbGYyIHAwLCBoYWxmMiBwMSk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gZG90KGhhbGYzIHAwLCBoYWxmMyBwMSk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gZG90KGhhbGY0IHAwLCBoYWxmNCBwMSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgdGhlIGRpc3RhbmNlIGJldHdlZW4gcDAgYW5kIHAxLiBUaGlzIGlzCisgKiBjYWxjdWxhdGVkIGFzIGxlbmd0aChwMCAtIHAxKS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBkaXN0YW5jZShmbG9hdCBwMCwgZmxvYXQgcDEpOworZmxvYXQgX19vdmxkIF9fY25mbiBkaXN0YW5jZShmbG9hdDIgcDAsIGZsb2F0MiBwMSk7CitmbG9hdCBfX292bGQgX19jbmZuIGRpc3RhbmNlKGZsb2F0MyBwMCwgZmxvYXQzIHAxKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZGlzdGFuY2UoZmxvYXQ0IHAwLCBmbG9hdDQgcDEpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBkaXN0YW5jZShkb3VibGUgcDAsIGRvdWJsZSBwMSk7Citkb3VibGUgX19vdmxkIF9fY25mbiBkaXN0YW5jZShkb3VibGUyIHAwLCBkb3VibGUyIHAxKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGRpc3RhbmNlKGRvdWJsZTMgcDAsIGRvdWJsZTMgcDEpOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gZGlzdGFuY2UoZG91YmxlNCBwMCwgZG91YmxlNCBwMSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gZGlzdGFuY2UoaGFsZiBwMCwgaGFsZiBwMSk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gZGlzdGFuY2UoaGFsZjIgcDAsIGhhbGYyIHAxKTsKK2hhbGYgX19vdmxkIF9fY25mbiBkaXN0YW5jZShoYWxmMyBwMCwgaGFsZjMgcDEpOworaGFsZiBfX292bGQgX19jbmZuIGRpc3RhbmNlKGhhbGY0IHAwLCBoYWxmNCBwMSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybiB0aGUgbGVuZ3RoIG9mIHZlY3RvciBwLCBpLmUuLAorICogc3FydChwLngyICsgcC55IDIgKyAuLi4pCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gbGVuZ3RoKGZsb2F0IHApOworZmxvYXQgX19vdmxkIF9fY25mbiBsZW5ndGgoZmxvYXQyIHApOworZmxvYXQgX19vdmxkIF9fY25mbiBsZW5ndGgoZmxvYXQzIHApOworZmxvYXQgX19vdmxkIF9fY25mbiBsZW5ndGgoZmxvYXQ0IHApOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBsZW5ndGgoZG91YmxlIHApOworZG91YmxlIF9fb3ZsZCBfX2NuZm4gbGVuZ3RoKGRvdWJsZTIgcCk7Citkb3VibGUgX19vdmxkIF9fY25mbiBsZW5ndGgoZG91YmxlMyBwKTsKK2RvdWJsZSBfX292bGQgX19jbmZuIGxlbmd0aChkb3VibGU0IHApOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGxlbmd0aChoYWxmIHApOworaGFsZiBfX292bGQgX19jbmZuIGxlbmd0aChoYWxmMiBwKTsKK2hhbGYgX19vdmxkIF9fY25mbiBsZW5ndGgoaGFsZjMgcCk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gbGVuZ3RoKGhhbGY0IHApOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm5zIGEgdmVjdG9yIGluIHRoZSBzYW1lIGRpcmVjdGlvbiBhcyBwIGJ1dCB3aXRoIGEKKyAqIGxlbmd0aCBvZiAxLgorICovCitmbG9hdCBfX292bGQgX19jbmZuIG5vcm1hbGl6ZShmbG9hdCBwKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIG5vcm1hbGl6ZShmbG9hdDIgcCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBub3JtYWxpemUoZmxvYXQzIHApOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gbm9ybWFsaXplKGZsb2F0NCBwKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gbm9ybWFsaXplKGRvdWJsZSBwKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBub3JtYWxpemUoZG91YmxlMiBwKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBub3JtYWxpemUoZG91YmxlMyBwKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBub3JtYWxpemUoZG91YmxlNCBwKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBub3JtYWxpemUoaGFsZiBwKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gbm9ybWFsaXplKGhhbGYyIHApOworaGFsZjMgX19vdmxkIF9fY25mbiBub3JtYWxpemUoaGFsZjMgcCk7CitoYWxmNCBfX292bGQgX19jbmZuIG5vcm1hbGl6ZShoYWxmNCBwKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogUmV0dXJucyBmYXN0X2xlbmd0aChwMCAtIHAxKS4KKyAqLworZmxvYXQgX19vdmxkIF9fY25mbiBmYXN0X2Rpc3RhbmNlKGZsb2F0IHAwLCBmbG9hdCBwMSk7CitmbG9hdCBfX292bGQgX19jbmZuIGZhc3RfZGlzdGFuY2UoZmxvYXQyIHAwLCBmbG9hdDIgcDEpOworZmxvYXQgX19vdmxkIF9fY25mbiBmYXN0X2Rpc3RhbmNlKGZsb2F0MyBwMCwgZmxvYXQzIHAxKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZmFzdF9kaXN0YW5jZShmbG9hdDQgcDAsIGZsb2F0NCBwMSk7CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBmYXN0X2Rpc3RhbmNlKGhhbGYgcDAsIGhhbGYgcDEpOworaGFsZiBfX292bGQgX19jbmZuIGZhc3RfZGlzdGFuY2UoaGFsZjIgcDAsIGhhbGYyIHAxKTsKK2hhbGYgX19vdmxkIF9fY25mbiBmYXN0X2Rpc3RhbmNlKGhhbGYzIHAwLCBoYWxmMyBwMSk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gZmFzdF9kaXN0YW5jZShoYWxmNCBwMCwgaGFsZjQgcDEpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdmVjdG9yIHAgY29tcHV0ZWQgYXM6CisgKiBoYWxmX3NxcnQocC54MiArIHAueTIgKyAuLi4pCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZmFzdF9sZW5ndGgoZmxvYXQgcCk7CitmbG9hdCBfX292bGQgX19jbmZuIGZhc3RfbGVuZ3RoKGZsb2F0MiBwKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZmFzdF9sZW5ndGgoZmxvYXQzIHApOworZmxvYXQgX19vdmxkIF9fY25mbiBmYXN0X2xlbmd0aChmbG9hdDQgcCk7CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBmYXN0X2xlbmd0aChoYWxmIHApOworaGFsZiBfX292bGQgX19jbmZuIGZhc3RfbGVuZ3RoKGhhbGYyIHApOworaGFsZiBfX292bGQgX19jbmZuIGZhc3RfbGVuZ3RoKGhhbGYzIHApOworaGFsZiBfX292bGQgX19jbmZuIGZhc3RfbGVuZ3RoKGhhbGY0IHApOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm5zIGEgdmVjdG9yIGluIHRoZSBzYW1lIGRpcmVjdGlvbiBhcyBwIGJ1dCB3aXRoIGEKKyAqIGxlbmd0aCBvZiAxLiBmYXN0X25vcm1hbGl6ZSBpcyBjb21wdXRlZCBhczoKKyAqIHAgKiBoYWxmX3JzcXJ0IChwLnheMiArIHAueV4yICsgLi4uICkKKyAqIFRoZSByZXN1bHQgc2hhbGwgYmUgd2l0aGluIDgxOTIgdWxwcyBlcnJvciBmcm9tIHRoZQorICogaW5maW5pdGVseSBwcmVjaXNlIHJlc3VsdCBvZgorICogaWYgKGFsbChwID09IDAuMGYpKQorICogcmVzdWx0ID0gcDsKKyAqIGVsc2UKKyAqIHJlc3VsdCA9IHAgLyBzcXJ0IChwLnheMiArIHAueV4yICsgLi4uKTsKKyAqIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgorICogMSkgSWYgdGhlIHN1bSBvZiBzcXVhcmVzIGlzIGdyZWF0ZXIgdGhhbiBGTFRfTUFYCisgKiB0aGVuIHRoZSB2YWx1ZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgdmFsdWVzIGluIHRoZQorICogcmVzdWx0IHZlY3RvciBhcmUgdW5kZWZpbmVkLgorICogMikgSWYgdGhlIHN1bSBvZiBzcXVhcmVzIGlzIGxlc3MgdGhhbiBGTFRfTUlOIHRoZW4KKyAqIHRoZSBpbXBsZW1lbnRhdGlvbiBtYXkgcmV0dXJuIGJhY2sgcC4KKyAqIDMpIElmIHRoZSBkZXZpY2UgaXMgaW4gImRlbm9ybXMgYXJlIGZsdXNoZWQgdG8gemVybyIKKyAqIG1vZGUsIGluZGl2aWR1YWwgb3BlcmFuZCBlbGVtZW50cyB3aXRoIG1hZ25pdHVkZQorICogbGVzcyB0aGFuIHNxcnQoRkxUX01JTikgbWF5IGJlIGZsdXNoZWQgdG8gemVybworICogYmVmb3JlIHByb2NlZWRpbmcgd2l0aCB0aGUgY2FsY3VsYXRpb24uCisgKi8KK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gZmFzdF9ub3JtYWxpemUoZmxvYXQgcCk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBmYXN0X25vcm1hbGl6ZShmbG9hdDIgcCk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBmYXN0X25vcm1hbGl6ZShmbG9hdDMgcCk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBmYXN0X25vcm1hbGl6ZShmbG9hdDQgcCk7CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIF9fY25mbiBmYXN0X25vcm1hbGl6ZShoYWxmIHApOworaGFsZjIgX19vdmxkIF9fY25mbiBmYXN0X25vcm1hbGl6ZShoYWxmMiBwKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gZmFzdF9ub3JtYWxpemUoaGFsZjMgcCk7CitoYWxmNCBfX292bGQgX19jbmZuIGZhc3Rfbm9ybWFsaXplKGhhbGY0IHApOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLy8gT3BlbkNMIHYxLjEgczYuMTEuNiwgdjEuMiBzNi4xMi42LCB2Mi4wIHM2LjEzLjYgLSBSZWxhdGlvbmFsIEZ1bmN0aW9ucworCisvKioKKyAqIGludG4gaXNlcXVhbCAoZmxvYXRuIHgsIGZsb2F0biB5KQorICogUmV0dXJucyB0aGUgY29tcG9uZW50LXdpc2UgY29tcGFyZSBvZiB4ID09IHkuCisgKi8KK2ludCBfX292bGQgX19jbmZuIGlzZXF1YWwoZmxvYXQgeCwgZmxvYXQgeSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gaXNlcXVhbChmbG9hdDIgeCwgZmxvYXQyIHkpOworaW50MyBfX292bGQgX19jbmZuIGlzZXF1YWwoZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2ludDQgX19vdmxkIF9fY25mbiBpc2VxdWFsKGZsb2F0NCB4LCBmbG9hdDQgeSk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gaXNlcXVhbChmbG9hdDggeCwgZmxvYXQ4IHkpOworaW50MTYgX19vdmxkIF9fY25mbiBpc2VxdWFsKGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKKyNpZmRlZiBjbF9raHJfZnA2NAoraW50IF9fb3ZsZCBfX2NuZm4gaXNlcXVhbChkb3VibGUgeCwgZG91YmxlIHkpOworbG9uZzIgX19vdmxkIF9fY25mbiBpc2VxdWFsKGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gaXNlcXVhbChkb3VibGUzIHgsIGRvdWJsZTMgeSk7Citsb25nNCBfX292bGQgX19jbmZuIGlzZXF1YWwoZG91YmxlNCB4LCBkb3VibGU0IHkpOworbG9uZzggX19vdmxkIF9fY25mbiBpc2VxdWFsKGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGlzZXF1YWwoZG91YmxlMTYgeCwgZG91YmxlMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitpbnQgX19vdmxkIF9fY25mbiBpc2VxdWFsKGhhbGYgeCwgaGFsZiB5KTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGlzZXF1YWwoaGFsZjIgeCwgaGFsZjIgeSk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBpc2VxdWFsKGhhbGYzIHgsIGhhbGYzIHkpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gaXNlcXVhbChoYWxmNCB4LCBoYWxmNCB5KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGlzZXF1YWwoaGFsZjggeCwgaGFsZjggeSk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gaXNlcXVhbChoYWxmMTYgeCwgaGFsZjE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm5zIHRoZSBjb21wb25lbnQtd2lzZSBjb21wYXJlIG9mIHggIT0geS4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gaXNub3RlcXVhbChmbG9hdCB4LCBmbG9hdCB5KTsKK2ludDIgX19vdmxkIF9fY25mbiBpc25vdGVxdWFsKGZsb2F0MiB4LCBmbG9hdDIgeSk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gaXNub3RlcXVhbChmbG9hdDMgeCwgZmxvYXQzIHkpOworaW50NCBfX292bGQgX19jbmZuIGlzbm90ZXF1YWwoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2ludDggX19vdmxkIF9fY25mbiBpc25vdGVxdWFsKGZsb2F0OCB4LCBmbG9hdDggeSk7CitpbnQxNiBfX292bGQgX19jbmZuIGlzbm90ZXF1YWwoZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0CitpbnQgX19vdmxkIF9fY25mbiBpc25vdGVxdWFsKGRvdWJsZSB4LCBkb3VibGUgeSk7Citsb25nMiBfX292bGQgX19jbmZuIGlzbm90ZXF1YWwoZG91YmxlMiB4LCBkb3VibGUyIHkpOworbG9uZzMgX19vdmxkIF9fY25mbiBpc25vdGVxdWFsKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gaXNub3RlcXVhbChkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citsb25nOCBfX292bGQgX19jbmZuIGlzbm90ZXF1YWwoZG91YmxlOCB4LCBkb3VibGU4IHkpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gaXNub3RlcXVhbChkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2ludCBfX292bGQgX19jbmZuIGlzbm90ZXF1YWwoaGFsZiB4LCBoYWxmIHkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gaXNub3RlcXVhbChoYWxmMiB4LCBoYWxmMiB5KTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGlzbm90ZXF1YWwoaGFsZjMgeCwgaGFsZjMgeSk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBpc25vdGVxdWFsKGhhbGY0IHgsIGhhbGY0IHkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gaXNub3RlcXVhbChoYWxmOCB4LCBoYWxmOCB5KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBpc25vdGVxdWFsKGhhbGYxNiB4LCBoYWxmMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgdGhlIGNvbXBvbmVudC13aXNlIGNvbXBhcmUgb2YgeCA+IHkuCisgKi8KK2ludCBfX292bGQgX19jbmZuIGlzZ3JlYXRlcihmbG9hdCB4LCBmbG9hdCB5KTsKK2ludDIgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXIoZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2ludDMgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXIoZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2ludDQgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXIoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2ludDggX19vdmxkIF9fY25mbiBpc2dyZWF0ZXIoZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyKGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKKyNpZmRlZiBjbF9raHJfZnA2NAoraW50IF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyKGRvdWJsZSB4LCBkb3VibGUgeSk7Citsb25nMiBfX292bGQgX19jbmZuIGlzZ3JlYXRlcihkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citsb25nMyBfX292bGQgX19jbmZuIGlzZ3JlYXRlcihkb3VibGUzIHgsIGRvdWJsZTMgeSk7Citsb25nNCBfX292bGQgX19jbmZuIGlzZ3JlYXRlcihkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citsb25nOCBfX292bGQgX19jbmZuIGlzZ3JlYXRlcihkb3VibGU4IHgsIGRvdWJsZTggeSk7Citsb25nMTYgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXIoZG91YmxlMTYgeCwgZG91YmxlMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitpbnQgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXIoaGFsZiB4LCBoYWxmIHkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyKGhhbGYyIHgsIGhhbGYyIHkpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyKGhhbGYzIHgsIGhhbGYzIHkpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyKGhhbGY0IHgsIGhhbGY0IHkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyKGhhbGY4IHgsIGhhbGY4IHkpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGlzZ3JlYXRlcihoYWxmMTYgeCwgaGFsZjE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm5zIHRoZSBjb21wb25lbnQtd2lzZSBjb21wYXJlIG9mIHggPj0geS4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyZXF1YWwoZmxvYXQgeCwgZmxvYXQgeSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyZXF1YWwoZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2ludDMgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXJlcXVhbChmbG9hdDMgeCwgZmxvYXQzIHkpOworaW50NCBfX292bGQgX19jbmZuIGlzZ3JlYXRlcmVxdWFsKGZsb2F0NCB4LCBmbG9hdDQgeSk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyZXF1YWwoZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyZXF1YWwoZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0CitpbnQgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXJlcXVhbChkb3VibGUgeCwgZG91YmxlIHkpOworbG9uZzIgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXJlcXVhbChkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citsb25nMyBfX292bGQgX19jbmZuIGlzZ3JlYXRlcmVxdWFsKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyZXF1YWwoZG91YmxlNCB4LCBkb3VibGU0IHkpOworbG9uZzggX19vdmxkIF9fY25mbiBpc2dyZWF0ZXJlcXVhbChkb3VibGU4IHgsIGRvdWJsZTggeSk7Citsb25nMTYgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXJlcXVhbChkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2ludCBfX292bGQgX19jbmZuIGlzZ3JlYXRlcmVxdWFsKGhhbGYgeCwgaGFsZiB5KTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGlzZ3JlYXRlcmVxdWFsKGhhbGYyIHgsIGhhbGYyIHkpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gaXNncmVhdGVyZXF1YWwoaGFsZjMgeCwgaGFsZjMgeSk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBpc2dyZWF0ZXJlcXVhbChoYWxmNCB4LCBoYWxmNCB5KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGlzZ3JlYXRlcmVxdWFsKGhhbGY4IHgsIGhhbGY4IHkpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGlzZ3JlYXRlcmVxdWFsKGhhbGYxNiB4LCBoYWxmMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgdGhlIGNvbXBvbmVudC13aXNlIGNvbXBhcmUgb2YgeCA8IHkuCisgKi8KK2ludCBfX292bGQgX19jbmZuIGlzbGVzcyhmbG9hdCB4LCBmbG9hdCB5KTsKK2ludDIgX19vdmxkIF9fY25mbiBpc2xlc3MoZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2ludDMgX19vdmxkIF9fY25mbiBpc2xlc3MoZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2ludDQgX19vdmxkIF9fY25mbiBpc2xlc3MoZmxvYXQ0IHgsIGZsb2F0NCB5KTsKK2ludDggX19vdmxkIF9fY25mbiBpc2xlc3MoZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gaXNsZXNzKGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKKyNpZmRlZiBjbF9raHJfZnA2NAoraW50IF9fb3ZsZCBfX2NuZm4gaXNsZXNzKGRvdWJsZSB4LCBkb3VibGUgeSk7Citsb25nMiBfX292bGQgX19jbmZuIGlzbGVzcyhkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citsb25nMyBfX292bGQgX19jbmZuIGlzbGVzcyhkb3VibGUzIHgsIGRvdWJsZTMgeSk7Citsb25nNCBfX292bGQgX19jbmZuIGlzbGVzcyhkb3VibGU0IHgsIGRvdWJsZTQgeSk7Citsb25nOCBfX292bGQgX19jbmZuIGlzbGVzcyhkb3VibGU4IHgsIGRvdWJsZTggeSk7Citsb25nMTYgX19vdmxkIF9fY25mbiBpc2xlc3MoZG91YmxlMTYgeCwgZG91YmxlMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitpbnQgX19vdmxkIF9fY25mbiBpc2xlc3MoaGFsZiB4LCBoYWxmIHkpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gaXNsZXNzKGhhbGYyIHgsIGhhbGYyIHkpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gaXNsZXNzKGhhbGYzIHgsIGhhbGYzIHkpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gaXNsZXNzKGhhbGY0IHgsIGhhbGY0IHkpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gaXNsZXNzKGhhbGY4IHgsIGhhbGY4IHkpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGlzbGVzcyhoYWxmMTYgeCwgaGFsZjE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBSZXR1cm5zIHRoZSBjb21wb25lbnQtd2lzZSBjb21wYXJlIG9mIHggPD0geS4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gaXNsZXNzZXF1YWwoZmxvYXQgeCwgZmxvYXQgeSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gaXNsZXNzZXF1YWwoZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2ludDMgX19vdmxkIF9fY25mbiBpc2xlc3NlcXVhbChmbG9hdDMgeCwgZmxvYXQzIHkpOworaW50NCBfX292bGQgX19jbmZuIGlzbGVzc2VxdWFsKGZsb2F0NCB4LCBmbG9hdDQgeSk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gaXNsZXNzZXF1YWwoZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gaXNsZXNzZXF1YWwoZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0CitpbnQgX19vdmxkIF9fY25mbiBpc2xlc3NlcXVhbChkb3VibGUgeCwgZG91YmxlIHkpOworbG9uZzIgX19vdmxkIF9fY25mbiBpc2xlc3NlcXVhbChkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citsb25nMyBfX292bGQgX19jbmZuIGlzbGVzc2VxdWFsKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gaXNsZXNzZXF1YWwoZG91YmxlNCB4LCBkb3VibGU0IHkpOworbG9uZzggX19vdmxkIF9fY25mbiBpc2xlc3NlcXVhbChkb3VibGU4IHgsIGRvdWJsZTggeSk7Citsb25nMTYgX19vdmxkIF9fY25mbiBpc2xlc3NlcXVhbChkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2ludCBfX292bGQgX19jbmZuIGlzbGVzc2VxdWFsKGhhbGYgeCwgaGFsZiB5KTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGlzbGVzc2VxdWFsKGhhbGYyIHgsIGhhbGYyIHkpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gaXNsZXNzZXF1YWwoaGFsZjMgeCwgaGFsZjMgeSk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBpc2xlc3NlcXVhbChoYWxmNCB4LCBoYWxmNCB5KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGlzbGVzc2VxdWFsKGhhbGY4IHgsIGhhbGY4IHkpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGlzbGVzc2VxdWFsKGhhbGYxNiB4LCBoYWxmMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgdGhlIGNvbXBvbmVudC13aXNlIGNvbXBhcmUgb2YKKyAqICh4IDwgeSkgfHwgKHggPiB5KSAuCisgKi8KK2ludCBfX292bGQgX19jbmZuIGlzbGVzc2dyZWF0ZXIoZmxvYXQgeCwgZmxvYXQgeSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gaXNsZXNzZ3JlYXRlcihmbG9hdDIgeCwgZmxvYXQyIHkpOworaW50MyBfX292bGQgX19jbmZuIGlzbGVzc2dyZWF0ZXIoZmxvYXQzIHgsIGZsb2F0MyB5KTsKK2ludDQgX19vdmxkIF9fY25mbiBpc2xlc3NncmVhdGVyKGZsb2F0NCB4LCBmbG9hdDQgeSk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gaXNsZXNzZ3JlYXRlcihmbG9hdDggeCwgZmxvYXQ4IHkpOworaW50MTYgX19vdmxkIF9fY25mbiBpc2xlc3NncmVhdGVyKGZsb2F0MTYgeCwgZmxvYXQxNiB5KTsKKyNpZmRlZiBjbF9raHJfZnA2NAoraW50IF9fb3ZsZCBfX2NuZm4gaXNsZXNzZ3JlYXRlcihkb3VibGUgeCwgZG91YmxlIHkpOworbG9uZzIgX19vdmxkIF9fY25mbiBpc2xlc3NncmVhdGVyKGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gaXNsZXNzZ3JlYXRlcihkb3VibGUzIHgsIGRvdWJsZTMgeSk7Citsb25nNCBfX292bGQgX19jbmZuIGlzbGVzc2dyZWF0ZXIoZG91YmxlNCB4LCBkb3VibGU0IHkpOworbG9uZzggX19vdmxkIF9fY25mbiBpc2xlc3NncmVhdGVyKGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGlzbGVzc2dyZWF0ZXIoZG91YmxlMTYgeCwgZG91YmxlMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitpbnQgX19vdmxkIF9fY25mbiBpc2xlc3NncmVhdGVyKGhhbGYgeCwgaGFsZiB5KTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGlzbGVzc2dyZWF0ZXIoaGFsZjIgeCwgaGFsZjIgeSk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBpc2xlc3NncmVhdGVyKGhhbGYzIHgsIGhhbGYzIHkpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gaXNsZXNzZ3JlYXRlcihoYWxmNCB4LCBoYWxmNCB5KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGlzbGVzc2dyZWF0ZXIoaGFsZjggeCwgaGFsZjggeSk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gaXNsZXNzZ3JlYXRlcihoYWxmMTYgeCwgaGFsZjE2IHkpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBUZXN0IGZvciBmaW5pdGUgdmFsdWUuCisgKi8KK2ludCBfX292bGQgX19jbmZuIGlzZmluaXRlKGZsb2F0KTsKK2ludDIgX19vdmxkIF9fY25mbiBpc2Zpbml0ZShmbG9hdDIpOworaW50MyBfX292bGQgX19jbmZuIGlzZmluaXRlKGZsb2F0Myk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gaXNmaW5pdGUoZmxvYXQ0KTsKK2ludDggX19vdmxkIF9fY25mbiBpc2Zpbml0ZShmbG9hdDgpOworaW50MTYgX19vdmxkIF9fY25mbiBpc2Zpbml0ZShmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAoraW50IF9fb3ZsZCBfX2NuZm4gaXNmaW5pdGUoZG91YmxlKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gaXNmaW5pdGUoZG91YmxlMik7Citsb25nMyBfX292bGQgX19jbmZuIGlzZmluaXRlKGRvdWJsZTMpOworbG9uZzQgX19vdmxkIF9fY25mbiBpc2Zpbml0ZShkb3VibGU0KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gaXNmaW5pdGUoZG91YmxlOCk7Citsb25nMTYgX19vdmxkIF9fY25mbiBpc2Zpbml0ZShkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitpbnQgX19vdmxkIF9fY25mbiBpc2Zpbml0ZShoYWxmKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGlzZmluaXRlKGhhbGYyKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGlzZmluaXRlKGhhbGYzKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGlzZmluaXRlKGhhbGY0KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGlzZmluaXRlKGhhbGY4KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBpc2Zpbml0ZShoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBUZXN0IGZvciBpbmZpbml0eSB2YWx1ZSAoK3ZlIG9yIC12ZSkgLgorICovCitpbnQgX19vdmxkIF9fY25mbiBpc2luZihmbG9hdCk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gaXNpbmYoZmxvYXQyKTsKK2ludDMgX19vdmxkIF9fY25mbiBpc2luZihmbG9hdDMpOworaW50NCBfX292bGQgX19jbmZuIGlzaW5mKGZsb2F0NCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gaXNpbmYoZmxvYXQ4KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gaXNpbmYoZmxvYXQxNik7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2ludCBfX292bGQgX19jbmZuIGlzaW5mKGRvdWJsZSk7Citsb25nMiBfX292bGQgX19jbmZuIGlzaW5mKGRvdWJsZTIpOworbG9uZzMgX19vdmxkIF9fY25mbiBpc2luZihkb3VibGUzKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gaXNpbmYoZG91YmxlNCk7Citsb25nOCBfX292bGQgX19jbmZuIGlzaW5mKGRvdWJsZTgpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gaXNpbmYoZG91YmxlMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraW50IF9fb3ZsZCBfX2NuZm4gaXNpbmYoaGFsZik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBpc2luZihoYWxmMik7CitzaG9ydDMgX19vdmxkIF9fY25mbiBpc2luZihoYWxmMyk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBpc2luZihoYWxmNCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBpc2luZihoYWxmOCk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gaXNpbmYoaGFsZjE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogVGVzdCBmb3IgYSBOYU4uCisgKi8KK2ludCBfX292bGQgX19jbmZuIGlzbmFuKGZsb2F0KTsKK2ludDIgX19vdmxkIF9fY25mbiBpc25hbihmbG9hdDIpOworaW50MyBfX292bGQgX19jbmZuIGlzbmFuKGZsb2F0Myk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gaXNuYW4oZmxvYXQ0KTsKK2ludDggX19vdmxkIF9fY25mbiBpc25hbihmbG9hdDgpOworaW50MTYgX19vdmxkIF9fY25mbiBpc25hbihmbG9hdDE2KTsKKyNpZmRlZiBjbF9raHJfZnA2NAoraW50IF9fb3ZsZCBfX2NuZm4gaXNuYW4oZG91YmxlKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gaXNuYW4oZG91YmxlMik7Citsb25nMyBfX292bGQgX19jbmZuIGlzbmFuKGRvdWJsZTMpOworbG9uZzQgX19vdmxkIF9fY25mbiBpc25hbihkb3VibGU0KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gaXNuYW4oZG91YmxlOCk7Citsb25nMTYgX19vdmxkIF9fY25mbiBpc25hbihkb3VibGUxNik7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitpbnQgX19vdmxkIF9fY25mbiBpc25hbihoYWxmKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGlzbmFuKGhhbGYyKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGlzbmFuKGhhbGYzKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIGlzbmFuKGhhbGY0KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGlzbmFuKGhhbGY4KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBpc25hbihoYWxmMTYpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBUZXN0IGZvciBhIG5vcm1hbCB2YWx1ZS4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gaXNub3JtYWwoZmxvYXQpOworaW50MiBfX292bGQgX19jbmZuIGlzbm9ybWFsKGZsb2F0Mik7CitpbnQzIF9fb3ZsZCBfX2NuZm4gaXNub3JtYWwoZmxvYXQzKTsKK2ludDQgX19vdmxkIF9fY25mbiBpc25vcm1hbChmbG9hdDQpOworaW50OCBfX292bGQgX19jbmZuIGlzbm9ybWFsKGZsb2F0OCk7CitpbnQxNiBfX292bGQgX19jbmZuIGlzbm9ybWFsKGZsb2F0MTYpOworI2lmZGVmIGNsX2tocl9mcDY0CitpbnQgX19vdmxkIF9fY25mbiBpc25vcm1hbChkb3VibGUpOworbG9uZzIgX19vdmxkIF9fY25mbiBpc25vcm1hbChkb3VibGUyKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gaXNub3JtYWwoZG91YmxlMyk7Citsb25nNCBfX292bGQgX19jbmZuIGlzbm9ybWFsKGRvdWJsZTQpOworbG9uZzggX19vdmxkIF9fY25mbiBpc25vcm1hbChkb3VibGU4KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGlzbm9ybWFsKGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2ludCBfX292bGQgX19jbmZuIGlzbm9ybWFsKGhhbGYpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gaXNub3JtYWwoaGFsZjIpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gaXNub3JtYWwoaGFsZjMpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gaXNub3JtYWwoaGFsZjQpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gaXNub3JtYWwoaGFsZjgpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGlzbm9ybWFsKGhhbGYxNik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFRlc3QgaWYgYXJndW1lbnRzIGFyZSBvcmRlcmVkLiBpc29yZGVyZWQoKSB0YWtlcworICogYXJndW1lbnRzIHggYW5kIHksIGFuZCByZXR1cm5zIHRoZSByZXN1bHQKKyAqIGlzZXF1YWwoeCwgeCkgJiYgaXNlcXVhbCh5LCB5KS4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gaXNvcmRlcmVkKGZsb2F0IHgsIGZsb2F0IHkpOworaW50MiBfX292bGQgX19jbmZuIGlzb3JkZXJlZChmbG9hdDIgeCwgZmxvYXQyIHkpOworaW50MyBfX292bGQgX19jbmZuIGlzb3JkZXJlZChmbG9hdDMgeCwgZmxvYXQzIHkpOworaW50NCBfX292bGQgX19jbmZuIGlzb3JkZXJlZChmbG9hdDQgeCwgZmxvYXQ0IHkpOworaW50OCBfX292bGQgX19jbmZuIGlzb3JkZXJlZChmbG9hdDggeCwgZmxvYXQ4IHkpOworaW50MTYgX19vdmxkIF9fY25mbiBpc29yZGVyZWQoZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0CitpbnQgX19vdmxkIF9fY25mbiBpc29yZGVyZWQoZG91YmxlIHgsIGRvdWJsZSB5KTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gaXNvcmRlcmVkKGRvdWJsZTIgeCwgZG91YmxlMiB5KTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gaXNvcmRlcmVkKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gaXNvcmRlcmVkKGRvdWJsZTQgeCwgZG91YmxlNCB5KTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gaXNvcmRlcmVkKGRvdWJsZTggeCwgZG91YmxlOCB5KTsKK2xvbmcxNiBfX292bGQgX19jbmZuIGlzb3JkZXJlZChkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2ludCBfX292bGQgX19jbmZuIGlzb3JkZXJlZChoYWxmIHgsIGhhbGYgeSk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBpc29yZGVyZWQoaGFsZjIgeCwgaGFsZjIgeSk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBpc29yZGVyZWQoaGFsZjMgeCwgaGFsZjMgeSk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBpc29yZGVyZWQoaGFsZjQgeCwgaGFsZjQgeSk7CitzaG9ydDggX19vdmxkIF9fY25mbiBpc29yZGVyZWQoaGFsZjggeCwgaGFsZjggeSk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gaXNvcmRlcmVkKGhhbGYxNiB4LCBoYWxmMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFRlc3QgaWYgYXJndW1lbnRzIGFyZSB1bm9yZGVyZWQuIGlzdW5vcmRlcmVkKCkKKyAqIHRha2VzIGFyZ3VtZW50cyB4IGFuZCB5LCByZXR1cm5pbmcgbm9uLXplcm8gaWYgeCBvciB5CisgKiBpcyBOYU4sIGFuZCB6ZXJvIG90aGVyd2lzZS4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gaXN1bm9yZGVyZWQoZmxvYXQgeCwgZmxvYXQgeSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gaXN1bm9yZGVyZWQoZmxvYXQyIHgsIGZsb2F0MiB5KTsKK2ludDMgX19vdmxkIF9fY25mbiBpc3Vub3JkZXJlZChmbG9hdDMgeCwgZmxvYXQzIHkpOworaW50NCBfX292bGQgX19jbmZuIGlzdW5vcmRlcmVkKGZsb2F0NCB4LCBmbG9hdDQgeSk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gaXN1bm9yZGVyZWQoZmxvYXQ4IHgsIGZsb2F0OCB5KTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gaXN1bm9yZGVyZWQoZmxvYXQxNiB4LCBmbG9hdDE2IHkpOworI2lmZGVmIGNsX2tocl9mcDY0CitpbnQgX19vdmxkIF9fY25mbiBpc3Vub3JkZXJlZChkb3VibGUgeCwgZG91YmxlIHkpOworbG9uZzIgX19vdmxkIF9fY25mbiBpc3Vub3JkZXJlZChkb3VibGUyIHgsIGRvdWJsZTIgeSk7Citsb25nMyBfX292bGQgX19jbmZuIGlzdW5vcmRlcmVkKGRvdWJsZTMgeCwgZG91YmxlMyB5KTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gaXN1bm9yZGVyZWQoZG91YmxlNCB4LCBkb3VibGU0IHkpOworbG9uZzggX19vdmxkIF9fY25mbiBpc3Vub3JkZXJlZChkb3VibGU4IHgsIGRvdWJsZTggeSk7Citsb25nMTYgX19vdmxkIF9fY25mbiBpc3Vub3JkZXJlZChkb3VibGUxNiB4LCBkb3VibGUxNiB5KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2ludCBfX292bGQgX19jbmZuIGlzdW5vcmRlcmVkKGhhbGYgeCwgaGFsZiB5KTsKK3Nob3J0MiBfX292bGQgX19jbmZuIGlzdW5vcmRlcmVkKGhhbGYyIHgsIGhhbGYyIHkpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gaXN1bm9yZGVyZWQoaGFsZjMgeCwgaGFsZjMgeSk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBpc3Vub3JkZXJlZChoYWxmNCB4LCBoYWxmNCB5KTsKK3Nob3J0OCBfX292bGQgX19jbmZuIGlzdW5vcmRlcmVkKGhhbGY4IHgsIGhhbGY4IHkpOworc2hvcnQxNiBfX292bGQgX19jbmZuIGlzdW5vcmRlcmVkKGhhbGYxNiB4LCBoYWxmMTYgeSk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFRlc3QgZm9yIHNpZ24gYml0LiBUaGUgc2NhbGFyIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uCisgKiByZXR1cm5zIGEgMSBpZiB0aGUgc2lnbiBiaXQgaW4gdGhlIGZsb2F0IGlzIHNldCBlbHNlIHJldHVybnMKKyAqIDAuIFRoZSB2ZWN0b3IgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUKKyAqIGZvbGxvd2luZyBmb3IgZWFjaCBjb21wb25lbnQgaW4gZmxvYXRuOiBhIC0xIGlmIHRoZQorICogc2lnbiBiaXQgaW4gdGhlIGZsb2F0IGlzIHNldCBlbHNlIHJldHVybnMgMC4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gc2lnbmJpdChmbG9hdCk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gc2lnbmJpdChmbG9hdDIpOworaW50MyBfX292bGQgX19jbmZuIHNpZ25iaXQoZmxvYXQzKTsKK2ludDQgX19vdmxkIF9fY25mbiBzaWduYml0KGZsb2F0NCk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gc2lnbmJpdChmbG9hdDgpOworaW50MTYgX19vdmxkIF9fY25mbiBzaWduYml0KGZsb2F0MTYpOworI2lmZGVmIGNsX2tocl9mcDY0CitpbnQgX19vdmxkIF9fY25mbiBzaWduYml0KGRvdWJsZSk7Citsb25nMiBfX292bGQgX19jbmZuIHNpZ25iaXQoZG91YmxlMik7Citsb25nMyBfX292bGQgX19jbmZuIHNpZ25iaXQoZG91YmxlMyk7Citsb25nNCBfX292bGQgX19jbmZuIHNpZ25iaXQoZG91YmxlNCk7Citsb25nOCBfX292bGQgX19jbmZuIHNpZ25iaXQoZG91YmxlOCk7Citsb25nMTYgX19vdmxkIF9fY25mbiBzaWduYml0KGRvdWJsZTE2KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2ludCBfX292bGQgX19jbmZuIHNpZ25iaXQoaGFsZik7CitzaG9ydDIgX19vdmxkIF9fY25mbiBzaWduYml0KGhhbGYyKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIHNpZ25iaXQoaGFsZjMpOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2lnbmJpdChoYWxmNCk7CitzaG9ydDggX19vdmxkIF9fY25mbiBzaWduYml0KGhhbGY4KTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBzaWduYml0KGhhbGYxNik7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvKioKKyAqIFJldHVybnMgMSBpZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gYW55IGNvbXBvbmVudAorICogb2YgeCBpcyBzZXQ7IG90aGVyd2lzZSByZXR1cm5zIDAuCisgKi8KK2ludCBfX292bGQgX19jbmZuIGFueShjaGFyIHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KGNoYXIyIHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KGNoYXIzIHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KGNoYXI0IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KGNoYXI4IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KGNoYXIxNiB4KTsKK2ludCBfX292bGQgX19jbmZuIGFueShzaG9ydCB4KTsKK2ludCBfX292bGQgX19jbmZuIGFueShzaG9ydDIgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbnkoc2hvcnQzIHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KHNob3J0NCB4KTsKK2ludCBfX292bGQgX19jbmZuIGFueShzaG9ydDggeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbnkoc2hvcnQxNiB4KTsKK2ludCBfX292bGQgX19jbmZuIGFueShpbnQgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbnkoaW50MiB4KTsKK2ludCBfX292bGQgX19jbmZuIGFueShpbnQzIHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KGludDQgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbnkoaW50OCB4KTsKK2ludCBfX292bGQgX19jbmZuIGFueShpbnQxNiB4KTsKK2ludCBfX292bGQgX19jbmZuIGFueShsb25nIHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KGxvbmcyIHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KGxvbmczIHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KGxvbmc0IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KGxvbmc4IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYW55KGxvbmcxNiB4KTsKKworLyoqCisgKiBSZXR1cm5zIDEgaWYgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGluIGFsbCBjb21wb25lbnRzCisgKiBvZiB4IGlzIHNldDsgb3RoZXJ3aXNlIHJldHVybnMgMC4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gYWxsKGNoYXIgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwoY2hhcjIgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwoY2hhcjMgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwoY2hhcjQgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwoY2hhcjggeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwoY2hhcjE2IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYWxsKHNob3J0IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYWxsKHNob3J0MiB4KTsKK2ludCBfX292bGQgX19jbmZuIGFsbChzaG9ydDMgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwoc2hvcnQ0IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYWxsKHNob3J0OCB4KTsKK2ludCBfX292bGQgX19jbmZuIGFsbChzaG9ydDE2IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYWxsKGludCB4KTsKK2ludCBfX292bGQgX19jbmZuIGFsbChpbnQyIHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYWxsKGludDMgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwoaW50NCB4KTsKK2ludCBfX292bGQgX19jbmZuIGFsbChpbnQ4IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYWxsKGludDE2IHgpOworaW50IF9fb3ZsZCBfX2NuZm4gYWxsKGxvbmcgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwobG9uZzIgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwobG9uZzMgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwobG9uZzQgeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwobG9uZzggeCk7CitpbnQgX19vdmxkIF9fY25mbiBhbGwobG9uZzE2IHgpOworCisvKioKKyAqIEVhY2ggYml0IG9mIHRoZSByZXN1bHQgaXMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IG9mIGEgaWYKKyAqIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBvZiBjIGlzIDAuIE90aGVyd2lzZSBpdCBpcyB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgYml0IG9mIGIuCisgKi8KK2NoYXIgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoY2hhciBhLCBjaGFyIGIsIGNoYXIgYyk7Cit1Y2hhciBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1Y2hhciBhLCB1Y2hhciBiLCB1Y2hhciBjKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGNoYXIyIGEsIGNoYXIyIGIsIGNoYXIyIGMpOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHVjaGFyMiBhLCB1Y2hhcjIgYiwgdWNoYXIyIGMpOworY2hhcjMgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoY2hhcjMgYSwgY2hhcjMgYiwgY2hhcjMgYyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QodWNoYXIzIGEsIHVjaGFyMyBiLCB1Y2hhcjMgYyk7CitjaGFyNCBfX292bGQgX19jbmZuIGJpdHNlbGVjdChjaGFyNCBhLCBjaGFyNCBiLCBjaGFyNCBjKTsKK3VjaGFyNCBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1Y2hhcjQgYSwgdWNoYXI0IGIsIHVjaGFyNCBjKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGNoYXI4IGEsIGNoYXI4IGIsIGNoYXI4IGMpOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHVjaGFyOCBhLCB1Y2hhcjggYiwgdWNoYXI4IGMpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGNoYXIxNiBhLCBjaGFyMTYgYiwgY2hhcjE2IGMpOwordWNoYXIxNiBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1Y2hhcjE2IGEsIHVjaGFyMTYgYiwgdWNoYXIxNiBjKTsKK3Nob3J0IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHNob3J0IGEsIHNob3J0IGIsIHNob3J0IGMpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHVzaG9ydCBhLCB1c2hvcnQgYiwgdXNob3J0IGMpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHNob3J0MiBhLCBzaG9ydDIgYiwgc2hvcnQyIGMpOwordXNob3J0MiBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1c2hvcnQyIGEsIHVzaG9ydDIgYiwgdXNob3J0MiBjKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIGJpdHNlbGVjdChzaG9ydDMgYSwgc2hvcnQzIGIsIHNob3J0MyBjKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QodXNob3J0MyBhLCB1c2hvcnQzIGIsIHVzaG9ydDMgYyk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBiaXRzZWxlY3Qoc2hvcnQ0IGEsIHNob3J0NCBiLCBzaG9ydDQgYyk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHVzaG9ydDQgYSwgdXNob3J0NCBiLCB1c2hvcnQ0IGMpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHNob3J0OCBhLCBzaG9ydDggYiwgc2hvcnQ4IGMpOwordXNob3J0OCBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1c2hvcnQ4IGEsIHVzaG9ydDggYiwgdXNob3J0OCBjKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBiaXRzZWxlY3Qoc2hvcnQxNiBhLCBzaG9ydDE2IGIsIHNob3J0MTYgYyk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1c2hvcnQxNiBhLCB1c2hvcnQxNiBiLCB1c2hvcnQxNiBjKTsKK2ludCBfX292bGQgX19jbmZuIGJpdHNlbGVjdChpbnQgYSwgaW50IGIsIGludCBjKTsKK3VpbnQgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QodWludCBhLCB1aW50IGIsIHVpbnQgYyk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGludDIgYSwgaW50MiBiLCBpbnQyIGMpOwordWludDIgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QodWludDIgYSwgdWludDIgYiwgdWludDIgYyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGludDMgYSwgaW50MyBiLCBpbnQzIGMpOwordWludDMgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QodWludDMgYSwgdWludDMgYiwgdWludDMgYyk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGludDQgYSwgaW50NCBiLCBpbnQ0IGMpOwordWludDQgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QodWludDQgYSwgdWludDQgYiwgdWludDQgYyk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGludDggYSwgaW50OCBiLCBpbnQ4IGMpOwordWludDggX19vdmxkIF9fY25mbiBiaXRzZWxlY3QodWludDggYSwgdWludDggYiwgdWludDggYyk7CitpbnQxNiBfX292bGQgX19jbmZuIGJpdHNlbGVjdChpbnQxNiBhLCBpbnQxNiBiLCBpbnQxNiBjKTsKK3VpbnQxNiBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1aW50MTYgYSwgdWludDE2IGIsIHVpbnQxNiBjKTsKK2xvbmcgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QobG9uZyBhLCBsb25nIGIsIGxvbmcgYyk7Cit1bG9uZyBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1bG9uZyBhLCB1bG9uZyBiLCB1bG9uZyBjKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGxvbmcyIGEsIGxvbmcyIGIsIGxvbmcyIGMpOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHVsb25nMiBhLCB1bG9uZzIgYiwgdWxvbmcyIGMpOworbG9uZzMgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QobG9uZzMgYSwgbG9uZzMgYiwgbG9uZzMgYyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QodWxvbmczIGEsIHVsb25nMyBiLCB1bG9uZzMgYyk7Citsb25nNCBfX292bGQgX19jbmZuIGJpdHNlbGVjdChsb25nNCBhLCBsb25nNCBiLCBsb25nNCBjKTsKK3Vsb25nNCBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1bG9uZzQgYSwgdWxvbmc0IGIsIHVsb25nNCBjKTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGxvbmc4IGEsIGxvbmc4IGIsIGxvbmc4IGMpOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KHVsb25nOCBhLCB1bG9uZzggYiwgdWxvbmc4IGMpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGxvbmcxNiBhLCBsb25nMTYgYiwgbG9uZzE2IGMpOwordWxvbmcxNiBfX292bGQgX19jbmZuIGJpdHNlbGVjdCh1bG9uZzE2IGEsIHVsb25nMTYgYiwgdWxvbmcxNiBjKTsKK2Zsb2F0IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGMpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGZsb2F0MiBhLCBmbG9hdDIgYiwgZmxvYXQyIGMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGZsb2F0MyBhLCBmbG9hdDMgYiwgZmxvYXQzIGMpOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGZsb2F0NCBhLCBmbG9hdDQgYiwgZmxvYXQ0IGMpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGZsb2F0OCBhLCBmbG9hdDggYiwgZmxvYXQ4IGMpOworZmxvYXQxNiBfX292bGQgX19jbmZuIGJpdHNlbGVjdChmbG9hdDE2IGEsIGZsb2F0MTYgYiwgZmxvYXQxNiBjKTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMpOworZG91YmxlMiBfX292bGQgX19jbmZuIGJpdHNlbGVjdChkb3VibGUyIGEsIGRvdWJsZTIgYiwgZG91YmxlMiBjKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoZG91YmxlMyBhLCBkb3VibGUzIGIsIGRvdWJsZTMgYyk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGRvdWJsZTQgYSwgZG91YmxlNCBiLCBkb3VibGU0IGMpOworZG91YmxlOCBfX292bGQgX19jbmZuIGJpdHNlbGVjdChkb3VibGU4IGEsIGRvdWJsZTggYiwgZG91YmxlOCBjKTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGRvdWJsZTE2IGEsIGRvdWJsZTE2IGIsIGRvdWJsZTE2IGMpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jbmZuIGJpdHNlbGVjdChoYWxmIGEsIGhhbGYgYiwgaGFsZiBjKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGhhbGYyIGEsIGhhbGYyIGIsIGhhbGYyIGMpOworaGFsZjMgX19vdmxkIF9fY25mbiBiaXRzZWxlY3QoaGFsZjMgYSwgaGFsZjMgYiwgaGFsZjMgYyk7CitoYWxmNCBfX292bGQgX19jbmZuIGJpdHNlbGVjdChoYWxmNCBhLCBoYWxmNCBiLCBoYWxmNCBjKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGhhbGY4IGEsIGhhbGY4IGIsIGhhbGY4IGMpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gYml0c2VsZWN0KGhhbGYxNiBhLCBoYWxmMTYgYiwgaGFsZjE2IGMpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBGb3IgZWFjaCBjb21wb25lbnQgb2YgYSB2ZWN0b3IgdHlwZSwKKyAqIHJlc3VsdFtpXSA9IGlmIE1TQiBvZiBjW2ldIGlzIHNldCA/IGJbaV0gOiBhW2ldLgorICogRm9yIGEgc2NhbGFyIHR5cGUsIHJlc3VsdCA9IGMgPyBiIDogYS4KKyAqLworY2hhciBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyIGEsIGNoYXIgYiwgY2hhciBjKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyIGEsIHVjaGFyIGIsIGNoYXIgYyk7CitjaGFyMiBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyMiBhLCBjaGFyMiBiLCBjaGFyMiBjKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjIgYSwgdWNoYXIyIGIsIGNoYXIyIGMpOworY2hhcjMgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjMgYSwgY2hhcjMgYiwgY2hhcjMgYyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXIzIGEsIHVjaGFyMyBiLCBjaGFyMyBjKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXI0IGEsIGNoYXI0IGIsIGNoYXI0IGMpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyNCBhLCB1Y2hhcjQgYiwgY2hhcjQgYyk7CitjaGFyOCBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyOCBhLCBjaGFyOCBiLCBjaGFyOCBjKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjggYSwgdWNoYXI4IGIsIGNoYXI4IGMpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIxNiBhLCBjaGFyMTYgYiwgY2hhcjE2IGMpOwordWNoYXIxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjE2IGEsIHVjaGFyMTYgYiwgY2hhcjE2IGMpOworc2hvcnQgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQgYSwgc2hvcnQgYiwgY2hhciBjKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQgYSwgdXNob3J0IGIsIGNoYXIgYyk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQyIGEsIHNob3J0MiBiLCBjaGFyMiBjKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MiBhLCB1c2hvcnQyIGIsIGNoYXIyIGMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0MyBhLCBzaG9ydDMgYiwgY2hhcjMgYyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydDMgYSwgdXNob3J0MyBiLCBjaGFyMyBjKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDQgYSwgc2hvcnQ0IGIsIGNoYXI0IGMpOwordXNob3J0NCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQ0IGEsIHVzaG9ydDQgYiwgY2hhcjQgYyk7CitzaG9ydDggX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQ4IGEsIHNob3J0OCBiLCBjaGFyOCBjKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0OCBhLCB1c2hvcnQ4IGIsIGNoYXI4IGMpOworc2hvcnQxNiBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDE2IGEsIHNob3J0MTYgYiwgY2hhcjE2IGMpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MTYgYSwgdXNob3J0MTYgYiwgY2hhcjE2IGMpOworaW50IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludCBhLCBpbnQgYiwgY2hhciBjKTsKK3VpbnQgX19vdmxkIF9fY25mbiBzZWxlY3QodWludCBhLCB1aW50IGIsIGNoYXIgYyk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDIgYSwgaW50MiBiLCBjaGFyMiBjKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQyIGEsIHVpbnQyIGIsIGNoYXIyIGMpOworaW50MyBfX292bGQgX19jbmZuIHNlbGVjdChpbnQzIGEsIGludDMgYiwgY2hhcjMgYyk7Cit1aW50MyBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50MyBhLCB1aW50MyBiLCBjaGFyMyBjKTsKK2ludDQgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50NCBhLCBpbnQ0IGIsIGNoYXI0IGMpOwordWludDQgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDQgYSwgdWludDQgYiwgY2hhcjQgYyk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDggYSwgaW50OCBiLCBjaGFyOCBjKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQ4IGEsIHVpbnQ4IGIsIGNoYXI4IGMpOworaW50MTYgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MTYgYSwgaW50MTYgYiwgY2hhcjE2IGMpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQxNiBhLCB1aW50MTYgYiwgY2hhcjE2IGMpOworbG9uZyBfX292bGQgX19jbmZuIHNlbGVjdChsb25nIGEsIGxvbmcgYiwgY2hhciBjKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nIGEsIHVsb25nIGIsIGNoYXIgYyk7Citsb25nMiBfX292bGQgX19jbmZuIHNlbGVjdChsb25nMiBhLCBsb25nMiBiLCBjaGFyMiBjKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzIgYSwgdWxvbmcyIGIsIGNoYXIyIGMpOworbG9uZzMgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzMgYSwgbG9uZzMgYiwgY2hhcjMgYyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmczIGEsIHVsb25nMyBiLCBjaGFyMyBjKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmc0IGEsIGxvbmc0IGIsIGNoYXI0IGMpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nNCBhLCB1bG9uZzQgYiwgY2hhcjQgYyk7Citsb25nOCBfX292bGQgX19jbmZuIHNlbGVjdChsb25nOCBhLCBsb25nOCBiLCBjaGFyOCBjKTsKK3Vsb25nOCBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzggYSwgdWxvbmc4IGIsIGNoYXI4IGMpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcxNiBhLCBsb25nMTYgYiwgY2hhcjE2IGMpOwordWxvbmcxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzE2IGEsIHVsb25nMTYgYiwgY2hhcjE2IGMpOworZmxvYXQgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQgYSwgZmxvYXQgYiwgY2hhciBjKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDIgYSwgZmxvYXQyIGIsIGNoYXIyIGMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0MyBhLCBmbG9hdDMgYiwgY2hhcjMgYyk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQ0IGEsIGZsb2F0NCBiLCBjaGFyNCBjKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDggYSwgZmxvYXQ4IGIsIGNoYXI4IGMpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDE2IGEsIGZsb2F0MTYgYiwgY2hhcjE2IGMpOworY2hhciBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyIGEsIGNoYXIgYiwgc2hvcnQgYyk7Cit1Y2hhciBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhciBhLCB1Y2hhciBiLCBzaG9ydCBjKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIyIGEsIGNoYXIyIGIsIHNob3J0MiBjKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjIgYSwgdWNoYXIyIGIsIHNob3J0MiBjKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIzIGEsIGNoYXIzIGIsIHNob3J0MyBjKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjMgYSwgdWNoYXIzIGIsIHNob3J0MyBjKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXI0IGEsIGNoYXI0IGIsIHNob3J0NCBjKTsKK3VjaGFyNCBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjQgYSwgdWNoYXI0IGIsIHNob3J0NCBjKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXI4IGEsIGNoYXI4IGIsIHNob3J0OCBjKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjggYSwgdWNoYXI4IGIsIHNob3J0OCBjKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyMTYgYSwgY2hhcjE2IGIsIHNob3J0MTYgYyk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMTYgYSwgdWNoYXIxNiBiLCBzaG9ydDE2IGMpOworc2hvcnQgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQgYSwgc2hvcnQgYiwgc2hvcnQgYyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0IGEsIHVzaG9ydCBiLCBzaG9ydCBjKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDIgYSwgc2hvcnQyIGIsIHNob3J0MiBjKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MiBhLCB1c2hvcnQyIGIsIHNob3J0MiBjKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDMgYSwgc2hvcnQzIGIsIHNob3J0MyBjKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MyBhLCB1c2hvcnQzIGIsIHNob3J0MyBjKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDQgYSwgc2hvcnQ0IGIsIHNob3J0NCBjKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0NCBhLCB1c2hvcnQ0IGIsIHNob3J0NCBjKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDggYSwgc2hvcnQ4IGIsIHNob3J0OCBjKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0OCBhLCB1c2hvcnQ4IGIsIHNob3J0OCBjKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQxNiBhLCBzaG9ydDE2IGIsIHNob3J0MTYgYyk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQxNiBhLCB1c2hvcnQxNiBiLCBzaG9ydDE2IGMpOworaW50IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludCBhLCBpbnQgYiwgc2hvcnQgYyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQgYSwgdWludCBiLCBzaG9ydCBjKTsKK2ludDIgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MiBhLCBpbnQyIGIsIHNob3J0MiBjKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQyIGEsIHVpbnQyIGIsIHNob3J0MiBjKTsKK2ludDMgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MyBhLCBpbnQzIGIsIHNob3J0MyBjKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQzIGEsIHVpbnQzIGIsIHNob3J0MyBjKTsKK2ludDQgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50NCBhLCBpbnQ0IGIsIHNob3J0NCBjKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQ0IGEsIHVpbnQ0IGIsIHNob3J0NCBjKTsKK2ludDggX19vdmxkIF9fY25mbiBzZWxlY3QoaW50OCBhLCBpbnQ4IGIsIHNob3J0OCBjKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQ4IGEsIHVpbnQ4IGIsIHNob3J0OCBjKTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDE2IGEsIGludDE2IGIsIHNob3J0MTYgYyk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDE2IGEsIHVpbnQxNiBiLCBzaG9ydDE2IGMpOworbG9uZyBfX292bGQgX19jbmZuIHNlbGVjdChsb25nIGEsIGxvbmcgYiwgc2hvcnQgYyk7Cit1bG9uZyBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZyBhLCB1bG9uZyBiLCBzaG9ydCBjKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcyIGEsIGxvbmcyIGIsIHNob3J0MiBjKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzIgYSwgdWxvbmcyIGIsIHNob3J0MiBjKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmczIGEsIGxvbmczIGIsIHNob3J0MyBjKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzMgYSwgdWxvbmczIGIsIHNob3J0MyBjKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmc0IGEsIGxvbmc0IGIsIHNob3J0NCBjKTsKK3Vsb25nNCBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzQgYSwgdWxvbmc0IGIsIHNob3J0NCBjKTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmc4IGEsIGxvbmc4IGIsIHNob3J0OCBjKTsKK3Vsb25nOCBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzggYSwgdWxvbmc4IGIsIHNob3J0OCBjKTsKK2xvbmcxNiBfX292bGQgX19jbmZuIHNlbGVjdChsb25nMTYgYSwgbG9uZzE2IGIsIHNob3J0MTYgYyk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMTYgYSwgdWxvbmcxNiBiLCBzaG9ydDE2IGMpOworZmxvYXQgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQgYSwgZmxvYXQgYiwgc2hvcnQgYyk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQyIGEsIGZsb2F0MiBiLCBzaG9ydDIgYyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQzIGEsIGZsb2F0MyBiLCBzaG9ydDMgYyk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQ0IGEsIGZsb2F0NCBiLCBzaG9ydDQgYyk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQ4IGEsIGZsb2F0OCBiLCBzaG9ydDggYyk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0MTYgYSwgZmxvYXQxNiBiLCBzaG9ydDE2IGMpOworY2hhciBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyIGEsIGNoYXIgYiwgaW50IGMpOwordWNoYXIgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXIgYSwgdWNoYXIgYiwgaW50IGMpOworY2hhcjIgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjIgYSwgY2hhcjIgYiwgaW50MiBjKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjIgYSwgdWNoYXIyIGIsIGludDIgYyk7CitjaGFyMyBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyMyBhLCBjaGFyMyBiLCBpbnQzIGMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMyBhLCB1Y2hhcjMgYiwgaW50MyBjKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXI0IGEsIGNoYXI0IGIsIGludDQgYyk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXI0IGEsIHVjaGFyNCBiLCBpbnQ0IGMpOworY2hhcjggX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjggYSwgY2hhcjggYiwgaW50OCBjKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjggYSwgdWNoYXI4IGIsIGludDggYyk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjE2IGEsIGNoYXIxNiBiLCBpbnQxNiBjKTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXIxNiBhLCB1Y2hhcjE2IGIsIGludDE2IGMpOworc2hvcnQgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQgYSwgc2hvcnQgYiwgaW50IGMpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydCBhLCB1c2hvcnQgYiwgaW50IGMpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0MiBhLCBzaG9ydDIgYiwgaW50MiBjKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MiBhLCB1c2hvcnQyIGIsIGludDIgYyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQzIGEsIHNob3J0MyBiLCBpbnQzIGMpOwordXNob3J0MyBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQzIGEsIHVzaG9ydDMgYiwgaW50MyBjKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDQgYSwgc2hvcnQ0IGIsIGludDQgYyk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydDQgYSwgdXNob3J0NCBiLCBpbnQ0IGMpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0OCBhLCBzaG9ydDggYiwgaW50OCBjKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0OCBhLCB1c2hvcnQ4IGIsIGludDggYyk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0MTYgYSwgc2hvcnQxNiBiLCBpbnQxNiBjKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydDE2IGEsIHVzaG9ydDE2IGIsIGludDE2IGMpOworaW50IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludCBhLCBpbnQgYiwgaW50IGMpOwordWludCBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50IGEsIHVpbnQgYiwgaW50IGMpOworaW50MiBfX292bGQgX19jbmZuIHNlbGVjdChpbnQyIGEsIGludDIgYiwgaW50MiBjKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQyIGEsIHVpbnQyIGIsIGludDIgYyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDMgYSwgaW50MyBiLCBpbnQzIGMpOwordWludDMgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDMgYSwgdWludDMgYiwgaW50MyBjKTsKK2ludDQgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50NCBhLCBpbnQ0IGIsIGludDQgYyk7Cit1aW50NCBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50NCBhLCB1aW50NCBiLCBpbnQ0IGMpOworaW50OCBfX292bGQgX19jbmZuIHNlbGVjdChpbnQ4IGEsIGludDggYiwgaW50OCBjKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQ4IGEsIHVpbnQ4IGIsIGludDggYyk7CitpbnQxNiBfX292bGQgX19jbmZuIHNlbGVjdChpbnQxNiBhLCBpbnQxNiBiLCBpbnQxNiBjKTsKK3VpbnQxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50MTYgYSwgdWludDE2IGIsIGludDE2IGMpOworbG9uZyBfX292bGQgX19jbmZuIHNlbGVjdChsb25nIGEsIGxvbmcgYiwgaW50IGMpOwordWxvbmcgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmcgYSwgdWxvbmcgYiwgaW50IGMpOworbG9uZzIgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzIgYSwgbG9uZzIgYiwgaW50MiBjKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzIgYSwgdWxvbmcyIGIsIGludDIgYyk7Citsb25nMyBfX292bGQgX19jbmZuIHNlbGVjdChsb25nMyBhLCBsb25nMyBiLCBpbnQzIGMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMyBhLCB1bG9uZzMgYiwgaW50MyBjKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmc0IGEsIGxvbmc0IGIsIGludDQgYyk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmc0IGEsIHVsb25nNCBiLCBpbnQ0IGMpOworbG9uZzggX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzggYSwgbG9uZzggYiwgaW50OCBjKTsKK3Vsb25nOCBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzggYSwgdWxvbmc4IGIsIGludDggYyk7Citsb25nMTYgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzE2IGEsIGxvbmcxNiBiLCBpbnQxNiBjKTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmcxNiBhLCB1bG9uZzE2IGIsIGludDE2IGMpOworZmxvYXQgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQgYSwgZmxvYXQgYiwgaW50IGMpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0MiBhLCBmbG9hdDIgYiwgaW50MiBjKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDMgYSwgZmxvYXQzIGIsIGludDMgYyk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQ0IGEsIGZsb2F0NCBiLCBpbnQ0IGMpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0OCBhLCBmbG9hdDggYiwgaW50OCBjKTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQxNiBhLCBmbG9hdDE2IGIsIGludDE2IGMpOworY2hhciBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyIGEsIGNoYXIgYiwgbG9uZyBjKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyIGEsIHVjaGFyIGIsIGxvbmcgYyk7CitjaGFyMiBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyMiBhLCBjaGFyMiBiLCBsb25nMiBjKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjIgYSwgdWNoYXIyIGIsIGxvbmcyIGMpOworY2hhcjMgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjMgYSwgY2hhcjMgYiwgbG9uZzMgYyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXIzIGEsIHVjaGFyMyBiLCBsb25nMyBjKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXI0IGEsIGNoYXI0IGIsIGxvbmc0IGMpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyNCBhLCB1Y2hhcjQgYiwgbG9uZzQgYyk7CitjaGFyOCBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyOCBhLCBjaGFyOCBiLCBsb25nOCBjKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjggYSwgdWNoYXI4IGIsIGxvbmc4IGMpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIxNiBhLCBjaGFyMTYgYiwgbG9uZzE2IGMpOwordWNoYXIxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjE2IGEsIHVjaGFyMTYgYiwgbG9uZzE2IGMpOworc2hvcnQgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQgYSwgc2hvcnQgYiwgbG9uZyBjKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQgYSwgdXNob3J0IGIsIGxvbmcgYyk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQyIGEsIHNob3J0MiBiLCBsb25nMiBjKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MiBhLCB1c2hvcnQyIGIsIGxvbmcyIGMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0MyBhLCBzaG9ydDMgYiwgbG9uZzMgYyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydDMgYSwgdXNob3J0MyBiLCBsb25nMyBjKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDQgYSwgc2hvcnQ0IGIsIGxvbmc0IGMpOwordXNob3J0NCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQ0IGEsIHVzaG9ydDQgYiwgbG9uZzQgYyk7CitzaG9ydDggX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQ4IGEsIHNob3J0OCBiLCBsb25nOCBjKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0OCBhLCB1c2hvcnQ4IGIsIGxvbmc4IGMpOworc2hvcnQxNiBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDE2IGEsIHNob3J0MTYgYiwgbG9uZzE2IGMpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MTYgYSwgdXNob3J0MTYgYiwgbG9uZzE2IGMpOworaW50IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludCBhLCBpbnQgYiwgbG9uZyBjKTsKK3VpbnQgX19vdmxkIF9fY25mbiBzZWxlY3QodWludCBhLCB1aW50IGIsIGxvbmcgYyk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDIgYSwgaW50MiBiLCBsb25nMiBjKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQyIGEsIHVpbnQyIGIsIGxvbmcyIGMpOworaW50MyBfX292bGQgX19jbmZuIHNlbGVjdChpbnQzIGEsIGludDMgYiwgbG9uZzMgYyk7Cit1aW50MyBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50MyBhLCB1aW50MyBiLCBsb25nMyBjKTsKK2ludDQgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50NCBhLCBpbnQ0IGIsIGxvbmc0IGMpOwordWludDQgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDQgYSwgdWludDQgYiwgbG9uZzQgYyk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDggYSwgaW50OCBiLCBsb25nOCBjKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQ4IGEsIHVpbnQ4IGIsIGxvbmc4IGMpOworaW50MTYgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MTYgYSwgaW50MTYgYiwgbG9uZzE2IGMpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQxNiBhLCB1aW50MTYgYiwgbG9uZzE2IGMpOworbG9uZyBfX292bGQgX19jbmZuIHNlbGVjdChsb25nIGEsIGxvbmcgYiwgbG9uZyBjKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nIGEsIHVsb25nIGIsIGxvbmcgYyk7Citsb25nMiBfX292bGQgX19jbmZuIHNlbGVjdChsb25nMiBhLCBsb25nMiBiLCBsb25nMiBjKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzIgYSwgdWxvbmcyIGIsIGxvbmcyIGMpOworbG9uZzMgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzMgYSwgbG9uZzMgYiwgbG9uZzMgYyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmczIGEsIHVsb25nMyBiLCBsb25nMyBjKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmc0IGEsIGxvbmc0IGIsIGxvbmc0IGMpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nNCBhLCB1bG9uZzQgYiwgbG9uZzQgYyk7Citsb25nOCBfX292bGQgX19jbmZuIHNlbGVjdChsb25nOCBhLCBsb25nOCBiLCBsb25nOCBjKTsKK3Vsb25nOCBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzggYSwgdWxvbmc4IGIsIGxvbmc4IGMpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcxNiBhLCBsb25nMTYgYiwgbG9uZzE2IGMpOwordWxvbmcxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzE2IGEsIHVsb25nMTYgYiwgbG9uZzE2IGMpOworZmxvYXQgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQgYSwgZmxvYXQgYiwgbG9uZyBjKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDIgYSwgZmxvYXQyIGIsIGxvbmcyIGMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0MyBhLCBmbG9hdDMgYiwgbG9uZzMgYyk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQ0IGEsIGZsb2F0NCBiLCBsb25nNCBjKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDggYSwgZmxvYXQ4IGIsIGxvbmc4IGMpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDE2IGEsIGZsb2F0MTYgYiwgbG9uZzE2IGMpOworY2hhciBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyIGEsIGNoYXIgYiwgdWNoYXIgYyk7Cit1Y2hhciBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhciBhLCB1Y2hhciBiLCB1Y2hhciBjKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIyIGEsIGNoYXIyIGIsIHVjaGFyMiBjKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjIgYSwgdWNoYXIyIGIsIHVjaGFyMiBjKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIzIGEsIGNoYXIzIGIsIHVjaGFyMyBjKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjMgYSwgdWNoYXIzIGIsIHVjaGFyMyBjKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXI0IGEsIGNoYXI0IGIsIHVjaGFyNCBjKTsKK3VjaGFyNCBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjQgYSwgdWNoYXI0IGIsIHVjaGFyNCBjKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXI4IGEsIGNoYXI4IGIsIHVjaGFyOCBjKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjggYSwgdWNoYXI4IGIsIHVjaGFyOCBjKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyMTYgYSwgY2hhcjE2IGIsIHVjaGFyMTYgYyk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMTYgYSwgdWNoYXIxNiBiLCB1Y2hhcjE2IGMpOworc2hvcnQgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQgYSwgc2hvcnQgYiwgdWNoYXIgYyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0IGEsIHVzaG9ydCBiLCB1Y2hhciBjKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDIgYSwgc2hvcnQyIGIsIHVjaGFyMiBjKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MiBhLCB1c2hvcnQyIGIsIHVjaGFyMiBjKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDMgYSwgc2hvcnQzIGIsIHVjaGFyMyBjKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MyBhLCB1c2hvcnQzIGIsIHVjaGFyMyBjKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDQgYSwgc2hvcnQ0IGIsIHVjaGFyNCBjKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0NCBhLCB1c2hvcnQ0IGIsIHVjaGFyNCBjKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDggYSwgc2hvcnQ4IGIsIHVjaGFyOCBjKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0OCBhLCB1c2hvcnQ4IGIsIHVjaGFyOCBjKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQxNiBhLCBzaG9ydDE2IGIsIHVjaGFyMTYgYyk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQxNiBhLCB1c2hvcnQxNiBiLCB1Y2hhcjE2IGMpOworaW50IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludCBhLCBpbnQgYiwgdWNoYXIgYyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQgYSwgdWludCBiLCB1Y2hhciBjKTsKK2ludDIgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MiBhLCBpbnQyIGIsIHVjaGFyMiBjKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQyIGEsIHVpbnQyIGIsIHVjaGFyMiBjKTsKK2ludDMgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MyBhLCBpbnQzIGIsIHVjaGFyMyBjKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQzIGEsIHVpbnQzIGIsIHVjaGFyMyBjKTsKK2ludDQgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50NCBhLCBpbnQ0IGIsIHVjaGFyNCBjKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQ0IGEsIHVpbnQ0IGIsIHVjaGFyNCBjKTsKK2ludDggX19vdmxkIF9fY25mbiBzZWxlY3QoaW50OCBhLCBpbnQ4IGIsIHVjaGFyOCBjKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQ4IGEsIHVpbnQ4IGIsIHVjaGFyOCBjKTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDE2IGEsIGludDE2IGIsIHVjaGFyMTYgYyk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDE2IGEsIHVpbnQxNiBiLCB1Y2hhcjE2IGMpOworbG9uZyBfX292bGQgX19jbmZuIHNlbGVjdChsb25nIGEsIGxvbmcgYiwgdWNoYXIgYyk7Cit1bG9uZyBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZyBhLCB1bG9uZyBiLCB1Y2hhciBjKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcyIGEsIGxvbmcyIGIsIHVjaGFyMiBjKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzIgYSwgdWxvbmcyIGIsIHVjaGFyMiBjKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmczIGEsIGxvbmczIGIsIHVjaGFyMyBjKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzMgYSwgdWxvbmczIGIsIHVjaGFyMyBjKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmc0IGEsIGxvbmc0IGIsIHVjaGFyNCBjKTsKK3Vsb25nNCBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzQgYSwgdWxvbmc0IGIsIHVjaGFyNCBjKTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmc4IGEsIGxvbmc4IGIsIHVjaGFyOCBjKTsKK3Vsb25nOCBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzggYSwgdWxvbmc4IGIsIHVjaGFyOCBjKTsKK2xvbmcxNiBfX292bGQgX19jbmZuIHNlbGVjdChsb25nMTYgYSwgbG9uZzE2IGIsIHVjaGFyMTYgYyk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMTYgYSwgdWxvbmcxNiBiLCB1Y2hhcjE2IGMpOworZmxvYXQgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQgYSwgZmxvYXQgYiwgdWNoYXIgYyk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQyIGEsIGZsb2F0MiBiLCB1Y2hhcjIgYyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQzIGEsIGZsb2F0MyBiLCB1Y2hhcjMgYyk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQ0IGEsIGZsb2F0NCBiLCB1Y2hhcjQgYyk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQ4IGEsIGZsb2F0OCBiLCB1Y2hhcjggYyk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0MTYgYSwgZmxvYXQxNiBiLCB1Y2hhcjE2IGMpOworY2hhciBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyIGEsIGNoYXIgYiwgdXNob3J0IGMpOwordWNoYXIgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXIgYSwgdWNoYXIgYiwgdXNob3J0IGMpOworY2hhcjIgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjIgYSwgY2hhcjIgYiwgdXNob3J0MiBjKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjIgYSwgdWNoYXIyIGIsIHVzaG9ydDIgYyk7CitjaGFyMyBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyMyBhLCBjaGFyMyBiLCB1c2hvcnQzIGMpOwordWNoYXIzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMyBhLCB1Y2hhcjMgYiwgdXNob3J0MyBjKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXI0IGEsIGNoYXI0IGIsIHVzaG9ydDQgYyk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXI0IGEsIHVjaGFyNCBiLCB1c2hvcnQ0IGMpOworY2hhcjggX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjggYSwgY2hhcjggYiwgdXNob3J0OCBjKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjggYSwgdWNoYXI4IGIsIHVzaG9ydDggYyk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjE2IGEsIGNoYXIxNiBiLCB1c2hvcnQxNiBjKTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXIxNiBhLCB1Y2hhcjE2IGIsIHVzaG9ydDE2IGMpOworc2hvcnQgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQgYSwgc2hvcnQgYiwgdXNob3J0IGMpOwordXNob3J0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydCBhLCB1c2hvcnQgYiwgdXNob3J0IGMpOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0MiBhLCBzaG9ydDIgYiwgdXNob3J0MiBjKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MiBhLCB1c2hvcnQyIGIsIHVzaG9ydDIgYyk7CitzaG9ydDMgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQzIGEsIHNob3J0MyBiLCB1c2hvcnQzIGMpOwordXNob3J0MyBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQzIGEsIHVzaG9ydDMgYiwgdXNob3J0MyBjKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDQgYSwgc2hvcnQ0IGIsIHVzaG9ydDQgYyk7Cit1c2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydDQgYSwgdXNob3J0NCBiLCB1c2hvcnQ0IGMpOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0OCBhLCBzaG9ydDggYiwgdXNob3J0OCBjKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0OCBhLCB1c2hvcnQ4IGIsIHVzaG9ydDggYyk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0MTYgYSwgc2hvcnQxNiBiLCB1c2hvcnQxNiBjKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydDE2IGEsIHVzaG9ydDE2IGIsIHVzaG9ydDE2IGMpOworaW50IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludCBhLCBpbnQgYiwgdXNob3J0IGMpOwordWludCBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50IGEsIHVpbnQgYiwgdXNob3J0IGMpOworaW50MiBfX292bGQgX19jbmZuIHNlbGVjdChpbnQyIGEsIGludDIgYiwgdXNob3J0MiBjKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQyIGEsIHVpbnQyIGIsIHVzaG9ydDIgYyk7CitpbnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDMgYSwgaW50MyBiLCB1c2hvcnQzIGMpOwordWludDMgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDMgYSwgdWludDMgYiwgdXNob3J0MyBjKTsKK2ludDQgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50NCBhLCBpbnQ0IGIsIHVzaG9ydDQgYyk7Cit1aW50NCBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50NCBhLCB1aW50NCBiLCB1c2hvcnQ0IGMpOworaW50OCBfX292bGQgX19jbmZuIHNlbGVjdChpbnQ4IGEsIGludDggYiwgdXNob3J0OCBjKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQ4IGEsIHVpbnQ4IGIsIHVzaG9ydDggYyk7CitpbnQxNiBfX292bGQgX19jbmZuIHNlbGVjdChpbnQxNiBhLCBpbnQxNiBiLCB1c2hvcnQxNiBjKTsKK3VpbnQxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50MTYgYSwgdWludDE2IGIsIHVzaG9ydDE2IGMpOworbG9uZyBfX292bGQgX19jbmZuIHNlbGVjdChsb25nIGEsIGxvbmcgYiwgdXNob3J0IGMpOwordWxvbmcgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmcgYSwgdWxvbmcgYiwgdXNob3J0IGMpOworbG9uZzIgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzIgYSwgbG9uZzIgYiwgdXNob3J0MiBjKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzIgYSwgdWxvbmcyIGIsIHVzaG9ydDIgYyk7Citsb25nMyBfX292bGQgX19jbmZuIHNlbGVjdChsb25nMyBhLCBsb25nMyBiLCB1c2hvcnQzIGMpOwordWxvbmczIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMyBhLCB1bG9uZzMgYiwgdXNob3J0MyBjKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmc0IGEsIGxvbmc0IGIsIHVzaG9ydDQgYyk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmc0IGEsIHVsb25nNCBiLCB1c2hvcnQ0IGMpOworbG9uZzggX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzggYSwgbG9uZzggYiwgdXNob3J0OCBjKTsKK3Vsb25nOCBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzggYSwgdWxvbmc4IGIsIHVzaG9ydDggYyk7Citsb25nMTYgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzE2IGEsIGxvbmcxNiBiLCB1c2hvcnQxNiBjKTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmcxNiBhLCB1bG9uZzE2IGIsIHVzaG9ydDE2IGMpOworZmxvYXQgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQgYSwgZmxvYXQgYiwgdXNob3J0IGMpOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0MiBhLCBmbG9hdDIgYiwgdXNob3J0MiBjKTsKK2Zsb2F0MyBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDMgYSwgZmxvYXQzIGIsIHVzaG9ydDMgYyk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQ0IGEsIGZsb2F0NCBiLCB1c2hvcnQ0IGMpOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0OCBhLCBmbG9hdDggYiwgdXNob3J0OCBjKTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQxNiBhLCBmbG9hdDE2IGIsIHVzaG9ydDE2IGMpOworY2hhciBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyIGEsIGNoYXIgYiwgdWludCBjKTsKK3VjaGFyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyIGEsIHVjaGFyIGIsIHVpbnQgYyk7CitjaGFyMiBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyMiBhLCBjaGFyMiBiLCB1aW50MiBjKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjIgYSwgdWNoYXIyIGIsIHVpbnQyIGMpOworY2hhcjMgX19vdmxkIF9fY25mbiBzZWxlY3QoY2hhcjMgYSwgY2hhcjMgYiwgdWludDMgYyk7Cit1Y2hhcjMgX19vdmxkIF9fY25mbiBzZWxlY3QodWNoYXIzIGEsIHVjaGFyMyBiLCB1aW50MyBjKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXI0IGEsIGNoYXI0IGIsIHVpbnQ0IGMpOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyNCBhLCB1Y2hhcjQgYiwgdWludDQgYyk7CitjaGFyOCBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyOCBhLCBjaGFyOCBiLCB1aW50OCBjKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjggYSwgdWNoYXI4IGIsIHVpbnQ4IGMpOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIxNiBhLCBjaGFyMTYgYiwgdWludDE2IGMpOwordWNoYXIxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjE2IGEsIHVjaGFyMTYgYiwgdWludDE2IGMpOworc2hvcnQgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQgYSwgc2hvcnQgYiwgdWludCBjKTsKK3VzaG9ydCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQgYSwgdXNob3J0IGIsIHVpbnQgYyk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQyIGEsIHNob3J0MiBiLCB1aW50MiBjKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MiBhLCB1c2hvcnQyIGIsIHVpbnQyIGMpOworc2hvcnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHNob3J0MyBhLCBzaG9ydDMgYiwgdWludDMgYyk7Cit1c2hvcnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVzaG9ydDMgYSwgdXNob3J0MyBiLCB1aW50MyBjKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDQgYSwgc2hvcnQ0IGIsIHVpbnQ0IGMpOwordXNob3J0NCBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQ0IGEsIHVzaG9ydDQgYiwgdWludDQgYyk7CitzaG9ydDggX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQ4IGEsIHNob3J0OCBiLCB1aW50OCBjKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0OCBhLCB1c2hvcnQ4IGIsIHVpbnQ4IGMpOworc2hvcnQxNiBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDE2IGEsIHNob3J0MTYgYiwgdWludDE2IGMpOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MTYgYSwgdXNob3J0MTYgYiwgdWludDE2IGMpOworaW50IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludCBhLCBpbnQgYiwgdWludCBjKTsKK3VpbnQgX19vdmxkIF9fY25mbiBzZWxlY3QodWludCBhLCB1aW50IGIsIHVpbnQgYyk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDIgYSwgaW50MiBiLCB1aW50MiBjKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQyIGEsIHVpbnQyIGIsIHVpbnQyIGMpOworaW50MyBfX292bGQgX19jbmZuIHNlbGVjdChpbnQzIGEsIGludDMgYiwgdWludDMgYyk7Cit1aW50MyBfX292bGQgX19jbmZuIHNlbGVjdCh1aW50MyBhLCB1aW50MyBiLCB1aW50MyBjKTsKK2ludDQgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50NCBhLCBpbnQ0IGIsIHVpbnQ0IGMpOwordWludDQgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDQgYSwgdWludDQgYiwgdWludDQgYyk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDggYSwgaW50OCBiLCB1aW50OCBjKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQ4IGEsIHVpbnQ4IGIsIHVpbnQ4IGMpOworaW50MTYgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MTYgYSwgaW50MTYgYiwgdWludDE2IGMpOwordWludDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQxNiBhLCB1aW50MTYgYiwgdWludDE2IGMpOworbG9uZyBfX292bGQgX19jbmZuIHNlbGVjdChsb25nIGEsIGxvbmcgYiwgdWludCBjKTsKK3Vsb25nIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nIGEsIHVsb25nIGIsIHVpbnQgYyk7Citsb25nMiBfX292bGQgX19jbmZuIHNlbGVjdChsb25nMiBhLCBsb25nMiBiLCB1aW50MiBjKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzIgYSwgdWxvbmcyIGIsIHVpbnQyIGMpOworbG9uZzMgX19vdmxkIF9fY25mbiBzZWxlY3QobG9uZzMgYSwgbG9uZzMgYiwgdWludDMgYyk7Cit1bG9uZzMgX19vdmxkIF9fY25mbiBzZWxlY3QodWxvbmczIGEsIHVsb25nMyBiLCB1aW50MyBjKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmc0IGEsIGxvbmc0IGIsIHVpbnQ0IGMpOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nNCBhLCB1bG9uZzQgYiwgdWludDQgYyk7Citsb25nOCBfX292bGQgX19jbmZuIHNlbGVjdChsb25nOCBhLCBsb25nOCBiLCB1aW50OCBjKTsKK3Vsb25nOCBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzggYSwgdWxvbmc4IGIsIHVpbnQ4IGMpOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcxNiBhLCBsb25nMTYgYiwgdWludDE2IGMpOwordWxvbmcxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzE2IGEsIHVsb25nMTYgYiwgdWludDE2IGMpOworZmxvYXQgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQgYSwgZmxvYXQgYiwgdWludCBjKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDIgYSwgZmxvYXQyIGIsIHVpbnQyIGMpOworZmxvYXQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0MyBhLCBmbG9hdDMgYiwgdWludDMgYyk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQ0IGEsIGZsb2F0NCBiLCB1aW50NCBjKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDggYSwgZmxvYXQ4IGIsIHVpbnQ4IGMpOworZmxvYXQxNiBfX292bGQgX19jbmZuIHNlbGVjdChmbG9hdDE2IGEsIGZsb2F0MTYgYiwgdWludDE2IGMpOworY2hhciBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyIGEsIGNoYXIgYiwgdWxvbmcgYyk7Cit1Y2hhciBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhciBhLCB1Y2hhciBiLCB1bG9uZyBjKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIyIGEsIGNoYXIyIGIsIHVsb25nMiBjKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjIgYSwgdWNoYXIyIGIsIHVsb25nMiBjKTsKK2NoYXIzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXIzIGEsIGNoYXIzIGIsIHVsb25nMyBjKTsKK3VjaGFyMyBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjMgYSwgdWNoYXIzIGIsIHVsb25nMyBjKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXI0IGEsIGNoYXI0IGIsIHVsb25nNCBjKTsKK3VjaGFyNCBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjQgYSwgdWNoYXI0IGIsIHVsb25nNCBjKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGNoYXI4IGEsIGNoYXI4IGIsIHVsb25nOCBjKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIHNlbGVjdCh1Y2hhcjggYSwgdWNoYXI4IGIsIHVsb25nOCBjKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIHNlbGVjdChjaGFyMTYgYSwgY2hhcjE2IGIsIHVsb25nMTYgYyk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVjaGFyMTYgYSwgdWNoYXIxNiBiLCB1bG9uZzE2IGMpOworc2hvcnQgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQgYSwgc2hvcnQgYiwgdWxvbmcgYyk7Cit1c2hvcnQgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0IGEsIHVzaG9ydCBiLCB1bG9uZyBjKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDIgYSwgc2hvcnQyIGIsIHVsb25nMiBjKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MiBhLCB1c2hvcnQyIGIsIHVsb25nMiBjKTsKK3Nob3J0MyBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDMgYSwgc2hvcnQzIGIsIHVsb25nMyBjKTsKK3VzaG9ydDMgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0MyBhLCB1c2hvcnQzIGIsIHVsb25nMyBjKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDQgYSwgc2hvcnQ0IGIsIHVsb25nNCBjKTsKK3VzaG9ydDQgX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0NCBhLCB1c2hvcnQ0IGIsIHVsb25nNCBjKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIHNlbGVjdChzaG9ydDggYSwgc2hvcnQ4IGIsIHVsb25nOCBjKTsKK3VzaG9ydDggX19vdmxkIF9fY25mbiBzZWxlY3QodXNob3J0OCBhLCB1c2hvcnQ4IGIsIHVsb25nOCBjKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBzZWxlY3Qoc2hvcnQxNiBhLCBzaG9ydDE2IGIsIHVsb25nMTYgYyk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIHNlbGVjdCh1c2hvcnQxNiBhLCB1c2hvcnQxNiBiLCB1bG9uZzE2IGMpOworaW50IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludCBhLCBpbnQgYiwgdWxvbmcgYyk7Cit1aW50IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQgYSwgdWludCBiLCB1bG9uZyBjKTsKK2ludDIgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MiBhLCBpbnQyIGIsIHVsb25nMiBjKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQyIGEsIHVpbnQyIGIsIHVsb25nMiBjKTsKK2ludDMgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50MyBhLCBpbnQzIGIsIHVsb25nMyBjKTsKK3VpbnQzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQzIGEsIHVpbnQzIGIsIHVsb25nMyBjKTsKK2ludDQgX19vdmxkIF9fY25mbiBzZWxlY3QoaW50NCBhLCBpbnQ0IGIsIHVsb25nNCBjKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQ0IGEsIHVpbnQ0IGIsIHVsb25nNCBjKTsKK2ludDggX19vdmxkIF9fY25mbiBzZWxlY3QoaW50OCBhLCBpbnQ4IGIsIHVsb25nOCBjKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVpbnQ4IGEsIHVpbnQ4IGIsIHVsb25nOCBjKTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGludDE2IGEsIGludDE2IGIsIHVsb25nMTYgYyk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBzZWxlY3QodWludDE2IGEsIHVpbnQxNiBiLCB1bG9uZzE2IGMpOworbG9uZyBfX292bGQgX19jbmZuIHNlbGVjdChsb25nIGEsIGxvbmcgYiwgdWxvbmcgYyk7Cit1bG9uZyBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZyBhLCB1bG9uZyBiLCB1bG9uZyBjKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmcyIGEsIGxvbmcyIGIsIHVsb25nMiBjKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzIgYSwgdWxvbmcyIGIsIHVsb25nMiBjKTsKK2xvbmczIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmczIGEsIGxvbmczIGIsIHVsb25nMyBjKTsKK3Vsb25nMyBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzMgYSwgdWxvbmczIGIsIHVsb25nMyBjKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmc0IGEsIGxvbmc0IGIsIHVsb25nNCBjKTsKK3Vsb25nNCBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzQgYSwgdWxvbmc0IGIsIHVsb25nNCBjKTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGxvbmc4IGEsIGxvbmc4IGIsIHVsb25nOCBjKTsKK3Vsb25nOCBfX292bGQgX19jbmZuIHNlbGVjdCh1bG9uZzggYSwgdWxvbmc4IGIsIHVsb25nOCBjKTsKK2xvbmcxNiBfX292bGQgX19jbmZuIHNlbGVjdChsb25nMTYgYSwgbG9uZzE2IGIsIHVsb25nMTYgYyk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KHVsb25nMTYgYSwgdWxvbmcxNiBiLCB1bG9uZzE2IGMpOworZmxvYXQgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQgYSwgZmxvYXQgYiwgdWxvbmcgYyk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQyIGEsIGZsb2F0MiBiLCB1bG9uZzIgYyk7CitmbG9hdDMgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQzIGEsIGZsb2F0MyBiLCB1bG9uZzMgYyk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQ0IGEsIGZsb2F0NCBiLCB1bG9uZzQgYyk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzZWxlY3QoZmxvYXQ4IGEsIGZsb2F0OCBiLCB1bG9uZzggYyk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGZsb2F0MTYgYSwgZmxvYXQxNiBiLCB1bG9uZzE2IGMpOworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIF9fY25mbiBzZWxlY3QoZG91YmxlIGEsIGRvdWJsZSBiLCBsb25nIGMpOworZG91YmxlMiBfX292bGQgX19jbmZuIHNlbGVjdChkb3VibGUyIGEsIGRvdWJsZTIgYiwgbG9uZzIgYyk7Citkb3VibGUzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGRvdWJsZTMgYSwgZG91YmxlMyBiLCBsb25nMyBjKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBzZWxlY3QoZG91YmxlNCBhLCBkb3VibGU0IGIsIGxvbmc0IGMpOworZG91YmxlOCBfX292bGQgX19jbmZuIHNlbGVjdChkb3VibGU4IGEsIGRvdWJsZTggYiwgbG9uZzggYyk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHNlbGVjdChkb3VibGUxNiBhLCBkb3VibGUxNiBiLCBsb25nMTYgYyk7Citkb3VibGUgX19vdmxkIF9fY25mbiBzZWxlY3QoZG91YmxlIGEsIGRvdWJsZSBiLCB1bG9uZyBjKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBzZWxlY3QoZG91YmxlMiBhLCBkb3VibGUyIGIsIHVsb25nMiBjKTsKK2RvdWJsZTMgX19vdmxkIF9fY25mbiBzZWxlY3QoZG91YmxlMyBhLCBkb3VibGUzIGIsIHVsb25nMyBjKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBzZWxlY3QoZG91YmxlNCBhLCBkb3VibGU0IGIsIHVsb25nNCBjKTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBzZWxlY3QoZG91YmxlOCBhLCBkb3VibGU4IGIsIHVsb25nOCBjKTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGRvdWJsZTE2IGEsIGRvdWJsZTE2IGIsIHVsb25nMTYgYyk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGhhbGYgYSwgaGFsZiBiLCBzaG9ydCBjKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGhhbGYyIGEsIGhhbGYyIGIsIHNob3J0MiBjKTsKK2hhbGYzIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGhhbGYzIGEsIGhhbGYzIGIsIHNob3J0MyBjKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGhhbGY0IGEsIGhhbGY0IGIsIHNob3J0NCBjKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGhhbGY4IGEsIGhhbGY4IGIsIHNob3J0OCBjKTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHNlbGVjdChoYWxmMTYgYSwgaGFsZjE2IGIsIHNob3J0MTYgYyk7CitoYWxmIF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGhhbGYgYSwgaGFsZiBiLCB1c2hvcnQgYyk7CitoYWxmMiBfX292bGQgX19jbmZuIHNlbGVjdChoYWxmMiBhLCBoYWxmMiBiLCB1c2hvcnQyIGMpOworaGFsZjMgX19vdmxkIF9fY25mbiBzZWxlY3QoaGFsZjMgYSwgaGFsZjMgYiwgdXNob3J0MyBjKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGhhbGY0IGEsIGhhbGY0IGIsIHVzaG9ydDQgYyk7CitoYWxmOCBfX292bGQgX19jbmZuIHNlbGVjdChoYWxmOCBhLCBoYWxmOCBiLCB1c2hvcnQ4IGMpOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gc2VsZWN0KGhhbGYxNiBhLCBoYWxmMTYgYiwgdXNob3J0MTYgYyk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvLyBPcGVuQ0wgdjEuMSBzNi4xMS43LCB2MS4yIHM2LjEyLjcsIHYyLjAgczYuMTMuNyAtIFZlY3RvciBEYXRhIExvYWQgYW5kIFN0b3JlIEZ1bmN0aW9ucworLy8gT3BlbkNMIGV4dGVuc2lvbnMgdjEuMSBzOS42LjYsIHYxLjIgczkuNS42LCB2Mi4wIHM5LjQuNiAtIFZlY3RvciBEYXRhIExvYWQgYW5kIFN0b3JlIEZ1bmN0aW9ucyBmb3IgSGFsZiBUeXBlCisvKioKKyAqIFVzZSBnZW5lcmljIHR5cGUgZ2VudHlwZSB0byBpbmRpY2F0ZSB0aGUgYnVpbHQtaW4gZGF0YSB0eXBlcworICogY2hhciwgdWNoYXIsIHNob3J0LCB1c2hvcnQsIGludCwgdWludCwgbG9uZywgdWxvbmcsIGZsb2F0LAorICogZG91YmxlIG9yIGhhbGYuCisgKgorICogdmxvYWRuIHJldHVybiBzaXplb2YgKGdlbnR5cGVuKSBieXRlcyBvZiBkYXRhIHJlYWQgZnJvbSBhZGRyZXNzIChwICsgKG9mZnNldCAqIG4pKS4KKyAqCisgKiB2c3RvcmVuIHdyaXRlIHNpemVvZiAoZ2VudHlwZW4pIGJ5dGVzIGdpdmVuIGJ5IGRhdGEgdG8gYWRkcmVzcyAocCArIChvZmZzZXQgKiBuKSkuCisgKgorICogVGhlIGFkZHJlc3MgY29tcHV0ZWQgYXMgKHAgKyAob2Zmc2V0ICogbikpIG11c3QgYmUgCisgKiA4LWJpdCBhbGlnbmVkIGlmIGdlbnR5cGUgaXMgY2hhciwgdWNoYXI7CisgKiAxNi1iaXQgYWxpZ25lZCBpZiBnZW50eXBlIGlzIHNob3J0LCB1c2hvcnQsIGhhbGY7CisgKiAzMi1iaXQgYWxpZ25lZCBpZiBnZW50eXBlIGlzIGludCwgdWludCwgZmxvYXQ7CisgKiA2NC1iaXQgYWxpZ25lZCBpZiBnZW50eXBlIGlzIGxvbmcsIHVsb25nLCBkb3VibGUuCisgKi8KKworY2hhcjIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGNoYXIgKnApOwordWNoYXIyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCB1Y2hhciAqcCk7CitzaG9ydDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHNob3J0ICpwKTsKK3VzaG9ydDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHVzaG9ydCAqcCk7CitpbnQyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBpbnQgKnApOwordWludDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHVpbnQgKnApOworbG9uZzIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGxvbmcgKnApOwordWxvbmcyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCB1bG9uZyAqcCk7CitmbG9hdDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGZsb2F0ICpwKTsKK2NoYXIzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBjaGFyICpwKTsKK3VjaGFyMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgdWNoYXIgKnApOworc2hvcnQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBzaG9ydCAqcCk7Cit1c2hvcnQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCB1c2hvcnQgKnApOworaW50MyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgaW50ICpwKTsKK3VpbnQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCB1aW50ICpwKTsKK2xvbmczIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBsb25nICpwKTsKK3Vsb25nMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgdWxvbmcgKnApOworZmxvYXQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBmbG9hdCAqcCk7CitjaGFyNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgY2hhciAqcCk7Cit1Y2hhcjQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHVjaGFyICpwKTsKK3Nob3J0NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgc2hvcnQgKnApOwordXNob3J0NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgdXNob3J0ICpwKTsKK2ludDQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGludCAqcCk7Cit1aW50NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgdWludCAqcCk7Citsb25nNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgbG9uZyAqcCk7Cit1bG9uZzQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHVsb25nICpwKTsKK2Zsb2F0NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgZmxvYXQgKnApOworY2hhcjggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGNoYXIgKnApOwordWNoYXI4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCB1Y2hhciAqcCk7CitzaG9ydDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHNob3J0ICpwKTsKK3VzaG9ydDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHVzaG9ydCAqcCk7CitpbnQ4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBpbnQgKnApOwordWludDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHVpbnQgKnApOworbG9uZzggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGxvbmcgKnApOwordWxvbmc4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCB1bG9uZyAqcCk7CitmbG9hdDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGZsb2F0ICpwKTsKK2NoYXIxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGNoYXIgKnApOwordWNoYXIxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHVjaGFyICpwKTsKK3Nob3J0MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBzaG9ydCAqcCk7Cit1c2hvcnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHVzaG9ydCAqcCk7CitpbnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGludCAqcCk7Cit1aW50MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCB1aW50ICpwKTsKK2xvbmcxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGxvbmcgKnApOwordWxvbmcxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IHVsb25nICpwKTsKK2Zsb2F0MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBmbG9hdCAqcCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZTIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGRvdWJsZSAqcCk7Citkb3VibGUzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBkb3VibGUgKnApOworZG91YmxlNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgZG91YmxlICpwKTsKK2RvdWJsZTggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGRvdWJsZSAqcCk7Citkb3VibGUxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGRvdWJsZSAqcCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorCisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIHZsb2FkKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgaGFsZiAqcCk7CitoYWxmMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgaGFsZiAqcCk7CitoYWxmMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgaGFsZiAqcCk7CitoYWxmNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgaGFsZiAqcCk7CitoYWxmOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgaGFsZiAqcCk7CitoYWxmMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBoYWxmICpwKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorY2hhcjIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBjaGFyICpwKTsKK3VjaGFyMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IHVjaGFyICpwKTsKK3Nob3J0MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IHNob3J0ICpwKTsKK3VzaG9ydDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCB1c2hvcnQgKnApOworaW50MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IGludCAqcCk7Cit1aW50MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IHVpbnQgKnApOworbG9uZzIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBsb25nICpwKTsKK3Vsb25nMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IHVsb25nICpwKTsKK2Zsb2F0MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IGZsb2F0ICpwKTsKK2NoYXIzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgY2hhciAqcCk7Cit1Y2hhcjMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCB1Y2hhciAqcCk7CitzaG9ydDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBzaG9ydCAqcCk7Cit1c2hvcnQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgdXNob3J0ICpwKTsKK2ludDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBpbnQgKnApOwordWludDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCB1aW50ICpwKTsKK2xvbmczIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgbG9uZyAqcCk7Cit1bG9uZzMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCB1bG9uZyAqcCk7CitmbG9hdDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBmbG9hdCAqcCk7CitjaGFyNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IGNoYXIgKnApOwordWNoYXI0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgdWNoYXIgKnApOworc2hvcnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3Qgc2hvcnQgKnApOwordXNob3J0NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IHVzaG9ydCAqcCk7CitpbnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgaW50ICpwKTsKK3VpbnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgdWludCAqcCk7Citsb25nNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IGxvbmcgKnApOwordWxvbmc0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgdWxvbmcgKnApOworZmxvYXQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgZmxvYXQgKnApOworY2hhcjggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBjaGFyICpwKTsKK3VjaGFyOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IHVjaGFyICpwKTsKK3Nob3J0OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IHNob3J0ICpwKTsKK3VzaG9ydDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCB1c2hvcnQgKnApOworaW50OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IGludCAqcCk7Cit1aW50OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IHVpbnQgKnApOworbG9uZzggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBsb25nICpwKTsKK3Vsb25nOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IHVsb25nICpwKTsKK2Zsb2F0OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IGZsb2F0ICpwKTsKK2NoYXIxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBjaGFyICpwKTsKK3VjaGFyMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgdWNoYXIgKnApOworc2hvcnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBzaG9ydCAqcCk7Cit1c2hvcnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCB1c2hvcnQgKnApOworaW50MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgaW50ICpwKTsKK3VpbnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCB1aW50ICpwKTsKK2xvbmcxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBsb25nICpwKTsKK3Vsb25nMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgdWxvbmcgKnApOworZmxvYXQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBmbG9hdCAqcCk7CisKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IGRvdWJsZSAqcCk7Citkb3VibGUzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgZG91YmxlICpwKTsKK2RvdWJsZTQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBkb3VibGUgKnApOworZG91YmxlOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IGRvdWJsZSAqcCk7Citkb3VibGUxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBkb3VibGUgKnApOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKworI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCB2bG9hZChzaXplX3Qgb2Zmc2V0LCBjb25zdCBoYWxmICpwKTsKK2hhbGYyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgaGFsZiAqcCk7CitoYWxmMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IGhhbGYgKnApOworaGFsZjQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBoYWxmICpwKTsKK2hhbGY4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgaGFsZiAqcCk7CitoYWxmMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgaGFsZiAqcCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorI2Vsc2UKK2NoYXIyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgY2hhciAqcCk7Cit1Y2hhcjIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCB1Y2hhciAqcCk7CitzaG9ydDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBzaG9ydCAqcCk7Cit1c2hvcnQyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgdXNob3J0ICpwKTsKK2ludDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBpbnQgKnApOwordWludDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCB1aW50ICpwKTsKK2xvbmcyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgbG9uZyAqcCk7Cit1bG9uZzIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCB1bG9uZyAqcCk7CitmbG9hdDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBmbG9hdCAqcCk7CitjaGFyMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGNoYXIgKnApOwordWNoYXIzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgdWNoYXIgKnApOworc2hvcnQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgc2hvcnQgKnApOwordXNob3J0MyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIHVzaG9ydCAqcCk7CitpbnQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgaW50ICpwKTsKK3VpbnQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgdWludCAqcCk7Citsb25nMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGxvbmcgKnApOwordWxvbmczIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgdWxvbmcgKnApOworZmxvYXQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgZmxvYXQgKnApOworY2hhcjQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBjaGFyICpwKTsKK3VjaGFyNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIHVjaGFyICpwKTsKK3Nob3J0NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIHNob3J0ICpwKTsKK3VzaG9ydDQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCB1c2hvcnQgKnApOworaW50NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGludCAqcCk7Cit1aW50NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIHVpbnQgKnApOworbG9uZzQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBsb25nICpwKTsKK3Vsb25nNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIHVsb25nICpwKTsKK2Zsb2F0NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGZsb2F0ICpwKTsKK2NoYXI4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgY2hhciAqcCk7Cit1Y2hhcjggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCB1Y2hhciAqcCk7CitzaG9ydDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBzaG9ydCAqcCk7Cit1c2hvcnQ4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgdXNob3J0ICpwKTsKK2ludDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBpbnQgKnApOwordWludDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCB1aW50ICpwKTsKK2xvbmc4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgbG9uZyAqcCk7Cit1bG9uZzggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCB1bG9uZyAqcCk7CitmbG9hdDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBmbG9hdCAqcCk7CitjaGFyMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgY2hhciAqcCk7Cit1Y2hhcjE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIHVjaGFyICpwKTsKK3Nob3J0MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgc2hvcnQgKnApOwordXNob3J0MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgdXNob3J0ICpwKTsKK2ludDE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGludCAqcCk7Cit1aW50MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgdWludCAqcCk7Citsb25nMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgbG9uZyAqcCk7Cit1bG9uZzE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIHVsb25nICpwKTsKK2Zsb2F0MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgZmxvYXQgKnApOworY2hhcjIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGNoYXIgKnApOwordWNoYXIyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCB1Y2hhciAqcCk7CitzaG9ydDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHNob3J0ICpwKTsKK3VzaG9ydDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHVzaG9ydCAqcCk7CitpbnQyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBpbnQgKnApOwordWludDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHVpbnQgKnApOworbG9uZzIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGxvbmcgKnApOwordWxvbmcyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCB1bG9uZyAqcCk7CitmbG9hdDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGZsb2F0ICpwKTsKK2NoYXIzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBjaGFyICpwKTsKK3VjaGFyMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgdWNoYXIgKnApOworc2hvcnQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBzaG9ydCAqcCk7Cit1c2hvcnQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCB1c2hvcnQgKnApOworaW50MyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgaW50ICpwKTsKK3VpbnQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCB1aW50ICpwKTsKK2xvbmczIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBsb25nICpwKTsKK3Vsb25nMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgdWxvbmcgKnApOworZmxvYXQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBmbG9hdCAqcCk7CitjaGFyNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgY2hhciAqcCk7Cit1Y2hhcjQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHVjaGFyICpwKTsKK3Nob3J0NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgc2hvcnQgKnApOwordXNob3J0NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgdXNob3J0ICpwKTsKK2ludDQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGludCAqcCk7Cit1aW50NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgdWludCAqcCk7Citsb25nNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgbG9uZyAqcCk7Cit1bG9uZzQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHVsb25nICpwKTsKK2Zsb2F0NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgZmxvYXQgKnApOworY2hhcjggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGNoYXIgKnApOwordWNoYXI4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCB1Y2hhciAqcCk7CitzaG9ydDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHNob3J0ICpwKTsKK3VzaG9ydDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHVzaG9ydCAqcCk7CitpbnQ4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBpbnQgKnApOwordWludDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHVpbnQgKnApOworbG9uZzggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGxvbmcgKnApOwordWxvbmc4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCB1bG9uZyAqcCk7CitmbG9hdDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGZsb2F0ICpwKTsKK2NoYXIxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGNoYXIgKnApOwordWNoYXIxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHVjaGFyICpwKTsKK3Nob3J0MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBzaG9ydCAqcCk7Cit1c2hvcnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHVzaG9ydCAqcCk7CitpbnQxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGludCAqcCk7Cit1aW50MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCB1aW50ICpwKTsKK2xvbmcxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGxvbmcgKnApOwordWxvbmcxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIHVsb25nICpwKTsKK2Zsb2F0MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBmbG9hdCAqcCk7CitjaGFyMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBjaGFyICpwKTsKK3VjaGFyMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSB1Y2hhciAqcCk7CitzaG9ydDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgc2hvcnQgKnApOwordXNob3J0MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSB1c2hvcnQgKnApOworaW50MiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBpbnQgKnApOwordWludDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgdWludCAqcCk7Citsb25nMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBsb25nICpwKTsKK3Vsb25nMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSB1bG9uZyAqcCk7CitmbG9hdDIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgZmxvYXQgKnApOworY2hhcjMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgY2hhciAqcCk7Cit1Y2hhcjMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgdWNoYXIgKnApOworc2hvcnQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHNob3J0ICpwKTsKK3VzaG9ydDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgdXNob3J0ICpwKTsKK2ludDMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgaW50ICpwKTsKK3VpbnQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHVpbnQgKnApOworbG9uZzMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgbG9uZyAqcCk7Cit1bG9uZzMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgdWxvbmcgKnApOworZmxvYXQzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGZsb2F0ICpwKTsKK2NoYXI0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGNoYXIgKnApOwordWNoYXI0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHVjaGFyICpwKTsKK3Nob3J0NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBzaG9ydCAqcCk7Cit1c2hvcnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHVzaG9ydCAqcCk7CitpbnQ0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGludCAqcCk7Cit1aW50NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSB1aW50ICpwKTsKK2xvbmc0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGxvbmcgKnApOwordWxvbmc0IF9fb3ZsZCB2bG9hZDQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHVsb25nICpwKTsKK2Zsb2F0NCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBmbG9hdCAqcCk7CitjaGFyOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBjaGFyICpwKTsKK3VjaGFyOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSB1Y2hhciAqcCk7CitzaG9ydDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgc2hvcnQgKnApOwordXNob3J0OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSB1c2hvcnQgKnApOworaW50OCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBpbnQgKnApOwordWludDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgdWludCAqcCk7Citsb25nOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBsb25nICpwKTsKK3Vsb25nOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSB1bG9uZyAqcCk7CitmbG9hdDggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgZmxvYXQgKnApOworY2hhcjE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBjaGFyICpwKTsKK3VjaGFyMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHVjaGFyICpwKTsKK3Nob3J0MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHNob3J0ICpwKTsKK3VzaG9ydDE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSB1c2hvcnQgKnApOworaW50MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGludCAqcCk7Cit1aW50MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHVpbnQgKnApOworbG9uZzE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBsb25nICpwKTsKK3Vsb25nMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIHVsb25nICpwKTsKK2Zsb2F0MTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGZsb2F0ICpwKTsKKworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgZG91YmxlICpwKTsKK2RvdWJsZTMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBkb3VibGUgKnApOworZG91YmxlNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGRvdWJsZSAqcCk7Citkb3VibGU4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgZG91YmxlICpwKTsKK2RvdWJsZTE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGRvdWJsZSAqcCk7Citkb3VibGUyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBkb3VibGUgKnApOworZG91YmxlMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgZG91YmxlICpwKTsKK2RvdWJsZTQgX19vdmxkIHZsb2FkNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGRvdWJsZSAqcCk7Citkb3VibGU4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBkb3VibGUgKnApOworZG91YmxlMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBkb3VibGUgKnApOworZG91YmxlMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBkb3VibGUgKnApOworZG91YmxlMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBkb3VibGUgKnApOworZG91YmxlNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBkb3VibGUgKnApOworZG91YmxlOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBkb3VibGUgKnApOworZG91YmxlMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGRvdWJsZSAqcCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorCisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgX19vdmxkIHZsb2FkKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGhhbGYgKnApOworaGFsZjIgX19vdmxkIHZsb2FkMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBoYWxmICpwKTsKK2hhbGYzIF9fb3ZsZCB2bG9hZDMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgaGFsZiAqcCk7CitoYWxmNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGhhbGYgKnApOworaGFsZjggX19vdmxkIHZsb2FkOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBoYWxmICpwKTsKK2hhbGYxNiBfX292bGQgdmxvYWQxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBoYWxmICpwKTsKK2hhbGYgX19vdmxkIHZsb2FkKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgaGFsZiAqcCk7CitoYWxmMiBfX292bGQgdmxvYWQyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgaGFsZiAqcCk7CitoYWxmMyBfX292bGQgdmxvYWQzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgaGFsZiAqcCk7CitoYWxmNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgaGFsZiAqcCk7CitoYWxmOCBfX292bGQgdmxvYWQ4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgaGFsZiAqcCk7CitoYWxmMTYgX19vdmxkIHZsb2FkMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBoYWxmICpwKTsKK2hhbGYgX19vdmxkIHZsb2FkKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBoYWxmICpwKTsKK2hhbGYyIF9fb3ZsZCB2bG9hZDIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGhhbGYgKnApOworaGFsZjMgX19vdmxkIHZsb2FkMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgaGFsZiAqcCk7CitoYWxmNCBfX292bGQgdmxvYWQ0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBoYWxmICpwKTsKK2hhbGY4IF9fb3ZsZCB2bG9hZDgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGhhbGYgKnApOworaGFsZjE2IF9fb3ZsZCB2bG9hZDE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBoYWxmICpwKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK3ZvaWQgX19vdmxkIHZzdG9yZTIoY2hhcjIgZGF0YSwgc2l6ZV90IG9mZnNldCwgY2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHVjaGFyMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCB1Y2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHNob3J0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHVzaG9ydDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgdXNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIoaW50MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMih1aW50MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCB1aW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIobG9uZzIgZGF0YSwgc2l6ZV90IG9mZnNldCwgbG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHVsb25nMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCB1bG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBmbG9hdCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGNoYXIzIGRhdGEsIHNpemVfdCBvZmZzZXQsIGNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyh1Y2hhcjMgZGF0YSwgc2l6ZV90IG9mZnNldCwgdWNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhzaG9ydDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgc2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyh1c2hvcnQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIHVzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGludDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgaW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTModWludDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgdWludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGxvbmczIGRhdGEsIHNpemVfdCBvZmZzZXQsIGxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyh1bG9uZzMgZGF0YSwgc2l6ZV90IG9mZnNldCwgdWxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgZmxvYXQgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChjaGFyNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQodWNoYXI0IGRhdGEsIHNpemVfdCBvZmZzZXQsIHVjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoc2hvcnQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIHNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQodXNob3J0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCB1c2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChpbnQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KHVpbnQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIHVpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChsb25nNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQodWxvbmc0IGRhdGEsIHNpemVfdCBvZmZzZXQsIHVsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGZsb2F0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoY2hhcjggZGF0YSwgc2l6ZV90IG9mZnNldCwgY2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHVjaGFyOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCB1Y2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHNob3J0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHVzaG9ydDggZGF0YSwgc2l6ZV90IG9mZnNldCwgdXNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoaW50OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlOCh1aW50OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCB1aW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgobG9uZzggZGF0YSwgc2l6ZV90IG9mZnNldCwgbG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHVsb25nOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCB1bG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBmbG9hdCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNihjaGFyMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgY2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNih1Y2hhcjE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIHVjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KHNob3J0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgc2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYodXNob3J0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgdXNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGludDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIGludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNih1aW50MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgdWludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNihsb25nMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgbG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNih1bG9uZzE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIHVsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgZmxvYXQgKnApOworI2lmZGVmIGNsX2tocl9mcDY0Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgZG91YmxlICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTMoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBkb3VibGUgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGRvdWJsZSAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgZG91YmxlICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIGRvdWJsZSAqcCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2lmZGVmIGNsX2tocl9mcDE2Cit2b2lkIF9fb3ZsZCB2c3RvcmUoaGFsZiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIoaGFsZjIgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGhhbGYzIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChoYWxmNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoaGFsZjggZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNihoYWxmMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorI2Vsc2UKK3ZvaWQgX19vdmxkIHZzdG9yZTIoY2hhcjIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgY2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHVjaGFyMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCB1Y2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHNob3J0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHVzaG9ydDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgdXNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIoaW50MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMih1aW50MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCB1aW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIobG9uZzIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgbG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHVsb25nMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCB1bG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBmbG9hdCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGNoYXIzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyh1Y2hhcjMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgdWNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhzaG9ydDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgc2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyh1c2hvcnQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIHVzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGludDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTModWludDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgdWludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGxvbmczIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyh1bG9uZzMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgdWxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgZmxvYXQgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChjaGFyNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQodWNoYXI0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIHVjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoc2hvcnQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIHNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQodXNob3J0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCB1c2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChpbnQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KHVpbnQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIHVpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlNChsb25nNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQodWxvbmc0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIHVsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGZsb2F0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoY2hhcjggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgY2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHVjaGFyOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCB1Y2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHNob3J0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHVzaG9ydDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgdXNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoaW50OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlOCh1aW50OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCB1aW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgobG9uZzggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgbG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHVsb25nOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCB1bG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBmbG9hdCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNihjaGFyMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgY2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNih1Y2hhcjE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIHVjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KHNob3J0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgc2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYodXNob3J0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgdXNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGludDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNih1aW50MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgdWludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNihsb25nMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgbG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNih1bG9uZzE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIHVsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgZmxvYXQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMihjaGFyMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlMih1Y2hhcjIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCB1Y2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHNob3J0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIodXNob3J0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHVzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKGludDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMih1aW50MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHVpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMihsb25nMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlMih1bG9uZzIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCB1bG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGZsb2F0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTMoY2hhcjMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTModWNoYXIzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgdWNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhzaG9ydDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKHVzaG9ydDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCB1c2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhpbnQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTModWludDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCB1aW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTMobG9uZzMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTModWxvbmczIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgdWxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBmbG9hdCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KGNoYXI0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgY2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KHVjaGFyNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHVjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoc2hvcnQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgc2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlNCh1c2hvcnQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgdXNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoaW50NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KHVpbnQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgdWludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KGxvbmc0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgbG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KHVsb25nNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHVsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgZmxvYXQgKnApOwordm9pZCBfX292bGQgdnN0b3JlOChjaGFyOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlOCh1Y2hhcjggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCB1Y2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHNob3J0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgodXNob3J0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHVzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KGludDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlOCh1aW50OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHVpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlOChsb25nOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlOCh1bG9uZzggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCB1bG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGZsb2F0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGNoYXIxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYodWNoYXIxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHVjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KHNob3J0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNih1c2hvcnQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHVzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNihpbnQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNih1aW50MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCB1aW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGxvbmcxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYodWxvbmcxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIHVsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBmbG9hdCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKGNoYXIyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIodWNoYXIyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSB1Y2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKHNob3J0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgc2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMih1c2hvcnQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSB1c2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMihpbnQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMih1aW50MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgdWludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKGxvbmcyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIodWxvbmcyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSB1bG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgZmxvYXQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhjaGFyMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgY2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKHVjaGFyMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgdWNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhzaG9ydDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTModXNob3J0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgdXNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTMoaW50MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTModWludDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHVpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhsb25nMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgbG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKHVsb25nMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgdWxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGZsb2F0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoY2hhcjQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGNoYXIgKnApOwordm9pZCBfX292bGQgdnN0b3JlNCh1Y2hhcjQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHVjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoc2hvcnQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KHVzaG9ydDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHVzaG9ydCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KGludDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KHVpbnQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSB1aW50ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQobG9uZzQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGxvbmcgKnApOwordm9pZCBfX292bGQgdnN0b3JlNCh1bG9uZzQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHVsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBmbG9hdCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KGNoYXI4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgodWNoYXI4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSB1Y2hhciAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KHNob3J0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgc2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlOCh1c2hvcnQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSB1c2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlOChpbnQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlOCh1aW50OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgdWludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KGxvbmc4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgodWxvbmc4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSB1bG9uZyAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgZmxvYXQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoY2hhcjE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KHVjaGFyMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHVjaGFyICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KHNob3J0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHNob3J0ICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KHVzaG9ydDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSB1c2hvcnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoaW50MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGludCAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNih1aW50MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHVpbnQgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYobG9uZzE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KHVsb25nMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIHVsb25nICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGZsb2F0ICpwKTsKKyNpZmRlZiBjbF9raHJfZnA2NAordm9pZCBfX292bGQgdnN0b3JlMihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGRvdWJsZSAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgZG91YmxlICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBkb3VibGUgKnApOwordm9pZCBfX292bGQgdnN0b3JlOChkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGRvdWJsZSAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBkb3VibGUgKnApOwordm9pZCBfX292bGQgdnN0b3JlMihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgZG91YmxlICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTMoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGRvdWJsZSAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU0KGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBkb3VibGUgKnApOwordm9pZCBfX292bGQgdnN0b3JlOChkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgZG91YmxlICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgZG91YmxlICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgZG91YmxlICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTMoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgZG91YmxlICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgZG91YmxlICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgZG91YmxlICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBkb3VibGUgKnApOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgordm9pZCBfX292bGQgdnN0b3JlKGhhbGYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUyKGhhbGYyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlMyhoYWxmMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoaGFsZjQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmU4KGhhbGY4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlMTYoaGFsZjE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlKGhhbGYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTIoaGFsZjIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTMoaGFsZjMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoaGFsZjQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTgoaGFsZjggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTE2KGhhbGYxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlKGhhbGYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlMihoYWxmMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUzKGhhbGYzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZTQoaGFsZjQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlOChoYWxmOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmUxNihoYWxmMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8qKgorICogUmVhZCBzaXplb2YgKGhhbGYpIGJ5dGVzIG9mIGRhdGEgZnJvbSBhZGRyZXNzCisgKiAocCArIG9mZnNldCkuIFRoZSBkYXRhIHJlYWQgaXMgaW50ZXJwcmV0ZWQgYXMgYQorICogaGFsZiB2YWx1ZS4gVGhlIGhhbGYgdmFsdWUgaXMgY29udmVydGVkIHRvIGEKKyAqIGZsb2F0IHZhbHVlIGFuZCB0aGUgZmxvYXQgdmFsdWUgaXMgcmV0dXJuZWQuCisgKiBUaGUgcmVhZCBhZGRyZXNzIGNvbXB1dGVkIGFzIChwICsgb2Zmc2V0KQorICogbXVzdCBiZSAxNi1iaXQgYWxpZ25lZC4KKyAqLworZmxvYXQgX19vdmxkIHZsb2FkX2hhbGYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBoYWxmICpwKTsKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorZmxvYXQgX19vdmxkIHZsb2FkX2hhbGYoc2l6ZV90IG9mZnNldCwgY29uc3QgaGFsZiAqcCk7CisjZWxzZQorZmxvYXQgX19vdmxkIHZsb2FkX2hhbGYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgaGFsZiAqcCk7CitmbG9hdCBfX292bGQgdmxvYWRfaGFsZihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGhhbGYgKnApOworZmxvYXQgX19vdmxkIHZsb2FkX2hhbGYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGhhbGYgKnApOworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLyoqCisgKiBSZWFkIHNpemVvZiAoaGFsZm4pIGJ5dGVzIG9mIGRhdGEgZnJvbSBhZGRyZXNzCisgKiAocCArIChvZmZzZXQgKiBuKSkuIFRoZSBkYXRhIHJlYWQgaXMgaW50ZXJwcmV0ZWQKKyAqIGFzIGEgaGFsZm4gdmFsdWUuIFRoZSBoYWxmbiB2YWx1ZSByZWFkIGlzCisgKiBjb252ZXJ0ZWQgdG8gYSBmbG9hdG4gdmFsdWUgYW5kIHRoZSBmbG9hdG4KKyAqIHZhbHVlIGlzIHJldHVybmVkLiBUaGUgcmVhZCBhZGRyZXNzIGNvbXB1dGVkCisgKiBhcyAocCArIChvZmZzZXQgKiBuKSkgbXVzdCBiZSAxNi1iaXQgYWxpZ25lZC4KKyAqLworZmxvYXQyIF9fb3ZsZCB2bG9hZF9oYWxmMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGhhbGYgKnApOworZmxvYXQzIF9fb3ZsZCB2bG9hZF9oYWxmMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGhhbGYgKnApOworZmxvYXQ0IF9fb3ZsZCB2bG9hZF9oYWxmNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGhhbGYgKnApOworZmxvYXQ4IF9fb3ZsZCB2bG9hZF9oYWxmOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGhhbGYgKnApOworZmxvYXQxNiBfX292bGQgdmxvYWRfaGFsZjE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgaGFsZiAqcCk7CisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2Zsb2F0MiBfX292bGQgdmxvYWRfaGFsZjIoc2l6ZV90IG9mZnNldCwgY29uc3QgaGFsZiAqcCk7CitmbG9hdDMgX19vdmxkIHZsb2FkX2hhbGYzKHNpemVfdCBvZmZzZXQsIGNvbnN0IGhhbGYgKnApOworZmxvYXQ0IF9fb3ZsZCB2bG9hZF9oYWxmNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBoYWxmICpwKTsKK2Zsb2F0OCBfX292bGQgdmxvYWRfaGFsZjgoc2l6ZV90IG9mZnNldCwgY29uc3QgaGFsZiAqcCk7CitmbG9hdDE2IF9fb3ZsZCB2bG9hZF9oYWxmMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgaGFsZiAqcCk7CisjZWxzZQorZmxvYXQyIF9fb3ZsZCB2bG9hZF9oYWxmMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBoYWxmICpwKTsKK2Zsb2F0MyBfX292bGQgdmxvYWRfaGFsZjMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgaGFsZiAqcCk7CitmbG9hdDQgX19vdmxkIHZsb2FkX2hhbGY0KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGhhbGYgKnApOworZmxvYXQ4IF9fb3ZsZCB2bG9hZF9oYWxmOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBoYWxmICpwKTsKK2Zsb2F0MTYgX19vdmxkIHZsb2FkX2hhbGYxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBoYWxmICpwKTsKK2Zsb2F0MiBfX292bGQgdmxvYWRfaGFsZjIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBoYWxmICpwKTsKK2Zsb2F0MyBfX292bGQgdmxvYWRfaGFsZjMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBoYWxmICpwKTsKK2Zsb2F0NCBfX292bGQgdmxvYWRfaGFsZjQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBoYWxmICpwKTsKK2Zsb2F0OCBfX292bGQgdmxvYWRfaGFsZjgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBoYWxmICpwKTsKK2Zsb2F0MTYgX19vdmxkIHZsb2FkX2hhbGYxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGhhbGYgKnApOworZmxvYXQyIF9fb3ZsZCB2bG9hZF9oYWxmMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgaGFsZiAqcCk7CitmbG9hdDMgX19vdmxkIHZsb2FkX2hhbGYzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBoYWxmICpwKTsKK2Zsb2F0NCBfX292bGQgdmxvYWRfaGFsZjQoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGhhbGYgKnApOworZmxvYXQ4IF9fb3ZsZCB2bG9hZF9oYWxmOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgaGFsZiAqcCk7CitmbG9hdDE2IF9fb3ZsZCB2bG9hZF9oYWxmMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19wcml2YXRlIGhhbGYgKnApOworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLyoqCisgKiBUaGUgZmxvYXQgdmFsdWUgZ2l2ZW4gYnkgZGF0YSBpcyBmaXJzdAorICogY29udmVydGVkIHRvIGEgaGFsZiB2YWx1ZSB1c2luZyB0aGUgYXBwcm9wcmlhdGUKKyAqIHJvdW5kaW5nIG1vZGUuIFRoZSBoYWxmIHZhbHVlIGlzIHRoZW4gd3JpdHRlbgorICogdG8gYWRkcmVzcyBjb21wdXRlZCBhcyAocCArIG9mZnNldCkuIFRoZQorICogYWRkcmVzcyBjb21wdXRlZCBhcyAocCArIG9mZnNldCkgbXVzdCBiZSAxNi0KKyAqIGJpdCBhbGlnbmVkLgorICogdnN0b3JlX2hhbGYgdXNlIHRoZSBjdXJyZW50IHJvdW5kaW5nIG1vZGUuCisgKiBUaGUgZGVmYXVsdCBjdXJyZW50IHJvdW5kaW5nIG1vZGUgaXMgcm91bmQgdG8KKyAqIG5lYXJlc3QgZXZlbi4KKyAqLworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0ZShmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0eihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0cChmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0bihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKKyNpZmRlZiBjbF9raHJfZnA2NAordm9pZCBfX292bGQgdnN0b3JlX2hhbGYoZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnRlKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0eihkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydHAoZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnRuKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjZWxzZQordm9pZCBfX292bGQgdnN0b3JlX2hhbGYoZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydGUoZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydHooZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydHAoZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydG4oZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnRlKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydHooZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0cChmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnRuKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydGUoZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnR6KGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0cChmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydG4oZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOworI2lmZGVmIGNsX2tocl9mcDY0Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZihkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydGUoZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnR6KGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0cChkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydG4oZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYoZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydGUoZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydHooZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydHAoZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydG4oZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZihkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnRlKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZl9ydHooZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmX3J0cChkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGZfcnRuKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLyoqCisgKiBUaGUgZmxvYXRuIHZhbHVlIGdpdmVuIGJ5IGRhdGEgaXMgY29udmVydGVkIHRvCisgKiBhIGhhbGZuIHZhbHVlIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSByb3VuZGluZworICogbW9kZS4gVGhlIGhhbGZuIHZhbHVlIGlzIHRoZW4gd3JpdHRlbiB0bworICogYWRkcmVzcyBjb21wdXRlZCBhcyAocCArIChvZmZzZXQgKiBuKSkuIFRoZQorICogYWRkcmVzcyBjb21wdXRlZCBhcyAocCArIChvZmZzZXQgKiBuKSkgbXVzdCBiZQorICogMTYtYml0IGFsaWduZWQuCisgKiB2c3RvcmVfaGFsZm4gdXNlcyB0aGUgY3VycmVudCByb3VuZGluZyBtb2RlLgorICogVGhlIGRlZmF1bHQgY3VycmVudCByb3VuZGluZyBtb2RlIGlzIHJvdW5kIHRvCisgKiBuZWFyZXN0IGV2ZW4uCisgKi8KKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMyhmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjQoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4KGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTYoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydGUoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0ZShmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRlKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydGUoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydGUoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydHooZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0eihmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnR6KGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydHooZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydHooZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydHAoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0cChmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRwKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydHAoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydHAoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydG4oZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0bihmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRuKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydG4oZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydG4oZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKKyNpZmRlZiBjbF9raHJfZnA2NAordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjMoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNChkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4KGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0ZShkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0ZShkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0ZShkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0ZShkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydGUoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnR6KGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnR6KGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnR6KGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnR6KGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0eihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydHAoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydHAoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydHAoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydHAoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnRwKGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0bihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0bihkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0bihkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0bihkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydG4oZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorI2Vsc2UKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjMoZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0KGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOChmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2KGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnRlKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydGUoZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0ZShmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnRlKGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnRlKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnR6KGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydHooZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0eihmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnR6KGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnR6KGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnRwKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydHAoZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0cChmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnRwKGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnRwKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnRuKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydG4oZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0bihmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnRuKGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnRuKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjIoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjMoZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjQoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjgoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2KGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydGUoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRlKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0ZShmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydGUoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0ZShmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnR6KGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0eihmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydHooZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnR6KGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydHooZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0cChmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydHAoZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRwKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0cChmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnRwKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydG4oZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRuKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0bihmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydG4oZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0bihmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjIoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMyhmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0KGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjgoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTYoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnRlKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRlKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRlKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnRlKGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0ZShmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydHooZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydHooZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydHooZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydHooZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnR6KGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0cChmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0cChmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0cChmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0cChmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydHAoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnRuKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRuKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnRuKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnRuKGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0bihmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKKyNpZmRlZiBjbF9raHJfZnA2NAordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjMoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNChkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4KGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0ZShkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0ZShkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0ZShkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0ZShkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydGUoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnR6KGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnR6KGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnR6KGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnR6KGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0eihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydHAoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydHAoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydHAoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydHAoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnRwKGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0bihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0bihkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0bihkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0bihkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydG4oZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjIoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNChkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjgoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0ZShkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRlKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydGUoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0ZShkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0ZShkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0eihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnR6KGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydHooZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0eihkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0eihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0cChkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRwKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydHAoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0cChkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0cChkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0bihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRuKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydG4oZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0bihkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0bihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0KGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4KGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnRlKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0ZShkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydGUoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnRlKGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydGUoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYyX3J0eihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmM19ydHooZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjRfcnR6KGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY4X3J0eihkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMTZfcnR6KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmMl9ydHAoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjNfcnRwKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGY0X3J0cChkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmOF9ydHAoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjE2X3J0cChkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjJfcnRuKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYzX3J0bihkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZV9oYWxmNF9ydG4oZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVfaGFsZjhfcnRuKGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlX2hhbGYxNl9ydG4oZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8qKgorICogRm9yIG4gPSAxLCAyLCA0LCA4IGFuZCAxNiByZWFkIHNpemVvZiAoaGFsZm4pCisgKiBieXRlcyBvZiBkYXRhIGZyb20gYWRkcmVzcyAocCArIChvZmZzZXQgKiBuKSkuCisgKiBUaGUgZGF0YSByZWFkIGlzIGludGVycHJldGVkIGFzIGEgaGFsZm4gdmFsdWUuCisgKiBUaGUgaGFsZm4gdmFsdWUgcmVhZCBpcyBjb252ZXJ0ZWQgdG8gYSBmbG9hdG4KKyAqIHZhbHVlIGFuZCB0aGUgZmxvYXRuIHZhbHVlIGlzIHJldHVybmVkLgorICogVGhlIGFkZHJlc3MgY29tcHV0ZWQgYXMgKHAgKyAob2Zmc2V0ICogbikpCisgKiBtdXN0IGJlIGFsaWduZWQgdG8gc2l6ZW9mIChoYWxmbikgYnl0ZXMuCisgKiBGb3IgbiA9IDMsIHZsb2FkYV9oYWxmMyByZWFkcyBhIGhhbGYzIGZyb20KKyAqIGFkZHJlc3MgKHAgKyAob2Zmc2V0ICogNCkpIGFuZCByZXR1cm5zIGEgZmxvYXQzLgorICogVGhlIGFkZHJlc3MgY29tcHV0ZWQgYXMgKHAgKyAob2Zmc2V0ICogNCkpCisgKiBtdXN0IGJlIGFsaWduZWQgdG8gc2l6ZW9mIChoYWxmKSAqIDQgYnl0ZXMuCisgKi8KK2Zsb2F0IF9fb3ZsZCB2bG9hZGFfaGFsZihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGhhbGYgKnApOworZmxvYXQyIF9fb3ZsZCB2bG9hZGFfaGFsZjIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBoYWxmICpwKTsKK2Zsb2F0MyBfX292bGQgdmxvYWRhX2hhbGYzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fY29uc3RhbnQgaGFsZiAqcCk7CitmbG9hdDQgX19vdmxkIHZsb2FkYV9oYWxmNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2NvbnN0YW50IGhhbGYgKnApOworZmxvYXQ4IF9fb3ZsZCB2bG9hZGFfaGFsZjgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBoYWxmICpwKTsKK2Zsb2F0MTYgX19vdmxkIHZsb2FkYV9oYWxmMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19jb25zdGFudCBoYWxmICpwKTsKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorZmxvYXQgX19vdmxkIHZsb2FkYV9oYWxmKHNpemVfdCBvZmZzZXQsIGNvbnN0IGhhbGYgKnApOworZmxvYXQyIF9fb3ZsZCB2bG9hZGFfaGFsZjIoc2l6ZV90IG9mZnNldCwgY29uc3QgaGFsZiAqcCk7CitmbG9hdDMgX19vdmxkIHZsb2FkYV9oYWxmMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBoYWxmICpwKTsKK2Zsb2F0NCBfX292bGQgdmxvYWRhX2hhbGY0KHNpemVfdCBvZmZzZXQsIGNvbnN0IGhhbGYgKnApOworZmxvYXQ4IF9fb3ZsZCB2bG9hZGFfaGFsZjgoc2l6ZV90IG9mZnNldCwgY29uc3QgaGFsZiAqcCk7CitmbG9hdDE2IF9fb3ZsZCB2bG9hZGFfaGFsZjE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IGhhbGYgKnApOworI2Vsc2UKK2Zsb2F0IF9fb3ZsZCB2bG9hZGFfaGFsZihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBoYWxmICpwKTsKK2Zsb2F0MiBfX292bGQgdmxvYWRhX2hhbGYyKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGhhbGYgKnApOworZmxvYXQzIF9fb3ZsZCB2bG9hZGFfaGFsZjMoc2l6ZV90IG9mZnNldCwgY29uc3QgX19nbG9iYWwgaGFsZiAqcCk7CitmbG9hdDQgX19vdmxkIHZsb2FkYV9oYWxmNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBoYWxmICpwKTsKK2Zsb2F0OCBfX292bGQgdmxvYWRhX2hhbGY4KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fZ2xvYmFsIGhhbGYgKnApOworZmxvYXQxNiBfX292bGQgdmxvYWRhX2hhbGYxNihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2dsb2JhbCBoYWxmICpwKTsKK2Zsb2F0IF9fb3ZsZCB2bG9hZGFfaGFsZihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGhhbGYgKnApOworZmxvYXQyIF9fb3ZsZCB2bG9hZGFfaGFsZjIoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBoYWxmICpwKTsKK2Zsb2F0MyBfX292bGQgdmxvYWRhX2hhbGYzKHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fbG9jYWwgaGFsZiAqcCk7CitmbG9hdDQgX19vdmxkIHZsb2FkYV9oYWxmNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX2xvY2FsIGhhbGYgKnApOworZmxvYXQ4IF9fb3ZsZCB2bG9hZGFfaGFsZjgoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBoYWxmICpwKTsKK2Zsb2F0MTYgX19vdmxkIHZsb2FkYV9oYWxmMTYoc2l6ZV90IG9mZnNldCwgY29uc3QgX19sb2NhbCBoYWxmICpwKTsKK2Zsb2F0IF9fb3ZsZCB2bG9hZGFfaGFsZihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgaGFsZiAqcCk7CitmbG9hdDIgX19vdmxkIHZsb2FkYV9oYWxmMihzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgaGFsZiAqcCk7CitmbG9hdDMgX19vdmxkIHZsb2FkYV9oYWxmMyhzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgaGFsZiAqcCk7CitmbG9hdDQgX19vdmxkIHZsb2FkYV9oYWxmNChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgaGFsZiAqcCk7CitmbG9hdDggX19vdmxkIHZsb2FkYV9oYWxmOChzaXplX3Qgb2Zmc2V0LCBjb25zdCBfX3ByaXZhdGUgaGFsZiAqcCk7CitmbG9hdDE2IF9fb3ZsZCB2bG9hZGFfaGFsZjE2KHNpemVfdCBvZmZzZXQsIGNvbnN0IF9fcHJpdmF0ZSBoYWxmICpwKTsKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8qKgorICogVGhlIGZsb2F0biB2YWx1ZSBnaXZlbiBieSBkYXRhIGlzIGNvbnZlcnRlZCB0bworICogYSBoYWxmbiB2YWx1ZSB1c2luZyB0aGUgYXBwcm9wcmlhdGUgcm91bmRpbmcKKyAqIG1vZGUuCisgKiBGb3IgbiA9IDEsIDIsIDQsIDggYW5kIDE2LCB0aGUgaGFsZm4gdmFsdWUgaXMKKyAqIHdyaXR0ZW4gdG8gdGhlIGFkZHJlc3MgY29tcHV0ZWQgYXMgKHAgKyAob2Zmc2V0CisgKiAqIG4pKS4gVGhlIGFkZHJlc3MgY29tcHV0ZWQgYXMgKHAgKyAob2Zmc2V0ICoKKyAqIG4pKSBtdXN0IGJlIGFsaWduZWQgdG8gc2l6ZW9mIChoYWxmbikgYnl0ZXMuCisgKiBGb3IgbiA9IDMsIHRoZSBoYWxmMyB2YWx1ZSBpcyB3cml0dGVuIHRvIHRoZQorICogYWRkcmVzcyBjb21wdXRlZCBhcyAocCArIChvZmZzZXQgKiA0KSkuIFRoZQorICogYWRkcmVzcyBjb21wdXRlZCBhcyAocCArIChvZmZzZXQgKiA0KSkgbXVzdCBiZQorICogYWxpZ25lZCB0byBzaXplb2YgKGhhbGYpICogNCBieXRlcy4KKyAqIHZzdG9yZWFfaGFsZm4gdXNlcyB0aGUgY3VycmVudCByb3VuZGluZworICogbW9kZS4gVGhlIGRlZmF1bHQgY3VycmVudCByb3VuZGluZyBtb2RlIGlzCisgKiByb3VuZCB0byBuZWFyZXN0IGV2ZW4uCisgKi8KKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjQoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOChmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNihmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRlKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydGUoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydGUoZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydGUoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydGUoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRlKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydHooZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0eihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0eihmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0eihmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0eihmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydHooZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0cChmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnRwKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnRwKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnRwKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnRwKGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0cChmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRuKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydG4oZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydG4oZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydG4oZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydG4oZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRuKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7CisKKyNpZmRlZiBjbF9raHJfZnA2NAordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjIoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjMoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjQoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjgoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRlKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnRlKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0ZShkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydGUoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnRlKGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydGUoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydHooZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydHooZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnR6KGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0eihkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydHooZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0eihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0cChkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0cChkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydHAoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnRwKGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0cChkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRwKGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRuKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnRuKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0bihkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydG4oZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnRuKGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydG4oZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgaGFsZiAqcCk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorCisjZWxzZQordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjQoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOChmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNihmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRlKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydGUoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydGUoZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydGUoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydGUoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRlKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydHooZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0eihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0eihmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0eihmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0eihmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydHooZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0cChmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnRwKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnRwKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnRwKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnRwKGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0cChmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRuKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydG4oZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydG4oZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydG4oZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydG4oZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRuKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjMoZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0KGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOChmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2KGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0ZShmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydGUoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0ZShmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnRlKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydGUoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydGUoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnR6KGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0eihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnR6KGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydHooZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0eihmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0eihmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydHAoZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnRwKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydHAoZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0cChmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnRwKGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRwKGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0bihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydG4oZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0bihmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnRuKGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydG4oZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydG4oZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYoZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMyhmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNChmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOChmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTYoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydGUoZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydGUoZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnRlKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0ZShmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydGUoZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0ZShmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0eihmbG9hdCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0eihmbG9hdDIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydHooZmxvYXQzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnR6KGZsb2F0NCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0eihmbG9hdDggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnR6KGZsb2F0MTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRwKGZsb2F0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnRwKGZsb2F0MiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0cChmbG9hdDMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydHAoZmxvYXQ0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnRwKGZsb2F0OCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydHAoZmxvYXQxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydG4oZmxvYXQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydG4oZmxvYXQyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnRuKGZsb2F0MyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0bihmbG9hdDQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydG4oZmxvYXQ4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0bihmbG9hdDE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKKworI2lmZGVmIGNsX2tocl9mcDY0Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYoZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMyhkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNChkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOChkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTYoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydGUoZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydGUoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnRlKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0ZShkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydGUoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0ZShkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0eihkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0eihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydHooZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnR6KGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0eihkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnR6KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRwKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnRwKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0cChkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydHAoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnRwKGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydHAoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydG4oZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydG4oZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnRuKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19nbG9iYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0bihkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fZ2xvYmFsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydG4oZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0bihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2dsb2JhbCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjQoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOChkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRlKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydGUoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydGUoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydGUoZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydGUoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRlKGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydHooZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0eihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0eihkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0eihkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0eihkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydHooZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0cChkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnRwKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnRwKGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnRwKGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnRwKGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19sb2NhbCBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0cChkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnRuKGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydG4oZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydG4oZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydG4oZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydG4oZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX2xvY2FsIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRuKGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fbG9jYWwgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZihkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjMoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0KGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOChkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2KGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0ZShkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydGUoZG91YmxlMiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYzX3J0ZShkb3VibGUzIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjRfcnRlKGRvdWJsZTQgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydGUoZG91YmxlOCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYxNl9ydGUoZG91YmxlMTYgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOworCit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGZfcnR6KGRvdWJsZSBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGYyX3J0eihkb3VibGUyIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnR6KGRvdWJsZTMgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmNF9ydHooZG91YmxlNCBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY4X3J0eihkb3VibGU4IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0eihkb3VibGUxNiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7CisKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZl9ydHAoZG91YmxlIGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjJfcnRwKGRvdWJsZTIgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmM19ydHAoZG91YmxlMyBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0cChkb3VibGU0IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjhfcnRwKGRvdWJsZTggZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMTZfcnRwKGRvdWJsZTE2IGRhdGEsIHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKKwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmX3J0bihkb3VibGUgZGF0YSwgc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmMl9ydG4oZG91YmxlMiBkYXRhLHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjNfcnRuKGRvdWJsZTMgZGF0YSxzaXplX3Qgb2Zmc2V0LCBfX3ByaXZhdGUgaGFsZiAqcCk7Cit2b2lkIF9fb3ZsZCB2c3RvcmVhX2hhbGY0X3J0bihkb3VibGU0IGRhdGEsc2l6ZV90IG9mZnNldCwgX19wcml2YXRlIGhhbGYgKnApOwordm9pZCBfX292bGQgdnN0b3JlYV9oYWxmOF9ydG4oZG91YmxlOCBkYXRhLHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKK3ZvaWQgX19vdmxkIHZzdG9yZWFfaGFsZjE2X3J0bihkb3VibGUxNiBkYXRhLHNpemVfdCBvZmZzZXQsIF9fcHJpdmF0ZSBoYWxmICpwKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvLyBPcGVuQ0wgdjEuMSBzNi4xMS44LCB2MS4yIHM2LjEyLjgsIHYyLjAgczYuMTMuOCAtIFN5bmNocm9uaXphdGlvbiBGdW5jdGlvbnMKKworLy8gRmxhZyB0eXBlIGFuZCB2YWx1ZXMgZm9yIGJhcnJpZXIsIG1lbV9mZW5jZSwgcmVhZF9tZW1fZmVuY2UsIHdyaXRlX21lbV9mZW5jZQordHlwZWRlZiB1aW50IGNsX21lbV9mZW5jZV9mbGFnczsKKworLyoqCisgKiBRdWV1ZSBhIG1lbW9yeSBmZW5jZSB0byBlbnN1cmUgY29ycmVjdAorICogb3JkZXJpbmcgb2YgbWVtb3J5IG9wZXJhdGlvbnMgdG8gbG9jYWwgbWVtb3J5CisgKi8KKyNkZWZpbmUgQ0xLX0xPQ0FMX01FTV9GRU5DRSAgICAweDAxCisKKy8qKgorICogUXVldWUgYSBtZW1vcnkgZmVuY2UgdG8gZW5zdXJlIGNvcnJlY3QKKyAqIG9yZGVyaW5nIG9mIG1lbW9yeSBvcGVyYXRpb25zIHRvIGdsb2JhbCBtZW1vcnkKKyAqLworI2RlZmluZSBDTEtfR0xPQkFMX01FTV9GRU5DRSAgIDB4MDIKKworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisvKioKKyAqIFF1ZXVlIGEgbWVtb3J5IGZlbmNlIHRvIGVuc3VyZSBjb3JyZWN0IG9yZGVyaW5nIG9mIG1lbW9yeQorICogb3BlcmF0aW9ucyBiZXR3ZWVuIHdvcmstaXRlbXMgb2YgYSB3b3JrLWdyb3VwIHRvCisgKiBpbWFnZSBtZW1vcnkuCisgKi8KKyNkZWZpbmUgQ0xLX0lNQUdFX01FTV9GRU5DRSAgMHgwNAorI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLyoqCisgKiBBbGwgd29yay1pdGVtcyBpbiBhIHdvcmstZ3JvdXAgZXhlY3V0aW5nIHRoZSBrZXJuZWwKKyAqIG9uIGEgcHJvY2Vzc29yIG11c3QgZXhlY3V0ZSB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBhbnkKKyAqIGFyZSBhbGxvd2VkIHRvIGNvbnRpbnVlIGV4ZWN1dGlvbiBiZXlvbmQgdGhlIGJhcnJpZXIuCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgZW5jb3VudGVyZWQgYnkgYWxsIHdvcmstaXRlbXMgaW4KKyAqIGEgd29yay1ncm91cCBleGVjdXRpbmcgdGhlIGtlcm5lbC4KKyAqIElmIGJhcnJpZXIgaXMgaW5zaWRlIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LCB0aGVuIGFsbAorICogd29yay1pdGVtcyBtdXN0IGVudGVyIHRoZSBjb25kaXRpb25hbCBpZiBhbnkgd29yay1pdGVtCisgKiBlbnRlcnMgdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBhbmQgZXhlY3V0ZXMgdGhlCisgKiBiYXJyaWVyLgorICogSWYgYmFycmVyIGlzIGluc2lkZSBhIGxvb3AsIGFsbCB3b3JrLWl0ZW1zIG11c3QgZXhlY3V0ZQorICogdGhlIGJhcnJpZXIgZm9yIGVhY2ggaXRlcmF0aW9uIG9mIHRoZSBsb29wIGJlZm9yZSBhbnkgYXJlCisgKiBhbGxvd2VkIHRvIGNvbnRpbnVlIGV4ZWN1dGlvbiBiZXlvbmQgdGhlIGJhcnJpZXIuCisgKiBUaGUgYmFycmllciBmdW5jdGlvbiBhbHNvIHF1ZXVlcyBhIG1lbW9yeSBmZW5jZQorICogKHJlYWRzIGFuZCB3cml0ZXMpIHRvIGVuc3VyZSBjb3JyZWN0IG9yZGVyaW5nIG9mCisgKiBtZW1vcnkgb3BlcmF0aW9ucyB0byBsb2NhbCBvciBnbG9iYWwgbWVtb3J5LgorICogVGhlIGZsYWdzIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbWVtb3J5IGFkZHJlc3Mgc3BhY2UKKyAqIGFuZCBjYW4gYmUgc2V0IHRvIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyBsaXRlcmFsCisgKiB2YWx1ZXMuCisgKiBDTEtfTE9DQUxfTUVNX0ZFTkNFIC0gVGhlIGJhcnJpZXIgZnVuY3Rpb24KKyAqIHdpbGwgZWl0aGVyIGZsdXNoIGFueSB2YXJpYWJsZXMgc3RvcmVkIGluIGxvY2FsIG1lbW9yeQorICogb3IgcXVldWUgYSBtZW1vcnkgZmVuY2UgdG8gZW5zdXJlIGNvcnJlY3Qgb3JkZXJpbmcgb2YKKyAqIG1lbW9yeSBvcGVyYXRpb25zIHRvIGxvY2FsIG1lbW9yeS4KKyAqIENMS19HTE9CQUxfTUVNX0ZFTkNFIC0gVGhlIGJhcnJpZXIgZnVuY3Rpb24KKyAqIHdpbGwgcXVldWUgYSBtZW1vcnkgZmVuY2UgdG8gZW5zdXJlIGNvcnJlY3Qgb3JkZXJpbmcKKyAqIG9mIG1lbW9yeSBvcGVyYXRpb25zIHRvIGdsb2JhbCBtZW1vcnkuIFRoaXMgY2FuIGJlCisgKiB1c2VmdWwgd2hlbiB3b3JrLWl0ZW1zLCBmb3IgZXhhbXBsZSwgd3JpdGUgdG8gYnVmZmVyIG9yCisgKiBpbWFnZSBvYmplY3RzIGFuZCB0aGVuIHdhbnQgdG8gcmVhZCB0aGUgdXBkYXRlZCBkYXRhLgorICovCisKK3ZvaWQgX19vdmxkIF9fY29udiBiYXJyaWVyKGNsX21lbV9mZW5jZV9mbGFncyBmbGFncyk7CisKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCit0eXBlZGVmIGVudW0gbWVtb3J5X3Njb3BlCit7CisgIG1lbW9yeV9zY29wZV93b3JrX2l0ZW0sCisgIG1lbW9yeV9zY29wZV93b3JrX2dyb3VwLAorICBtZW1vcnlfc2NvcGVfZGV2aWNlLAorICBtZW1vcnlfc2NvcGVfYWxsX3N2bV9kZXZpY2VzLAorICBtZW1vcnlfc2NvcGVfc3ViX2dyb3VwCit9IG1lbW9yeV9zY29wZTsKKwordm9pZCBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfYmFycmllcihjbF9tZW1fZmVuY2VfZmxhZ3MgZmxhZ3MsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit2b2lkIF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9iYXJyaWVyKGNsX21lbV9mZW5jZV9mbGFncyBmbGFncyk7CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvLyBPcGVuQ0wgdjEuMSBzNi4xMS45LCB2MS4yIHM2LjEyLjkgLSBFeHBsaWNpdCBNZW1vcnkgRmVuY2UgRnVuY3Rpb25zCisKKy8qKgorICogT3JkZXJzIGxvYWRzIGFuZCBzdG9yZXMgb2YgYSB3b3JrLWl0ZW0KKyAqIGV4ZWN1dGluZyBhIGtlcm5lbC4gVGhpcyBtZWFucyB0aGF0IGxvYWRzCisgKiBhbmQgc3RvcmVzIHByZWNlZGluZyB0aGUgbWVtX2ZlbmNlIHdpbGwKKyAqIGJlIGNvbW1pdHRlZCB0byBtZW1vcnkgYmVmb3JlIGFueSBsb2FkcworICogYW5kIHN0b3JlcyBmb2xsb3dpbmcgdGhlIG1lbV9mZW5jZS4KKyAqIFRoZSBmbGFncyBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIG1lbW9yeQorICogYWRkcmVzcyBzcGFjZSBhbmQgY2FuIGJlIHNldCB0byBhCisgKiBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIGxpdGVyYWwKKyAqIHZhbHVlczoKKyAqIENMS19MT0NBTF9NRU1fRkVOQ0UKKyAqIENMS19HTE9CQUxfTUVNX0ZFTkNFLgorICovCit2b2lkIF9fb3ZsZCBtZW1fZmVuY2UoY2xfbWVtX2ZlbmNlX2ZsYWdzIGZsYWdzKTsKKworLyoqCisgKiBSZWFkIG1lbW9yeSBiYXJyaWVyIHRoYXQgb3JkZXJzIG9ubHkKKyAqIGxvYWRzLgorICogVGhlIGZsYWdzIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbWVtb3J5CisgKiBhZGRyZXNzIHNwYWNlIGFuZCBjYW4gYmUgc2V0IHRvIHRvIGEKKyAqIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgbGl0ZXJhbAorICogdmFsdWVzOgorICogQ0xLX0xPQ0FMX01FTV9GRU5DRQorICogQ0xLX0dMT0JBTF9NRU1fRkVOQ0UuCisgKi8KK3ZvaWQgX19vdmxkIHJlYWRfbWVtX2ZlbmNlKGNsX21lbV9mZW5jZV9mbGFncyBmbGFncyk7CisKKy8qKgorICogV3JpdGUgbWVtb3J5IGJhcnJpZXIgdGhhdCBvcmRlcnMgb25seQorICogc3RvcmVzLgorICogVGhlIGZsYWdzIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbWVtb3J5CisgKiBhZGRyZXNzIHNwYWNlIGFuZCBjYW4gYmUgc2V0IHRvIHRvIGEKKyAqIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgbGl0ZXJhbAorICogdmFsdWVzOgorICogQ0xLX0xPQ0FMX01FTV9GRU5DRQorICogQ0xLX0dMT0JBTF9NRU1fRkVOQ0UuCisgKi8KK3ZvaWQgX19vdmxkIHdyaXRlX21lbV9mZW5jZShjbF9tZW1fZmVuY2VfZmxhZ3MgZmxhZ3MpOworCisvLyBPcGVuQ0wgdjIuMCBzNi4xMy45IC0gQWRkcmVzcyBTcGFjZSBRdWFsaWZpZXIgRnVuY3Rpb25zCisKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorY2xfbWVtX2ZlbmNlX2ZsYWdzIF9fb3ZsZCBnZXRfZmVuY2UoY29uc3Qgdm9pZCAqcHRyKTsKK2NsX21lbV9mZW5jZV9mbGFncyBfX292bGQgZ2V0X2ZlbmNlKHZvaWQgKnB0cik7CisKKy8qKiAKKyAqIEJ1aWx0aW4gZnVuY3Rpb25zIHRvX2dsb2JhbCwgdG9fbG9jYWwsIGFuZCB0b19wcml2YXRlIG5lZWQgdG8gYmUgZGVjbGFyZWQgYXMgQ2xhbmcgYnVpbHRpbiBmdW5jdGlvbnMKKyAqIGFuZCBjaGVja2VkIGluIFNlbWEgc2luY2UgdGhleSBzaG91bGQgYmUgZGVjbGFyZWQgYXMKKyAqICAgYWRkciBnZW50eXBlKiB0b19hZGRyIChnZW50eXBlKik7CisgKiB3aGVyZSBnZW50eXBlIGlzIGJ1aWx0aW4gdHlwZSBvciB1c2VyIGRlZmluZWQgdHlwZS4KKyAqLworCisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvLyBPcGVuQ0wgdjEuMSBzNi4xMS4xMCwgdjEuMiBzNi4xMi4xMCwgdjIuMCBzNi4xMy4xMCAtIEFzeW5jIENvcGllcyBmcm9tIEdsb2JhbCB0byBMb2NhbCBNZW1vcnksIExvY2FsIHRvIEdsb2JhbCBNZW1vcnksIGFuZCBQcmVmZXRjaAorCisvKioKKyAqIGV2ZW50X3QgYXN5bmNfd29ya19ncm91cF9jb3B5ICgKKyAqIF9fZ2xvYmFsIGdlbnR5cGUgKmRzdCwKKyAqIGNvbnN0IF9fbG9jYWwgZ2VudHlwZSAqc3JjLAorICogc2l6ZV90IG51bV9lbGVtZW50cywKKyAqIGV2ZW50X3QgZXZlbnQpCisgKiBQZXJmb3JtIGFuIGFzeW5jIGNvcHkgb2YgbnVtX2VsZW1lbnRzCisgKiBnZW50eXBlIGVsZW1lbnRzIGZyb20gc3JjIHRvIGRzdC4gVGhlIGFzeW5jCisgKiBjb3B5IGlzIHBlcmZvcm1lZCBieSBhbGwgd29yay1pdGVtcyBpbiBhIHdvcmtncm91cAorICogYW5kIHRoaXMgYnVpbHQtaW4gZnVuY3Rpb24gbXVzdCB0aGVyZWZvcmUKKyAqIGJlIGVuY291bnRlcmVkIGJ5IGFsbCB3b3JrLWl0ZW1zIGluIGEgd29ya2dyb3VwCisgKiBleGVjdXRpbmcgdGhlIGtlcm5lbCB3aXRoIHRoZSBzYW1lCisgKiBhcmd1bWVudCB2YWx1ZXM7IG90aGVyd2lzZSB0aGUgcmVzdWx0cyBhcmUKKyAqIHVuZGVmaW5lZC4KKyAqIFJldHVybnMgYW4gZXZlbnQgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgYnkKKyAqIHdhaXRfZ3JvdXBfZXZlbnRzIHRvIHdhaXQgZm9yIHRoZSBhc3luYyBjb3B5CisgKiB0byBmaW5pc2guIFRoZSBldmVudCBhcmd1bWVudCBjYW4gYWxzbyBiZSB1c2VkCisgKiB0byBhc3NvY2lhdGUgdGhlIGFzeW5jX3dvcmtfZ3JvdXBfY29weSB3aXRoCisgKiBhIHByZXZpb3VzIGFzeW5jIGNvcHkgYWxsb3dpbmcgYW4gZXZlbnQgdG8gYmUKKyAqIHNoYXJlZCBieSBtdWx0aXBsZSBhc3luYyBjb3BpZXM7IG90aGVyd2lzZSBldmVudAorICogc2hvdWxkIGJlIHplcm8uCisgKiBJZiBldmVudCBhcmd1bWVudCBpcyBub24temVybywgdGhlIGV2ZW50IG9iamVjdAorICogc3VwcGxpZWQgaW4gZXZlbnQgYXJndW1lbnQgd2lsbCBiZSByZXR1cm5lZC4KKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGVyZm9ybSBhbnkgaW1wbGljaXQKKyAqIHN5bmNocm9uaXphdGlvbiBvZiBzb3VyY2UgZGF0YSBzdWNoIGFzIHVzaW5nIGEKKyAqIGJhcnJpZXIgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGNvcHkuCisgKi8KK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGNoYXIgKmRzdCwgY29uc3QgX19nbG9iYWwgY2hhciAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVjaGFyICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVjaGFyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgc2hvcnQgKmRzdCwgY29uc3QgX19nbG9iYWwgc2hvcnQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCB1c2hvcnQgKmRzdCwgY29uc3QgX19nbG9iYWwgdXNob3J0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgaW50ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGludCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVpbnQgKmRzdCwgY29uc3QgX19nbG9iYWwgdWludCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGxvbmcgKmRzdCwgY29uc3QgX19nbG9iYWwgbG9uZyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVsb25nICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVsb25nICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgZmxvYXQgKmRzdCwgY29uc3QgX19nbG9iYWwgZmxvYXQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBjaGFyMiAqZHN0LCBjb25zdCBfX2dsb2JhbCBjaGFyMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVjaGFyMiAqZHN0LCBjb25zdCBfX2dsb2JhbCB1Y2hhcjIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBzaG9ydDIgKmRzdCwgY29uc3QgX19nbG9iYWwgc2hvcnQyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdXNob3J0MiAqZHN0LCBjb25zdCBfX2dsb2JhbCB1c2hvcnQyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgaW50MiAqZHN0LCBjb25zdCBfX2dsb2JhbCBpbnQyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdWludDIgKmRzdCwgY29uc3QgX19nbG9iYWwgdWludDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBsb25nMiAqZHN0LCBjb25zdCBfX2dsb2JhbCBsb25nMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVsb25nMiAqZHN0LCBjb25zdCBfX2dsb2JhbCB1bG9uZzIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBmbG9hdDIgKmRzdCwgY29uc3QgX19nbG9iYWwgZmxvYXQyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgY2hhcjMgKmRzdCwgY29uc3QgX19nbG9iYWwgY2hhcjMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCB1Y2hhcjMgKmRzdCwgY29uc3QgX19nbG9iYWwgdWNoYXIzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgc2hvcnQzICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHNob3J0MyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVzaG9ydDMgKmRzdCwgY29uc3QgX19nbG9iYWwgdXNob3J0MyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGludDMgKmRzdCwgY29uc3QgX19nbG9iYWwgaW50MyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVpbnQzICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVpbnQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgbG9uZzMgKmRzdCwgY29uc3QgX19nbG9iYWwgbG9uZzMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCB1bG9uZzMgKmRzdCwgY29uc3QgX19nbG9iYWwgdWxvbmczICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgZmxvYXQzICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGZsb2F0MyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGNoYXI0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGNoYXI0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdWNoYXI0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVjaGFyNCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHNob3J0NCAqZHN0LCBjb25zdCBfX2dsb2JhbCBzaG9ydDQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCB1c2hvcnQ0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVzaG9ydDQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBpbnQ0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGludDQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCB1aW50NCAqZHN0LCBjb25zdCBfX2dsb2JhbCB1aW50NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGxvbmc0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGxvbmc0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdWxvbmc0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVsb25nNCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGZsb2F0NCAqZHN0LCBjb25zdCBfX2dsb2JhbCBmbG9hdDQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBjaGFyOCAqZHN0LCBjb25zdCBfX2dsb2JhbCBjaGFyOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVjaGFyOCAqZHN0LCBjb25zdCBfX2dsb2JhbCB1Y2hhcjggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBzaG9ydDggKmRzdCwgY29uc3QgX19nbG9iYWwgc2hvcnQ4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdXNob3J0OCAqZHN0LCBjb25zdCBfX2dsb2JhbCB1c2hvcnQ4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgaW50OCAqZHN0LCBjb25zdCBfX2dsb2JhbCBpbnQ4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgdWludDggKmRzdCwgY29uc3QgX19nbG9iYWwgdWludDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBsb25nOCAqZHN0LCBjb25zdCBfX2dsb2JhbCBsb25nOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVsb25nOCAqZHN0LCBjb25zdCBfX2dsb2JhbCB1bG9uZzggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBmbG9hdDggKmRzdCwgY29uc3QgX19nbG9iYWwgZmxvYXQ4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgY2hhcjE2ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGNoYXIxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVjaGFyMTYgKmRzdCwgY29uc3QgX19nbG9iYWwgdWNoYXIxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHNob3J0MTYgKmRzdCwgY29uc3QgX19nbG9iYWwgc2hvcnQxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVzaG9ydDE2ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVzaG9ydDE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgaW50MTYgKmRzdCwgY29uc3QgX19nbG9iYWwgaW50MTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCB1aW50MTYgKmRzdCwgY29uc3QgX19nbG9iYWwgdWludDE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgbG9uZzE2ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGxvbmcxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIHVsb25nMTYgKmRzdCwgY29uc3QgX19nbG9iYWwgdWxvbmcxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGZsb2F0MTYgKmRzdCwgY29uc3QgX19nbG9iYWwgZmxvYXQxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBjaGFyICpkc3QsIGNvbnN0IF9fbG9jYWwgY2hhciAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1Y2hhciAqZHN0LCBjb25zdCBfX2xvY2FsIHVjaGFyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHNob3J0ICpkc3QsIGNvbnN0IF9fbG9jYWwgc2hvcnQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgdXNob3J0ICpkc3QsIGNvbnN0IF9fbG9jYWwgdXNob3J0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGludCAqZHN0LCBjb25zdCBfX2xvY2FsIGludCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1aW50ICpkc3QsIGNvbnN0IF9fbG9jYWwgdWludCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBsb25nICpkc3QsIGNvbnN0IF9fbG9jYWwgbG9uZyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1bG9uZyAqZHN0LCBjb25zdCBfX2xvY2FsIHVsb25nICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGZsb2F0ICpkc3QsIGNvbnN0IF9fbG9jYWwgZmxvYXQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgY2hhcjIgKmRzdCwgY29uc3QgX19sb2NhbCBjaGFyMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1Y2hhcjIgKmRzdCwgY29uc3QgX19sb2NhbCB1Y2hhcjIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgc2hvcnQyICpkc3QsIGNvbnN0IF9fbG9jYWwgc2hvcnQyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVzaG9ydDIgKmRzdCwgY29uc3QgX19sb2NhbCB1c2hvcnQyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGludDIgKmRzdCwgY29uc3QgX19sb2NhbCBpbnQyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVpbnQyICpkc3QsIGNvbnN0IF9fbG9jYWwgdWludDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgbG9uZzIgKmRzdCwgY29uc3QgX19sb2NhbCBsb25nMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1bG9uZzIgKmRzdCwgY29uc3QgX19sb2NhbCB1bG9uZzIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgZmxvYXQyICpkc3QsIGNvbnN0IF9fbG9jYWwgZmxvYXQyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGNoYXIzICpkc3QsIGNvbnN0IF9fbG9jYWwgY2hhcjMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgdWNoYXIzICpkc3QsIGNvbnN0IF9fbG9jYWwgdWNoYXIzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHNob3J0MyAqZHN0LCBjb25zdCBfX2xvY2FsIHNob3J0MyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1c2hvcnQzICpkc3QsIGNvbnN0IF9fbG9jYWwgdXNob3J0MyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBpbnQzICpkc3QsIGNvbnN0IF9fbG9jYWwgaW50MyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1aW50MyAqZHN0LCBjb25zdCBfX2xvY2FsIHVpbnQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGxvbmczICpkc3QsIGNvbnN0IF9fbG9jYWwgbG9uZzMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgdWxvbmczICpkc3QsIGNvbnN0IF9fbG9jYWwgdWxvbmczICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGZsb2F0MyAqZHN0LCBjb25zdCBfX2xvY2FsIGZsb2F0MyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBjaGFyNCAqZHN0LCBjb25zdCBfX2xvY2FsIGNoYXI0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVjaGFyNCAqZHN0LCBjb25zdCBfX2xvY2FsIHVjaGFyNCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBzaG9ydDQgKmRzdCwgY29uc3QgX19sb2NhbCBzaG9ydDQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgdXNob3J0NCAqZHN0LCBjb25zdCBfX2xvY2FsIHVzaG9ydDQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgaW50NCAqZHN0LCBjb25zdCBfX2xvY2FsIGludDQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgdWludDQgKmRzdCwgY29uc3QgX19sb2NhbCB1aW50NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBsb25nNCAqZHN0LCBjb25zdCBfX2xvY2FsIGxvbmc0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVsb25nNCAqZHN0LCBjb25zdCBfX2xvY2FsIHVsb25nNCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBmbG9hdDQgKmRzdCwgY29uc3QgX19sb2NhbCBmbG9hdDQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgY2hhcjggKmRzdCwgY29uc3QgX19sb2NhbCBjaGFyOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1Y2hhcjggKmRzdCwgY29uc3QgX19sb2NhbCB1Y2hhcjggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgc2hvcnQ4ICpkc3QsIGNvbnN0IF9fbG9jYWwgc2hvcnQ4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVzaG9ydDggKmRzdCwgY29uc3QgX19sb2NhbCB1c2hvcnQ4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGludDggKmRzdCwgY29uc3QgX19sb2NhbCBpbnQ4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIHVpbnQ4ICpkc3QsIGNvbnN0IF9fbG9jYWwgdWludDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgbG9uZzggKmRzdCwgY29uc3QgX19sb2NhbCBsb25nOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1bG9uZzggKmRzdCwgY29uc3QgX19sb2NhbCB1bG9uZzggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgZmxvYXQ4ICpkc3QsIGNvbnN0IF9fbG9jYWwgZmxvYXQ4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGNoYXIxNiAqZHN0LCBjb25zdCBfX2xvY2FsIGNoYXIxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1Y2hhcjE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgdWNoYXIxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBzaG9ydDE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgc2hvcnQxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1c2hvcnQxNiAqZHN0LCBjb25zdCBfX2xvY2FsIHVzaG9ydDE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGludDE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgaW50MTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgdWludDE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgdWludDE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGxvbmcxNiAqZHN0LCBjb25zdCBfX2xvY2FsIGxvbmcxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCB1bG9uZzE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgdWxvbmcxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBmbG9hdDE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgZmxvYXQxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgZG91YmxlICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGRvdWJsZSAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGRvdWJsZTIgKmRzdCwgY29uc3QgX19nbG9iYWwgZG91YmxlMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGRvdWJsZTMgKmRzdCwgY29uc3QgX19nbG9iYWwgZG91YmxlMyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGRvdWJsZTQgKmRzdCwgY29uc3QgX19nbG9iYWwgZG91YmxlNCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGRvdWJsZTggKmRzdCwgY29uc3QgX19nbG9iYWwgZG91YmxlOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGRvdWJsZTE2ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGRvdWJsZTE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGRvdWJsZSAqZHN0LCBjb25zdCBfX2xvY2FsIGRvdWJsZSAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBkb3VibGUyICpkc3QsIGNvbnN0IF9fbG9jYWwgZG91YmxlMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBkb3VibGUzICpkc3QsIGNvbnN0IF9fbG9jYWwgZG91YmxlMyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBkb3VibGU0ICpkc3QsIGNvbnN0IF9fbG9jYWwgZG91YmxlNCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBkb3VibGU4ICpkc3QsIGNvbnN0IF9fbG9jYWwgZG91YmxlOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBkb3VibGUxNiAqZHN0LCBjb25zdCBfX2xvY2FsIGRvdWJsZTE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgorZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgaGFsZiAqZHN0LCBjb25zdCBfX2dsb2JhbCBoYWxmICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgaGFsZjIgKmRzdCwgY29uc3QgX19nbG9iYWwgaGFsZjIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBoYWxmMyAqZHN0LCBjb25zdCBfX2dsb2JhbCBoYWxmMyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2xvY2FsIGhhbGY0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGhhbGY0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fbG9jYWwgaGFsZjggKmRzdCwgY29uc3QgX19nbG9iYWwgaGFsZjggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19sb2NhbCBoYWxmMTYgKmRzdCwgY29uc3QgX19nbG9iYWwgaGFsZjE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGhhbGYgKmRzdCwgY29uc3QgX19sb2NhbCBoYWxmICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGhhbGYyICpkc3QsIGNvbnN0IF9fbG9jYWwgaGFsZjIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgaGFsZjMgKmRzdCwgY29uc3QgX19sb2NhbCBoYWxmMyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfY29weShfX2dsb2JhbCBoYWxmNCAqZHN0LCBjb25zdCBfX2xvY2FsIGhhbGY0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9jb3B5KF9fZ2xvYmFsIGhhbGY4ICpkc3QsIGNvbnN0IF9fbG9jYWwgaGFsZjggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX2NvcHkoX19nbG9iYWwgaGFsZjE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgaGFsZjE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIGV2ZW50X3QgZXZlbnQpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLyoqCisgKiBQZXJmb3JtIGFuIGFzeW5jIGdhdGhlciBvZiBudW1fZWxlbWVudHMKKyAqIGdlbnR5cGUgZWxlbWVudHMgZnJvbSBzcmMgdG8gZHN0LiBUaGUKKyAqIHNyY19zdHJpZGUgaXMgdGhlIHN0cmlkZSBpbiBlbGVtZW50cyBmb3IgZWFjaAorICogZ2VudHlwZSBlbGVtZW50IHJlYWQgZnJvbSBzcmMuIFRoZSBkc3Rfc3RyaWRlCisgKiBpcyB0aGUgc3RyaWRlIGluIGVsZW1lbnRzIGZvciBlYWNoIGdlbnR5cGUKKyAqIGVsZW1lbnQgd3JpdHRlbiB0byBkc3QuIFRoZSBhc3luYyBnYXRoZXIgaXMKKyAqIHBlcmZvcm1lZCBieSBhbGwgd29yay1pdGVtcyBpbiBhIHdvcmstZ3JvdXAuCisgKiBUaGlzIGJ1aWx0LWluIGZ1bmN0aW9uIG11c3QgdGhlcmVmb3JlIGJlCisgKiBlbmNvdW50ZXJlZCBieSBhbGwgd29yay1pdGVtcyBpbiBhIHdvcmstZ3JvdXAKKyAqIGV4ZWN1dGluZyB0aGUga2VybmVsIHdpdGggdGhlIHNhbWUgYXJndW1lbnQKKyAqIHZhbHVlczsgb3RoZXJ3aXNlIHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuCisgKiBSZXR1cm5zIGFuIGV2ZW50IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGJ5CisgKiB3YWl0X2dyb3VwX2V2ZW50cyB0byB3YWl0IGZvciB0aGUgYXN5bmMgY29weQorICogdG8gZmluaXNoLiBUaGUgZXZlbnQgYXJndW1lbnQgY2FuIGFsc28gYmUgdXNlZAorICogdG8gYXNzb2NpYXRlIHRoZQorICogYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkgd2l0aCBhCisgKiBwcmV2aW91cyBhc3luYyBjb3B5IGFsbG93aW5nIGFuIGV2ZW50IHRvIGJlCisgKiBzaGFyZWQgYnkgbXVsdGlwbGUgYXN5bmMgY29waWVzOyBvdGhlcndpc2UgZXZlbnQKKyAqIHNob3VsZCBiZSB6ZXJvLgorICogSWYgZXZlbnQgYXJndW1lbnQgaXMgbm9uLXplcm8sIHRoZSBldmVudCBvYmplY3QKKyAqIHN1cHBsaWVkIGluIGV2ZW50IGFyZ3VtZW50IHdpbGwgYmUgcmV0dXJuZWQuCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHBlcmZvcm0gYW55IGltcGxpY2l0CisgKiBzeW5jaHJvbml6YXRpb24gb2Ygc291cmNlIGRhdGEgc3VjaCBhcyB1c2luZyBhCisgKiBiYXJyaWVyIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBjb3B5LgorICovCitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGNoYXIgKmRzdCwgY29uc3QgX19nbG9iYWwgY2hhciAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVjaGFyICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVjaGFyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgc2hvcnQgKmRzdCwgY29uc3QgX19nbG9iYWwgc2hvcnQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCB1c2hvcnQgKmRzdCwgY29uc3QgX19nbG9iYWwgdXNob3J0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgaW50ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGludCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVpbnQgKmRzdCwgY29uc3QgX19nbG9iYWwgdWludCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGxvbmcgKmRzdCwgY29uc3QgX19nbG9iYWwgbG9uZyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVsb25nICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVsb25nICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgZmxvYXQgKmRzdCwgY29uc3QgX19nbG9iYWwgZmxvYXQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBjaGFyMiAqZHN0LCBjb25zdCBfX2dsb2JhbCBjaGFyMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVjaGFyMiAqZHN0LCBjb25zdCBfX2dsb2JhbCB1Y2hhcjIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBzaG9ydDIgKmRzdCwgY29uc3QgX19nbG9iYWwgc2hvcnQyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdXNob3J0MiAqZHN0LCBjb25zdCBfX2dsb2JhbCB1c2hvcnQyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgaW50MiAqZHN0LCBjb25zdCBfX2dsb2JhbCBpbnQyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdWludDIgKmRzdCwgY29uc3QgX19nbG9iYWwgdWludDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBsb25nMiAqZHN0LCBjb25zdCBfX2dsb2JhbCBsb25nMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVsb25nMiAqZHN0LCBjb25zdCBfX2dsb2JhbCB1bG9uZzIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBmbG9hdDIgKmRzdCwgY29uc3QgX19nbG9iYWwgZmxvYXQyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgY2hhcjMgKmRzdCwgY29uc3QgX19nbG9iYWwgY2hhcjMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCB1Y2hhcjMgKmRzdCwgY29uc3QgX19nbG9iYWwgdWNoYXIzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgc2hvcnQzICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHNob3J0MyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVzaG9ydDMgKmRzdCwgY29uc3QgX19nbG9iYWwgdXNob3J0MyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGludDMgKmRzdCwgY29uc3QgX19nbG9iYWwgaW50MyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVpbnQzICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVpbnQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgbG9uZzMgKmRzdCwgY29uc3QgX19nbG9iYWwgbG9uZzMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCB1bG9uZzMgKmRzdCwgY29uc3QgX19nbG9iYWwgdWxvbmczICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgZmxvYXQzICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGZsb2F0MyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGNoYXI0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGNoYXI0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdWNoYXI0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVjaGFyNCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHNob3J0NCAqZHN0LCBjb25zdCBfX2dsb2JhbCBzaG9ydDQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCB1c2hvcnQ0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVzaG9ydDQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBpbnQ0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGludDQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCB1aW50NCAqZHN0LCBjb25zdCBfX2dsb2JhbCB1aW50NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGxvbmc0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGxvbmc0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdWxvbmc0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVsb25nNCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGZsb2F0NCAqZHN0LCBjb25zdCBfX2dsb2JhbCBmbG9hdDQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBjaGFyOCAqZHN0LCBjb25zdCBfX2dsb2JhbCBjaGFyOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVjaGFyOCAqZHN0LCBjb25zdCBfX2dsb2JhbCB1Y2hhcjggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBzaG9ydDggKmRzdCwgY29uc3QgX19nbG9iYWwgc2hvcnQ4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdXNob3J0OCAqZHN0LCBjb25zdCBfX2dsb2JhbCB1c2hvcnQ4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgaW50OCAqZHN0LCBjb25zdCBfX2dsb2JhbCBpbnQ4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgdWludDggKmRzdCwgY29uc3QgX19nbG9iYWwgdWludDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBsb25nOCAqZHN0LCBjb25zdCBfX2dsb2JhbCBsb25nOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVsb25nOCAqZHN0LCBjb25zdCBfX2dsb2JhbCB1bG9uZzggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBmbG9hdDggKmRzdCwgY29uc3QgX19nbG9iYWwgZmxvYXQ4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgY2hhcjE2ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGNoYXIxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVjaGFyMTYgKmRzdCwgY29uc3QgX19nbG9iYWwgdWNoYXIxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHNob3J0MTYgKmRzdCwgY29uc3QgX19nbG9iYWwgc2hvcnQxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVzaG9ydDE2ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIHVzaG9ydDE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgaW50MTYgKmRzdCwgY29uc3QgX19nbG9iYWwgaW50MTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCB1aW50MTYgKmRzdCwgY29uc3QgX19nbG9iYWwgdWludDE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgbG9uZzE2ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGxvbmcxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIHVsb25nMTYgKmRzdCwgY29uc3QgX19nbG9iYWwgdWxvbmcxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGZsb2F0MTYgKmRzdCwgY29uc3QgX19nbG9iYWwgZmxvYXQxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBjaGFyICpkc3QsIGNvbnN0IF9fbG9jYWwgY2hhciAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1Y2hhciAqZHN0LCBjb25zdCBfX2xvY2FsIHVjaGFyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHNob3J0ICpkc3QsIGNvbnN0IF9fbG9jYWwgc2hvcnQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgdXNob3J0ICpkc3QsIGNvbnN0IF9fbG9jYWwgdXNob3J0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGludCAqZHN0LCBjb25zdCBfX2xvY2FsIGludCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1aW50ICpkc3QsIGNvbnN0IF9fbG9jYWwgdWludCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBsb25nICpkc3QsIGNvbnN0IF9fbG9jYWwgbG9uZyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1bG9uZyAqZHN0LCBjb25zdCBfX2xvY2FsIHVsb25nICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGZsb2F0ICpkc3QsIGNvbnN0IF9fbG9jYWwgZmxvYXQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgY2hhcjIgKmRzdCwgY29uc3QgX19sb2NhbCBjaGFyMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1Y2hhcjIgKmRzdCwgY29uc3QgX19sb2NhbCB1Y2hhcjIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgc2hvcnQyICpkc3QsIGNvbnN0IF9fbG9jYWwgc2hvcnQyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVzaG9ydDIgKmRzdCwgY29uc3QgX19sb2NhbCB1c2hvcnQyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGludDIgKmRzdCwgY29uc3QgX19sb2NhbCBpbnQyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVpbnQyICpkc3QsIGNvbnN0IF9fbG9jYWwgdWludDIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgbG9uZzIgKmRzdCwgY29uc3QgX19sb2NhbCBsb25nMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1bG9uZzIgKmRzdCwgY29uc3QgX19sb2NhbCB1bG9uZzIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgZmxvYXQyICpkc3QsIGNvbnN0IF9fbG9jYWwgZmxvYXQyICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGNoYXIzICpkc3QsIGNvbnN0IF9fbG9jYWwgY2hhcjMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgdWNoYXIzICpkc3QsIGNvbnN0IF9fbG9jYWwgdWNoYXIzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHNob3J0MyAqZHN0LCBjb25zdCBfX2xvY2FsIHNob3J0MyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1c2hvcnQzICpkc3QsIGNvbnN0IF9fbG9jYWwgdXNob3J0MyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBpbnQzICpkc3QsIGNvbnN0IF9fbG9jYWwgaW50MyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1aW50MyAqZHN0LCBjb25zdCBfX2xvY2FsIHVpbnQzICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGxvbmczICpkc3QsIGNvbnN0IF9fbG9jYWwgbG9uZzMgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgdWxvbmczICpkc3QsIGNvbnN0IF9fbG9jYWwgdWxvbmczICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGZsb2F0MyAqZHN0LCBjb25zdCBfX2xvY2FsIGZsb2F0MyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBjaGFyNCAqZHN0LCBjb25zdCBfX2xvY2FsIGNoYXI0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVjaGFyNCAqZHN0LCBjb25zdCBfX2xvY2FsIHVjaGFyNCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBzaG9ydDQgKmRzdCwgY29uc3QgX19sb2NhbCBzaG9ydDQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgdXNob3J0NCAqZHN0LCBjb25zdCBfX2xvY2FsIHVzaG9ydDQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgaW50NCAqZHN0LCBjb25zdCBfX2xvY2FsIGludDQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgdWludDQgKmRzdCwgY29uc3QgX19sb2NhbCB1aW50NCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBsb25nNCAqZHN0LCBjb25zdCBfX2xvY2FsIGxvbmc0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVsb25nNCAqZHN0LCBjb25zdCBfX2xvY2FsIHVsb25nNCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBmbG9hdDQgKmRzdCwgY29uc3QgX19sb2NhbCBmbG9hdDQgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgY2hhcjggKmRzdCwgY29uc3QgX19sb2NhbCBjaGFyOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1Y2hhcjggKmRzdCwgY29uc3QgX19sb2NhbCB1Y2hhcjggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgc2hvcnQ4ICpkc3QsIGNvbnN0IF9fbG9jYWwgc2hvcnQ4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVzaG9ydDggKmRzdCwgY29uc3QgX19sb2NhbCB1c2hvcnQ4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGludDggKmRzdCwgY29uc3QgX19sb2NhbCBpbnQ4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIHVpbnQ4ICpkc3QsIGNvbnN0IF9fbG9jYWwgdWludDggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgbG9uZzggKmRzdCwgY29uc3QgX19sb2NhbCBsb25nOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1bG9uZzggKmRzdCwgY29uc3QgX19sb2NhbCB1bG9uZzggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgZmxvYXQ4ICpkc3QsIGNvbnN0IF9fbG9jYWwgZmxvYXQ4ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGNoYXIxNiAqZHN0LCBjb25zdCBfX2xvY2FsIGNoYXIxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1Y2hhcjE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgdWNoYXIxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBzaG9ydDE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgc2hvcnQxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1c2hvcnQxNiAqZHN0LCBjb25zdCBfX2xvY2FsIHVzaG9ydDE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGludDE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgaW50MTYgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgdWludDE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgdWludDE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGxvbmcxNiAqZHN0LCBjb25zdCBfX2xvY2FsIGxvbmcxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCB1bG9uZzE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgdWxvbmcxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBmbG9hdDE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgZmxvYXQxNiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgZG91YmxlICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGRvdWJsZSAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGRvdWJsZTIgKmRzdCwgY29uc3QgX19nbG9iYWwgZG91YmxlMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGRvdWJsZTMgKmRzdCwgY29uc3QgX19nbG9iYWwgZG91YmxlMyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGRvdWJsZTQgKmRzdCwgY29uc3QgX19nbG9iYWwgZG91YmxlNCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGRvdWJsZTggKmRzdCwgY29uc3QgX19nbG9iYWwgZG91YmxlOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGRvdWJsZTE2ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGRvdWJsZTE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGRvdWJsZSAqZHN0LCBjb25zdCBfX2xvY2FsIGRvdWJsZSAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBkb3VibGUyICpkc3QsIGNvbnN0IF9fbG9jYWwgZG91YmxlMiAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBkb3VibGUzICpkc3QsIGNvbnN0IF9fbG9jYWwgZG91YmxlMyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBkb3VibGU0ICpkc3QsIGNvbnN0IF9fbG9jYWwgZG91YmxlNCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBkb3VibGU4ICpkc3QsIGNvbnN0IF9fbG9jYWwgZG91YmxlOCAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBkb3VibGUxNiAqZHN0LCBjb25zdCBfX2xvY2FsIGRvdWJsZTE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjaWZkZWYgY2xfa2hyX2ZwMTYKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgaGFsZiAqZHN0LCBjb25zdCBfX2dsb2JhbCBoYWxmICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgaGFsZjIgKmRzdCwgY29uc3QgX19nbG9iYWwgaGFsZjIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBoYWxmMyAqZHN0LCBjb25zdCBfX2dsb2JhbCBoYWxmMyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3Qgc3JjX3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2xvY2FsIGhhbGY0ICpkc3QsIGNvbnN0IF9fZ2xvYmFsIGhhbGY0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fbG9jYWwgaGFsZjggKmRzdCwgY29uc3QgX19nbG9iYWwgaGFsZjggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IHNyY19zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19sb2NhbCBoYWxmMTYgKmRzdCwgY29uc3QgX19nbG9iYWwgaGFsZjE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBzcmNfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGhhbGYgKmRzdCwgY29uc3QgX19sb2NhbCBoYWxmICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGhhbGYyICpkc3QsIGNvbnN0IF9fbG9jYWwgaGFsZjIgKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgaGFsZjMgKmRzdCwgY29uc3QgX19sb2NhbCBoYWxmMyAqc3JjLCBzaXplX3QgbnVtX2VsZW1lbnRzLCBzaXplX3QgZHN0X3N0cmlkZSwgZXZlbnRfdCBldmVudCk7CitldmVudF90IF9fb3ZsZCBhc3luY193b3JrX2dyb3VwX3N0cmlkZWRfY29weShfX2dsb2JhbCBoYWxmNCAqZHN0LCBjb25zdCBfX2xvY2FsIGhhbGY0ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKK2V2ZW50X3QgX19vdmxkIGFzeW5jX3dvcmtfZ3JvdXBfc3RyaWRlZF9jb3B5KF9fZ2xvYmFsIGhhbGY4ICpkc3QsIGNvbnN0IF9fbG9jYWwgaGFsZjggKnNyYywgc2l6ZV90IG51bV9lbGVtZW50cywgc2l6ZV90IGRzdF9zdHJpZGUsIGV2ZW50X3QgZXZlbnQpOworZXZlbnRfdCBfX292bGQgYXN5bmNfd29ya19ncm91cF9zdHJpZGVkX2NvcHkoX19nbG9iYWwgaGFsZjE2ICpkc3QsIGNvbnN0IF9fbG9jYWwgaGFsZjE2ICpzcmMsIHNpemVfdCBudW1fZWxlbWVudHMsIHNpemVfdCBkc3Rfc3RyaWRlLCBldmVudF90IGV2ZW50KTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKy8qKgorICogV2FpdCBmb3IgZXZlbnRzIHRoYXQgaWRlbnRpZnkgdGhlCisgKiBhc3luY193b3JrX2dyb3VwX2NvcHkgb3BlcmF0aW9ucyB0bworICogY29tcGxldGUuIFRoZSBldmVudCBvYmplY3RzIHNwZWNpZmllZCBpbgorICogZXZlbnRfbGlzdCB3aWxsIGJlIHJlbGVhc2VkIGFmdGVyIHRoZSB3YWl0IGlzCisgKiBwZXJmb3JtZWQuCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgZW5jb3VudGVyZWQgYnkgYWxsIHdvcmtpdGVtcworICogaW4gYSB3b3JrLWdyb3VwIGV4ZWN1dGluZyB0aGUga2VybmVsIHdpdGgKKyAqIHRoZSBzYW1lIG51bV9ldmVudHMgYW5kIGV2ZW50IG9iamVjdHMgc3BlY2lmaWVkCisgKiBpbiBldmVudF9saXN0OyBvdGhlcndpc2UgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4KKyAqLwordm9pZCBfX292bGQgd2FpdF9ncm91cF9ldmVudHMoaW50IG51bV9ldmVudHMsIGV2ZW50X3QgKmV2ZW50X2xpc3QpOworCisvKioKKyAqIFByZWZldGNoIG51bV9lbGVtZW50cyAqIHNpemVvZihnZW50eXBlKQorICogYnl0ZXMgaW50byB0aGUgZ2xvYmFsIGNhY2hlLiBUaGUgcHJlZmV0Y2gKKyAqIGluc3RydWN0aW9uIGlzIGFwcGxpZWQgdG8gYSB3b3JrLWl0ZW0gaW4gYSB3b3JrZ3JvdXAKKyAqIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGZ1bmN0aW9uYWwKKyAqIGJlaGF2aW9yIG9mIHRoZSBrZXJuZWwuCisgKi8KK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGNoYXIgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdWNoYXIgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgc2hvcnQgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdXNob3J0ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGludCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1aW50ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGxvbmcgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdWxvbmcgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgZmxvYXQgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgY2hhcjIgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdWNoYXIyICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIHNob3J0MiAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1c2hvcnQyICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGludDIgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdWludDIgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgbG9uZzIgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdWxvbmcyICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGZsb2F0MiAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBjaGFyMyAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1Y2hhcjMgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgc2hvcnQzICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIHVzaG9ydDMgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgaW50MyAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1aW50MyAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBsb25nMyAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1bG9uZzMgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgZmxvYXQzICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGNoYXI0ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIHVjaGFyNCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBzaG9ydDQgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdXNob3J0NCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBpbnQ0ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIHVpbnQ0ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGxvbmc0ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIHVsb25nNCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBmbG9hdDQgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgY2hhcjggKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdWNoYXI4ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIHNob3J0OCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCB1c2hvcnQ4ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGludDggKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdWludDggKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgbG9uZzggKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdWxvbmc4ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGZsb2F0OCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBjaGFyMTYgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdWNoYXIxNiAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBzaG9ydDE2ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIHVzaG9ydDE2ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGludDE2ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIHVpbnQxNiAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBsb25nMTYgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgdWxvbmcxNiAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBmbG9hdDE2ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKKyNpZmRlZiBjbF9raHJfZnA2NAordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgZG91YmxlICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGRvdWJsZTIgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgZG91YmxlMyAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBkb3VibGU0ICpwLCBzaXplX3QgbnVtX2VsZW1lbnRzKTsKK3ZvaWQgX19vdmxkIHByZWZldGNoKGNvbnN0IF9fZ2xvYmFsIGRvdWJsZTggKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOwordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgZG91YmxlMTYgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKyNpZmRlZiBjbF9raHJfZnAxNgordm9pZCBfX292bGQgcHJlZmV0Y2goY29uc3QgX19nbG9iYWwgaGFsZiAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBoYWxmMiAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBoYWxmMyAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBoYWxmNCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBoYWxmOCAqcCwgc2l6ZV90IG51bV9lbGVtZW50cyk7Cit2b2lkIF9fb3ZsZCBwcmVmZXRjaChjb25zdCBfX2dsb2JhbCBoYWxmMTYgKnAsIHNpemVfdCBudW1fZWxlbWVudHMpOworI2VuZGlmIC8vIGNsX2tocl9mcDE2CisKKy8vIE9wZW5DTCB2MS4xIHM2LjExLjEsIHYxLjIgczYuMTIuMTEgLSBBdG9taWMgRnVuY3Rpb25zCisKKyNpZiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9iYXNlX2F0b21pY3MpICYmIGRlZmluZWQoY2xfa2hyX2ludDY0X2V4dGVuZGVkX2F0b21pY3MpCisjcHJhZ21hIE9QRU5DTCBFWFRFTlNJT04gY2xfa2hyX2ludDY0X2Jhc2VfYXRvbWljcyA6IGVuYWJsZQorI3ByYWdtYSBPUEVOQ0wgRVhURU5TSU9OIGNsX2tocl9pbnQ2NF9leHRlbmRlZF9hdG9taWNzIDogZW5hYmxlCisjZW5kaWYKKy8qKgorICogUmVhZCB0aGUgMzItYml0IHZhbHVlIChyZWZlcnJlZCB0byBhcyBvbGQpCisgKiBzdG9yZWQgYXQgbG9jYXRpb24gcG9pbnRlZCBieSBwLiBDb21wdXRlCisgKiAob2xkICsgdmFsKSBhbmQgc3RvcmUgcmVzdWx0IGF0IGxvY2F0aW9uCisgKiBwb2ludGVkIGJ5IHAuIFRoZSBmdW5jdGlvbiByZXR1cm5zIG9sZC4KKyAqLworaW50IF9fb3ZsZCBhdG9taWNfYWRkKHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY19hZGQodm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKK2ludCBfX292bGQgYXRvbWljX2FkZCh2b2xhdGlsZSBfX2xvY2FsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY19hZGQodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworCisjaWYgZGVmaW5lZChjbF9raHJfZ2xvYmFsX2ludDMyX2Jhc2VfYXRvbWljcykKK2ludCBfX292bGQgYXRvbV9hZGQodm9sYXRpbGUgX19nbG9iYWwgaW50ICpwLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbV9hZGQodm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoY2xfa2hyX2xvY2FsX2ludDMyX2Jhc2VfYXRvbWljcykKK2ludCBfX292bGQgYXRvbV9hZGQodm9sYXRpbGUgX19sb2NhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9tX2FkZCh2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IHZhbCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoY2xfa2hyX2ludDY0X2Jhc2VfYXRvbWljcykKK2xvbmcgX19vdmxkIGF0b21fYWRkKHZvbGF0aWxlIF9fZ2xvYmFsIGxvbmcgKnAsIGxvbmcgdmFsKTsKK3Vuc2lnbmVkIGxvbmcgX19vdmxkIGF0b21fYWRkKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGxvbmcgKnAsIHVuc2lnbmVkIGxvbmcgdmFsKTsKK2xvbmcgX19vdmxkIGF0b21fYWRkKHZvbGF0aWxlIF9fbG9jYWwgbG9uZyAqcCwgbG9uZyB2YWwpOwordW5zaWduZWQgbG9uZyBfX292bGQgYXRvbV9hZGQodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBsb25nIHZhbCk7CisjZW5kaWYKKworLyoqCisgKiBSZWFkIHRoZSAzMi1iaXQgdmFsdWUgKHJlZmVycmVkIHRvIGFzIG9sZCkgc3RvcmVkIGF0IGxvY2F0aW9uIHBvaW50ZWQgYnkgcC4KKyAqIENvbXB1dGUgKG9sZCAtIHZhbCkgYW5kIHN0b3JlIHJlc3VsdCBhdCBsb2NhdGlvbiBwb2ludGVkIGJ5IHAuIFRoZSBmdW5jdGlvbgorICogcmV0dXJucyBvbGQuCisgKi8KK2ludCBfX292bGQgYXRvbWljX3N1Yih2b2xhdGlsZSBfX2dsb2JhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9taWNfc3ViKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IHZhbCk7CitpbnQgX19vdmxkIGF0b21pY19zdWIodm9sYXRpbGUgX19sb2NhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9taWNfc3ViKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKKworI2lmIGRlZmluZWQoY2xfa2hyX2dsb2JhbF9pbnQzMl9iYXNlX2F0b21pY3MpCitpbnQgX19vdmxkIGF0b21fc3ViKHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21fc3ViKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IHZhbCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKGNsX2tocl9sb2NhbF9pbnQzMl9iYXNlX2F0b21pY3MpCitpbnQgX19vdmxkIGF0b21fc3ViKHZvbGF0aWxlIF9fbG9jYWwgaW50ICpwLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbV9zdWIodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9iYXNlX2F0b21pY3MpCitsb25nIF9fb3ZsZCBhdG9tX3N1Yih2b2xhdGlsZSBfX2dsb2JhbCBsb25nICpwLCBsb25nIHZhbCk7Cit1bnNpZ25lZCBsb25nIF9fb3ZsZCBhdG9tX3N1Yih2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBsb25nIHZhbCk7Citsb25nIF9fb3ZsZCBhdG9tX3N1Yih2b2xhdGlsZSBfX2xvY2FsIGxvbmcgKnAsIGxvbmcgdmFsKTsKK3Vuc2lnbmVkIGxvbmcgX19vdmxkIGF0b21fc3ViKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgbG9uZyAqcCwgdW5zaWduZWQgbG9uZyB2YWwpOworI2VuZGlmCisKKy8qKgorICogU3dhcHMgdGhlIG9sZCB2YWx1ZSBzdG9yZWQgYXQgbG9jYXRpb24gcAorICogd2l0aCBuZXcgdmFsdWUgZ2l2ZW4gYnkgdmFsLiBSZXR1cm5zIG9sZAorICogdmFsdWUuCisgKi8KK2ludCBfX292bGQgYXRvbWljX3hjaGcodm9sYXRpbGUgX19nbG9iYWwgaW50ICpwLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbWljX3hjaGcodm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKK2ludCBfX292bGQgYXRvbWljX3hjaGcodm9sYXRpbGUgX19sb2NhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9taWNfeGNoZyh2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IHZhbCk7CitmbG9hdCBfX292bGQgYXRvbWljX3hjaGcodm9sYXRpbGUgX19nbG9iYWwgZmxvYXQgKnAsIGZsb2F0IHZhbCk7CitmbG9hdCBfX292bGQgYXRvbWljX3hjaGcodm9sYXRpbGUgX19sb2NhbCBmbG9hdCAqcCwgZmxvYXQgdmFsKTsKKworI2lmIGRlZmluZWQoY2xfa2hyX2dsb2JhbF9pbnQzMl9iYXNlX2F0b21pY3MpCitpbnQgX19vdmxkIGF0b21feGNoZyh2b2xhdGlsZSBfX2dsb2JhbCBpbnQgKnAsIGludCB2YWwpOworaW50IF9fb3ZsZCBhdG9tX3hjaGcodm9sYXRpbGUgX19sb2NhbCBpbnQgKnAsIGludCB2YWwpOworI2VuZGlmCisjaWYgZGVmaW5lZChjbF9raHJfbG9jYWxfaW50MzJfYmFzZV9hdG9taWNzKQordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9tX3hjaGcodm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbV94Y2hnKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChjbF9raHJfaW50NjRfYmFzZV9hdG9taWNzKQorbG9uZyBfX292bGQgYXRvbV94Y2hnKHZvbGF0aWxlIF9fZ2xvYmFsIGxvbmcgKnAsIGxvbmcgdmFsKTsKK2xvbmcgX19vdmxkIGF0b21feGNoZyh2b2xhdGlsZSBfX2xvY2FsIGxvbmcgKnAsIGxvbmcgdmFsKTsKK3Vuc2lnbmVkIGxvbmcgX19vdmxkIGF0b21feGNoZyh2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBsb25nIHZhbCk7Cit1bnNpZ25lZCBsb25nIF9fb3ZsZCBhdG9tX3hjaGcodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBsb25nIHZhbCk7CisjZW5kaWYKKworLyoqCisgKiBSZWFkIHRoZSAzMi1iaXQgdmFsdWUgKHJlZmVycmVkIHRvIGFzIG9sZCkKKyAqIHN0b3JlZCBhdCBsb2NhdGlvbiBwb2ludGVkIGJ5IHAuIENvbXB1dGUKKyAqIChvbGQgKyAxKSBhbmQgc3RvcmUgcmVzdWx0IGF0IGxvY2F0aW9uCisgKiBwb2ludGVkIGJ5IHAuIFRoZSBmdW5jdGlvbiByZXR1cm5zIG9sZC4KKyAqLworaW50IF9fb3ZsZCBhdG9taWNfaW5jKHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY19pbmModm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwKTsKK2ludCBfX292bGQgYXRvbWljX2luYyh2b2xhdGlsZSBfX2xvY2FsIGludCAqcCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY19pbmModm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBpbnQgKnApOworCisjaWYgZGVmaW5lZChjbF9raHJfZ2xvYmFsX2ludDMyX2Jhc2VfYXRvbWljcykKK2ludCBfX292bGQgYXRvbV9pbmModm9sYXRpbGUgX19nbG9iYWwgaW50ICpwKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbV9pbmModm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoY2xfa2hyX2xvY2FsX2ludDMyX2Jhc2VfYXRvbWljcykKK2ludCBfX292bGQgYXRvbV9pbmModm9sYXRpbGUgX19sb2NhbCBpbnQgKnApOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9tX2luYyh2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGludCAqcCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoY2xfa2hyX2ludDY0X2Jhc2VfYXRvbWljcykKK2xvbmcgX19vdmxkIGF0b21faW5jKHZvbGF0aWxlIF9fZ2xvYmFsIGxvbmcgKnApOwordW5zaWduZWQgbG9uZyBfX292bGQgYXRvbV9pbmModm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgbG9uZyAqcCk7Citsb25nIF9fb3ZsZCBhdG9tX2luYyh2b2xhdGlsZSBfX2xvY2FsIGxvbmcgKnApOwordW5zaWduZWQgbG9uZyBfX292bGQgYXRvbV9pbmModm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBsb25nICpwKTsKKyNlbmRpZgorCisvKioKKyAqIFJlYWQgdGhlIDMyLWJpdCB2YWx1ZSAocmVmZXJyZWQgdG8gYXMgb2xkKQorICogc3RvcmVkIGF0IGxvY2F0aW9uIHBvaW50ZWQgYnkgcC4gQ29tcHV0ZQorICogKG9sZCAtIDEpIGFuZCBzdG9yZSByZXN1bHQgYXQgbG9jYXRpb24KKyAqIHBvaW50ZWQgYnkgcC4gVGhlIGZ1bmN0aW9uIHJldHVybnMgb2xkLgorICovCitpbnQgX19vdmxkIGF0b21pY19kZWModm9sYXRpbGUgX19nbG9iYWwgaW50ICpwKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbWljX2RlYyh2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBpbnQgKnApOworaW50IF9fb3ZsZCBhdG9taWNfZGVjKHZvbGF0aWxlIF9fbG9jYWwgaW50ICpwKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbWljX2RlYyh2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGludCAqcCk7CisKKyNpZiBkZWZpbmVkKGNsX2tocl9nbG9iYWxfaW50MzJfYmFzZV9hdG9taWNzKQoraW50IF9fb3ZsZCBhdG9tX2RlYyh2b2xhdGlsZSBfX2dsb2JhbCBpbnQgKnApOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9tX2RlYyh2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBpbnQgKnApOworI2VuZGlmCisjaWYgZGVmaW5lZChjbF9raHJfbG9jYWxfaW50MzJfYmFzZV9hdG9taWNzKQoraW50IF9fb3ZsZCBhdG9tX2RlYyh2b2xhdGlsZSBfX2xvY2FsIGludCAqcCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21fZGVjKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgaW50ICpwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChjbF9raHJfaW50NjRfYmFzZV9hdG9taWNzKQorbG9uZyBfX292bGQgYXRvbV9kZWModm9sYXRpbGUgX19nbG9iYWwgbG9uZyAqcCk7Cit1bnNpZ25lZCBsb25nIF9fb3ZsZCBhdG9tX2RlYyh2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBsb25nICpwKTsKK2xvbmcgX19vdmxkIGF0b21fZGVjKHZvbGF0aWxlIF9fbG9jYWwgbG9uZyAqcCk7Cit1bnNpZ25lZCBsb25nIF9fb3ZsZCBhdG9tX2RlYyh2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGxvbmcgKnApOworI2VuZGlmCisKKy8qKgorICogUmVhZCB0aGUgMzItYml0IHZhbHVlIChyZWZlcnJlZCB0byBhcyBvbGQpCisgKiBzdG9yZWQgYXQgbG9jYXRpb24gcG9pbnRlZCBieSBwLiBDb21wdXRlCisgKiAob2xkID09IGNtcCkgPyB2YWwgOiBvbGQgYW5kIHN0b3JlIHJlc3VsdCBhdAorICogbG9jYXRpb24gcG9pbnRlZCBieSBwLiBUaGUgZnVuY3Rpb24KKyAqIHJldHVybnMgb2xkLgorICovCitpbnQgX19vdmxkIGF0b21pY19jbXB4Y2hnKHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCwgaW50IGNtcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY19jbXB4Y2hnKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IGNtcCwgdW5zaWduZWQgaW50IHZhbCk7CitpbnQgX19vdmxkIGF0b21pY19jbXB4Y2hnKHZvbGF0aWxlIF9fbG9jYWwgaW50ICpwLCBpbnQgY21wLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbWljX2NtcHhjaGcodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCBjbXAsIHVuc2lnbmVkIGludCB2YWwpOworCisjaWYgZGVmaW5lZChjbF9raHJfZ2xvYmFsX2ludDMyX2Jhc2VfYXRvbWljcykKK2ludCBfX292bGQgYXRvbV9jbXB4Y2hnKHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCwgaW50IGNtcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21fY21weGNoZyh2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCBjbXAsIHVuc2lnbmVkIGludCB2YWwpOworI2VuZGlmCisjaWYgZGVmaW5lZChjbF9raHJfbG9jYWxfaW50MzJfYmFzZV9hdG9taWNzKQoraW50IF9fb3ZsZCBhdG9tX2NtcHhjaGcodm9sYXRpbGUgX19sb2NhbCBpbnQgKnAsIGludCBjbXAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9tX2NtcHhjaGcodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCBjbXAsIHVuc2lnbmVkIGludCB2YWwpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9iYXNlX2F0b21pY3MpCitsb25nIF9fb3ZsZCBhdG9tX2NtcHhjaGcodm9sYXRpbGUgX19nbG9iYWwgbG9uZyAqcCwgbG9uZyBjbXAsIGxvbmcgdmFsKTsKK3Vuc2lnbmVkIGxvbmcgX19vdmxkIGF0b21fY21weGNoZyh2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBsb25nIGNtcCwgdW5zaWduZWQgbG9uZyB2YWwpOworbG9uZyBfX292bGQgYXRvbV9jbXB4Y2hnKHZvbGF0aWxlIF9fbG9jYWwgbG9uZyAqcCwgbG9uZyBjbXAsIGxvbmcgdmFsKTsKK3Vuc2lnbmVkIGxvbmcgX19vdmxkIGF0b21fY21weGNoZyh2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGxvbmcgKnAsIHVuc2lnbmVkIGxvbmcgY21wLCB1bnNpZ25lZCBsb25nIHZhbCk7CisjZW5kaWYKKworLyoqCisgKiBSZWFkIHRoZSAzMi1iaXQgdmFsdWUgKHJlZmVycmVkIHRvIGFzIG9sZCkKKyAqIHN0b3JlZCBhdCBsb2NhdGlvbiBwb2ludGVkIGJ5IHAuIENvbXB1dGUKKyAqIG1pbihvbGQsIHZhbCkgYW5kIHN0b3JlIG1pbmltdW0gdmFsdWUgYXQKKyAqIGxvY2F0aW9uIHBvaW50ZWQgYnkgcC4gVGhlIGZ1bmN0aW9uCisgKiByZXR1cm5zIG9sZC4KKyAqLworaW50IF9fb3ZsZCBhdG9taWNfbWluKHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY19taW4odm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKK2ludCBfX292bGQgYXRvbWljX21pbih2b2xhdGlsZSBfX2xvY2FsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY19taW4odm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworCisjaWYgZGVmaW5lZChjbF9raHJfZ2xvYmFsX2ludDMyX2V4dGVuZGVkX2F0b21pY3MpCitpbnQgX19vdmxkIGF0b21fbWluKHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21fbWluKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IHZhbCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKGNsX2tocl9sb2NhbF9pbnQzMl9leHRlbmRlZF9hdG9taWNzKQoraW50IF9fb3ZsZCBhdG9tX21pbih2b2xhdGlsZSBfX2xvY2FsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21fbWluKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChjbF9raHJfaW50NjRfZXh0ZW5kZWRfYXRvbWljcykKK2xvbmcgX19vdmxkIGF0b21fbWluKHZvbGF0aWxlIF9fZ2xvYmFsIGxvbmcgKnAsIGxvbmcgdmFsKTsKK3Vuc2lnbmVkIGxvbmcgX19vdmxkIGF0b21fbWluKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGxvbmcgKnAsIHVuc2lnbmVkIGxvbmcgdmFsKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoY2xfa2hyX2xvY2FsX2ludDMyX2V4dGVuZGVkX2F0b21pY3MpCitsb25nIF9fb3ZsZCBhdG9tX21pbih2b2xhdGlsZSBfX2xvY2FsIGxvbmcgKnAsIGxvbmcgdmFsKTsKK3Vuc2lnbmVkIGxvbmcgX19vdmxkIGF0b21fbWluKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgbG9uZyAqcCwgdW5zaWduZWQgbG9uZyB2YWwpOworI2VuZGlmCisKKy8qKgorICogUmVhZCB0aGUgMzItYml0IHZhbHVlIChyZWZlcnJlZCB0byBhcyBvbGQpCisgKiBzdG9yZWQgYXQgbG9jYXRpb24gcG9pbnRlZCBieSBwLiBDb21wdXRlCisgKiBtYXgob2xkLCB2YWwpIGFuZCBzdG9yZSBtYXhpbXVtIHZhbHVlIGF0CisgKiBsb2NhdGlvbiBwb2ludGVkIGJ5IHAuIFRoZSBmdW5jdGlvbgorICogcmV0dXJucyBvbGQuCisgKi8KK2ludCBfX292bGQgYXRvbWljX21heCh2b2xhdGlsZSBfX2dsb2JhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9taWNfbWF4KHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IHZhbCk7CitpbnQgX19vdmxkIGF0b21pY19tYXgodm9sYXRpbGUgX19sb2NhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9taWNfbWF4KHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKKworI2lmIGRlZmluZWQoY2xfa2hyX2dsb2JhbF9pbnQzMl9leHRlbmRlZF9hdG9taWNzKQoraW50IF9fb3ZsZCBhdG9tX21heCh2b2xhdGlsZSBfX2dsb2JhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9tX21heCh2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworI2VuZGlmCisjaWYgZGVmaW5lZChjbF9raHJfbG9jYWxfaW50MzJfZXh0ZW5kZWRfYXRvbWljcykKK2ludCBfX292bGQgYXRvbV9tYXgodm9sYXRpbGUgX19sb2NhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9tX21heCh2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IHZhbCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoY2xfa2hyX2ludDY0X2V4dGVuZGVkX2F0b21pY3MpCitsb25nIF9fb3ZsZCBhdG9tX21heCh2b2xhdGlsZSBfX2dsb2JhbCBsb25nICpwLCBsb25nIHZhbCk7Cit1bnNpZ25lZCBsb25nIF9fb3ZsZCBhdG9tX21heCh2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBsb25nIHZhbCk7Citsb25nIF9fb3ZsZCBhdG9tX21heCh2b2xhdGlsZSBfX2xvY2FsIGxvbmcgKnAsIGxvbmcgdmFsKTsKK3Vuc2lnbmVkIGxvbmcgX19vdmxkIGF0b21fbWF4KHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgbG9uZyAqcCwgdW5zaWduZWQgbG9uZyB2YWwpOworI2VuZGlmCisKKy8qKgorICogUmVhZCB0aGUgMzItYml0IHZhbHVlIChyZWZlcnJlZCB0byBhcyBvbGQpCisgKiBzdG9yZWQgYXQgbG9jYXRpb24gcG9pbnRlZCBieSBwLiBDb21wdXRlCisgKiAob2xkICYgdmFsKSBhbmQgc3RvcmUgcmVzdWx0IGF0IGxvY2F0aW9uCisgKiBwb2ludGVkIGJ5IHAuIFRoZSBmdW5jdGlvbiByZXR1cm5zIG9sZC4KKyAqLworaW50IF9fb3ZsZCBhdG9taWNfYW5kKHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY19hbmQodm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKK2ludCBfX292bGQgYXRvbWljX2FuZCh2b2xhdGlsZSBfX2xvY2FsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21pY19hbmQodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworCisjaWYgZGVmaW5lZChjbF9raHJfZ2xvYmFsX2ludDMyX2V4dGVuZGVkX2F0b21pY3MpCitpbnQgX19vdmxkIGF0b21fYW5kKHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21fYW5kKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IHZhbCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKGNsX2tocl9sb2NhbF9pbnQzMl9leHRlbmRlZF9hdG9taWNzKQoraW50IF9fb3ZsZCBhdG9tX2FuZCh2b2xhdGlsZSBfX2xvY2FsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21fYW5kKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChjbF9raHJfaW50NjRfZXh0ZW5kZWRfYXRvbWljcykKK2xvbmcgX19vdmxkIGF0b21fYW5kKHZvbGF0aWxlIF9fZ2xvYmFsIGxvbmcgKnAsIGxvbmcgdmFsKTsKK3Vuc2lnbmVkIGxvbmcgX19vdmxkIGF0b21fYW5kKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGxvbmcgKnAsIHVuc2lnbmVkIGxvbmcgdmFsKTsKK2xvbmcgX19vdmxkIGF0b21fYW5kKHZvbGF0aWxlIF9fbG9jYWwgbG9uZyAqcCwgbG9uZyB2YWwpOwordW5zaWduZWQgbG9uZyBfX292bGQgYXRvbV9hbmQodm9sYXRpbGUgX19sb2NhbCB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBsb25nIHZhbCk7CisjZW5kaWYKKworLyoqCisgKiBSZWFkIHRoZSAzMi1iaXQgdmFsdWUgKHJlZmVycmVkIHRvIGFzIG9sZCkKKyAqIHN0b3JlZCBhdCBsb2NhdGlvbiBwb2ludGVkIGJ5IHAuIENvbXB1dGUKKyAqIChvbGQgfCB2YWwpIGFuZCBzdG9yZSByZXN1bHQgYXQgbG9jYXRpb24KKyAqIHBvaW50ZWQgYnkgcC4gVGhlIGZ1bmN0aW9uIHJldHVybnMgb2xkLgorICovCitpbnQgX19vdmxkIGF0b21pY19vcih2b2xhdGlsZSBfX2dsb2JhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9taWNfb3Iodm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKK2ludCBfX292bGQgYXRvbWljX29yKHZvbGF0aWxlIF9fbG9jYWwgaW50ICpwLCBpbnQgdmFsKTsKK3Vuc2lnbmVkIGludCBfX292bGQgYXRvbWljX29yKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKKworI2lmIGRlZmluZWQoY2xfa2hyX2dsb2JhbF9pbnQzMl9leHRlbmRlZF9hdG9taWNzKQoraW50IF9fb3ZsZCBhdG9tX29yKHZvbGF0aWxlIF9fZ2xvYmFsIGludCAqcCwgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19vdmxkIGF0b21fb3Iodm9sYXRpbGUgX19nbG9iYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoY2xfa2hyX2xvY2FsX2ludDMyX2V4dGVuZGVkX2F0b21pY3MpCitpbnQgX19vdmxkIGF0b21fb3Iodm9sYXRpbGUgX19sb2NhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9tX29yKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChjbF9raHJfaW50NjRfZXh0ZW5kZWRfYXRvbWljcykKK2xvbmcgX19vdmxkIGF0b21fb3Iodm9sYXRpbGUgX19nbG9iYWwgbG9uZyAqcCwgbG9uZyB2YWwpOwordW5zaWduZWQgbG9uZyBfX292bGQgYXRvbV9vcih2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBsb25nIHZhbCk7Citsb25nIF9fb3ZsZCBhdG9tX29yKHZvbGF0aWxlIF9fbG9jYWwgbG9uZyAqcCwgbG9uZyB2YWwpOwordW5zaWduZWQgbG9uZyBfX292bGQgYXRvbV9vcih2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGxvbmcgKnAsIHVuc2lnbmVkIGxvbmcgdmFsKTsKKyNlbmRpZgorCisvKioKKyAqIFJlYWQgdGhlIDMyLWJpdCB2YWx1ZSAocmVmZXJyZWQgdG8gYXMgb2xkKQorICogc3RvcmVkIGF0IGxvY2F0aW9uIHBvaW50ZWQgYnkgcC4gQ29tcHV0ZQorICogKG9sZCBeIHZhbCkgYW5kIHN0b3JlIHJlc3VsdCBhdCBsb2NhdGlvbgorICogcG9pbnRlZCBieSBwLiBUaGUgZnVuY3Rpb24gcmV0dXJucyBvbGQuCisgKi8KK2ludCBfX292bGQgYXRvbWljX3hvcih2b2xhdGlsZSBfX2dsb2JhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9taWNfeG9yKHZvbGF0aWxlIF9fZ2xvYmFsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IHZhbCk7CitpbnQgX19vdmxkIGF0b21pY194b3Iodm9sYXRpbGUgX19sb2NhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9taWNfeG9yKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgdmFsKTsKKworI2lmIGRlZmluZWQoY2xfa2hyX2dsb2JhbF9pbnQzMl9leHRlbmRlZF9hdG9taWNzKQoraW50IF9fb3ZsZCBhdG9tX3hvcih2b2xhdGlsZSBfX2dsb2JhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9tX3hvcih2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCB2YWwpOworI2VuZGlmCisjaWYgZGVmaW5lZChjbF9raHJfbG9jYWxfaW50MzJfZXh0ZW5kZWRfYXRvbWljcykKK2ludCBfX292bGQgYXRvbV94b3Iodm9sYXRpbGUgX19sb2NhbCBpbnQgKnAsIGludCB2YWwpOwordW5zaWduZWQgaW50IF9fb3ZsZCBhdG9tX3hvcih2b2xhdGlsZSBfX2xvY2FsIHVuc2lnbmVkIGludCAqcCwgdW5zaWduZWQgaW50IHZhbCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoY2xfa2hyX2ludDY0X2V4dGVuZGVkX2F0b21pY3MpCitsb25nIF9fb3ZsZCBhdG9tX3hvcih2b2xhdGlsZSBfX2dsb2JhbCBsb25nICpwLCBsb25nIHZhbCk7Cit1bnNpZ25lZCBsb25nIF9fb3ZsZCBhdG9tX3hvcih2b2xhdGlsZSBfX2dsb2JhbCB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBsb25nIHZhbCk7Citsb25nIF9fb3ZsZCBhdG9tX3hvcih2b2xhdGlsZSBfX2xvY2FsIGxvbmcgKnAsIGxvbmcgdmFsKTsKK3Vuc2lnbmVkIGxvbmcgX19vdmxkIGF0b21feG9yKHZvbGF0aWxlIF9fbG9jYWwgdW5zaWduZWQgbG9uZyAqcCwgdW5zaWduZWQgbG9uZyB2YWwpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9iYXNlX2F0b21pY3MpICYmIGRlZmluZWQoY2xfa2hyX2ludDY0X2V4dGVuZGVkX2F0b21pY3MpCisjcHJhZ21hIE9QRU5DTCBFWFRFTlNJT04gY2xfa2hyX2ludDY0X2Jhc2VfYXRvbWljcyA6IGRpc2FibGUKKyNwcmFnbWEgT1BFTkNMIEVYVEVOU0lPTiBjbF9raHJfaW50NjRfZXh0ZW5kZWRfYXRvbWljcyA6IGRpc2FibGUKKyNlbmRpZgorCisvLyBPcGVuQ0wgdjIuMCBzNi4xMy4xMSAtIEF0b21pY3MgRnVuY3Rpb25zCisKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorI2lmbmRlZiBBVE9NSUNfVkFSX0lOSVQKKyNkZWZpbmUgQVRPTUlDX1ZBUl9JTklUKHgpICh4KQorI2VuZGlmIC8vQVRPTUlDX1ZBUl9JTklUCisjZGVmaW5lIEFUT01JQ19GTEFHX0lOSVQgMAorCisvLyBlbnVtIHZhbHVlcyBhbGlnbmVkIHdpdGggd2hhdCBjbGFuZyB1c2VzIGluIEVtaXRBdG9taWNFeHByKCkKK3R5cGVkZWYgZW51bSBtZW1vcnlfb3JkZXIKK3sKKyAgbWVtb3J5X29yZGVyX3JlbGF4ZWQsCisgIG1lbW9yeV9vcmRlcl9hY3F1aXJlLAorICBtZW1vcnlfb3JkZXJfcmVsZWFzZSwKKyAgbWVtb3J5X29yZGVyX2FjcV9yZWwsCisgIG1lbW9yeV9vcmRlcl9zZXFfY3N0Cit9IG1lbW9yeV9vcmRlcjsKKworLy8gZG91YmxlIGF0b21pY3Mgc3VwcG9ydCByZXF1aXJlcyBleHRlbnNpb25zIGNsX2tocl9pbnQ2NF9iYXNlX2F0b21pY3MgYW5kIGNsX2tocl9pbnQ2NF9leHRlbmRlZF9hdG9taWNzCisjaWYgZGVmaW5lZChjbF9raHJfaW50NjRfYmFzZV9hdG9taWNzKSAmJiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9leHRlbmRlZF9hdG9taWNzKQorI3ByYWdtYSBPUEVOQ0wgRVhURU5TSU9OIGNsX2tocl9pbnQ2NF9iYXNlX2F0b21pY3MgOiBlbmFibGUKKyNwcmFnbWEgT1BFTkNMIEVYVEVOU0lPTiBjbF9raHJfaW50NjRfZXh0ZW5kZWRfYXRvbWljcyA6IGVuYWJsZQorI2VuZGlmCisKKy8vIGF0b21pY19pbml0KCkKK3ZvaWQgX19vdmxkIGF0b21pY19pbml0KHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IHZhbHVlKTsKK3ZvaWQgX19vdmxkIGF0b21pY19pbml0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgdmFsdWUpOwordm9pZCBfX292bGQgYXRvbWljX2luaXQodm9sYXRpbGUgYXRvbWljX2Zsb2F0ICpvYmplY3QsIGZsb2F0IHZhbHVlKTsKKyNpZiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9iYXNlX2F0b21pY3MpICYmIGRlZmluZWQoY2xfa2hyX2ludDY0X2V4dGVuZGVkX2F0b21pY3MpCit2b2lkIF9fb3ZsZCBhdG9taWNfaW5pdCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIHZhbHVlKTsKK3ZvaWQgX19vdmxkIGF0b21pY19pbml0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyB2YWx1ZSk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK3ZvaWQgX19vdmxkIGF0b21pY19pbml0KHZvbGF0aWxlIGF0b21pY19kb3VibGUgKm9iamVjdCwgZG91YmxlIHZhbHVlKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisjZW5kaWYKKworLy8gYXRvbWljX3dvcmtfaXRlbV9mZW5jZSgpCit2b2lkIF9fb3ZsZCBhdG9taWNfd29ya19pdGVtX2ZlbmNlKGNsX21lbV9mZW5jZV9mbGFncyBmbGFncywgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworCisvLyBhdG9taWNfZmV0Y2goKQorCitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9hZGQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCk7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2ludCBfX292bGQgYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYWRkKHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3VpbnQgX19vdmxkIGF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9zdWIodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCk7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2ludCBfX292bGQgYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfc3ViKHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3VpbnQgX19vdmxkIGF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9vcih2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCBvcGVyYW5kKTsKK2ludCBfX292bGQgYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9vcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfb3Iodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCBvcGVyYW5kKTsKK3VpbnQgX19vdmxkIGF0b21pY19mZXRjaF9vcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF94b3Iodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCk7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF94b3JfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2ludCBfX292bGQgYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfeG9yKHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3VpbnQgX19vdmxkIGF0b21pY19mZXRjaF94b3JfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9hbmQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCk7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2ludCBfX292bGQgYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYW5kKHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3VpbnQgX19vdmxkIGF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9taW4odm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCk7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9taW5fZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2ludCBfX292bGQgYXRvbWljX2ZldGNoX21pbl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluKHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3VpbnQgX19vdmxkIGF0b21pY19mZXRjaF9taW5fZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluKHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIGludCBvcGVyYW5kKTsKK3VpbnQgX19vdmxkIGF0b21pY19mZXRjaF9taW5fZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgaW50IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIGludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9tYXgodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCk7CitpbnQgX19vdmxkIGF0b21pY19mZXRjaF9tYXhfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2ludCBfX292bGQgYXRvbWljX2ZldGNoX21heF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4X2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3VpbnQgX19vdmxkIGF0b21pY19mZXRjaF9tYXhfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIGludCBvcGVyYW5kKTsKK3VpbnQgX19vdmxkIGF0b21pY19mZXRjaF9tYXhfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgaW50IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1aW50IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4X2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIGludCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CisKKyNpZiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9iYXNlX2F0b21pY3MpICYmIGRlZmluZWQoY2xfa2hyX2ludDY0X2V4dGVuZGVkX2F0b21pY3MpCitsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfYWRkKHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCk7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2xvbmcgX19vdmxkIGF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX2FkZCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3Vsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfc3ViKHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCk7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2xvbmcgX19vdmxkIGF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX3N1Yih2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3Vsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfb3Iodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyBvcGVyYW5kKTsKK2xvbmcgX19vdmxkIGF0b21pY19mZXRjaF9vcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nIG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX29yKHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyBvcGVyYW5kKTsKK3Vsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nIG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfeG9yKHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCk7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2xvbmcgX19vdmxkIGF0b21pY19mZXRjaF94b3JfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX3hvcih2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3Vsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfYW5kKHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCk7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2xvbmcgX19vdmxkIGF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX2FuZCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3Vsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluKHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCk7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2xvbmcgX19vdmxkIGF0b21pY19mZXRjaF9taW5fZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX21pbih2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX21pbl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3Vsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX21pbih2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgbG9uZyBvcGVyYW5kKTsKK3Vsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCBsb25nIG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX21pbl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgbG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCk7Citsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4X2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2xvbmcgX19vdmxkIGF0b21pY19mZXRjaF9tYXhfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX21heCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX21heF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3Vsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4X2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX21heCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgbG9uZyBvcGVyYW5kKTsKK3Vsb25nIF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4X2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCBsb25nIG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1bG9uZyBfX292bGQgYXRvbWljX2ZldGNoX21heF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgbG9uZyBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CisjZW5kaWYgLy9kZWZpbmVkKGNsX2tocl9pbnQ2NF9iYXNlX2F0b21pY3MpICYmIGRlZmluZWQoY2xfa2hyX2ludDY0X2V4dGVuZGVkX2F0b21pY3MpCisKKy8vIE9wZW5DTCB2Mi4wIHM2LjEzLjExLjcuNToKKy8vIGFkZC9zdWI6IGF0b21pYyB0eXBlIGFyZ3VtZW50IGNhbiBiZSB1aW50cHRyX3QvaW50cHRyX3QsIHZhbHVlIHR5cGUgYXJndW1lbnQgY2FuIGJlIHB0cmRpZmZfdC4KKy8vIG9yL3hvci9hbmQvbWluL21heDogYXRvbWljIHR5cGUgYXJndW1lbnQgY2FuIGJlIGludHB0cl90L3VpbnRwdHJfdCwgdmFsdWUgdHlwZSBhcmd1bWVudCBjYW4gYmUgaW50cHRyX3QvdWludHB0cl90LgorCisjaWYgZGVmaW5lZChjbF9raHJfaW50NjRfYmFzZV9hdG9taWNzKSAmJiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9leHRlbmRlZF9hdG9taWNzKSAKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX2FkZCh2b2xhdGlsZSBhdG9taWNfdWludHB0cl90ICpvYmplY3QsIHB0cmRpZmZfdCBvcGVyYW5kKTsKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludHB0cl90ICpvYmplY3QsIHB0cmRpZmZfdCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordWludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50cHRyX3QgKm9iamVjdCwgcHRyZGlmZl90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX3N1Yih2b2xhdGlsZSBhdG9taWNfdWludHB0cl90ICpvYmplY3QsIHB0cmRpZmZfdCBvcGVyYW5kKTsKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludHB0cl90ICpvYmplY3QsIHB0cmRpZmZfdCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordWludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50cHRyX3QgKm9iamVjdCwgcHRyZGlmZl90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKKwordWludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfb3Iodm9sYXRpbGUgYXRvbWljX3VpbnRwdHJfdCAqb2JqZWN0LCBpbnRwdHJfdCBvcGVyYW5kKTsKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50cHRyX3QgKm9iamVjdCwgaW50cHRyX3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50cHRyX3QgKm9iamVjdCwgaW50cHRyX3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfeG9yKHZvbGF0aWxlIGF0b21pY191aW50cHRyX3QgKm9iamVjdCwgaW50cHRyX3Qgb3BlcmFuZCk7Cit1aW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF94b3JfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnRwdHJfdCAqb2JqZWN0LCBpbnRwdHJfdCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordWludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50cHRyX3QgKm9iamVjdCwgaW50cHRyX3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYW5kKHZvbGF0aWxlIGF0b21pY191aW50cHRyX3QgKm9iamVjdCwgaW50cHRyX3Qgb3BlcmFuZCk7Cit1aW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnRwdHJfdCAqb2JqZWN0LCBpbnRwdHJfdCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordWludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50cHRyX3QgKm9iamVjdCwgaW50cHRyX3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluKHZvbGF0aWxlIGF0b21pY191aW50cHRyX3QgKm9iamVjdCwgaW50cHRyX3Qgb3Blcm1heCk7Cit1aW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9taW5fZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnRwdHJfdCAqb2JqZWN0LCBpbnRwdHJfdCBvcGVybWF4LCBtZW1vcnlfb3JkZXIgbWluZGVyKTsKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX21pbl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludHB0cl90ICpvYmplY3QsIGludHB0cl90IG9wZXJtYXgsIG1lbW9yeV9vcmRlciBtaW5kZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1aW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9tYXgodm9sYXRpbGUgYXRvbWljX3VpbnRwdHJfdCAqb2JqZWN0LCBpbnRwdHJfdCBvcGVybWF4KTsKK3VpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX21heF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludHB0cl90ICpvYmplY3QsIGludHB0cl90IG9wZXJtYXgsIG1lbW9yeV9vcmRlciBtaW5kZXIpOwordWludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4X2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50cHRyX3QgKm9iamVjdCwgaW50cHRyX3Qgb3Blcm1heCwgbWVtb3J5X29yZGVyIG1pbmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKKworaW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9vcih2b2xhdGlsZSBhdG9taWNfaW50cHRyX3QgKm9iamVjdCwgdWludHB0cl90IG9wZXJhbmQpOworaW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9vcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50cHRyX3QgKm9iamVjdCwgdWludHB0cl90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7CitpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnRwdHJfdCAqb2JqZWN0LCB1aW50cHRyX3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworaW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF94b3Iodm9sYXRpbGUgYXRvbWljX2ludHB0cl90ICpvYmplY3QsIHVpbnRwdHJfdCBvcGVyYW5kKTsKK2ludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnRwdHJfdCAqb2JqZWN0LCB1aW50cHRyX3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2ludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnRwdHJfdCAqb2JqZWN0LCB1aW50cHRyX3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworaW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9hbmQodm9sYXRpbGUgYXRvbWljX2ludHB0cl90ICpvYmplY3QsIHVpbnRwdHJfdCBvcGVyYW5kKTsKK2ludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnRwdHJfdCAqb2JqZWN0LCB1aW50cHRyX3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2ludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnRwdHJfdCAqb2JqZWN0LCB1aW50cHRyX3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworaW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9taW4odm9sYXRpbGUgYXRvbWljX2ludHB0cl90ICpvYmplY3QsIHVpbnRwdHJfdCBvcGVybWF4KTsKK2ludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWluX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnRwdHJfdCAqb2JqZWN0LCB1aW50cHRyX3Qgb3Blcm1heCwgbWVtb3J5X29yZGVyIG1pbmRlcik7CitpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX21pbl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50cHRyX3QgKm9iamVjdCwgdWludHB0cl90IG9wZXJtYXgsIG1lbW9yeV9vcmRlciBtaW5kZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CitpbnRwdHJfdCBfX292bGQgYXRvbWljX2ZldGNoX21heCh2b2xhdGlsZSBhdG9taWNfaW50cHRyX3QgKm9iamVjdCwgdWludHB0cl90IG9wZXJtYXgpOworaW50cHRyX3QgX19vdmxkIGF0b21pY19mZXRjaF9tYXhfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludHB0cl90ICpvYmplY3QsIHVpbnRwdHJfdCBvcGVybWF4LCBtZW1vcnlfb3JkZXIgbWluZGVyKTsKK2ludHB0cl90IF9fb3ZsZCBhdG9taWNfZmV0Y2hfbWF4X2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnRwdHJfdCAqb2JqZWN0LCB1aW50cHRyX3Qgb3Blcm1heCwgbWVtb3J5X29yZGVyIG1pbmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKKyNlbmRpZgorCisvLyBhdG9taWNfc3RvcmUoKQorCit2b2lkIF9fb3ZsZCBhdG9taWNfc3RvcmUodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgZGVzaXJlZCk7Cit2b2lkIF9fb3ZsZCBhdG9taWNfc3RvcmVfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3ZvaWQgX19vdmxkIGF0b21pY19zdG9yZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit2b2lkIF9fb3ZsZCBhdG9taWNfc3RvcmUodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCBkZXNpcmVkKTsKK3ZvaWQgX19vdmxkIGF0b21pY19zdG9yZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50IGRlc2lyZWQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit2b2lkIF9fb3ZsZCBhdG9taWNfc3RvcmVfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit2b2lkIF9fb3ZsZCBhdG9taWNfc3RvcmUodm9sYXRpbGUgYXRvbWljX2Zsb2F0ICpvYmplY3QsIGZsb2F0IGRlc2lyZWQpOwordm9pZCBfX292bGQgYXRvbWljX3N0b3JlX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19mbG9hdCAqb2JqZWN0LCBmbG9hdCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordm9pZCBfX292bGQgYXRvbWljX3N0b3JlX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19mbG9hdCAqb2JqZWN0LCBmbG9hdCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CisjaWYgZGVmaW5lZChjbF9raHJfaW50NjRfYmFzZV9hdG9taWNzKSAmJiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9leHRlbmRlZF9hdG9taWNzKQorI2lmZGVmIGNsX2tocl9mcDY0Cit2b2lkIF9fb3ZsZCBhdG9taWNfc3RvcmUodm9sYXRpbGUgYXRvbWljX2RvdWJsZSAqb2JqZWN0LCBkb3VibGUgZGVzaXJlZCk7Cit2b2lkIF9fb3ZsZCBhdG9taWNfc3RvcmVfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2RvdWJsZSAqb2JqZWN0LCBkb3VibGUgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3ZvaWQgX19vdmxkIGF0b21pY19zdG9yZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZG91YmxlICpvYmplY3QsIGRvdWJsZSBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAordm9pZCBfX292bGQgYXRvbWljX3N0b3JlKHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgZGVzaXJlZCk7Cit2b2lkIF9fb3ZsZCBhdG9taWNfc3RvcmVfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordm9pZCBfX292bGQgYXRvbWljX3N0b3JlX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordm9pZCBfX292bGQgYXRvbWljX3N0b3JlKHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyBkZXNpcmVkKTsKK3ZvaWQgX19vdmxkIGF0b21pY19zdG9yZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK3ZvaWQgX19vdmxkIGF0b21pY19zdG9yZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworI2VuZGlmCisKKy8vIGF0b21pY19sb2FkKCkKKworaW50IF9fb3ZsZCBhdG9taWNfbG9hZCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QpOworaW50IF9fb3ZsZCBhdG9taWNfbG9hZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIG1lbW9yeV9vcmRlciBvcmRlcik7CitpbnQgX19vdmxkIGF0b21pY19sb2FkX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWludCBfX292bGQgYXRvbWljX2xvYWQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCk7Cit1aW50IF9fb3ZsZCBhdG9taWNfbG9hZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordWludCBfX292bGQgYXRvbWljX2xvYWRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworZmxvYXQgX19vdmxkIGF0b21pY19sb2FkKHZvbGF0aWxlIGF0b21pY19mbG9hdCAqb2JqZWN0KTsKK2Zsb2F0IF9fb3ZsZCBhdG9taWNfbG9hZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxvYXQgKm9iamVjdCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2Zsb2F0IF9fb3ZsZCBhdG9taWNfbG9hZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxvYXQgKm9iamVjdCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworI2lmIGRlZmluZWQoY2xfa2hyX2ludDY0X2Jhc2VfYXRvbWljcykgJiYgZGVmaW5lZChjbF9raHJfaW50NjRfZXh0ZW5kZWRfYXRvbWljcykKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBhdG9taWNfbG9hZCh2b2xhdGlsZSBhdG9taWNfZG91YmxlICpvYmplY3QpOworZG91YmxlIF9fb3ZsZCBhdG9taWNfbG9hZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZG91YmxlICpvYmplY3QsIG1lbW9yeV9vcmRlciBvcmRlcik7Citkb3VibGUgX19vdmxkIGF0b21pY19sb2FkX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19kb3VibGUgKm9iamVjdCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKK2xvbmcgX19vdmxkIGF0b21pY19sb2FkKHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QpOworbG9uZyBfX292bGQgYXRvbWljX2xvYWRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2xvbmcgX19vdmxkIGF0b21pY19sb2FkX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK3Vsb25nIF9fb3ZsZCBhdG9taWNfbG9hZCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCk7Cit1bG9uZyBfX292bGQgYXRvbWljX2xvYWRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1bG9uZyBfX292bGQgYXRvbWljX2xvYWRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIG1lbW9yeV9vcmRlciBvcmRlciwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKKyNlbmRpZgorCisvLyBhdG9taWNfZXhjaGFuZ2UoKQorCitpbnQgX19vdmxkIGF0b21pY19leGNoYW5nZSh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCBkZXNpcmVkKTsKK2ludCBfX292bGQgYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50IGRlc2lyZWQsIG1lbW9yeV9vcmRlciBvcmRlcik7CitpbnQgX19vdmxkIGF0b21pY19leGNoYW5nZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit1aW50IF9fb3ZsZCBhdG9taWNfZXhjaGFuZ2Uodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCBkZXNpcmVkKTsKK3VpbnQgX19vdmxkIGF0b21pY19leGNoYW5nZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50IGRlc2lyZWQsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit1aW50IF9fb3ZsZCBhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CitmbG9hdCBfX292bGQgYXRvbWljX2V4Y2hhbmdlKHZvbGF0aWxlIGF0b21pY19mbG9hdCAqb2JqZWN0LCBmbG9hdCBkZXNpcmVkKTsKK2Zsb2F0IF9fb3ZsZCBhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2Zsb2F0ICpvYmplY3QsIGZsb2F0IGRlc2lyZWQsIG1lbW9yeV9vcmRlciBvcmRlcik7CitmbG9hdCBfX292bGQgYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19mbG9hdCAqb2JqZWN0LCBmbG9hdCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CisjaWYgZGVmaW5lZChjbF9raHJfaW50NjRfYmFzZV9hdG9taWNzKSAmJiBkZWZpbmVkKGNsX2tocl9pbnQ2NF9leHRlbmRlZF9hdG9taWNzKQorI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgX19vdmxkIGF0b21pY19leGNoYW5nZSh2b2xhdGlsZSBhdG9taWNfZG91YmxlICpvYmplY3QsIGRvdWJsZSBkZXNpcmVkKTsKK2RvdWJsZSBfX292bGQgYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19kb3VibGUgKm9iamVjdCwgZG91YmxlIGRlc2lyZWQsIG1lbW9yeV9vcmRlciBvcmRlcik7Citkb3VibGUgX19vdmxkIGF0b21pY19leGNoYW5nZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZG91YmxlICpvYmplY3QsIGRvdWJsZSBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorbG9uZyBfX292bGQgYXRvbWljX2V4Y2hhbmdlKHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgZGVzaXJlZCk7Citsb25nIF9fb3ZsZCBhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIpOworbG9uZyBfX292bGQgYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOwordWxvbmcgX19vdmxkIGF0b21pY19leGNoYW5nZSh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgZGVzaXJlZCk7Cit1bG9uZyBfX292bGQgYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgb3JkZXIpOwordWxvbmcgX19vdmxkIGF0b21pY19leGNoYW5nZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworI2VuZGlmCisKKy8vIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZygpIGFuZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrKCkKKworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50ICpleHBlY3RlZCwgaW50IGRlc2lyZWQpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50ICpleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50ICpleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUsIG1lbW9yeV9zY29wZSBzY29wZSk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCAqZXhwZWN0ZWQsIHVpbnQgZGVzaXJlZCk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50IGRlc2lyZWQsIG1lbW9yeV9vcmRlciBzdWNjZXNzLCBtZW1vcnlfb3JkZXIgZmFpbHVyZSk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50IGRlc2lyZWQsIG1lbW9yeV9vcmRlciBzdWNjZXNzLCBtZW1vcnlfb3JkZXIgZmFpbHVyZSwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWsodm9sYXRpbGUgYXRvbWljX2ludCAqb2JqZWN0LCBpbnQgKmV4cGVjdGVkLCBpbnQgZGVzaXJlZCk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19pbnQgKm9iamVjdCwgaW50ICpleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfaW50ICpvYmplY3QsIGludCAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3MsIG1lbW9yeV9vcmRlciBmYWlsdXJlLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vhayh2b2xhdGlsZSBhdG9taWNfdWludCAqb2JqZWN0LCB1aW50ICpleHBlY3RlZCwgdWludCBkZXNpcmVkKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3VpbnQgKm9iamVjdCwgdWludCAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50IGRlc2lyZWQsIG1lbW9yeV9vcmRlciBzdWNjZXNzLCBtZW1vcnlfb3JkZXIgZmFpbHVyZSk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191aW50ICpvYmplY3QsIHVpbnQgKmV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUsIG1lbW9yeV9zY29wZSBzY29wZSk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcodm9sYXRpbGUgYXRvbWljX2Zsb2F0ICpvYmplY3QsIGZsb2F0ICpleHBlY3RlZCwgZmxvYXQgZGVzaXJlZCk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2Zsb2F0ICpvYmplY3QsIGZsb2F0ICpleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGRlc2lyZWQsIG1lbW9yeV9vcmRlciBzdWNjZXNzLCBtZW1vcnlfb3JkZXIgZmFpbHVyZSk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2Zsb2F0ICpvYmplY3QsIGZsb2F0ICpleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGRlc2lyZWQsIG1lbW9yeV9vcmRlciBzdWNjZXNzLCBtZW1vcnlfb3JkZXIgZmFpbHVyZSwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWsodm9sYXRpbGUgYXRvbWljX2Zsb2F0ICpvYmplY3QsIGZsb2F0ICpleHBlY3RlZCwgZmxvYXQgZGVzaXJlZCk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19mbG9hdCAqb2JqZWN0LCBmbG9hdCAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxvYXQgKm9iamVjdCwgZmxvYXQgKmV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3MsIG1lbW9yeV9vcmRlciBmYWlsdXJlLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworI2lmIGRlZmluZWQoY2xfa2hyX2ludDY0X2Jhc2VfYXRvbWljcykgJiYgZGVmaW5lZChjbF9raHJfaW50NjRfZXh0ZW5kZWRfYXRvbWljcykKKyNpZmRlZiBjbF9raHJfZnA2NAorYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIGF0b21pY19kb3VibGUgKm9iamVjdCwgZG91YmxlICpleHBlY3RlZCwgZG91YmxlIGRlc2lyZWQpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19kb3VibGUgKm9iamVjdCwgZG91YmxlICpleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19kb3VibGUgKm9iamVjdCwgZG91YmxlICpleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUsIG1lbW9yeV9zY29wZSBzY29wZSk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvbGF0aWxlIGF0b21pY19kb3VibGUgKm9iamVjdCwgZG91YmxlICpleHBlY3RlZCwgZG91YmxlIGRlc2lyZWQpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZG91YmxlICpvYmplY3QsIGRvdWJsZSAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3MsIG1lbW9yeV9vcmRlciBmYWlsdXJlKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2RvdWJsZSAqb2JqZWN0LCBkb3VibGUgKmV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRlc2lyZWQsIG1lbW9yeV9vcmRlciBzdWNjZXNzLCBtZW1vcnlfb3JkZXIgZmFpbHVyZSwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyAqZXhwZWN0ZWQsIGxvbmcgZGVzaXJlZCk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRlc2lyZWQsIG1lbW9yeV9vcmRlciBzdWNjZXNzLCBtZW1vcnlfb3JkZXIgZmFpbHVyZSk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRlc2lyZWQsIG1lbW9yeV9vcmRlciBzdWNjZXNzLCBtZW1vcnlfb3JkZXIgZmFpbHVyZSwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWsodm9sYXRpbGUgYXRvbWljX2xvbmcgKm9iamVjdCwgbG9uZyAqZXhwZWN0ZWQsIGxvbmcgZGVzaXJlZCk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19sb25nICpvYmplY3QsIGxvbmcgKmV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfbG9uZyAqb2JqZWN0LCBsb25nICpleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3MsIG1lbW9yeV9vcmRlciBmYWlsdXJlLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyAqZXhwZWN0ZWQsIHVsb25nIGRlc2lyZWQpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bG9uZyBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyAqZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bG9uZyBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2VzcywgbWVtb3J5X29yZGVyIGZhaWx1cmUsIG1lbW9yeV9zY29wZSBzY29wZSk7Citib29sIF9fb3ZsZCBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvbGF0aWxlIGF0b21pY191bG9uZyAqb2JqZWN0LCB1bG9uZyAqZXhwZWN0ZWQsIHVsb25nIGRlc2lyZWQpOworYm9vbCBfX292bGQgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfdWxvbmcgKm9iamVjdCwgdWxvbmcgKmV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxvbmcgZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3MsIG1lbW9yeV9vcmRlciBmYWlsdXJlKTsKK2Jvb2wgX19vdmxkIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX3Vsb25nICpvYmplY3QsIHVsb25nICpleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nIGRlc2lyZWQsIG1lbW9yeV9vcmRlciBzdWNjZXNzLCBtZW1vcnlfb3JkZXIgZmFpbHVyZSwgbWVtb3J5X3Njb3BlIHNjb3BlKTsKKyNlbmRpZgorCisvLyBhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXQoKSBhbmQgYXRvbWljX2ZsYWdfY2xlYXIoKQorCitib29sIF9fb3ZsZCBhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXQodm9sYXRpbGUgYXRvbWljX2ZsYWcgKm9iamVjdCk7Citib29sIF9fb3ZsZCBhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ZsYWcgKm9iamVjdCwgbWVtb3J5X29yZGVyIG9yZGVyKTsKK2Jvb2wgX19vdmxkIGF0b21pY19mbGFnX3Rlc3RfYW5kX3NldF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxhZyAqb2JqZWN0LCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7Cit2b2lkIF9fb3ZsZCBhdG9taWNfZmxhZ19jbGVhcih2b2xhdGlsZSBhdG9taWNfZmxhZyAqb2JqZWN0KTsKK3ZvaWQgX19vdmxkIGF0b21pY19mbGFnX2NsZWFyX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19mbGFnICpvYmplY3QsIG1lbW9yeV9vcmRlciBvcmRlcik7Cit2b2lkIF9fb3ZsZCBhdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxhZyAqb2JqZWN0LCBtZW1vcnlfb3JkZXIgb3JkZXIsIG1lbW9yeV9zY29wZSBzY29wZSk7CisKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8vIE9wZW5DTCB2MS4xIHM2LjExLjEyLCB2MS4yIHM2LjEyLjEyLCB2Mi4wIHM2LjEzLjEyIC0gTWlzY2VsbGFuZW91cyBWZWN0b3IgRnVuY3Rpb25zCisKKy8qKgorICogVGhlIHNodWZmbGUgYW5kIHNodWZmbGUyIGJ1aWx0LWluIGZ1bmN0aW9ucyBjb25zdHJ1Y3QKKyAqIGEgcGVybXV0YXRpb24gb2YgZWxlbWVudHMgZnJvbSBvbmUgb3IgdHdvIGlucHV0CisgKiB2ZWN0b3JzIHJlc3BlY3RpdmVseSB0aGF0IGFyZSBvZiB0aGUgc2FtZSB0eXBlLAorICogcmV0dXJuaW5nIGEgdmVjdG9yIHdpdGggdGhlIHNhbWUgZWxlbWVudCB0eXBlIGFzIHRoZQorICogaW5wdXQgYW5kIGxlbmd0aCB0aGF0IGlzIHRoZSBzYW1lIGFzIHRoZSBzaHVmZmxlIG1hc2suCisgKiBUaGUgc2l6ZSBvZiBlYWNoIGVsZW1lbnQgaW4gdGhlIG1hc2sgbXVzdCBtYXRjaCB0aGUKKyAqIHNpemUgb2YgZWFjaCBlbGVtZW50IGluIHRoZSByZXN1bHQuIEZvciBzaHVmZmxlLCBvbmx5CisgKiB0aGUgaWxvZ2IoMm0tMSkgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiBlYWNoIG1hc2sKKyAqIGVsZW1lbnQgYXJlIGNvbnNpZGVyZWQuIEZvciBzaHVmZmxlMiwgb25seSB0aGUKKyAqIGlsb2diKDJtLTEpKzEgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiBlYWNoIG1hc2sKKyAqIGVsZW1lbnQgYXJlIGNvbnNpZGVyZWQuIE90aGVyIGJpdHMgaW4gdGhlIG1hc2sgc2hhbGwKKyAqIGJlIGlnbm9yZWQuCisgKiBUaGUgZWxlbWVudHMgb2YgdGhlIGlucHV0IHZlY3RvcnMgYXJlIG51bWJlcmVkIGZyb20KKyAqIGxlZnQgdG8gcmlnaHQgYWNyb3NzIG9uZSBvciBib3RoIG9mIHRoZSB2ZWN0b3JzLiBGb3IgdGhpcworICogcHVycG9zZSwgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIHZlY3RvciBpcyBnaXZlbgorICogYnkgdmVjX3N0ZXAoZ2VudHlwZW0pLiBUaGUgc2h1ZmZsZSBtYXNrIG9wZXJhbmQKKyAqIHNwZWNpZmllcywgZm9yIGVhY2ggZWxlbWVudCBvZiB0aGUgcmVzdWx0IHZlY3Rvciwgd2hpY2gKKyAqIGVsZW1lbnQgb2YgdGhlIG9uZSBvciB0d28gaW5wdXQgdmVjdG9ycyB0aGUgcmVzdWx0CisgKiBlbGVtZW50IGdldHMuCisgKiBFeGFtcGxlczoKKyAqIHVpbnQ0IG1hc2sgPSAodWludDQpKDMsIDIsCisgKiAxLCAwKTsKKyAqIGZsb2F0NCBhOworICogZmxvYXQ0IHIgPSBzaHVmZmxlKGEsIG1hc2spOworICogLy8gci5zMDEyMyA9IGEud3p5eAorICogdWludDggbWFzayA9ICh1aW50OCkoMCwgMSwgMiwgMywKKyAqIDQsIDUsIDYsIDcpOworICogZmxvYXQ0IGEsIGI7CisgKiBmbG9hdDggciA9IHNodWZmbGUyKGEsIGIsIG1hc2spOworICogLy8gci5zMDEyMyA9IGEueHl6dworICogLy8gci5zNDU2NyA9IGIueHl6dworICogdWludDQgbWFzazsKKyAqIGZsb2F0OCBhOworICogZmxvYXQ0IGI7CisgKiBiID0gc2h1ZmZsZShhLCBtYXNrKTsKKyAqIEV4YW1wbGVzIHRoYXQgYXJlIG5vdCB2YWxpZCBhcmU6CisgKiB1aW50OCBtYXNrOworICogc2hvcnQxNiBhOworICogc2hvcnQ4IGI7CisgKiBiID0gc2h1ZmZsZShhLCBtYXNrKTsgPC0gbm90IHZhbGlkCisgKi8KK2NoYXIyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShjaGFyMiB4LCB1Y2hhcjIgbWFzayk7CitjaGFyMiBfX292bGQgX19jbmZuIHNodWZmbGUoY2hhcjQgeCwgdWNoYXIyIG1hc2spOworY2hhcjIgX19vdmxkIF9fY25mbiBzaHVmZmxlKGNoYXI4IHgsIHVjaGFyMiBtYXNrKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShjaGFyMTYgeCwgdWNoYXIyIG1hc2spOworCit1Y2hhcjIgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVjaGFyMiB4LCB1Y2hhcjIgbWFzayk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVjaGFyNCB4LCB1Y2hhcjIgbWFzayk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVjaGFyOCB4LCB1Y2hhcjIgbWFzayk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVjaGFyMTYgeCwgdWNoYXIyIG1hc2spOworCitzaG9ydDIgX19vdmxkIF9fY25mbiBzaHVmZmxlKHNob3J0MiB4LCB1c2hvcnQyIG1hc2spOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShzaG9ydDQgeCwgdXNob3J0MiBtYXNrKTsKK3Nob3J0MiBfX292bGQgX19jbmZuIHNodWZmbGUoc2hvcnQ4IHgsIHVzaG9ydDIgbWFzayk7CitzaG9ydDIgX19vdmxkIF9fY25mbiBzaHVmZmxlKHNob3J0MTYgeCwgdXNob3J0MiBtYXNrKTsKKwordXNob3J0MiBfX292bGQgX19jbmZuIHNodWZmbGUodXNob3J0MiB4LCB1c2hvcnQyIG1hc2spOwordXNob3J0MiBfX292bGQgX19jbmZuIHNodWZmbGUodXNob3J0NCB4LCB1c2hvcnQyIG1hc2spOwordXNob3J0MiBfX292bGQgX19jbmZuIHNodWZmbGUodXNob3J0OCB4LCB1c2hvcnQyIG1hc2spOwordXNob3J0MiBfX292bGQgX19jbmZuIHNodWZmbGUodXNob3J0MTYgeCwgdXNob3J0MiBtYXNrKTsKKworaW50MiBfX292bGQgX19jbmZuIHNodWZmbGUoaW50MiB4LCB1aW50MiBtYXNrKTsKK2ludDIgX19vdmxkIF9fY25mbiBzaHVmZmxlKGludDQgeCwgdWludDIgbWFzayk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShpbnQ4IHgsIHVpbnQyIG1hc2spOworaW50MiBfX292bGQgX19jbmZuIHNodWZmbGUoaW50MTYgeCwgdWludDIgbWFzayk7CisKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1aW50MiB4LCB1aW50MiBtYXNrKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1aW50NCB4LCB1aW50MiBtYXNrKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1aW50OCB4LCB1aW50MiBtYXNrKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1aW50MTYgeCwgdWludDIgbWFzayk7CisKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShsb25nMiB4LCB1bG9uZzIgbWFzayk7Citsb25nMiBfX292bGQgX19jbmZuIHNodWZmbGUobG9uZzQgeCwgdWxvbmcyIG1hc2spOworbG9uZzIgX19vdmxkIF9fY25mbiBzaHVmZmxlKGxvbmc4IHgsIHVsb25nMiBtYXNrKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShsb25nMTYgeCwgdWxvbmcyIG1hc2spOworCit1bG9uZzIgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVsb25nMiB4LCB1bG9uZzIgbWFzayk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVsb25nNCB4LCB1bG9uZzIgbWFzayk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVsb25nOCB4LCB1bG9uZzIgbWFzayk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVsb25nMTYgeCwgdWxvbmcyIG1hc2spOworCitmbG9hdDIgX19vdmxkIF9fY25mbiBzaHVmZmxlKGZsb2F0MiB4LCB1aW50MiBtYXNrKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHNodWZmbGUoZmxvYXQ0IHgsIHVpbnQyIG1hc2spOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShmbG9hdDggeCwgdWludDIgbWFzayk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzaHVmZmxlKGZsb2F0MTYgeCwgdWludDIgbWFzayk7CisKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShjaGFyMiB4LCB1Y2hhcjQgbWFzayk7CitjaGFyNCBfX292bGQgX19jbmZuIHNodWZmbGUoY2hhcjQgeCwgdWNoYXI0IG1hc2spOworY2hhcjQgX19vdmxkIF9fY25mbiBzaHVmZmxlKGNoYXI4IHgsIHVjaGFyNCBtYXNrKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShjaGFyMTYgeCwgdWNoYXI0IG1hc2spOworCit1Y2hhcjQgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVjaGFyMiB4LCB1Y2hhcjQgbWFzayk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVjaGFyNCB4LCB1Y2hhcjQgbWFzayk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVjaGFyOCB4LCB1Y2hhcjQgbWFzayk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVjaGFyMTYgeCwgdWNoYXI0IG1hc2spOworCitzaG9ydDQgX19vdmxkIF9fY25mbiBzaHVmZmxlKHNob3J0MiB4LCB1c2hvcnQ0IG1hc2spOworc2hvcnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShzaG9ydDQgeCwgdXNob3J0NCBtYXNrKTsKK3Nob3J0NCBfX292bGQgX19jbmZuIHNodWZmbGUoc2hvcnQ4IHgsIHVzaG9ydDQgbWFzayk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBzaHVmZmxlKHNob3J0MTYgeCwgdXNob3J0NCBtYXNrKTsKKwordXNob3J0NCBfX292bGQgX19jbmZuIHNodWZmbGUodXNob3J0MiB4LCB1c2hvcnQ0IG1hc2spOwordXNob3J0NCBfX292bGQgX19jbmZuIHNodWZmbGUodXNob3J0NCB4LCB1c2hvcnQ0IG1hc2spOwordXNob3J0NCBfX292bGQgX19jbmZuIHNodWZmbGUodXNob3J0OCB4LCB1c2hvcnQ0IG1hc2spOwordXNob3J0NCBfX292bGQgX19jbmZuIHNodWZmbGUodXNob3J0MTYgeCwgdXNob3J0NCBtYXNrKTsKKworaW50NCBfX292bGQgX19jbmZuIHNodWZmbGUoaW50MiB4LCB1aW50NCBtYXNrKTsKK2ludDQgX19vdmxkIF9fY25mbiBzaHVmZmxlKGludDQgeCwgdWludDQgbWFzayk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShpbnQ4IHgsIHVpbnQ0IG1hc2spOworaW50NCBfX292bGQgX19jbmZuIHNodWZmbGUoaW50MTYgeCwgdWludDQgbWFzayk7CisKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1aW50MiB4LCB1aW50NCBtYXNrKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1aW50NCB4LCB1aW50NCBtYXNrKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1aW50OCB4LCB1aW50NCBtYXNrKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1aW50MTYgeCwgdWludDQgbWFzayk7CisKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShsb25nMiB4LCB1bG9uZzQgbWFzayk7Citsb25nNCBfX292bGQgX19jbmZuIHNodWZmbGUobG9uZzQgeCwgdWxvbmc0IG1hc2spOworbG9uZzQgX19vdmxkIF9fY25mbiBzaHVmZmxlKGxvbmc4IHgsIHVsb25nNCBtYXNrKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShsb25nMTYgeCwgdWxvbmc0IG1hc2spOworCit1bG9uZzQgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVsb25nMiB4LCB1bG9uZzQgbWFzayk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVsb25nNCB4LCB1bG9uZzQgbWFzayk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVsb25nOCB4LCB1bG9uZzQgbWFzayk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVsb25nMTYgeCwgdWxvbmc0IG1hc2spOworCitmbG9hdDQgX19vdmxkIF9fY25mbiBzaHVmZmxlKGZsb2F0MiB4LCB1aW50NCBtYXNrKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHNodWZmbGUoZmxvYXQ0IHgsIHVpbnQ0IG1hc2spOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShmbG9hdDggeCwgdWludDQgbWFzayk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzaHVmZmxlKGZsb2F0MTYgeCwgdWludDQgbWFzayk7CisKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShjaGFyMiB4LCB1Y2hhcjggbWFzayk7CitjaGFyOCBfX292bGQgX19jbmZuIHNodWZmbGUoY2hhcjQgeCwgdWNoYXI4IG1hc2spOworY2hhcjggX19vdmxkIF9fY25mbiBzaHVmZmxlKGNoYXI4IHgsIHVjaGFyOCBtYXNrKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShjaGFyMTYgeCwgdWNoYXI4IG1hc2spOworCit1Y2hhcjggX19vdmxkIF9fY25mbiBzaHVmZmxlKHVjaGFyMiB4LCB1Y2hhcjggbWFzayk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBzaHVmZmxlKHVjaGFyNCB4LCB1Y2hhcjggbWFzayk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBzaHVmZmxlKHVjaGFyOCB4LCB1Y2hhcjggbWFzayk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBzaHVmZmxlKHVjaGFyMTYgeCwgdWNoYXI4IG1hc2spOworCitzaG9ydDggX19vdmxkIF9fY25mbiBzaHVmZmxlKHNob3J0MiB4LCB1c2hvcnQ4IG1hc2spOworc2hvcnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShzaG9ydDQgeCwgdXNob3J0OCBtYXNrKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIHNodWZmbGUoc2hvcnQ4IHgsIHVzaG9ydDggbWFzayk7CitzaG9ydDggX19vdmxkIF9fY25mbiBzaHVmZmxlKHNob3J0MTYgeCwgdXNob3J0OCBtYXNrKTsKKwordXNob3J0OCBfX292bGQgX19jbmZuIHNodWZmbGUodXNob3J0MiB4LCB1c2hvcnQ4IG1hc2spOwordXNob3J0OCBfX292bGQgX19jbmZuIHNodWZmbGUodXNob3J0NCB4LCB1c2hvcnQ4IG1hc2spOwordXNob3J0OCBfX292bGQgX19jbmZuIHNodWZmbGUodXNob3J0OCB4LCB1c2hvcnQ4IG1hc2spOwordXNob3J0OCBfX292bGQgX19jbmZuIHNodWZmbGUodXNob3J0MTYgeCwgdXNob3J0OCBtYXNrKTsKKworaW50OCBfX292bGQgX19jbmZuIHNodWZmbGUoaW50MiB4LCB1aW50OCBtYXNrKTsKK2ludDggX19vdmxkIF9fY25mbiBzaHVmZmxlKGludDQgeCwgdWludDggbWFzayk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShpbnQ4IHgsIHVpbnQ4IG1hc2spOworaW50OCBfX292bGQgX19jbmZuIHNodWZmbGUoaW50MTYgeCwgdWludDggbWFzayk7CisKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1aW50MiB4LCB1aW50OCBtYXNrKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1aW50NCB4LCB1aW50OCBtYXNrKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1aW50OCB4LCB1aW50OCBtYXNrKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1aW50MTYgeCwgdWludDggbWFzayk7CisKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShsb25nMiB4LCB1bG9uZzggbWFzayk7Citsb25nOCBfX292bGQgX19jbmZuIHNodWZmbGUobG9uZzQgeCwgdWxvbmc4IG1hc2spOworbG9uZzggX19vdmxkIF9fY25mbiBzaHVmZmxlKGxvbmc4IHgsIHVsb25nOCBtYXNrKTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShsb25nMTYgeCwgdWxvbmc4IG1hc2spOworCit1bG9uZzggX19vdmxkIF9fY25mbiBzaHVmZmxlKHVsb25nMiB4LCB1bG9uZzggbWFzayk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBzaHVmZmxlKHVsb25nNCB4LCB1bG9uZzggbWFzayk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBzaHVmZmxlKHVsb25nOCB4LCB1bG9uZzggbWFzayk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBzaHVmZmxlKHVsb25nMTYgeCwgdWxvbmc4IG1hc2spOworCitmbG9hdDggX19vdmxkIF9fY25mbiBzaHVmZmxlKGZsb2F0MiB4LCB1aW50OCBtYXNrKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHNodWZmbGUoZmxvYXQ0IHgsIHVpbnQ4IG1hc2spOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShmbG9hdDggeCwgdWludDggbWFzayk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzaHVmZmxlKGZsb2F0MTYgeCwgdWludDggbWFzayk7CisKK2NoYXIxNiBfX292bGQgX19jbmZuIHNodWZmbGUoY2hhcjIgeCwgdWNoYXIxNiBtYXNrKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIHNodWZmbGUoY2hhcjQgeCwgdWNoYXIxNiBtYXNrKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIHNodWZmbGUoY2hhcjggeCwgdWNoYXIxNiBtYXNrKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIHNodWZmbGUoY2hhcjE2IHgsIHVjaGFyMTYgbWFzayk7CisKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVjaGFyMiB4LCB1Y2hhcjE2IG1hc2spOwordWNoYXIxNiBfX292bGQgX19jbmZuIHNodWZmbGUodWNoYXI0IHgsIHVjaGFyMTYgbWFzayk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1Y2hhcjggeCwgdWNoYXIxNiBtYXNrKTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVjaGFyMTYgeCwgdWNoYXIxNiBtYXNrKTsKKworc2hvcnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUoc2hvcnQyIHgsIHVzaG9ydDE2IG1hc2spOworc2hvcnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUoc2hvcnQ0IHgsIHVzaG9ydDE2IG1hc2spOworc2hvcnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUoc2hvcnQ4IHgsIHVzaG9ydDE2IG1hc2spOworc2hvcnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUoc2hvcnQxNiB4LCB1c2hvcnQxNiBtYXNrKTsKKwordXNob3J0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVzaG9ydDIgeCwgdXNob3J0MTYgbWFzayk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUodXNob3J0NCB4LCB1c2hvcnQxNiBtYXNrKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1c2hvcnQ4IHgsIHVzaG9ydDE2IG1hc2spOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVzaG9ydDE2IHgsIHVzaG9ydDE2IG1hc2spOworCitpbnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUoaW50MiB4LCB1aW50MTYgbWFzayk7CitpbnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUoaW50NCB4LCB1aW50MTYgbWFzayk7CitpbnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUoaW50OCB4LCB1aW50MTYgbWFzayk7CitpbnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUoaW50MTYgeCwgdWludDE2IG1hc2spOworCit1aW50MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVpbnQyIHgsIHVpbnQxNiBtYXNrKTsKK3VpbnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUodWludDQgeCwgdWludDE2IG1hc2spOwordWludDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1aW50OCB4LCB1aW50MTYgbWFzayk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVpbnQxNiB4LCB1aW50MTYgbWFzayk7CisKK2xvbmcxNiBfX292bGQgX19jbmZuIHNodWZmbGUobG9uZzIgeCwgdWxvbmcxNiBtYXNrKTsKK2xvbmcxNiBfX292bGQgX19jbmZuIHNodWZmbGUobG9uZzQgeCwgdWxvbmcxNiBtYXNrKTsKK2xvbmcxNiBfX292bGQgX19jbmZuIHNodWZmbGUobG9uZzggeCwgdWxvbmcxNiBtYXNrKTsKK2xvbmcxNiBfX292bGQgX19jbmZuIHNodWZmbGUobG9uZzE2IHgsIHVsb25nMTYgbWFzayk7CisKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVsb25nMiB4LCB1bG9uZzE2IG1hc2spOwordWxvbmcxNiBfX292bGQgX19jbmZuIHNodWZmbGUodWxvbmc0IHgsIHVsb25nMTYgbWFzayk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZSh1bG9uZzggeCwgdWxvbmcxNiBtYXNrKTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKHVsb25nMTYgeCwgdWxvbmcxNiBtYXNrKTsKKworZmxvYXQxNiBfX292bGQgX19jbmZuIHNodWZmbGUoZmxvYXQyIHgsIHVpbnQxNiBtYXNrKTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGZsb2F0NCB4LCB1aW50MTYgbWFzayk7CitmbG9hdDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShmbG9hdDggeCwgdWludDE2IG1hc2spOworZmxvYXQxNiBfX292bGQgX19jbmZuIHNodWZmbGUoZmxvYXQxNiB4LCB1aW50MTYgbWFzayk7CisKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlMiBfX292bGQgX19jbmZuIHNodWZmbGUoZG91YmxlMiB4LCB1bG9uZzIgbWFzayk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShkb3VibGU0IHgsIHVsb25nMiBtYXNrKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBzaHVmZmxlKGRvdWJsZTggeCwgdWxvbmcyIG1hc2spOworZG91YmxlMiBfX292bGQgX19jbmZuIHNodWZmbGUoZG91YmxlMTYgeCwgdWxvbmcyIG1hc2spOworCitkb3VibGU0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShkb3VibGUyIHgsIHVsb25nNCBtYXNrKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBzaHVmZmxlKGRvdWJsZTQgeCwgdWxvbmc0IG1hc2spOworZG91YmxlNCBfX292bGQgX19jbmZuIHNodWZmbGUoZG91YmxlOCB4LCB1bG9uZzQgbWFzayk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShkb3VibGUxNiB4LCB1bG9uZzQgbWFzayk7CisKK2RvdWJsZTggX19vdmxkIF9fY25mbiBzaHVmZmxlKGRvdWJsZTIgeCwgdWxvbmc4IG1hc2spOworZG91YmxlOCBfX292bGQgX19jbmZuIHNodWZmbGUoZG91YmxlNCB4LCB1bG9uZzggbWFzayk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShkb3VibGU4IHgsIHVsb25nOCBtYXNrKTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBzaHVmZmxlKGRvdWJsZTE2IHgsIHVsb25nOCBtYXNrKTsKKworZG91YmxlMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGRvdWJsZTIgeCwgdWxvbmcxNiBtYXNrKTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShkb3VibGU0IHgsIHVsb25nMTYgbWFzayk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHNodWZmbGUoZG91YmxlOCB4LCB1bG9uZzE2IG1hc2spOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGRvdWJsZTE2IHgsIHVsb25nMTYgbWFzayk7CisjZW5kaWYgLy9jbF9raHJfZnA2NAorCisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShoYWxmMiB4LCB1c2hvcnQyIG1hc2spOworaGFsZjIgX19vdmxkIF9fY25mbiBzaHVmZmxlKGhhbGY0IHgsIHVzaG9ydDIgbWFzayk7CitoYWxmMiBfX292bGQgX19jbmZuIHNodWZmbGUoaGFsZjggeCwgdXNob3J0MiBtYXNrKTsKK2hhbGYyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShoYWxmMTYgeCwgdXNob3J0MiBtYXNrKTsKKworaGFsZjQgX19vdmxkIF9fY25mbiBzaHVmZmxlKGhhbGYyIHgsIHVzaG9ydDQgbWFzayk7CitoYWxmNCBfX292bGQgX19jbmZuIHNodWZmbGUoaGFsZjQgeCwgdXNob3J0NCBtYXNrKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShoYWxmOCB4LCB1c2hvcnQ0IG1hc2spOworaGFsZjQgX19vdmxkIF9fY25mbiBzaHVmZmxlKGhhbGYxNiB4LCB1c2hvcnQ0IG1hc2spOworCitoYWxmOCBfX292bGQgX19jbmZuIHNodWZmbGUoaGFsZjIgeCwgdXNob3J0OCBtYXNrKTsKK2hhbGY4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShoYWxmNCB4LCB1c2hvcnQ4IG1hc2spOworaGFsZjggX19vdmxkIF9fY25mbiBzaHVmZmxlKGhhbGY4IHgsIHVzaG9ydDggbWFzayk7CitoYWxmOCBfX292bGQgX19jbmZuIHNodWZmbGUoaGFsZjE2IHgsIHVzaG9ydDggbWFzayk7CisKK2hhbGYxNiBfX292bGQgX19jbmZuIHNodWZmbGUoaGFsZjIgeCwgdXNob3J0MTYgbWFzayk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlKGhhbGY0IHgsIHVzaG9ydDE2IG1hc2spOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZShoYWxmOCB4LCB1c2hvcnQxNiBtYXNrKTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHNodWZmbGUoaGFsZjE2IHgsIHVzaG9ydDE2IG1hc2spOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworY2hhcjIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihjaGFyMiB4LCBjaGFyMiB5LCB1Y2hhcjIgbWFzayk7CitjaGFyMiBfX292bGQgX19jbmZuIHNodWZmbGUyKGNoYXI0IHgsIGNoYXI0IHksIHVjaGFyMiBtYXNrKTsKK2NoYXIyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoY2hhcjggeCwgY2hhcjggeSwgdWNoYXIyIG1hc2spOworY2hhcjIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihjaGFyMTYgeCwgY2hhcjE2IHksIHVjaGFyMiBtYXNrKTsKKwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWNoYXIyIHgsIHVjaGFyMiB5LCB1Y2hhcjIgbWFzayk7Cit1Y2hhcjIgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1Y2hhcjQgeCwgdWNoYXI0IHksIHVjaGFyMiBtYXNrKTsKK3VjaGFyMiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVjaGFyOCB4LCB1Y2hhcjggeSwgdWNoYXIyIG1hc2spOwordWNoYXIyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWNoYXIxNiB4LCB1Y2hhcjE2IHksIHVjaGFyMiBtYXNrKTsKKworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoc2hvcnQyIHgsIHNob3J0MiB5LCB1c2hvcnQyIG1hc2spOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoc2hvcnQ0IHgsIHNob3J0NCB5LCB1c2hvcnQyIG1hc2spOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoc2hvcnQ4IHgsIHNob3J0OCB5LCB1c2hvcnQyIG1hc2spOworc2hvcnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoc2hvcnQxNiB4LCBzaG9ydDE2IHksIHVzaG9ydDIgbWFzayk7CisKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1c2hvcnQyIHgsIHVzaG9ydDIgeSwgdXNob3J0MiBtYXNrKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1c2hvcnQ0IHgsIHVzaG9ydDQgeSwgdXNob3J0MiBtYXNrKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1c2hvcnQ4IHgsIHVzaG9ydDggeSwgdXNob3J0MiBtYXNrKTsKK3VzaG9ydDIgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1c2hvcnQxNiB4LCB1c2hvcnQxNiB5LCB1c2hvcnQyIG1hc2spOworCitpbnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaW50MiB4LCBpbnQyIHksIHVpbnQyIG1hc2spOworaW50MiBfX292bGQgX19jbmZuIHNodWZmbGUyKGludDQgeCwgaW50NCB5LCB1aW50MiBtYXNrKTsKK2ludDIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihpbnQ4IHgsIGludDggeSwgdWludDIgbWFzayk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaW50MTYgeCwgaW50MTYgeSwgdWludDIgbWFzayk7CisKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWludDIgeCwgdWludDIgeSwgdWludDIgbWFzayk7Cit1aW50MiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVpbnQ0IHgsIHVpbnQ0IHksIHVpbnQyIG1hc2spOwordWludDIgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1aW50OCB4LCB1aW50OCB5LCB1aW50MiBtYXNrKTsKK3VpbnQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWludDE2IHgsIHVpbnQxNiB5LCB1aW50MiBtYXNrKTsKKworbG9uZzIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihsb25nMiB4LCBsb25nMiB5LCB1bG9uZzIgbWFzayk7Citsb25nMiBfX292bGQgX19jbmZuIHNodWZmbGUyKGxvbmc0IHgsIGxvbmc0IHksIHVsb25nMiBtYXNrKTsKK2xvbmcyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIobG9uZzggeCwgbG9uZzggeSwgdWxvbmcyIG1hc2spOworbG9uZzIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihsb25nMTYgeCwgbG9uZzE2IHksIHVsb25nMiBtYXNrKTsKKwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWxvbmcyIHgsIHVsb25nMiB5LCB1bG9uZzIgbWFzayk7Cit1bG9uZzIgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1bG9uZzQgeCwgdWxvbmc0IHksIHVsb25nMiBtYXNrKTsKK3Vsb25nMiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVsb25nOCB4LCB1bG9uZzggeSwgdWxvbmcyIG1hc2spOwordWxvbmcyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWxvbmcxNiB4LCB1bG9uZzE2IHksIHVsb25nMiBtYXNrKTsKKworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZmxvYXQyIHgsIGZsb2F0MiB5LCB1aW50MiBtYXNrKTsKK2Zsb2F0MiBfX292bGQgX19jbmZuIHNodWZmbGUyKGZsb2F0NCB4LCBmbG9hdDQgeSwgdWludDIgbWFzayk7CitmbG9hdDIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihmbG9hdDggeCwgZmxvYXQ4IHksIHVpbnQyIG1hc2spOworZmxvYXQyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZmxvYXQxNiB4LCBmbG9hdDE2IHksIHVpbnQyIG1hc2spOworCitjaGFyNCBfX292bGQgX19jbmZuIHNodWZmbGUyKGNoYXIyIHgsIGNoYXIyIHksIHVjaGFyNCBtYXNrKTsKK2NoYXI0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoY2hhcjQgeCwgY2hhcjQgeSwgdWNoYXI0IG1hc2spOworY2hhcjQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihjaGFyOCB4LCBjaGFyOCB5LCB1Y2hhcjQgbWFzayk7CitjaGFyNCBfX292bGQgX19jbmZuIHNodWZmbGUyKGNoYXIxNiB4LCBjaGFyMTYgeSwgdWNoYXI0IG1hc2spOworCit1Y2hhcjQgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1Y2hhcjIgeCwgdWNoYXIyIHksIHVjaGFyNCBtYXNrKTsKK3VjaGFyNCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVjaGFyNCB4LCB1Y2hhcjQgeSwgdWNoYXI0IG1hc2spOwordWNoYXI0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWNoYXI4IHgsIHVjaGFyOCB5LCB1Y2hhcjQgbWFzayk7Cit1Y2hhcjQgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1Y2hhcjE2IHgsIHVjaGFyMTYgeSwgdWNoYXI0IG1hc2spOworCitzaG9ydDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihzaG9ydDIgeCwgc2hvcnQyIHksIHVzaG9ydDQgbWFzayk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihzaG9ydDQgeCwgc2hvcnQ0IHksIHVzaG9ydDQgbWFzayk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihzaG9ydDggeCwgc2hvcnQ4IHksIHVzaG9ydDQgbWFzayk7CitzaG9ydDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihzaG9ydDE2IHgsIHNob3J0MTYgeSwgdXNob3J0NCBtYXNrKTsKKwordXNob3J0NCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVzaG9ydDIgeCwgdXNob3J0MiB5LCB1c2hvcnQ0IG1hc2spOwordXNob3J0NCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVzaG9ydDQgeCwgdXNob3J0NCB5LCB1c2hvcnQ0IG1hc2spOwordXNob3J0NCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVzaG9ydDggeCwgdXNob3J0OCB5LCB1c2hvcnQ0IG1hc2spOwordXNob3J0NCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVzaG9ydDE2IHgsIHVzaG9ydDE2IHksIHVzaG9ydDQgbWFzayk7CisKK2ludDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihpbnQyIHgsIGludDIgeSwgdWludDQgbWFzayk7CitpbnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaW50NCB4LCBpbnQ0IHksIHVpbnQ0IG1hc2spOworaW50NCBfX292bGQgX19jbmZuIHNodWZmbGUyKGludDggeCwgaW50OCB5LCB1aW50NCBtYXNrKTsKK2ludDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihpbnQxNiB4LCBpbnQxNiB5LCB1aW50NCBtYXNrKTsKKwordWludDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1aW50MiB4LCB1aW50MiB5LCB1aW50NCBtYXNrKTsKK3VpbnQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWludDQgeCwgdWludDQgeSwgdWludDQgbWFzayk7Cit1aW50NCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVpbnQ4IHgsIHVpbnQ4IHksIHVpbnQ0IG1hc2spOwordWludDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1aW50MTYgeCwgdWludDE2IHksIHVpbnQ0IG1hc2spOworCitsb25nNCBfX292bGQgX19jbmZuIHNodWZmbGUyKGxvbmcyIHgsIGxvbmcyIHksIHVsb25nNCBtYXNrKTsKK2xvbmc0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIobG9uZzQgeCwgbG9uZzQgeSwgdWxvbmc0IG1hc2spOworbG9uZzQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihsb25nOCB4LCBsb25nOCB5LCB1bG9uZzQgbWFzayk7Citsb25nNCBfX292bGQgX19jbmZuIHNodWZmbGUyKGxvbmcxNiB4LCBsb25nMTYgeSwgdWxvbmc0IG1hc2spOworCit1bG9uZzQgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1bG9uZzIgeCwgdWxvbmcyIHksIHVsb25nNCBtYXNrKTsKK3Vsb25nNCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVsb25nNCB4LCB1bG9uZzQgeSwgdWxvbmc0IG1hc2spOwordWxvbmc0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWxvbmc4IHgsIHVsb25nOCB5LCB1bG9uZzQgbWFzayk7Cit1bG9uZzQgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1bG9uZzE2IHgsIHVsb25nMTYgeSwgdWxvbmc0IG1hc2spOworCitmbG9hdDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihmbG9hdDIgeCwgZmxvYXQyIHksIHVpbnQ0IG1hc2spOworZmxvYXQ0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZmxvYXQ0IHgsIGZsb2F0NCB5LCB1aW50NCBtYXNrKTsKK2Zsb2F0NCBfX292bGQgX19jbmZuIHNodWZmbGUyKGZsb2F0OCB4LCBmbG9hdDggeSwgdWludDQgbWFzayk7CitmbG9hdDQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihmbG9hdDE2IHgsIGZsb2F0MTYgeSwgdWludDQgbWFzayk7CisKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoY2hhcjIgeCwgY2hhcjIgeSwgdWNoYXI4IG1hc2spOworY2hhcjggX19vdmxkIF9fY25mbiBzaHVmZmxlMihjaGFyNCB4LCBjaGFyNCB5LCB1Y2hhcjggbWFzayk7CitjaGFyOCBfX292bGQgX19jbmZuIHNodWZmbGUyKGNoYXI4IHgsIGNoYXI4IHksIHVjaGFyOCBtYXNrKTsKK2NoYXI4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoY2hhcjE2IHgsIGNoYXIxNiB5LCB1Y2hhcjggbWFzayk7CisKK3VjaGFyOCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVjaGFyMiB4LCB1Y2hhcjIgeSwgdWNoYXI4IG1hc2spOwordWNoYXI4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWNoYXI0IHgsIHVjaGFyNCB5LCB1Y2hhcjggbWFzayk7Cit1Y2hhcjggX19vdmxkIF9fY25mbiBzaHVmZmxlMih1Y2hhcjggeCwgdWNoYXI4IHksIHVjaGFyOCBtYXNrKTsKK3VjaGFyOCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVjaGFyMTYgeCwgdWNoYXIxNiB5LCB1Y2hhcjggbWFzayk7CisKK3Nob3J0OCBfX292bGQgX19jbmZuIHNodWZmbGUyKHNob3J0MiB4LCBzaG9ydDIgeSwgdXNob3J0OCBtYXNrKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIHNodWZmbGUyKHNob3J0NCB4LCBzaG9ydDQgeSwgdXNob3J0OCBtYXNrKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIHNodWZmbGUyKHNob3J0OCB4LCBzaG9ydDggeSwgdXNob3J0OCBtYXNrKTsKK3Nob3J0OCBfX292bGQgX19jbmZuIHNodWZmbGUyKHNob3J0MTYgeCwgc2hvcnQxNiB5LCB1c2hvcnQ4IG1hc2spOworCit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodXNob3J0MiB4LCB1c2hvcnQyIHksIHVzaG9ydDggbWFzayk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodXNob3J0NCB4LCB1c2hvcnQ0IHksIHVzaG9ydDggbWFzayk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodXNob3J0OCB4LCB1c2hvcnQ4IHksIHVzaG9ydDggbWFzayk7Cit1c2hvcnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodXNob3J0MTYgeCwgdXNob3J0MTYgeSwgdXNob3J0OCBtYXNrKTsKKworaW50OCBfX292bGQgX19jbmZuIHNodWZmbGUyKGludDIgeCwgaW50MiB5LCB1aW50OCBtYXNrKTsKK2ludDggX19vdmxkIF9fY25mbiBzaHVmZmxlMihpbnQ0IHgsIGludDQgeSwgdWludDggbWFzayk7CitpbnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaW50OCB4LCBpbnQ4IHksIHVpbnQ4IG1hc2spOworaW50OCBfX292bGQgX19jbmZuIHNodWZmbGUyKGludDE2IHgsIGludDE2IHksIHVpbnQ4IG1hc2spOworCit1aW50OCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVpbnQyIHgsIHVpbnQyIHksIHVpbnQ4IG1hc2spOwordWludDggX19vdmxkIF9fY25mbiBzaHVmZmxlMih1aW50NCB4LCB1aW50NCB5LCB1aW50OCBtYXNrKTsKK3VpbnQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWludDggeCwgdWludDggeSwgdWludDggbWFzayk7Cit1aW50OCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVpbnQxNiB4LCB1aW50MTYgeSwgdWludDggbWFzayk7CisKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIobG9uZzIgeCwgbG9uZzIgeSwgdWxvbmc4IG1hc2spOworbG9uZzggX19vdmxkIF9fY25mbiBzaHVmZmxlMihsb25nNCB4LCBsb25nNCB5LCB1bG9uZzggbWFzayk7Citsb25nOCBfX292bGQgX19jbmZuIHNodWZmbGUyKGxvbmc4IHgsIGxvbmc4IHksIHVsb25nOCBtYXNrKTsKK2xvbmc4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIobG9uZzE2IHgsIGxvbmcxNiB5LCB1bG9uZzggbWFzayk7CisKK3Vsb25nOCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVsb25nMiB4LCB1bG9uZzIgeSwgdWxvbmc4IG1hc2spOwordWxvbmc4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWxvbmc0IHgsIHVsb25nNCB5LCB1bG9uZzggbWFzayk7Cit1bG9uZzggX19vdmxkIF9fY25mbiBzaHVmZmxlMih1bG9uZzggeCwgdWxvbmc4IHksIHVsb25nOCBtYXNrKTsKK3Vsb25nOCBfX292bGQgX19jbmZuIHNodWZmbGUyKHVsb25nMTYgeCwgdWxvbmcxNiB5LCB1bG9uZzggbWFzayk7CisKK2Zsb2F0OCBfX292bGQgX19jbmZuIHNodWZmbGUyKGZsb2F0MiB4LCBmbG9hdDIgeSwgdWludDggbWFzayk7CitmbG9hdDggX19vdmxkIF9fY25mbiBzaHVmZmxlMihmbG9hdDQgeCwgZmxvYXQ0IHksIHVpbnQ4IG1hc2spOworZmxvYXQ4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZmxvYXQ4IHgsIGZsb2F0OCB5LCB1aW50OCBtYXNrKTsKK2Zsb2F0OCBfX292bGQgX19jbmZuIHNodWZmbGUyKGZsb2F0MTYgeCwgZmxvYXQxNiB5LCB1aW50OCBtYXNrKTsKKworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoY2hhcjIgeCwgY2hhcjIgeSwgdWNoYXIxNiBtYXNrKTsKK2NoYXIxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKGNoYXI0IHgsIGNoYXI0IHksIHVjaGFyMTYgbWFzayk7CitjaGFyMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMihjaGFyOCB4LCBjaGFyOCB5LCB1Y2hhcjE2IG1hc2spOworY2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoY2hhcjE2IHgsIGNoYXIxNiB5LCB1Y2hhcjE2IG1hc2spOworCit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWNoYXIyIHgsIHVjaGFyMiB5LCB1Y2hhcjE2IG1hc2spOwordWNoYXIxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVjaGFyNCB4LCB1Y2hhcjQgeSwgdWNoYXIxNiBtYXNrKTsKK3VjaGFyMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1Y2hhcjggeCwgdWNoYXI4IHksIHVjaGFyMTYgbWFzayk7Cit1Y2hhcjE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWNoYXIxNiB4LCB1Y2hhcjE2IHksIHVjaGFyMTYgbWFzayk7CisKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMihzaG9ydDIgeCwgc2hvcnQyIHksIHVzaG9ydDE2IG1hc2spOworc2hvcnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKHNob3J0NCB4LCBzaG9ydDQgeSwgdXNob3J0MTYgbWFzayk7CitzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoc2hvcnQ4IHgsIHNob3J0OCB5LCB1c2hvcnQxNiBtYXNrKTsKK3Nob3J0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMihzaG9ydDE2IHgsIHNob3J0MTYgeSwgdXNob3J0MTYgbWFzayk7CisKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodXNob3J0MiB4LCB1c2hvcnQyIHksIHVzaG9ydDE2IG1hc2spOwordXNob3J0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1c2hvcnQ0IHgsIHVzaG9ydDQgeSwgdXNob3J0MTYgbWFzayk7Cit1c2hvcnQxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVzaG9ydDggeCwgdXNob3J0OCB5LCB1c2hvcnQxNiBtYXNrKTsKK3VzaG9ydDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodXNob3J0MTYgeCwgdXNob3J0MTYgeSwgdXNob3J0MTYgbWFzayk7CisKK2ludDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaW50MiB4LCBpbnQyIHksIHVpbnQxNiBtYXNrKTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaW50NCB4LCBpbnQ0IHksIHVpbnQxNiBtYXNrKTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaW50OCB4LCBpbnQ4IHksIHVpbnQxNiBtYXNrKTsKK2ludDE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaW50MTYgeCwgaW50MTYgeSwgdWludDE2IG1hc2spOworCit1aW50MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1aW50MiB4LCB1aW50MiB5LCB1aW50MTYgbWFzayk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1aW50NCB4LCB1aW50NCB5LCB1aW50MTYgbWFzayk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1aW50OCB4LCB1aW50OCB5LCB1aW50MTYgbWFzayk7Cit1aW50MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1aW50MTYgeCwgdWludDE2IHksIHVpbnQxNiBtYXNrKTsKKworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIobG9uZzIgeCwgbG9uZzIgeSwgdWxvbmcxNiBtYXNrKTsKK2xvbmcxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKGxvbmc0IHgsIGxvbmc0IHksIHVsb25nMTYgbWFzayk7Citsb25nMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMihsb25nOCB4LCBsb25nOCB5LCB1bG9uZzE2IG1hc2spOworbG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIobG9uZzE2IHgsIGxvbmcxNiB5LCB1bG9uZzE2IG1hc2spOworCit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWxvbmcyIHgsIHVsb25nMiB5LCB1bG9uZzE2IG1hc2spOwordWxvbmcxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKHVsb25nNCB4LCB1bG9uZzQgeSwgdWxvbmcxNiBtYXNrKTsKK3Vsb25nMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMih1bG9uZzggeCwgdWxvbmc4IHksIHVsb25nMTYgbWFzayk7Cit1bG9uZzE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIodWxvbmcxNiB4LCB1bG9uZzE2IHksIHVsb25nMTYgbWFzayk7CisKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMihmbG9hdDIgeCwgZmxvYXQyIHksIHVpbnQxNiBtYXNrKTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMihmbG9hdDQgeCwgZmxvYXQ0IHksIHVpbnQxNiBtYXNrKTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMihmbG9hdDggeCwgZmxvYXQ4IHksIHVpbnQxNiBtYXNrKTsKK2Zsb2F0MTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMihmbG9hdDE2IHgsIGZsb2F0MTYgeSwgdWludDE2IG1hc2spOworCisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihkb3VibGUyIHgsIGRvdWJsZTIgeSwgdWxvbmcyIG1hc2spOworZG91YmxlMiBfX292bGQgX19jbmZuIHNodWZmbGUyKGRvdWJsZTQgeCwgZG91YmxlNCB5LCB1bG9uZzIgbWFzayk7Citkb3VibGUyIF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZG91YmxlOCB4LCBkb3VibGU4IHksIHVsb25nMiBtYXNrKTsKK2RvdWJsZTIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihkb3VibGUxNiB4LCBkb3VibGUxNiB5LCB1bG9uZzIgbWFzayk7CisKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihkb3VibGUyIHgsIGRvdWJsZTIgeSwgdWxvbmc0IG1hc2spOworZG91YmxlNCBfX292bGQgX19jbmZuIHNodWZmbGUyKGRvdWJsZTQgeCwgZG91YmxlNCB5LCB1bG9uZzQgbWFzayk7Citkb3VibGU0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZG91YmxlOCB4LCBkb3VibGU4IHksIHVsb25nNCBtYXNrKTsKK2RvdWJsZTQgX19vdmxkIF9fY25mbiBzaHVmZmxlMihkb3VibGUxNiB4LCBkb3VibGUxNiB5LCB1bG9uZzQgbWFzayk7CisKK2RvdWJsZTggX19vdmxkIF9fY25mbiBzaHVmZmxlMihkb3VibGUyIHgsIGRvdWJsZTIgeSwgdWxvbmc4IG1hc2spOworZG91YmxlOCBfX292bGQgX19jbmZuIHNodWZmbGUyKGRvdWJsZTQgeCwgZG91YmxlNCB5LCB1bG9uZzggbWFzayk7Citkb3VibGU4IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZG91YmxlOCB4LCBkb3VibGU4IHksIHVsb25nOCBtYXNrKTsKK2RvdWJsZTggX19vdmxkIF9fY25mbiBzaHVmZmxlMihkb3VibGUxNiB4LCBkb3VibGUxNiB5LCB1bG9uZzggbWFzayk7CisKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZG91YmxlMiB4LCBkb3VibGUyIHksIHVsb25nMTYgbWFzayk7Citkb3VibGUxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKGRvdWJsZTQgeCwgZG91YmxlNCB5LCB1bG9uZzE2IG1hc2spOworZG91YmxlMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMihkb3VibGU4IHgsIGRvdWJsZTggeSwgdWxvbmcxNiBtYXNrKTsKK2RvdWJsZTE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoZG91YmxlMTYgeCwgZG91YmxlMTYgeSwgdWxvbmcxNiBtYXNrKTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZjIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihoYWxmMiB4LCBoYWxmMiB5LCB1c2hvcnQyIG1hc2spOworaGFsZjIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihoYWxmNCB4LCBoYWxmNCB5LCB1c2hvcnQyIG1hc2spOworaGFsZjIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihoYWxmOCB4LCBoYWxmOCB5LCB1c2hvcnQyIG1hc2spOworaGFsZjIgX19vdmxkIF9fY25mbiBzaHVmZmxlMihoYWxmMTYgeCwgaGFsZjE2IHksIHVzaG9ydDIgbWFzayk7CisKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaGFsZjIgeCwgaGFsZjIgeSwgdXNob3J0NCBtYXNrKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaGFsZjQgeCwgaGFsZjQgeSwgdXNob3J0NCBtYXNrKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaGFsZjggeCwgaGFsZjggeSwgdXNob3J0NCBtYXNrKTsKK2hhbGY0IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaGFsZjE2IHgsIGhhbGYxNiB5LCB1c2hvcnQ0IG1hc2spOworCitoYWxmOCBfX292bGQgX19jbmZuIHNodWZmbGUyKGhhbGYyIHgsIGhhbGYyIHksIHVzaG9ydDggbWFzayk7CitoYWxmOCBfX292bGQgX19jbmZuIHNodWZmbGUyKGhhbGY0IHgsIGhhbGY0IHksIHVzaG9ydDggbWFzayk7CitoYWxmOCBfX292bGQgX19jbmZuIHNodWZmbGUyKGhhbGY4IHgsIGhhbGY4IHksIHVzaG9ydDggbWFzayk7CitoYWxmOCBfX292bGQgX19jbmZuIHNodWZmbGUyKGhhbGYxNiB4LCBoYWxmMTYgeSwgdXNob3J0OCBtYXNrKTsKKworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaGFsZjIgeCwgaGFsZjIgeSwgdXNob3J0MTYgbWFzayk7CitoYWxmMTYgX19vdmxkIF9fY25mbiBzaHVmZmxlMihoYWxmNCB4LCBoYWxmNCB5LCB1c2hvcnQxNiBtYXNrKTsKK2hhbGYxNiBfX292bGQgX19jbmZuIHNodWZmbGUyKGhhbGY4IHgsIGhhbGY4IHksIHVzaG9ydDE2IG1hc2spOworaGFsZjE2IF9fb3ZsZCBfX2NuZm4gc2h1ZmZsZTIoaGFsZjE2IHgsIGhhbGYxNiB5LCB1c2hvcnQxNiBtYXNrKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzFfMgorLy8gT3BlbkNMIHYxLjIgczYuMTIuMTMsIHYyLjAgczYuMTMuMTMgLSBwcmludGYKKworaW50IHByaW50ZihfX2NvbnN0YW50IGNvbnN0IGNoYXIqIHN0LCAuLi4pOworI2VuZGlmCisKKy8vIE9wZW5DTCB2MS4xIHM2LjExLjMsIHYxLjIgczYuMTIuMTQsIHYyLjAgczYuMTMuMTQgLSBJbWFnZSBSZWFkIGFuZCBXcml0ZSBGdW5jdGlvbnMKKworLy8gVGhlc2UgdmFsdWVzIG5lZWQgdG8gbWF0Y2ggdGhlIHJ1bnRpbWUgZXF1aXZhbGVudAorLy8KKy8vIEFkZHJlc3NpbmcgTW9kZS4KKy8vCisjZGVmaW5lIENMS19BRERSRVNTX05PTkUgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDTEtfQUREUkVTU19DTEFNUF9UT19FREdFICAgICAgIDIKKyNkZWZpbmUgQ0xLX0FERFJFU1NfQ0xBTVAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENMS19BRERSRVNTX1JFUEVBVCAgICAgICAgICAgICAgNgorI2RlZmluZSBDTEtfQUREUkVTU19NSVJST1JFRF9SRVBFQVQgICAgIDgKKworLy8KKy8vIENvb3JkaW5hdGlvbiBOb3JtYWxpemF0aW9uCisvLworI2RlZmluZSBDTEtfTk9STUFMSVpFRF9DT09SRFNfRkFMU0UgICAgIDAKKyNkZWZpbmUgQ0xLX05PUk1BTElaRURfQ09PUkRTX1RSVUUgICAgICAxCisKKy8vCisvLyBGaWx0ZXJpbmcgTW9kZS4KKy8vCisjZGVmaW5lIENMS19GSUxURVJfTkVBUkVTVCAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBDTEtfRklMVEVSX0xJTkVBUiAgICAgICAgICAgICAgIDB4MjAKKworLyoqCisgKiBVc2UgdGhlIGNvb3JkaW5hdGUgKGNvb3JkLnh5KSB0byBkbyBhbiBlbGVtZW50IGxvb2t1cCBpbgorICogdGhlIDJEIGltYWdlIG9iamVjdCBzcGVjaWZpZWQgYnkgaW1hZ2UuCisgKgorICogVXNlIHRoZSBjb29yZGluYXRlIChjb29yZC54LCBjb29yZC55LCBjb29yZC56KSB0byBkbworICogYW4gZWxlbWVudCBsb29rdXAgaW4gdGhlIDNEIGltYWdlIG9iamVjdCBzcGVjaWZpZWQKKyAqIGJ5IGltYWdlLiBjb29yZC53IGlzIGlnbm9yZWQuCisgKgorICogVXNlIHRoZSBjb29yZGluYXRlIChjb29yZC56KSB0byBpbmRleCBpbnRvIHRoZQorICogMkQgaW1hZ2UgYXJyYXkgb2JqZWN0IHNwZWNpZmllZCBieSBpbWFnZV9hcnJheQorICogYW5kIChjb29yZC54LCBjb29yZC55KSB0byBkbyBhbiBlbGVtZW50IGxvb2t1cCBpbgorICogdGhlIDJEIGltYWdlIG9iamVjdCBzcGVjaWZpZWQgYnkgaW1hZ2UuCisgKgorICogVXNlIHRoZSBjb29yZGluYXRlICh4KSB0byBkbyBhbiBlbGVtZW50IGxvb2t1cCBpbgorICogdGhlIDFEIGltYWdlIG9iamVjdCBzcGVjaWZpZWQgYnkgaW1hZ2UuCisgKgorICogVXNlIHRoZSBjb29yZGluYXRlIChjb29yZC55KSB0byBpbmRleCBpbnRvIHRoZQorICogMUQgaW1hZ2UgYXJyYXkgb2JqZWN0IHNwZWNpZmllZCBieSBpbWFnZV9hcnJheQorICogYW5kIChjb29yZC54KSB0byBkbyBhbiBlbGVtZW50IGxvb2t1cCBpbgorICogdGhlIDFEIGltYWdlIG9iamVjdCBzcGVjaWZpZWQgYnkgaW1hZ2UuCisgKgorICogVXNlIHRoZSBjb29yZGluYXRlIChjb29kLnh5KSBhbmQgc2FtcGxlIHRvIGRvIGFuCisgKiBlbGVtZW50IGxvb2t1cCBpbiB0aGUgMkQgbXVsdGktc2FtcGxlIGltYWdlIHNwZWNpZmllZAorICogYnkgaW1hZ2UuCisgKgorICogVXNlIGNvb3JkLnh5IGFuZCBzYW1wbGUgdG8gZG8gYW4gZWxlbWVudAorICogbG9va3VwIGluIHRoZSAyRCBtdWx0aS1zYW1wbGUgaW1hZ2UgbGF5ZXIKKyAqIGlkZW50aWZpZWQgYnkgaW5kZXggY29vcmQueiBpbiB0aGUgMkQgbXVsdGktc2FtcGxlCisgKiBpbWFnZSBhcnJheSBzcGVjaWZpZWQgYnkgaW1hZ2UuCisgKgorICogRm9yIG1pcG1hcCBpbWFnZXMsIHVzZSB0aGUgbWlwLWxldmVsIHNwZWNpZmllZCBieQorICogdGhlIExldmVsLW9mLURldGFpbCAobG9kKSBvciB1c2UgZ3JhZGllbnRzIGZvciBMT0QKKyAqIGNvbXB1dGF0aW9uLgorICoKKyAqIHJlYWRfaW1hZ2VmIHJldHVybnMgZmxvYXRpbmctcG9pbnQgdmFsdWVzIGluIHRoZQorICogcmFuZ2UgWzAuMCAuLi4gMS4wXSBmb3IgaW1hZ2Ugb2JqZWN0cyBjcmVhdGVkIHdpdGgKKyAqIGltYWdlX2NoYW5uZWxfZGF0YV90eXBlIHNldCB0byBvbmUgb2YgdGhlIHByZWRlZmluZWQKKyAqIHBhY2tlZCBmb3JtYXRzIG9yIENMX1VOT1JNX0lOVDgsIG9yCisgKiBDTF9VTk9STV9JTlQxNi4KKyAqCisgKiByZWFkX2ltYWdlZiByZXR1cm5zIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBpbiB0aGUKKyAqIHJhbmdlIFstMS4wIC4uLiAxLjBdIGZvciBpbWFnZSBvYmplY3RzIGNyZWF0ZWQgd2l0aAorICogaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUgc2V0IHRvIENMX1NOT1JNX0lOVDgsCisgKiBvciBDTF9TTk9STV9JTlQxNi4KKyAqCisgKiByZWFkX2ltYWdlZiByZXR1cm5zIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBmb3IgaW1hZ2UKKyAqIG9iamVjdHMgY3JlYXRlZCB3aXRoIGltYWdlX2NoYW5uZWxfZGF0YV90eXBlIHNldCB0bworICogQ0xfSEFMRl9GTE9BVCBvciBDTF9GTE9BVC4KKyAqCisgKiByZWFkX2ltYWdlaSBhbmQgcmVhZF9pbWFnZXVpIHJldHVybgorICogdW5ub3JtYWxpemVkIHNpZ25lZCBpbnRlZ2VyIGFuZCB1bnNpZ25lZCBpbnRlZ2VyCisgKiB2YWx1ZXMgcmVzcGVjdGl2ZWx5LiBFYWNoIGNoYW5uZWwgd2lsbCBiZSBzdG9yZWQgaW4gYQorICogMzItYml0IGludGVnZXIuCisgKgorICogcmVhZF9pbWFnZWkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGltYWdlIG9iamVjdHMKKyAqIGNyZWF0ZWQgd2l0aCBpbWFnZV9jaGFubmVsX2RhdGFfdHlwZSBzZXQgdG8gb25lIG9mCisgKiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAqIENMX1NJR05FRF9JTlQ4LAorICogQ0xfU0lHTkVEX0lOVDE2IGFuZAorICogQ0xfU0lHTkVEX0lOVDMyLgorICogSWYgdGhlIGltYWdlX2NoYW5uZWxfZGF0YV90eXBlIGlzIG5vdCBvbmUgb2YgdGhlCisgKiBhYm92ZSB2YWx1ZXMsIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgcmVhZF9pbWFnZWkKKyAqIGFyZSB1bmRlZmluZWQuCisgKgorICogcmVhZF9pbWFnZXVpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBpbWFnZSBvYmplY3RzCisgKiBjcmVhdGVkIHdpdGggaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUgc2V0IHRvIG9uZSBvZgorICogdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgKiBDTF9VTlNJR05FRF9JTlQ4LAorICogQ0xfVU5TSUdORURfSU5UMTYgYW5kCisgKiBDTF9VTlNJR05FRF9JTlQzMi4KKyAqIElmIHRoZSBpbWFnZV9jaGFubmVsX2RhdGFfdHlwZSBpcyBub3Qgb25lIG9mIHRoZQorICogYWJvdmUgdmFsdWVzLCB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHJlYWRfaW1hZ2V1aQorICogYXJlIHVuZGVmaW5lZC4KKyAqCisgKiBUaGUgcmVhZF9pbWFnZXtpfHVpfSBjYWxscyBzdXBwb3J0IGEgbmVhcmVzdCBmaWx0ZXIKKyAqIG9ubHkuIFRoZSBmaWx0ZXJfbW9kZSBzcGVjaWZpZWQgaW4gc2FtcGxlcgorICogbXVzdCBiZSBzZXQgdG8gQ0xLX0ZJTFRFUl9ORUFSRVNUOyBvdGhlcndpc2UKKyAqIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYXJlIHVuZGVmaW5lZC4KKyAKKyAqIFRoZSByZWFkX2ltYWdle2Z8aXx1aX0gY2FsbHMgdGhhdCB0YWtlCisgKiBpbnRlZ2VyIGNvb3JkaW5hdGVzIG11c3QgdXNlIGEgc2FtcGxlciB3aXRoCisgKiBub3JtYWxpemVkIGNvb3JkaW5hdGVzIHNldCB0bworICogQ0xLX05PUk1BTElaRURfQ09PUkRTX0ZBTFNFIGFuZAorICogYWRkcmVzc2luZyBtb2RlIHNldCB0bworICogQ0xLX0FERFJFU1NfQ0xBTVBfVE9fRURHRSwKKyAqIENMS19BRERSRVNTX0NMQU1QIG9yIENMS19BRERSRVNTX05PTkU7CisgKiBvdGhlcndpc2UgdGhlIHZhbHVlcyByZXR1cm5lZCBhcmUgdW5kZWZpbmVkLgorICoKKyAqIFZhbHVlcyByZXR1cm5lZCBieSByZWFkX2ltYWdlZiBmb3IgaW1hZ2Ugb2JqZWN0cworICogd2l0aCBpbWFnZV9jaGFubmVsX2RhdGFfdHlwZSB2YWx1ZXMgbm90IHNwZWNpZmllZAorICogaW4gdGhlIGRlc2NyaXB0aW9uIGFib3ZlIGFyZSB1bmRlZmluZWQuCisgKi8KKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50MiBjb29yZCk7CitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQpOworCitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50MiBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlMmRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGludDIgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50NCBjb29yZCk7CitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTNkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQpOworCitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50NCBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGludDQgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50NCBjb29yZCk7CitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQpOworCitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50NCBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGludDQgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50IGNvb3JkKTsKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0IGNvb3JkKTsKKworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGludCBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50IGNvb3JkKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0IGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50MiBjb29yZCk7CitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQpOworCitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50MiBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGludDIgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkKTsKKworI2lmZGVmIGNsX2tocl9kZXB0aF9pbWFnZXMKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkKTsKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50MiBjb29yZCk7CisKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkKTsKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50NCBjb29yZCk7CisjZW5kaWYgLy9jbF9raHJfZGVwdGhfaW1hZ2VzCisKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTJkX21zYWFfdCBpbWFnZSwgaW50MiBjb29yZCwgaW50IHNhbXBsZSk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UsIGludDIgY29vcmQsIGludCBzYW1wbGUpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UsIGludDIgY29vcmQsIGludCBzYW1wbGUpOworCitmbG9hdCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMmRfbXNhYV9kZXB0aF90IGltYWdlLCBpbnQyIGNvb3JkLCBpbnQgc2FtcGxlKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2UsIGludDQgY29vcmQsIGludCBzYW1wbGUpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlLCBpbnQ0IGNvb3JkLCBpbnQgc2FtcGxlKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlLCBpbnQ0IGNvb3JkLCBpbnQgc2FtcGxlKTsKKworZmxvYXQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZSwgaW50NCBjb29yZCwgaW50IHNhbXBsZSk7CisjZW5kaWYgLy9jbF9raHJfZ2xfbXNhYV9zaGFyaW5nCisKKy8vIE9wZW5DTCBFeHRlbnNpb24gdjIuMCBzOS4xOCAtIE1pcG1hcHMKKyNpZmRlZiBjbF9raHJfbWlwbWFwX2ltYWdlCisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0IGNvb3JkLCBmbG9hdCBsb2QpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0IGNvb3JkLCBmbG9hdCBsb2QpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMmRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBsb2QpOworCitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0IGxvZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworCitmbG9hdCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQgY29vcmQsIGZsb2F0IGdyYWRpZW50WCwgZmxvYXQgZ3JhZGllbnRZKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTFkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdCBjb29yZCwgZmxvYXQgZ3JhZGllbnRYLCBmbG9hdCBncmFkaWVudFkpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQgY29vcmQsIGZsb2F0IGdyYWRpZW50WCwgZmxvYXQgZ3JhZGllbnRZKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBncmFkaWVudFgsIGZsb2F0IGdyYWRpZW50WSk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBncmFkaWVudFgsIGZsb2F0IGdyYWRpZW50WSk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGdyYWRpZW50WCwgZmxvYXQgZ3JhZGllbnRZKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdDIgZ3JhZGllbnRYLCBmbG9hdDIgZ3JhZGllbnRZKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0MiBncmFkaWVudFgsIGZsb2F0MiBncmFkaWVudFkpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdDIgZ3JhZGllbnRYLCBmbG9hdDIgZ3JhZGllbnRZKTsKKworZmxvYXQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTJkX2RlcHRoX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0MiBncmFkaWVudFgsIGZsb2F0MiBncmFkaWVudFkpOworCitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0MiBncmFkaWVudFgsIGZsb2F0MiBncmFkaWVudFkpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQyIGdyYWRpZW50WCwgZmxvYXQyIGdyYWRpZW50WSk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0MiBncmFkaWVudFgsIGZsb2F0MiBncmFkaWVudFkpOworCitmbG9hdCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQyIGdyYWRpZW50WCwgZmxvYXQyIGdyYWRpZW50WSk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQ0IGdyYWRpZW50WCwgZmxvYXQ0IGdyYWRpZW50WSk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdDQgZ3JhZGllbnRYLCBmbG9hdDQgZ3JhZGllbnRZKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQ0IGdyYWRpZW50WCwgZmxvYXQ0IGdyYWRpZW50WSk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0IGNvb3JkLCBmbG9hdCBsb2QpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0IGNvb3JkLCBmbG9hdCBsb2QpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMmRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBsb2QpOworCitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0IGxvZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworCitmbG9hdCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKKworI2VuZGlmIC8vY2xfa2hyX21pcG1hcF9pbWFnZQorCisvKioKKyogU2FtcGxlci1sZXNzIEltYWdlIEFjY2VzcworKi8KKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlLCBpbnQgY29vcmQpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UxZF9idWZmZXJfdCBpbWFnZSwgaW50IGNvb3JkKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTFkX2J1ZmZlcl90IGltYWdlLCBpbnQgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UxZF9idWZmZXJfdCBpbWFnZSwgaW50IGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlLCBpbnQyIGNvb3JkKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2UsIGludDIgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlLCBpbnQyIGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBpbnQyIGNvb3JkKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UsIGludDIgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBpbnQyIGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlLCBpbnQ0IGNvb3JkKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UsIGludDQgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlLCBpbnQ0IGNvb3JkKTsKKworI2lmZGVmIGNsX2tocl9kZXB0aF9pbWFnZXMKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlLCBpbnQyIGNvb3JkKTsKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlLCBpbnQ0IGNvb3JkKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBpbnQ0IGNvb3JkKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfb25seSBpbWFnZTNkX3QgaW1hZ2UsIGludDQgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBpbnQ0IGNvb3JkKTsKKworLy8gSW1hZ2UgcmVhZCBmdW5jdGlvbnMgcmV0dXJuaW5nIGhhbGY0IHR5cGUKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZjQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VoKHJlYWRfb25seSBpbWFnZTFkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBpbnQgY29vcmQpOworaGFsZjQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VoKHJlYWRfb25seSBpbWFnZTFkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdCBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGludDIgY29vcmQpOworaGFsZjQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VoKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQpOworaGFsZjQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VoKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBpbnQyIGNvb3JkKTsKK2hhbGY0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaChyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkKTsKK2hhbGY0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaChyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgaW50NCBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGludDQgY29vcmQpOworaGFsZjQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VoKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQpOworaGFsZjQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VoKHJlYWRfb25seSBpbWFnZTFkX3QgaW1hZ2UsIGludCBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF9vbmx5IGltYWdlMmRfdCBpbWFnZSwgaW50MiBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZSwgaW50MiBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZSwgaW50NCBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF9vbmx5IGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UsIGludCBjb29yZCk7CisjZW5kaWYgLy9jbF9raHJfZnAxNgorCisvLyBJbWFnZSByZWFkIGZ1bmN0aW9ucyBmb3IgcmVhZF93cml0ZSBpbWFnZXMKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UxZF90IGltYWdlLCBpbnQgY29vcmQpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UsIGludCBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UsIGludCBjb29yZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UxZF9idWZmZXJfdCBpbWFnZSwgaW50IGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZSwgaW50MiBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZSwgaW50MiBjb29yZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UxZF9hcnJheV90IGltYWdlLCBpbnQyIGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgaW50MiBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgaW50MiBjb29yZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UyZF90IGltYWdlLCBpbnQyIGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZSwgaW50NCBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZSwgaW50NCBjb29yZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlLCBpbnQ0IGNvb3JkKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UzZF90IGltYWdlLCBpbnQ0IGNvb3JkKTsKKworI2lmZGVmIGNsX2tocl9kZXB0aF9pbWFnZXMKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfZGVwdGhfdCBpbWFnZSwgaW50MiBjb29yZCk7CitmbG9hdCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2UsIGludDQgY29vcmQpOworI2VuZGlmIC8vY2xfa2hyX2RlcHRoX2ltYWdlcworCisjaWYgY2xfa2hyX2dsX21zYWFfc2hhcmluZworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfbXNhYV90IGltYWdlLCBpbnQyIGNvb3JkLCBpbnQgc2FtcGxlKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UsIGludDIgY29vcmQsIGludCBzYW1wbGUpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMmRfbXNhYV90IGltYWdlLCBpbnQyIGNvb3JkLCBpbnQgc2FtcGxlKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlLCBpbnQ0IGNvb3JkLCBpbnQgc2FtcGxlKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2UsIGludDQgY29vcmQsIGludCBzYW1wbGUpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlLCBpbnQ0IGNvb3JkLCBpbnQgc2FtcGxlKTsKKworZmxvYXQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfd3JpdGUgaW1hZ2UyZF9tc2FhX2RlcHRoX3QgaW1hZ2UsIGludDIgY29vcmQsIGludCBzYW1wbGUpOworZmxvYXQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UsIGludDQgY29vcmQsIGludCBzYW1wbGUpOworI2VuZGlmIC8vY2xfa2hyX2dsX21zYWFfc2hhcmluZworCisjaWZkZWYgY2xfa2hyX21pcG1hcF9pbWFnZQorZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0IGNvb3JkLCBmbG9hdCBsb2QpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdCBjb29yZCwgZmxvYXQgbG9kKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdCBjb29yZCwgZmxvYXQgbG9kKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBsb2QpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UyZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBsb2QpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKKworZmxvYXQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfd3JpdGUgaW1hZ2UyZF9kZXB0aF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBsb2QpOworCitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0IGxvZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworCitmbG9hdCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0IGxvZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdCBjb29yZCwgZmxvYXQgZ3JhZGllbnRYLCBmbG9hdCBncmFkaWVudFkpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdCBjb29yZCwgZmxvYXQgZ3JhZGllbnRYLCBmbG9hdCBncmFkaWVudFkpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0IGNvb3JkLCBmbG9hdCBncmFkaWVudFgsIGZsb2F0IGdyYWRpZW50WSk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGdyYWRpZW50WCwgZmxvYXQgZ3JhZGllbnRZKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBncmFkaWVudFgsIGZsb2F0IGdyYWRpZW50WSk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQyIGNvb3JkLCBmbG9hdCBncmFkaWVudFgsIGZsb2F0IGdyYWRpZW50WSk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0MiBncmFkaWVudFgsIGZsb2F0MiBncmFkaWVudFkpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0MiBncmFkaWVudFgsIGZsb2F0MiBncmFkaWVudFkpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQyIGdyYWRpZW50WCwgZmxvYXQyIGdyYWRpZW50WSk7CisKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfZGVwdGhfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQyIGdyYWRpZW50WCwgZmxvYXQyIGdyYWRpZW50WSk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0MiBncmFkaWVudFgsIGZsb2F0MiBncmFkaWVudFkpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0MiBncmFkaWVudFgsIGZsb2F0MiBncmFkaWVudFkpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQyIGdyYWRpZW50WCwgZmxvYXQyIGdyYWRpZW50WSk7CisKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQyIGdyYWRpZW50WCwgZmxvYXQyIGdyYWRpZW50WSk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0NCBncmFkaWVudFgsIGZsb2F0NCBncmFkaWVudFkpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0NCBncmFkaWVudFgsIGZsb2F0NCBncmFkaWVudFkpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQ0IGdyYWRpZW50WCwgZmxvYXQ0IGdyYWRpZW50WSk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdCBjb29yZCwgZmxvYXQgbG9kKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQgY29vcmQsIGZsb2F0IGxvZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UxZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF93cml0ZSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7CitpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKK3VpbnQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdldWkocmVhZF93cml0ZSBpbWFnZTJkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDIgY29vcmQsIGZsb2F0IGxvZCk7CisKK2Zsb2F0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfZGVwdGhfdCBpbWFnZSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0MiBjb29yZCwgZmxvYXQgbG9kKTsKKworZmxvYXQ0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKK2ludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOwordWludDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgc2FtcGxlcl90IHNhbXBsZXIsIGZsb2F0NCBjb29yZCwgZmxvYXQgbG9kKTsKKworZmxvYXQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworCitmbG9hdDQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VmKHJlYWRfd3JpdGUgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworaW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UsIHNhbXBsZXJfdCBzYW1wbGVyLCBmbG9hdDQgY29vcmQsIGZsb2F0IGxvZCk7Cit1aW50NCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UzZF90IGltYWdlLCBzYW1wbGVyX3Qgc2FtcGxlciwgZmxvYXQ0IGNvb3JkLCBmbG9hdCBsb2QpOworI2VuZGlmIC8vY2xfa2hyX21pcG1hcF9pbWFnZQorCisvLyBJbWFnZSByZWFkIGZ1bmN0aW9ucyByZXR1cm5pbmcgaGFsZjQgdHlwZQorI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIGludCBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF93cml0ZSBpbWFnZTJkX3QgaW1hZ2UsIGludDIgY29vcmQpOworaGFsZjQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VoKHJlYWRfd3JpdGUgaW1hZ2UzZF90IGltYWdlLCBpbnQ0IGNvb3JkKTsKK2hhbGY0IF9fcHVyZWZuIF9fb3ZsZCByZWFkX2ltYWdlaChyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZSwgaW50MiBjb29yZCk7CitoYWxmNCBfX3B1cmVmbiBfX292bGQgcmVhZF9pbWFnZWgocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UsIGludDQgY29vcmQpOworaGFsZjQgX19wdXJlZm4gX19vdmxkIHJlYWRfaW1hZ2VoKHJlYWRfd3JpdGUgaW1hZ2UxZF9idWZmZXJfdCBpbWFnZSwgaW50IGNvb3JkKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvKioKKyAqIFdyaXRlIGNvbG9yIHZhbHVlIHRvIGxvY2F0aW9uIHNwZWNpZmllZCBieSBjb29yZGluYXRlCisgKiAoY29vcmQueCwgY29vcmQueSkgaW4gdGhlIDJEIGltYWdlIG9iamVjdCBzcGVjaWZpZWQgYnkgaW1hZ2UuCisgKiAoY29vcmQueCwgY29vcmQueSkgYXJlIGNvbnNpZGVyZWQgdG8gYmUgdW5ub3JtYWxpemVkIGNvb3JkaW5hdGVzCisgKiBhbmQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMCAuLi4gaW1hZ2Ugd2lkdGggLSAxLCBhbmQgMAorICogLi4uIGltYWdlIGhlaWdodCAtIDEuCisKKyAqIFdyaXRlIGNvbG9yIHZhbHVlIHRvIGxvY2F0aW9uIHNwZWNpZmllZCBieSBjb29yZGluYXRlCisgKiAoY29vcmQueCwgY29vcmQueSkgaW4gdGhlIDJEIGltYWdlIG9iamVjdCBzcGVjaWZpZWQgYnkgaW5kZXgKKyAqIChjb29yZC56KSBvZiB0aGUgMkQgaW1hZ2UgYXJyYXkgb2JqZWN0IGltYWdlX2FycmF5LgorICogKGNvb3JkLngsIGNvb3JkLnkpIGFyZSBjb25zaWRlcmVkIHRvIGJlIHVubm9ybWFsaXplZAorICogY29vcmRpbmF0ZXMgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIDAgLi4uIGltYWdlIHdpZHRoCisgKiAtIDEuCisgKgorICogV3JpdGUgY29sb3IgdmFsdWUgdG8gbG9jYXRpb24gc3BlY2lmaWVkIGJ5IGNvb3JkaW5hdGUKKyAqIChjb29yZCkgaW4gdGhlIDFEIGltYWdlIChidWZmZXIpIG9iamVjdCBzcGVjaWZpZWQgYnkgaW1hZ2UuCisgKiBjb29yZCBpcyBjb25zaWRlcmVkIHRvIGJlIHVubm9ybWFsaXplZCBjb29yZGluYXRlcworICogYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIDAgLi4uIGltYWdlIHdpZHRoIC0gMS4KKyAqCisgKiBXcml0ZSBjb2xvciB2YWx1ZSB0byBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgY29vcmRpbmF0ZQorICogKGNvb3JkLngpIGluIHRoZSAxRCBpbWFnZSBvYmplY3Qgc3BlY2lmaWVkIGJ5IGluZGV4CisgKiAoY29vcmQueSkgb2YgdGhlIDFEIGltYWdlIGFycmF5IG9iamVjdCBpbWFnZV9hcnJheS4KKyAqIHggaXMgY29uc2lkZXJlZCB0byBiZSB1bm5vcm1hbGl6ZWQgY29vcmRpbmF0ZXMKKyAqIGFuZCBtdXN0IGJlIGluIHRoZSByYW5nZSAwIC4uLiBpbWFnZSB3aWR0aCAtIDEuCisgKgorICogV3JpdGUgY29sb3IgdmFsdWUgdG8gbG9jYXRpb24gc3BlY2lmaWVkIGJ5IGNvb3JkaW5hdGUKKyAqIChjb29yZC54LCBjb29yZC55LCBjb29yZC56KSBpbiB0aGUgM0QgaW1hZ2Ugb2JqZWN0IHNwZWNpZmllZCBieSBpbWFnZS4KKyAqIGNvb3JkLnggJiBjb29yZC55IGFyZSBjb25zaWRlcmVkIHRvIGJlIHVubm9ybWFsaXplZCBjb29yZGluYXRlcworICogYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIDAgLi4uIGltYWdlIHdpZHRoIC0gMSwgYW5kIDAKKyAqIC4uLiBpbWFnZSBoZWlnaHQgLSAxLgorICoKKyAqIEZvciBtaXBtYXAgaW1hZ2VzLCB1c2UgbWlwLWxldmVsIHNwZWNpZmllZCBieSBsb2QuCisgKgorICogQXBwcm9wcmlhdGUgZGF0YSBmb3JtYXQgY29udmVyc2lvbiB0byB0aGUgc3BlY2lmaWVkCisgKiBpbWFnZSBmb3JtYXQgaXMgZG9uZSBiZWZvcmUgd3JpdGluZyB0aGUgY29sb3IgdmFsdWUuCisgKgorICogd3JpdGVfaW1hZ2VmIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBpbWFnZSBvYmplY3RzCisgKiBjcmVhdGVkIHdpdGggaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUgc2V0IHRvIG9uZSBvZgorICogdGhlIHByZS1kZWZpbmVkIHBhY2tlZCBmb3JtYXRzIG9yIHNldCB0bworICogQ0xfU05PUk1fSU5UOCwgQ0xfVU5PUk1fSU5UOCwKKyAqIENMX1NOT1JNX0lOVDE2LCBDTF9VTk9STV9JTlQxNiwKKyAqIENMX0hBTEZfRkxPQVQgb3IgQ0xfRkxPQVQuIEFwcHJvcHJpYXRlIGRhdGEKKyAqIGZvcm1hdCBjb252ZXJzaW9uIHdpbGwgYmUgZG9uZSB0byBjb252ZXJ0IGNoYW5uZWwKKyAqIGRhdGEgZnJvbSBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIHRvIGFjdHVhbCBkYXRhIGZvcm1hdAorICogaW4gd2hpY2ggdGhlIGNoYW5uZWxzIGFyZSBzdG9yZWQuCisgKgorICogd3JpdGVfaW1hZ2VpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBpbWFnZSBvYmplY3RzCisgKiBjcmVhdGVkIHdpdGggaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUgc2V0IHRvIG9uZSBvZgorICogdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgKiBDTF9TSUdORURfSU5UOCwKKyAqIENMX1NJR05FRF9JTlQxNiBhbmQKKyAqIENMX1NJR05FRF9JTlQzMi4KKyAqCisgKiB3cml0ZV9pbWFnZXVpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBpbWFnZSBvYmplY3RzCisgKiBjcmVhdGVkIHdpdGggaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUgc2V0IHRvIG9uZSBvZgorICogdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgKiBDTF9VTlNJR05FRF9JTlQ4LAorICogQ0xfVU5TSUdORURfSU5UMTYgYW5kCisgKiBDTF9VTlNJR05FRF9JTlQzMi4KKyAqCisgKiBUaGUgYmVoYXZpb3Igb2Ygd3JpdGVfaW1hZ2VmLCB3cml0ZV9pbWFnZWkgYW5kCisgKiB3cml0ZV9pbWFnZXVpIGZvciBpbWFnZSBvYmplY3RzIGNyZWF0ZWQgd2l0aAorICogaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUgdmFsdWVzIG5vdCBzcGVjaWZpZWQgaW4KKyAqIHRoZSBkZXNjcmlwdGlvbiBhYm92ZSBvciB3aXRoICh4LCB5KSBjb29yZGluYXRlCisgKiB2YWx1ZXMgdGhhdCBhcmUgbm90IGluIHRoZSByYW5nZSAoMCAuLi4gaW1hZ2Ugd2lkdGggLTEsCisgKiAwIC4uLiBpbWFnZSBoZWlnaHQgLSAxKSwgcmVzcGVjdGl2ZWx5LCBpcyB1bmRlZmluZWQuCisgKi8KK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZih3cml0ZV9vbmx5IGltYWdlMmRfdCBpbWFnZSwgaW50MiBjb29yZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaSh3cml0ZV9vbmx5IGltYWdlMmRfdCBpbWFnZSwgaW50MiBjb29yZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHdyaXRlX29ubHkgaW1hZ2UyZF90IGltYWdlLCBpbnQyIGNvb3JkLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZih3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50NCBjb29yZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaSh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50NCBjb29yZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBpbnQ0IGNvb3JkLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZih3cml0ZV9vbmx5IGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkLCBmbG9hdDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VpKHdyaXRlX29ubHkgaW1hZ2UxZF90IGltYWdlLCBpbnQgY29vcmQsIGludDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2V1aSh3cml0ZV9vbmx5IGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZih3cml0ZV9vbmx5IGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UsIGludCBjb29yZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaSh3cml0ZV9vbmx5IGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UsIGludCBjb29yZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHdyaXRlX29ubHkgaW1hZ2UxZF9idWZmZXJfdCBpbWFnZSwgaW50IGNvb3JkLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZih3cml0ZV9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50MiBjb29yZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaSh3cml0ZV9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50MiBjb29yZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHdyaXRlX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBpbnQyIGNvb3JkLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZih3cml0ZV9vbmx5IGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaSh3cml0ZV9vbmx5IGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHdyaXRlX29ubHkgaW1hZ2UzZF90IGltYWdlLCBpbnQ0IGNvb3JkLCB1aW50NCBjb2xvcik7CisKKyNpZmRlZiBjbF9raHJfZGVwdGhfaW1hZ2VzCit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYod3JpdGVfb25seSBpbWFnZTJkX2RlcHRoX3QgaW1hZ2UsIGludDIgY29vcmQsIGZsb2F0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZih3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSwgaW50NCBjb29yZCwgZmxvYXQgY29sb3IpOworI2VuZGlmIC8vY2xfa2hyX2RlcHRoX2ltYWdlcworCisvLyBPcGVuQ0wgRXh0ZW5zaW9uIHYyLjAgczkuMTggLSBNaXBtYXBzCisjaWZkZWYgY2xfa2hyX21pcG1hcF9pbWFnZQordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VmKHdyaXRlX29ubHkgaW1hZ2UxZF90IGltYWdlLCBpbnQgY29vcmQsIGludCBsb2QsIGZsb2F0NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWkod3JpdGVfb25seSBpbWFnZTFkX3QgaW1hZ2UsIGludCBjb29yZCwgaW50IGxvZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHdyaXRlX29ubHkgaW1hZ2UxZF90IGltYWdlLCBpbnQgY29vcmQsIGludCBsb2QsIHVpbnQ0IGNvbG9yKTsKKwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VmKHdyaXRlX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBpbnQyIGNvb3JkLCBpbnQgbG9kLCBmbG9hdDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VpKHdyaXRlX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBpbnQyIGNvb3JkLCBpbnQgbG9kLCBpbnQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdldWkod3JpdGVfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIGludDIgY29vcmQsIGludCBsb2QsIHVpbnQ0IGNvbG9yKTsKKwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VmKHdyaXRlX29ubHkgaW1hZ2UyZF90IGltYWdlLCBpbnQyIGNvb3JkLCBpbnQgbG9kLCBmbG9hdDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VpKHdyaXRlX29ubHkgaW1hZ2UyZF90IGltYWdlLCBpbnQyIGNvb3JkLCBpbnQgbG9kLCBpbnQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdldWkod3JpdGVfb25seSBpbWFnZTJkX3QgaW1hZ2UsIGludDIgY29vcmQsIGludCBsb2QsIHVpbnQ0IGNvbG9yKTsKKwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VmKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBpbnQ0IGNvb3JkLCBpbnQgbG9kLCBmbG9hdDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VpKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBpbnQ0IGNvb3JkLCBpbnQgbG9kLCBpbnQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdldWkod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIGludDQgY29vcmQsIGludCBsb2QsIHVpbnQ0IGNvbG9yKTsKKwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VmKHdyaXRlX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlLCBpbnQyIGNvb3JkLCBpbnQgbG9kLCBmbG9hdCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2UsIGludDQgY29vcmQsIGludCBsb2QsIGZsb2F0IGNvbG9yKTsKKwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VmKHdyaXRlX29ubHkgaW1hZ2UzZF90IGltYWdlLCBpbnQ0IGNvb3JkLCBpbnQgbG9kLCBmbG9hdDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VpKHdyaXRlX29ubHkgaW1hZ2UzZF90IGltYWdlLCBpbnQ0IGNvb3JkLCBpbnQgbG9kLCBpbnQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdldWkod3JpdGVfb25seSBpbWFnZTNkX3QgaW1hZ2UsIGludDQgY29vcmQsIGludCBsb2QsIHVpbnQ0IGNvbG9yKTsKKyNlbmRpZiAvL2NsX2tocl9taXBtYXBfaW1hZ2UKKworLy8gSW1hZ2Ugd3JpdGUgZnVuY3Rpb25zIGZvciBoYWxmNCB0eXBlCisjaWZkZWYgY2xfa2hyX2ZwMTYKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaCh3cml0ZV9vbmx5IGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkLCBoYWxmNCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWgod3JpdGVfb25seSBpbWFnZTJkX3QgaW1hZ2UsIGludDIgY29vcmQsIGhhbGY0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaCh3cml0ZV9vbmx5IGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCwgaGFsZjQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VoKHdyaXRlX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlLCBpbnQyIGNvb3JkLCBoYWxmNCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWgod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UsIGludDQgY29vcmQsIGhhbGY0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaCh3cml0ZV9vbmx5IGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UsIGludCBjb29yZCwgaGFsZjQgY29sb3IpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworLy8gSW1hZ2Ugd3JpdGUgZnVuY3Rpb25zIGZvciByZWFkX3dyaXRlIGltYWdlcworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTJkX3QgaW1hZ2UsIGludDIgY29vcmQsIGZsb2F0NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTJkX3QgaW1hZ2UsIGludDIgY29vcmQsIGludDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgaW50MiBjb29yZCwgdWludDQgY29sb3IpOworCit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIGludDQgY29vcmQsIGZsb2F0NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXksIGludDQgY29vcmQsIGludDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50NCBjb29yZCwgdWludDQgY29sb3IpOworCit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIGludCBjb29yZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkLCBpbnQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdldWkocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIGludCBjb29yZCwgdWludDQgY29sb3IpOworCit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTFkX2J1ZmZlcl90IGltYWdlLCBpbnQgY29vcmQsIGZsb2F0NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTFkX2J1ZmZlcl90IGltYWdlLCBpbnQgY29vcmQsIGludDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UsIGludCBjb29yZCwgdWludDQgY29sb3IpOworCit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIGludDIgY29vcmQsIGZsb2F0NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXksIGludDIgY29vcmQsIGludDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50MiBjb29yZCwgdWludDQgY29sb3IpOworCit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UsIGludDQgY29vcmQsIGZsb2F0NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWkocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UsIGludDQgY29vcmQsIGludDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCwgdWludDQgY29sb3IpOworCisjaWZkZWYgY2xfa2hyX2RlcHRoX2ltYWdlcwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VmKHJlYWRfd3JpdGUgaW1hZ2UyZF9kZXB0aF90IGltYWdlLCBpbnQyIGNvb3JkLCBmbG9hdCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWYocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2UsIGludDQgY29vcmQsIGZsb2F0IGNvbG9yKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKworI2lmZGVmIGNsX2tocl9taXBtYXBfaW1hZ2UKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkLCBpbnQgbG9kLCBmbG9hdDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VpKHJlYWRfd3JpdGUgaW1hZ2UxZF90IGltYWdlLCBpbnQgY29vcmQsIGludCBsb2QsIGludDQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2V1aShyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSwgaW50IGNvb3JkLCBpbnQgbG9kLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50MiBjb29yZCwgaW50IGxvZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50MiBjb29yZCwgaW50IGxvZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5LCBpbnQyIGNvb3JkLCBpbnQgbG9kLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgaW50MiBjb29yZCwgaW50IGxvZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSwgaW50MiBjb29yZCwgaW50IGxvZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UyZF90IGltYWdlLCBpbnQyIGNvb3JkLCBpbnQgbG9kLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50NCBjb29yZCwgaW50IGxvZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZV9hcnJheSwgaW50NCBjb29yZCwgaW50IGxvZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5LCBpbnQ0IGNvb3JkLCBpbnQgbG9kLCB1aW50NCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlMmRfZGVwdGhfdCBpbWFnZSwgaW50MiBjb29yZCwgaW50IGxvZCwgZmxvYXQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VmKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlLCBpbnQ0IGNvb3JkLCBpbnQgbG9kLCBmbG9hdCBjb2xvcik7CisKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlZihyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCwgaW50IGxvZCwgZmxvYXQ0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaShyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSwgaW50NCBjb29yZCwgaW50IGxvZCwgaW50NCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZXVpKHJlYWRfd3JpdGUgaW1hZ2UzZF90IGltYWdlLCBpbnQ0IGNvb3JkLCBpbnQgbG9kLCB1aW50NCBjb2xvcik7CisjZW5kaWYgLy9jbF9raHJfbWlwbWFwX2ltYWdlCisKKy8vIEltYWdlIHdyaXRlIGZ1bmN0aW9ucyBmb3IgaGFsZjQgdHlwZQorI2lmZGVmIGNsX2tocl9mcDE2Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWgocmVhZF93cml0ZSBpbWFnZTFkX3QgaW1hZ2UsIGludCBjb29yZCwgaGFsZjQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VoKHJlYWRfd3JpdGUgaW1hZ2UyZF90IGltYWdlLCBpbnQyIGNvb3JkLCBoYWxmNCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWgocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UsIGludDQgY29vcmQsIGhhbGY0IGNvbG9yKTsKK3ZvaWQgX19vdmxkIHdyaXRlX2ltYWdlaChyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZSwgaW50MiBjb29yZCwgaGFsZjQgY29sb3IpOwordm9pZCBfX292bGQgd3JpdGVfaW1hZ2VoKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlLCBpbnQ0IGNvb3JkLCBoYWxmNCBjb2xvcik7Cit2b2lkIF9fb3ZsZCB3cml0ZV9pbWFnZWgocmVhZF93cml0ZSBpbWFnZTFkX2J1ZmZlcl90IGltYWdlLCBpbnQgY29vcmQsIGhhbGY0IGNvbG9yKTsKKyNlbmRpZiAvL2NsX2tocl9mcDE2CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvLyBOb3RlOiBJbiBPcGVuQ0wgdjEuMC8xLjEvMS4yLCBpbWFnZSBhcmd1bWVudCBvZiBpbWFnZSBxdWVyeSBidWlsdGluIGZ1bmN0aW9ucyBkb2VzIG5vdCBoYXZlCisvLyBhY2Nlc3MgcXVhbGlmaWVyLCB3aGljaCBieSBkZWZhdWx0IGFzc3VtZSByZWFkX29ubHkgYWNjZXNzIHF1YWxpZmllci4gSW1hZ2UgcXVlcnkgYnVpbHRpbgorLy8gZnVuY3Rpb25zIHdpdGggd3JpdGVfb25seSBpbWFnZSBhcmd1bWVudCBzaG91bGQgYWxzbyBiZSBkZWNsYXJlZC4KKworLyoqCisgKiBSZXR1cm4gdGhlIGltYWdlIHdpZHRoIGluIHBpeGVscy4KKyAqCisgICovCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF9vbmx5IGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfb25seSBpbWFnZTNkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UpOworI2lmZGVmIGNsX2tocl9kZXB0aF9pbWFnZXMKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV93aWR0aChyZWFkX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV93aWR0aChyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF9vbmx5IGltYWdlMmRfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV93aWR0aChyZWFkX29ubHkgaW1hZ2UyZF9tc2FhX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9nbF9tc2FhX3NoYXJpbmcKKworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHdyaXRlX29ubHkgaW1hZ2UxZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV93aWR0aCh3cml0ZV9vbmx5IGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHdyaXRlX29ubHkgaW1hZ2UyZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV93aWR0aCh3cml0ZV9vbmx5IGltYWdlM2RfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgod3JpdGVfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlKTsKKyNpZmRlZiBjbF9raHJfZGVwdGhfaW1hZ2VzCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgod3JpdGVfb25seSBpbWFnZTJkX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgod3JpdGVfb25seSBpbWFnZTJkX21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgod3JpdGVfb25seSBpbWFnZTJkX21zYWFfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZ2xfbXNhYV9zaGFyaW5nCisKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAoraW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfd3JpdGUgaW1hZ2UxZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV93aWR0aChyZWFkX3dyaXRlIGltYWdlMWRfYnVmZmVyX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfd3JpdGUgaW1hZ2UyZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV93aWR0aChyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF93cml0ZSBpbWFnZTFkX2FycmF5X3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlKTsKKyNpZmRlZiBjbF9raHJfZGVwdGhfaW1hZ2VzCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF93cml0ZSBpbWFnZTJkX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX3dpZHRoKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF93cml0ZSBpbWFnZTJkX21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF93cml0ZSBpbWFnZTJkX21zYWFfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2Vfd2lkdGgocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZ2xfbXNhYV9zaGFyaW5nCisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvKioKKyAqIFJldHVybiB0aGUgaW1hZ2UgaGVpZ2h0IGluIHBpeGVscy4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2hlaWdodChyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfaGVpZ2h0KHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UpOworI2lmZGVmIGNsX2tocl9kZXB0aF9pbWFnZXMKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQocmVhZF9vbmx5IGltYWdlMmRfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfaGVpZ2h0KHJlYWRfb25seSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2RlcHRoX2ltYWdlcworI2lmIGRlZmluZWQoY2xfa2hyX2dsX21zYWFfc2hhcmluZykKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQocmVhZF9vbmx5IGltYWdlMmRfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQocmVhZF9vbmx5IGltYWdlMmRfbXNhYV9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9nbF9tc2FhX3NoYXJpbmcKKworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2hlaWdodCh3cml0ZV9vbmx5IGltYWdlMmRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfaGVpZ2h0KHdyaXRlX29ubHkgaW1hZ2UzZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UpOworI2lmZGVmIGNsX2tocl9kZXB0aF9pbWFnZXMKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQod3JpdGVfb25seSBpbWFnZTJkX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2hlaWdodCh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZGVwdGhfaW1hZ2VzCisjaWYgZGVmaW5lZChjbF9raHJfZ2xfbXNhYV9zaGFyaW5nKQoraW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2hlaWdodCh3cml0ZV9vbmx5IGltYWdlMmRfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQod3JpdGVfb25seSBpbWFnZTJkX21zYWFfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfaGVpZ2h0KHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2hlaWdodCh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9nbF9tc2FhX3NoYXJpbmcKKworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfaGVpZ2h0KHJlYWRfd3JpdGUgaW1hZ2UyZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2hlaWdodChyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZSk7CisjaWZkZWYgY2xfa2hyX2RlcHRoX2ltYWdlcworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2hlaWdodChyZWFkX3dyaXRlIGltYWdlMmRfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfaGVpZ2h0KHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfaGVpZ2h0KHJlYWRfd3JpdGUgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2hlaWdodChyZWFkX3dyaXRlIGltYWdlMmRfbXNhYV9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9oZWlnaHQocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfaGVpZ2h0KHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2dsX21zYWFfc2hhcmluZworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLyoqCisgKiBSZXR1cm4gdGhlIGltYWdlIGRlcHRoIGluIHBpeGVscy4KKyAqLworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RlcHRoKHJlYWRfb25seSBpbWFnZTNkX3QgaW1hZ2UpOworCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGVwdGgod3JpdGVfb25seSBpbWFnZTNkX3QgaW1hZ2UpOworCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kZXB0aChyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSk7CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCisvLyBPcGVuQ0wgRXh0ZW5zaW9uIHYyLjAgczkuMTggLSBNaXBtYXBzCisjaWZkZWYgY2xfa2hyX21pcG1hcF9pbWFnZQorLyoqCisgKiBSZXR1cm4gdGhlIGltYWdlIG1pcGxldmVscy4KKyAqLworCitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fbWlwX2xldmVscyhyZWFkX29ubHkgaW1hZ2UxZF90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHJlYWRfb25seSBpbWFnZTJkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX21pcF9sZXZlbHMocmVhZF9vbmx5IGltYWdlM2RfdCBpbWFnZSk7CisKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHdyaXRlX29ubHkgaW1hZ2UxZF90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHdyaXRlX29ubHkgaW1hZ2UyZF90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHdyaXRlX29ubHkgaW1hZ2UzZF90IGltYWdlKTsKKworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fbWlwX2xldmVscyhyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSk7CitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fbWlwX2xldmVscyhyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSk7CitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fbWlwX2xldmVscyhyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSk7CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorCitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fbWlwX2xldmVscyhyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX21pcF9sZXZlbHMocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fbWlwX2xldmVscyhyZWFkX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlKTsKKworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX21pcF9sZXZlbHMod3JpdGVfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX21pcF9sZXZlbHMod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX21pcF9sZXZlbHMod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX21pcF9sZXZlbHMod3JpdGVfb25seSBpbWFnZTJkX2RlcHRoX3QgaW1hZ2UpOworCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHJlYWRfd3JpdGUgaW1hZ2UxZF9hcnJheV90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9taXBfbGV2ZWxzKHJlYWRfd3JpdGUgaW1hZ2UyZF9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKyNlbmRpZiAvL2NsX2tocl9taXBtYXBfaW1hZ2UKKworLyoqCisgKiBSZXR1cm4gdGhlIGNoYW5uZWwgZGF0YSB0eXBlLiBWYWxpZCB2YWx1ZXMgYXJlOgorICogQ0xLX1NOT1JNX0lOVDgKKyAqIENMS19TTk9STV9JTlQxNgorICogQ0xLX1VOT1JNX0lOVDgKKyAqIENMS19VTk9STV9JTlQxNgorICogQ0xLX1VOT1JNX1NIT1JUXzU2NQorICogQ0xLX1VOT1JNX1NIT1JUXzU1NQorICogQ0xLX1VOT1JNX1NIT1JUXzEwMTAxMAorICogQ0xLX1NJR05FRF9JTlQ4CisgKiBDTEtfU0lHTkVEX0lOVDE2CisgKiBDTEtfU0lHTkVEX0lOVDMyCisgKiBDTEtfVU5TSUdORURfSU5UOAorICogQ0xLX1VOU0lHTkVEX0lOVDE2CisgKiBDTEtfVU5TSUdORURfSU5UMzIKKyAqIENMS19IQUxGX0ZMT0FUCisgKiBDTEtfRkxPQVQKKyAqLworCisvLworLy8gQ2hhbm5lbCBEYXRhdHlwZS4KKy8vCisjZGVmaW5lIENMS19TTk9STV9JTlQ4ICAgICAgICAweDEwRDAKKyNkZWZpbmUgQ0xLX1NOT1JNX0lOVDE2ICAgICAgIDB4MTBEMQorI2RlZmluZSBDTEtfVU5PUk1fSU5UOCAgICAgICAgMHgxMEQyCisjZGVmaW5lIENMS19VTk9STV9JTlQxNiAgICAgICAweDEwRDMKKyNkZWZpbmUgQ0xLX1VOT1JNX1NIT1JUXzU2NSAgIDB4MTBENAorI2RlZmluZSBDTEtfVU5PUk1fU0hPUlRfNTU1ICAgMHgxMEQ1CisjZGVmaW5lIENMS19VTk9STV9JTlRfMTAxMDEwICAweDEwRDYKKyNkZWZpbmUgQ0xLX1NJR05FRF9JTlQ4ICAgICAgIDB4MTBENworI2RlZmluZSBDTEtfU0lHTkVEX0lOVDE2ICAgICAgMHgxMEQ4CisjZGVmaW5lIENMS19TSUdORURfSU5UMzIgICAgICAweDEwRDkKKyNkZWZpbmUgQ0xLX1VOU0lHTkVEX0lOVDggICAgIDB4MTBEQQorI2RlZmluZSBDTEtfVU5TSUdORURfSU5UMTYgICAgMHgxMERCCisjZGVmaW5lIENMS19VTlNJR05FRF9JTlQzMiAgICAweDEwREMKKyNkZWZpbmUgQ0xLX0hBTEZfRkxPQVQgICAgICAgIDB4MTBERAorI2RlZmluZSBDTEtfRkxPQVQgICAgICAgICAgICAgMHgxMERFCisjZGVmaW5lIENMS19VTk9STV9JTlQyNCAgICAgICAweDEwREYKKworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfb25seSBpbWFnZTFkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfb25seSBpbWFnZTFkX2J1ZmZlcl90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlKTsKKyNpZmRlZiBjbF9raHJfZGVwdGhfaW1hZ2VzCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUocmVhZF9vbmx5IGltYWdlMmRfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZGVwdGhfaW1hZ2VzCisjaWYgZGVmaW5lZChjbF9raHJfZ2xfbXNhYV9zaGFyaW5nKQoraW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfb25seSBpbWFnZTJkX21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUocmVhZF9vbmx5IGltYWdlMmRfbXNhYV9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZ2xfbXNhYV9zaGFyaW5nCisKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZSh3cml0ZV9vbmx5IGltYWdlMWRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUod3JpdGVfb25seSBpbWFnZTFkX2J1ZmZlcl90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZSh3cml0ZV9vbmx5IGltYWdlMmRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUod3JpdGVfb25seSBpbWFnZTNkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHdyaXRlX29ubHkgaW1hZ2UxZF9hcnJheV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZSh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZSk7CisjaWZkZWYgY2xfa2hyX2RlcHRoX2ltYWdlcworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHdyaXRlX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZSh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZGVwdGhfaW1hZ2VzCisjaWYgZGVmaW5lZChjbF9raHJfZ2xfbXNhYV9zaGFyaW5nKQoraW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHdyaXRlX29ubHkgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHdyaXRlX29ubHkgaW1hZ2UyZF9tc2FhX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2dsX21zYWFfc2hhcmluZworCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX3dyaXRlIGltYWdlMWRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUocmVhZF93cml0ZSBpbWFnZTFkX2J1ZmZlcl90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfd3JpdGUgaW1hZ2UxZF9hcnJheV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZSk7CisjaWZkZWYgY2xfa2hyX2RlcHRoX2ltYWdlcworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfd3JpdGUgaW1hZ2UyZF9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX2RhdGFfdHlwZShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZGVwdGhfaW1hZ2VzCisjaWYgZGVmaW5lZChjbF9raHJfZ2xfbXNhYV9zaGFyaW5nKQoraW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfd3JpdGUgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfd3JpdGUgaW1hZ2UyZF9tc2FhX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfZGF0YV90eXBlKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2dsX21zYWFfc2hhcmluZworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLyoqCisgKiBSZXR1cm4gdGhlIGltYWdlIGNoYW5uZWwgb3JkZXIuIFZhbGlkIHZhbHVlcyBhcmU6CisgKiBDTEtfQQorICogQ0xLX1IKKyAqIENMS19SeAorICogQ0xLX1JHCisgKiBDTEtfUkd4CisgKiBDTEtfUkEKKyAqIENMS19SR0IKKyAqIENMS19SR0J4CisgKiBDTEtfUkdCQQorICogQ0xLX0FSR0IKKyAqIENMS19CR1JBCisgKiBDTEtfSU5URU5TSVRZCisgKiBDTEtfTFVNSU5BTkNFCisgKi8KKy8vIENoYW5uZWwgb3JkZXIsIG51bWJlcmluZyBtdXN0IGJlIGFsaWduZWQgd2l0aCBjbF9jaGFubmVsX29yZGVyIGluIGNsLmgKKy8vCisjZGVmaW5lIENMS19SICAgICAgICAgMHgxMEIwCisjZGVmaW5lIENMS19BICAgICAgICAgMHgxMEIxCisjZGVmaW5lIENMS19SRyAgICAgICAgMHgxMEIyCisjZGVmaW5lIENMS19SQSAgICAgICAgMHgxMEIzCisjZGVmaW5lIENMS19SR0IgICAgICAgMHgxMEI0CisjZGVmaW5lIENMS19SR0JBICAgICAgMHgxMEI1CisjZGVmaW5lIENMS19CR1JBICAgICAgMHgxMEI2CisjZGVmaW5lIENMS19BUkdCICAgICAgMHgxMEI3CisjZGVmaW5lIENMS19JTlRFTlNJVFkgMHgxMEI4CisjZGVmaW5lIENMS19MVU1JTkFOQ0UgMHgxMEI5CisjZGVmaW5lIENMS19SeCAgICAgICAgICAgICAgICAweDEwQkEKKyNkZWZpbmUgQ0xLX1JHeCAgICAgICAgICAgICAgIDB4MTBCQgorI2RlZmluZSBDTEtfUkdCeCAgICAgICAgICAgICAgMHgxMEJDCisjZGVmaW5lIENMS19ERVBUSCAgICAgICAgICAgICAweDEwQkQKKyNkZWZpbmUgQ0xLX0RFUFRIX1NURU5DSUwgICAgIDB4MTBCRQorI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisjZGVmaW5lIENMS19zUkdCICAgICAgICAgICAgICAweDEwQkYKKyNkZWZpbmUgQ0xLX3NSR0JBICAgICAgICAgICAgIDB4MTBDMQorI2RlZmluZSBDTEtfc1JHQnggICAgICAgICAgICAgMHgxMEMwCisjZGVmaW5lIENMS19zQkdSQSAgICAgICAgICAgICAweDEwQzIKKyNkZWZpbmUgQ0xLX0FCR1IgICAgICAgICAgICAgIDB4MTBDMworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIocmVhZF9vbmx5IGltYWdlMWRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX29ubHkgaW1hZ2UxZF9idWZmZXJfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX29ubHkgaW1hZ2UyZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHJlYWRfb25seSBpbWFnZTNkX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIocmVhZF9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlKTsKKyNpZmRlZiBjbF9raHJfZGVwdGhfaW1hZ2VzCitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX29ubHkgaW1hZ2UyZF9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2RlcHRoX2ltYWdlcworI2lmIGRlZmluZWQoY2xfa2hyX2dsX21zYWFfc2hhcmluZykKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHJlYWRfb25seSBpbWFnZTJkX21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX29ubHkgaW1hZ2UyZF9tc2FhX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZ2xfbXNhYV9zaGFyaW5nCisKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHdyaXRlX29ubHkgaW1hZ2UxZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHdyaXRlX29ubHkgaW1hZ2UxZF9idWZmZXJfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcih3cml0ZV9vbmx5IGltYWdlMmRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcih3cml0ZV9vbmx5IGltYWdlM2RfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcih3cml0ZV9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcih3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfdCBpbWFnZSk7CisjaWZkZWYgY2xfa2hyX2RlcHRoX2ltYWdlcworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIod3JpdGVfb25seSBpbWFnZTJkX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2RlcHRoX2ltYWdlcworI2lmIGRlZmluZWQoY2xfa2hyX2dsX21zYWFfc2hhcmluZykKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHdyaXRlX29ubHkgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIod3JpdGVfb25seSBpbWFnZTJkX21zYWFfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcih3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2dsX21zYWFfc2hhcmluZworCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHJlYWRfd3JpdGUgaW1hZ2UxZF90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHJlYWRfd3JpdGUgaW1hZ2UxZF9idWZmZXJfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX3dyaXRlIGltYWdlMmRfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX3dyaXRlIGltYWdlM2RfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX3dyaXRlIGltYWdlMWRfYXJyYXlfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfdCBpbWFnZSk7CisjaWZkZWYgY2xfa2hyX2RlcHRoX2ltYWdlcworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIocmVhZF93cml0ZSBpbWFnZTJkX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2RlcHRoX2ltYWdlcworI2lmIGRlZmluZWQoY2xfa2hyX2dsX21zYWFfc2hhcmluZykKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHJlYWRfd3JpdGUgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2NoYW5uZWxfb3JkZXIocmVhZF93cml0ZSBpbWFnZTJkX21zYWFfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfY2hhbm5lbF9vcmRlcihyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9jaGFubmVsX29yZGVyKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2dsX21zYWFfc2hhcmluZworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLyoqCisgKiBSZXR1cm4gdGhlIDJEIGltYWdlIHdpZHRoIGFuZCBoZWlnaHQgYXMgYW4gaW50MgorICogdHlwZS4gVGhlIHdpZHRoIGlzIHJldHVybmVkIGluIHRoZSB4IGNvbXBvbmVudCwgYW5kCisgKiB0aGUgaGVpZ2h0IGluIHRoZSB5IGNvbXBvbmVudC4KKyAqLworaW50MiBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0ocmVhZF9vbmx5IGltYWdlMmRfdCBpbWFnZSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlKTsKKyNpZmRlZiBjbF9raHJfZGVwdGhfaW1hZ2VzCitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlKTsKK2ludDIgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHJlYWRfb25seSBpbWFnZTJkX2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vY2xfa2hyX2RlcHRoX2ltYWdlcworI2lmIGRlZmluZWQoY2xfa2hyX2dsX21zYWFfc2hhcmluZykKK2ludDIgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHJlYWRfb25seSBpbWFnZTJkX21zYWFfdCBpbWFnZSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbShyZWFkX29ubHkgaW1hZ2UyZF9tc2FhX2RlcHRoX3QgaW1hZ2UpOworaW50MiBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0ocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlKTsKK2ludDIgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZ2xfbXNhYV9zaGFyaW5nCisKK2ludDIgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHdyaXRlX29ubHkgaW1hZ2UyZF90IGltYWdlKTsKK2ludDIgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlKTsKKyNpZmRlZiBjbF9raHJfZGVwdGhfaW1hZ2VzCitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbSh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbSh3cml0ZV9vbmx5IGltYWdlMmRfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZGVwdGhfaW1hZ2VzCisjaWYgZGVmaW5lZChjbF9raHJfZ2xfbXNhYV9zaGFyaW5nKQoraW50MiBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0od3JpdGVfb25seSBpbWFnZTJkX21zYWFfdCBpbWFnZSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbSh3cml0ZV9vbmx5IGltYWdlMmRfbXNhYV9kZXB0aF90IGltYWdlKTsKK2ludDIgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2UpOworaW50MiBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0od3JpdGVfb25seSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZSk7CisjZW5kaWYgLy9jbF9raHJfZ2xfbXNhYV9zaGFyaW5nCisKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAoraW50MiBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0ocmVhZF93cml0ZSBpbWFnZTJkX3QgaW1hZ2UpOworaW50MiBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0ocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X3QgaW1hZ2UpOworI2lmZGVmIGNsX2tocl9kZXB0aF9pbWFnZXMKK2ludDIgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlKTsKK2ludDIgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHJlYWRfd3JpdGUgaW1hZ2UyZF9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbShyZWFkX3dyaXRlIGltYWdlMmRfbXNhYV90IGltYWdlKTsKK2ludDIgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHJlYWRfd3JpdGUgaW1hZ2UyZF9tc2FhX2RlcHRoX3QgaW1hZ2UpOworaW50MiBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0ocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZSk7CitpbnQyIF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfbXNhYV9kZXB0aF90IGltYWdlKTsKKyNlbmRpZiAvL2NsX2tocl9nbF9tc2FhX3NoYXJpbmcKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8qKgorICogUmV0dXJuIHRoZSAzRCBpbWFnZSB3aWR0aCwgaGVpZ2h0LCBhbmQgZGVwdGggYXMgYW4KKyAqIGludDQgdHlwZS4gVGhlIHdpZHRoIGlzIHJldHVybmVkIGluIHRoZSB4CisgKiBjb21wb25lbnQsIGhlaWdodCBpbiB0aGUgeSBjb21wb25lbnQsIGRlcHRoIGluIHRoZSB6CisgKiBjb21wb25lbnQgYW5kIHRoZSB3IGNvbXBvbmVudCBpcyAwLgorICovCitpbnQ0IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2RpbShyZWFkX29ubHkgaW1hZ2UzZF90IGltYWdlKTsKK2ludDQgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfZGltKHdyaXRlX29ubHkgaW1hZ2UzZF90IGltYWdlKTsKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAoraW50NCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9kaW0ocmVhZF93cml0ZSBpbWFnZTNkX3QgaW1hZ2UpOworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLyoqCisgKiBSZXR1cm4gdGhlIGltYWdlIGFycmF5IHNpemUuCisgKi8KKworc2l6ZV90IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2FycmF5X3NpemUocmVhZF9vbmx5IGltYWdlMWRfYXJyYXlfdCBpbWFnZV9hcnJheSk7CitzaXplX3QgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfYXJyYXlfc2l6ZShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5KTsKKyNpZmRlZiBjbF9raHJfZGVwdGhfaW1hZ2VzCitzaXplX3QgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfYXJyYXlfc2l6ZShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlX2FycmF5KTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitzaXplX3QgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfYXJyYXlfc2l6ZShyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2VfYXJyYXkpOworc2l6ZV90IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2FycmF5X3NpemUocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV9kZXB0aF90IGltYWdlX2FycmF5KTsKKyNlbmRpZiAvL2NsX2tocl9nbF9tc2FhX3NoYXJpbmcKKworc2l6ZV90IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2FycmF5X3NpemUod3JpdGVfb25seSBpbWFnZTFkX2FycmF5X3QgaW1hZ2VfYXJyYXkpOworc2l6ZV90IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2FycmF5X3NpemUod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X3QgaW1hZ2VfYXJyYXkpOworI2lmZGVmIGNsX2tocl9kZXB0aF9pbWFnZXMKK3NpemVfdCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9hcnJheV9zaXplKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV9kZXB0aF90IGltYWdlX2FycmF5KTsKKyNlbmRpZiAvL2NsX2tocl9kZXB0aF9pbWFnZXMKKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitzaXplX3QgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfYXJyYXlfc2l6ZSh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlX2FycmF5KTsKK3NpemVfdCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9hcnJheV9zaXplKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2VfYXJyYXkpOworI2VuZGlmIC8vY2xfa2hyX2dsX21zYWFfc2hhcmluZworCisjaWYgX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKK3NpemVfdCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9hcnJheV9zaXplKHJlYWRfd3JpdGUgaW1hZ2UxZF9hcnJheV90IGltYWdlX2FycmF5KTsKK3NpemVfdCBfX292bGQgX19jbmZuIGdldF9pbWFnZV9hcnJheV9zaXplKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV90IGltYWdlX2FycmF5KTsKKyNpZmRlZiBjbF9raHJfZGVwdGhfaW1hZ2VzCitzaXplX3QgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfYXJyYXlfc2l6ZShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfZGVwdGhfdCBpbWFnZV9hcnJheSk7CisjZW5kaWYgLy9jbF9raHJfZGVwdGhfaW1hZ2VzCisjaWYgZGVmaW5lZChjbF9raHJfZ2xfbXNhYV9zaGFyaW5nKQorc2l6ZV90IF9fb3ZsZCBfX2NuZm4gZ2V0X2ltYWdlX2FycmF5X3NpemUocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZV9hcnJheSk7CitzaXplX3QgX19vdmxkIF9fY25mbiBnZXRfaW1hZ2VfYXJyYXlfc2l6ZShyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfbXNhYV9kZXB0aF90IGltYWdlX2FycmF5KTsKKyNlbmRpZiAvL2NsX2tocl9nbF9tc2FhX3NoYXJpbmcKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8qKgorKiBSZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIGFzc29jaWF0ZWQgd2l0aCBpbWFnZQorKi8KKyNpZiBkZWZpbmVkKGNsX2tocl9nbF9tc2FhX3NoYXJpbmcpCitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fc2FtcGxlcyhyZWFkX29ubHkgaW1hZ2UyZF9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX3NhbXBsZXMocmVhZF9vbmx5IGltYWdlMmRfbXNhYV9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9zYW1wbGVzKHJlYWRfb25seSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fc2FtcGxlcyhyZWFkX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX3NhbXBsZXMocmVhZF9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV9kZXB0aF90IGltYWdlKTsKKworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX3NhbXBsZXMod3JpdGVfb25seSBpbWFnZTJkX21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fc2FtcGxlcyh3cml0ZV9vbmx5IGltYWdlMmRfbXNhYV9kZXB0aF90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9zYW1wbGVzKHdyaXRlX29ubHkgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX3NhbXBsZXMod3JpdGVfb25seSBpbWFnZTJkX2FycmF5X21zYWFfdCBpbWFnZSk7CitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fc2FtcGxlcyh3cml0ZV9vbmx5IGltYWdlMmRfYXJyYXlfbXNhYV9kZXB0aF90IGltYWdlKTsKKworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fc2FtcGxlcyhyZWFkX3dyaXRlIGltYWdlMmRfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9zYW1wbGVzKHJlYWRfd3JpdGUgaW1hZ2UyZF9tc2FhX2RlcHRoX3QgaW1hZ2UpOworaW50IF9fb3ZsZCBnZXRfaW1hZ2VfbnVtX3NhbXBsZXMocmVhZF93cml0ZSBpbWFnZTJkX2FycmF5X21zYWFfZGVwdGhfdCBpbWFnZSk7CitpbnQgX19vdmxkIGdldF9pbWFnZV9udW1fc2FtcGxlcyhyZWFkX3dyaXRlIGltYWdlMmRfYXJyYXlfbXNhYV90IGltYWdlKTsKK2ludCBfX292bGQgZ2V0X2ltYWdlX251bV9zYW1wbGVzKHJlYWRfd3JpdGUgaW1hZ2UyZF9hcnJheV9tc2FhX2RlcHRoX3QgaW1hZ2UpOworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKyNlbmRpZgorCisvLyBPcGVuQ0wgdjIuMCBzNi4xMy4xNSAtIFdvcmstZ3JvdXAgRnVuY3Rpb25zCisKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAoraW50IF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9hbGwoaW50IHByZWRpY2F0ZSk7CitpbnQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX2FueShpbnQgcHJlZGljYXRlKTsKKworI2lmZGVmIGNsX2tocl9mcDE2CitoYWxmIF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9icm9hZGNhc3QoaGFsZiBhLCBzaXplX3QgbG9jYWxfaWQpOworaGFsZiBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfYnJvYWRjYXN0KGhhbGYgYSwgc2l6ZV90IHgsIHNpemVfdCB5KTsKK2hhbGYgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX2Jyb2FkY2FzdChoYWxmIGEsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHopOworI2VuZGlmCitpbnQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX2Jyb2FkY2FzdChpbnQgYSwgc2l6ZV90IGxvY2FsX2lkKTsKK2ludCBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfYnJvYWRjYXN0KGludCBhLCBzaXplX3QgeCwgc2l6ZV90IHkpOworaW50IF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9icm9hZGNhc3QoaW50IGEsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHopOwordWludCBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfYnJvYWRjYXN0KHVpbnQgYSwgc2l6ZV90IGxvY2FsX2lkKTsKK3VpbnQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX2Jyb2FkY2FzdCh1aW50IGEsIHNpemVfdCB4LCBzaXplX3QgeSk7Cit1aW50IF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9icm9hZGNhc3QodWludCBhLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB6KTsKK2xvbmcgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX2Jyb2FkY2FzdChsb25nIGEsIHNpemVfdCBsb2NhbF9pZCk7Citsb25nIF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9icm9hZGNhc3QobG9uZyBhLCBzaXplX3QgeCwgc2l6ZV90IHkpOworbG9uZyBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfYnJvYWRjYXN0KGxvbmcgYSwgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgeik7Cit1bG9uZyBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfYnJvYWRjYXN0KHVsb25nIGEsIHNpemVfdCBsb2NhbF9pZCk7Cit1bG9uZyBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfYnJvYWRjYXN0KHVsb25nIGEsIHNpemVfdCB4LCBzaXplX3QgeSk7Cit1bG9uZyBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfYnJvYWRjYXN0KHVsb25nIGEsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHopOworZmxvYXQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX2Jyb2FkY2FzdChmbG9hdCBhLCBzaXplX3QgbG9jYWxfaWQpOworZmxvYXQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX2Jyb2FkY2FzdChmbG9hdCBhLCBzaXplX3QgeCwgc2l6ZV90IHkpOworZmxvYXQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX2Jyb2FkY2FzdChmbG9hdCBhLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB6KTsKKyNpZmRlZiBjbF9raHJfZnA2NAorZG91YmxlIF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9icm9hZGNhc3QoZG91YmxlIGEsIHNpemVfdCBsb2NhbF9pZCk7Citkb3VibGUgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX2Jyb2FkY2FzdChkb3VibGUgYSwgc2l6ZV90IHgsIHNpemVfdCB5KTsKK2RvdWJsZSBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfYnJvYWRjYXN0KGRvdWJsZSBhLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB6KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisKKyNpZmRlZiBjbF9raHJfZnAxNgoraGFsZiBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfcmVkdWNlX2FkZChoYWxmIHgpOworaGFsZiBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfcmVkdWNlX21pbihoYWxmIHgpOworaGFsZiBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfcmVkdWNlX21heChoYWxmIHgpOworaGFsZiBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfYWRkKGhhbGYgeCk7CitoYWxmIF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9zY2FuX2V4Y2x1c2l2ZV9taW4oaGFsZiB4KTsKK2hhbGYgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21heChoYWxmIHgpOworaGFsZiBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfYWRkKGhhbGYgeCk7CitoYWxmIF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9zY2FuX2luY2x1c2l2ZV9taW4oaGFsZiB4KTsKK2hhbGYgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX21heChoYWxmIHgpOworI2VuZGlmCitpbnQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3JlZHVjZV9hZGQoaW50IHgpOworaW50IF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9yZWR1Y2VfbWluKGludCB4KTsKK2ludCBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfcmVkdWNlX21heChpbnQgeCk7CitpbnQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX2FkZChpbnQgeCk7CitpbnQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21pbihpbnQgeCk7CitpbnQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21heChpbnQgeCk7CitpbnQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX2FkZChpbnQgeCk7CitpbnQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX21pbihpbnQgeCk7CitpbnQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX21heChpbnQgeCk7Cit1aW50IF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9yZWR1Y2VfYWRkKHVpbnQgeCk7Cit1aW50IF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9yZWR1Y2VfbWluKHVpbnQgeCk7Cit1aW50IF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9yZWR1Y2VfbWF4KHVpbnQgeCk7Cit1aW50IF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9zY2FuX2V4Y2x1c2l2ZV9hZGQodWludCB4KTsKK3VpbnQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21pbih1aW50IHgpOwordWludCBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWF4KHVpbnQgeCk7Cit1aW50IF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9zY2FuX2luY2x1c2l2ZV9hZGQodWludCB4KTsKK3VpbnQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX21pbih1aW50IHgpOwordWludCBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWF4KHVpbnQgeCk7Citsb25nIF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9yZWR1Y2VfYWRkKGxvbmcgeCk7Citsb25nIF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9yZWR1Y2VfbWluKGxvbmcgeCk7Citsb25nIF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9yZWR1Y2VfbWF4KGxvbmcgeCk7Citsb25nIF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9zY2FuX2V4Y2x1c2l2ZV9hZGQobG9uZyB4KTsKK2xvbmcgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21pbihsb25nIHgpOworbG9uZyBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWF4KGxvbmcgeCk7Citsb25nIF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9zY2FuX2luY2x1c2l2ZV9hZGQobG9uZyB4KTsKK2xvbmcgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX21pbihsb25nIHgpOworbG9uZyBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWF4KGxvbmcgeCk7Cit1bG9uZyBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfcmVkdWNlX2FkZCh1bG9uZyB4KTsKK3Vsb25nIF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9yZWR1Y2VfbWluKHVsb25nIHgpOwordWxvbmcgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3JlZHVjZV9tYXgodWxvbmcgeCk7Cit1bG9uZyBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfYWRkKHVsb25nIHgpOwordWxvbmcgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21pbih1bG9uZyB4KTsKK3Vsb25nIF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9zY2FuX2V4Y2x1c2l2ZV9tYXgodWxvbmcgeCk7Cit1bG9uZyBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfYWRkKHVsb25nIHgpOwordWxvbmcgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX21pbih1bG9uZyB4KTsKK3Vsb25nIF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9zY2FuX2luY2x1c2l2ZV9tYXgodWxvbmcgeCk7CitmbG9hdCBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfcmVkdWNlX2FkZChmbG9hdCB4KTsKK2Zsb2F0IF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9yZWR1Y2VfbWluKGZsb2F0IHgpOworZmxvYXQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3JlZHVjZV9tYXgoZmxvYXQgeCk7CitmbG9hdCBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfYWRkKGZsb2F0IHgpOworZmxvYXQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21pbihmbG9hdCB4KTsKK2Zsb2F0IF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9zY2FuX2V4Y2x1c2l2ZV9tYXgoZmxvYXQgeCk7CitmbG9hdCBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfYWRkKGZsb2F0IHgpOworZmxvYXQgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3NjYW5faW5jbHVzaXZlX21pbihmbG9hdCB4KTsKK2Zsb2F0IF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9zY2FuX2luY2x1c2l2ZV9tYXgoZmxvYXQgeCk7CisjaWZkZWYgY2xfa2hyX2ZwNjQKK2RvdWJsZSBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfcmVkdWNlX2FkZChkb3VibGUgeCk7Citkb3VibGUgX19vdmxkIF9fY29udiB3b3JrX2dyb3VwX3JlZHVjZV9taW4oZG91YmxlIHgpOworZG91YmxlIF9fb3ZsZCBfX2NvbnYgd29ya19ncm91cF9yZWR1Y2VfbWF4KGRvdWJsZSB4KTsKK2RvdWJsZSBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfYWRkKGRvdWJsZSB4KTsKK2RvdWJsZSBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWluKGRvdWJsZSB4KTsKK2RvdWJsZSBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWF4KGRvdWJsZSB4KTsKK2RvdWJsZSBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfYWRkKGRvdWJsZSB4KTsKK2RvdWJsZSBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWluKGRvdWJsZSB4KTsKK2RvdWJsZSBfX292bGQgX19jb252IHdvcmtfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWF4KGRvdWJsZSB4KTsKKyNlbmRpZiAvL2NsX2tocl9mcDY0CisKKyNlbmRpZiAvL19fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKy8vIE9wZW5DTCB2Mi4wIHM2LjEzLjE2IC0gUGlwZSBGdW5jdGlvbnMKKyNpZiBfX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAorI2RlZmluZSBQSVBFX1JFU0VSVkVfSURfVkFMSURfQklUICgxVSA8PCAzMCkKKyNkZWZpbmUgQ0xLX05VTExfUkVTRVJWRV9JRCAoX19idWlsdGluX2FzdHlwZSgoKHZvaWQqKShfX1NJWkVfTUFYX18pKSwgcmVzZXJ2ZV9pZF90KSkKK2Jvb2wgX19vdmxkIGlzX3ZhbGlkX3Jlc2VydmVfaWQocmVzZXJ2ZV9pZF90IHJlc2VydmVfaWQpOworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworCisvLyBPcGVuQ0wgdjIuMCBzNi4xMy4xNyAtIEVucXVldWUgS2VybmVscworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCisKKyNkZWZpbmUgQ0xfQ09NUExFVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgQ0xfUlVOTklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgQ0xfU1VCTUlUVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgQ0xfUVVFVUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMKKworI2RlZmluZSBDTEtfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ0xLX0VOUVVFVUVfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAtMTAxCisjZGVmaW5lIENMS19JTlZBTElEX1FVRVVFICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwMgorI2RlZmluZSBDTEtfSU5WQUxJRF9ORFJBTkdFICAgICAgICAgICAgICAgICAgICAgICAgIC0xNjAKKyNkZWZpbmUgQ0xLX0lOVkFMSURfRVZFTlRfV0FJVF9MSVNUICAgICAgICAgICAgICAgICAtNTcKKyNkZWZpbmUgQ0xLX0RFVklDRV9RVUVVRV9GVUxMICAgICAgICAgICAgICAgICAgICAgICAtMTYxCisjZGVmaW5lIENMS19JTlZBTElEX0FSR19TSVpFICAgICAgICAgICAgICAgICAgICAgICAgLTUxCisjZGVmaW5lIENMS19FVkVOVF9BTExPQ0FUSU9OX0ZBSUxVUkUgICAgICAgICAgICAgICAgLTEwMAorI2RlZmluZSBDTEtfT1VUX09GX1JFU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgIC01CisKKyNkZWZpbmUgQ0xLX05VTExfUVVFVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENMS19OVUxMX0VWRU5UIChfX2J1aWx0aW5fYXN0eXBlKCgodm9pZCopKF9fU0laRV9NQVhfXykpLCBjbGtfZXZlbnRfdCkpCisKKy8vIGV4ZWN1dGlvbiBtb2RlbCByZWxhdGVkIGRlZmluaXRpb25zCisjZGVmaW5lIENMS19FTlFVRVVFX0ZMQUdTX05PX1dBSVQgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIENMS19FTlFVRVVFX0ZMQUdTX1dBSVRfS0VSTkVMICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIENMS19FTlFVRVVFX0ZMQUdTX1dBSVRfV09SS19HUk9VUCAgICAgICAgICAgMHgyCisKK3R5cGVkZWYgaW50IGtlcm5lbF9lbnF1ZXVlX2ZsYWdzX3Q7Cit0eXBlZGVmIGludCBjbGtfcHJvZmlsaW5nX2luZm87CisKKy8vIFByb2ZpbGluZyBpbmZvIG5hbWUgKHNlZSBjYXB0dXJlX2V2ZW50X3Byb2ZpbGluZ19pbmZvKQorI2RlZmluZSBDTEtfUFJPRklMSU5HX0NPTU1BTkRfRVhFQ19USU1FIDB4MQorCisjZGVmaW5lIE1BWF9XT1JLX0RJTSAgICAgICAgMworCisvLyBUb0RvOiBSZW1vdmUgZGVmaW5pdGlvbiBvZiBuZHJhbmdlX3QgaW4gQ2xhbmcgYXMgYW4gb3BhcXVlIHR5cGUgYW5kIGFkZCBiYWNrCisvLyB0aGUgZm9sbG93aW5nIG5kcmFuZ2VfdCBkZWZpbml0aW9uLgorI2lmIDAKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBpbnQgd29ya0RpbWVuc2lvbjsKKyAgICBzaXplX3QgZ2xvYmFsV29ya09mZnNldFtNQVhfV09SS19ESU1dOworICAgIHNpemVfdCBnbG9iYWxXb3JrU2l6ZVtNQVhfV09SS19ESU1dOworICAgIHNpemVfdCBsb2NhbFdvcmtTaXplW01BWF9XT1JLX0RJTV07Cit9IG5kcmFuZ2VfdDsKKyNlbmRpZgorCituZHJhbmdlX3QgX19vdmxkIG5kcmFuZ2VfMUQoc2l6ZV90KTsKK25kcmFuZ2VfdCBfX292bGQgbmRyYW5nZV8xRChzaXplX3QsIHNpemVfdCk7CituZHJhbmdlX3QgX19vdmxkIG5kcmFuZ2VfMUQoc2l6ZV90LCBzaXplX3QsIHNpemVfdCk7CisKK25kcmFuZ2VfdCBfX292bGQgbmRyYW5nZV8yRChjb25zdCBzaXplX3RbMl0pOworbmRyYW5nZV90IF9fb3ZsZCBuZHJhbmdlXzJEKGNvbnN0IHNpemVfdFsyXSwgY29uc3Qgc2l6ZV90WzJdKTsKK25kcmFuZ2VfdCBfX292bGQgbmRyYW5nZV8yRChjb25zdCBzaXplX3RbMl0sIGNvbnN0IHNpemVfdFsyXSwgY29uc3Qgc2l6ZV90WzJdKTsKKworbmRyYW5nZV90IF9fb3ZsZCBuZHJhbmdlXzNEKGNvbnN0IHNpemVfdFszXSk7CituZHJhbmdlX3QgX19vdmxkIG5kcmFuZ2VfM0QoY29uc3Qgc2l6ZV90WzNdLCBjb25zdCBzaXplX3RbM10pOworbmRyYW5nZV90IF9fb3ZsZCBuZHJhbmdlXzNEKGNvbnN0IHNpemVfdFszXSwgY29uc3Qgc2l6ZV90WzNdLCBjb25zdCBzaXplX3RbM10pOworCitpbnQgX19vdmxkIGVucXVldWVfbWFya2VyKHF1ZXVlX3QsIHVpbnQsIGNvbnN0IF9fcHJpdmF0ZSBjbGtfZXZlbnRfdCosIF9fcHJpdmF0ZSBjbGtfZXZlbnRfdCopOworCit2b2lkIF9fb3ZsZCByZXRhaW5fZXZlbnQoY2xrX2V2ZW50X3QpOworCit2b2lkIF9fb3ZsZCByZWxlYXNlX2V2ZW50KGNsa19ldmVudF90KTsKKworY2xrX2V2ZW50X3QgX19vdmxkIGNyZWF0ZV91c2VyX2V2ZW50KHZvaWQpOworCit2b2lkIF9fb3ZsZCBzZXRfdXNlcl9ldmVudF9zdGF0dXMoY2xrX2V2ZW50X3QgZSwgaW50IHN0YXRlKTsKKworYm9vbCBfX292bGQgaXNfdmFsaWRfZXZlbnQgKGNsa19ldmVudF90IGV2ZW50KTsKKwordm9pZCBfX292bGQgY2FwdHVyZV9ldmVudF9wcm9maWxpbmdfaW5mbyhjbGtfZXZlbnRfdCwgY2xrX3Byb2ZpbGluZ19pbmZvLCBfX2dsb2JhbCB2b2lkKiB2YWx1ZSk7CisKK3F1ZXVlX3QgX19vdmxkIGdldF9kZWZhdWx0X3F1ZXVlKHZvaWQpOworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworLy8gT3BlbkNMIEV4dGVuc2lvbiB2Mi4wIHM5LjE3IC0gU3ViLWdyb3VwcworCisjaWYgZGVmaW5lZChjbF9pbnRlbF9zdWJncm91cHMpIHx8IGRlZmluZWQoY2xfa2hyX3N1Ymdyb3VwcykKKy8vIFNoYXJlZCBTdWIgR3JvdXAgRnVuY3Rpb25zCit1aW50ICAgIF9fb3ZsZCBnZXRfc3ViX2dyb3VwX3NpemUodm9pZCk7Cit1aW50ICAgIF9fb3ZsZCBnZXRfbWF4X3N1Yl9ncm91cF9zaXplKHZvaWQpOwordWludCAgICBfX292bGQgZ2V0X251bV9zdWJfZ3JvdXBzKHZvaWQpOworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCit1aW50ICAgIF9fb3ZsZCBnZXRfZW5xdWV1ZWRfbnVtX3N1Yl9ncm91cHModm9pZCk7CisjZW5kaWYgLy9fX09QRU5DTF9DX1ZFUlNJT05fXyA+PSBDTF9WRVJTSU9OXzJfMAordWludCAgICBfX292bGQgZ2V0X3N1Yl9ncm91cF9pZCh2b2lkKTsKK3VpbnQgICAgX19vdmxkIGdldF9zdWJfZ3JvdXBfbG9jYWxfaWQodm9pZCk7CisKK3ZvaWQgICAgX19vdmxkIF9fY29udiBzdWJfZ3JvdXBfYmFycmllcihjbF9tZW1fZmVuY2VfZmxhZ3MgZmxhZ3MpOworI2lmIF9fT1BFTkNMX0NfVkVSU0lPTl9fID49IENMX1ZFUlNJT05fMl8wCit2b2lkICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX2JhcnJpZXIoY2xfbWVtX2ZlbmNlX2ZsYWdzIGZsYWdzLCBtZW1vcnlfc2NvcGUgc2NvcGUpOworI2VuZGlmIC8vX19PUEVOQ0xfQ19WRVJTSU9OX18gPj0gQ0xfVkVSU0lPTl8yXzAKKworaW50ICAgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9hbGwoaW50IHByZWRpY2F0ZSk7CitpbnQgICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX2FueShpbnQgcHJlZGljYXRlKTsKKworaW50ICAgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9icm9hZGNhc3QoaW50ICAgeCwgdWludCBzdWJfZ3JvdXBfbG9jYWxfaWQpOwordWludCAgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9icm9hZGNhc3QodWludCAgeCwgdWludCBzdWJfZ3JvdXBfbG9jYWxfaWQpOworbG9uZyAgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9icm9hZGNhc3QobG9uZyAgeCwgdWludCBzdWJfZ3JvdXBfbG9jYWxfaWQpOwordWxvbmcgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9icm9hZGNhc3QodWxvbmcgeCwgdWludCBzdWJfZ3JvdXBfbG9jYWxfaWQpOworZmxvYXQgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9icm9hZGNhc3QoZmxvYXQgeCwgdWludCBzdWJfZ3JvdXBfbG9jYWxfaWQpOworCitpbnQgICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9hZGQoaW50ICAgeCk7Cit1aW50ICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9hZGQodWludCAgeCk7Citsb25nICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9hZGQobG9uZyAgeCk7Cit1bG9uZyAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9hZGQodWxvbmcgeCk7CitmbG9hdCAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9hZGQoZmxvYXQgeCk7CitpbnQgICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9taW4oaW50ICAgeCk7Cit1aW50ICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9taW4odWludCAgeCk7Citsb25nICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9taW4obG9uZyAgeCk7Cit1bG9uZyAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9taW4odWxvbmcgeCk7CitmbG9hdCAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9taW4oZmxvYXQgeCk7CitpbnQgICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9tYXgoaW50ICAgeCk7Cit1aW50ICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9tYXgodWludCAgeCk7Citsb25nICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9tYXgobG9uZyAgeCk7Cit1bG9uZyAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9tYXgodWxvbmcgeCk7CitmbG9hdCAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9tYXgoZmxvYXQgeCk7CisKK2ludCAgICAgX19vdmxkIF9fY29udiBzdWJfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfYWRkKGludCAgIHgpOwordWludCAgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2V4Y2x1c2l2ZV9hZGQodWludCAgeCk7Citsb25nICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3NjYW5fZXhjbHVzaXZlX2FkZChsb25nICB4KTsKK3Vsb25nICAgX19vdmxkIF9fY29udiBzdWJfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfYWRkKHVsb25nIHgpOworZmxvYXQgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2V4Y2x1c2l2ZV9hZGQoZmxvYXQgeCk7CitpbnQgICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21pbihpbnQgICB4KTsKK3VpbnQgICAgX19vdmxkIF9fY29udiBzdWJfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWluKHVpbnQgIHgpOworbG9uZyAgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2V4Y2x1c2l2ZV9taW4obG9uZyAgeCk7Cit1bG9uZyAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21pbih1bG9uZyB4KTsKK2Zsb2F0ICAgX19vdmxkIF9fY29udiBzdWJfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWluKGZsb2F0IHgpOworaW50ICAgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2V4Y2x1c2l2ZV9tYXgoaW50ICAgeCk7Cit1aW50ICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21heCh1aW50ICB4KTsKK2xvbmcgICAgX19vdmxkIF9fY29udiBzdWJfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWF4KGxvbmcgIHgpOwordWxvbmcgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2V4Y2x1c2l2ZV9tYXgodWxvbmcgeCk7CitmbG9hdCAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21heChmbG9hdCB4KTsKKworaW50ICAgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2luY2x1c2l2ZV9hZGQoaW50ICAgeCk7Cit1aW50ICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3NjYW5faW5jbHVzaXZlX2FkZCh1aW50ICB4KTsKK2xvbmcgICAgX19vdmxkIF9fY29udiBzdWJfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfYWRkKGxvbmcgIHgpOwordWxvbmcgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2luY2x1c2l2ZV9hZGQodWxvbmcgeCk7CitmbG9hdCAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3NjYW5faW5jbHVzaXZlX2FkZChmbG9hdCB4KTsKK2ludCAgICAgX19vdmxkIF9fY29udiBzdWJfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWluKGludCAgIHgpOwordWludCAgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2luY2x1c2l2ZV9taW4odWludCAgeCk7Citsb25nICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3NjYW5faW5jbHVzaXZlX21pbihsb25nICB4KTsKK3Vsb25nICAgX19vdmxkIF9fY29udiBzdWJfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWluKHVsb25nIHgpOworZmxvYXQgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2luY2x1c2l2ZV9taW4oZmxvYXQgeCk7CitpbnQgICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3NjYW5faW5jbHVzaXZlX21heChpbnQgICB4KTsKK3VpbnQgICAgX19vdmxkIF9fY29udiBzdWJfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWF4KHVpbnQgIHgpOworbG9uZyAgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2luY2x1c2l2ZV9tYXgobG9uZyAgeCk7Cit1bG9uZyAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3NjYW5faW5jbHVzaXZlX21heCh1bG9uZyB4KTsKK2Zsb2F0ICAgX19vdmxkIF9fY29udiBzdWJfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWF4KGZsb2F0IHgpOworCisjaWZkZWYgY2xfa2hyX2ZwMTYKK2hhbGYgICAgX19vdmxkIF9fY29udiBzdWJfZ3JvdXBfYnJvYWRjYXN0KGhhbGYgeCwgdWludCBzdWJfZ3JvdXBfbG9jYWxfaWQpOworaGFsZiAgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9yZWR1Y2VfYWRkKGhhbGYgeCk7CitoYWxmICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9taW4oaGFsZiB4KTsKK2hhbGYgICAgX19vdmxkIF9fY29udiBzdWJfZ3JvdXBfcmVkdWNlX21heChoYWxmIHgpOworaGFsZiAgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2V4Y2x1c2l2ZV9hZGQoaGFsZiB4KTsKK2hhbGYgICAgX19vdmxkIF9fY29udiBzdWJfZ3JvdXBfc2Nhbl9leGNsdXNpdmVfbWluKGhhbGYgeCk7CitoYWxmICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3NjYW5fZXhjbHVzaXZlX21heChoYWxmIHgpOworaGFsZiAgICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2luY2x1c2l2ZV9hZGQoaGFsZiB4KTsKK2hhbGYgICAgX19vdmxkIF9fY29udiBzdWJfZ3JvdXBfc2Nhbl9pbmNsdXNpdmVfbWluKGhhbGYgeCk7CitoYWxmICAgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3NjYW5faW5jbHVzaXZlX21heChoYWxmIHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwMTYKKworI2lmZGVmIGNsX2tocl9mcDY0Citkb3VibGUgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX2Jyb2FkY2FzdChkb3VibGUgeCwgdWludCBzdWJfZ3JvdXBfbG9jYWxfaWQpOworZG91YmxlICBfX292bGQgX19jb252IHN1Yl9ncm91cF9yZWR1Y2VfYWRkKGRvdWJsZSB4KTsKK2RvdWJsZSAgX19vdmxkIF9fY29udiBzdWJfZ3JvdXBfcmVkdWNlX21pbihkb3VibGUgeCk7Citkb3VibGUgIF9fb3ZsZCBfX2NvbnYgc3ViX2dyb3VwX3JlZHVjZV9tYXgoZG91YmxlIHgpOworZG91YmxlICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2V4Y2x1c2l2ZV9hZGQoZG91YmxlIHgpOworZG91YmxlICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2V4Y2x1c2l2ZV9taW4oZG91YmxlIHgpOworZG91YmxlICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2V4Y2x1c2l2ZV9tYXgoZG91YmxlIHgpOworZG91YmxlICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2luY2x1c2l2ZV9hZGQoZG91YmxlIHgpOworZG91YmxlICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2luY2x1c2l2ZV9taW4oZG91YmxlIHgpOworZG91YmxlICBfX292bGQgX19jb252IHN1Yl9ncm91cF9zY2FuX2luY2x1c2l2ZV9tYXgoZG91YmxlIHgpOworI2VuZGlmIC8vY2xfa2hyX2ZwNjQKKworI2VuZGlmIC8vY2xfa2hyX3N1Ymdyb3VwcyBjbF9pbnRlbF9zdWJncm91cHMKKworI2lmZGVmIGNsX2FtZF9tZWRpYV9vcHMKK3VpbnQgX19vdmxkIGFtZF9iaXRhbGlnbih1aW50IGEsIHVpbnQgYiwgdWludCBjKTsKK3VpbnQyIF9fb3ZsZCBhbWRfYml0YWxpZ24odWludDIgYSwgdWludDIgYiwgdWludDIgYyk7Cit1aW50MyBfX292bGQgYW1kX2JpdGFsaWduKHVpbnQzIGEsIHVpbnQzIGIsIHVpbnQzIGMpOwordWludDQgX19vdmxkIGFtZF9iaXRhbGlnbih1aW50NCBhLCB1aW50NCBiLCB1aW50NCBjKTsKK3VpbnQ4IF9fb3ZsZCBhbWRfYml0YWxpZ24odWludDggYSwgdWludDggYiwgdWludDggYyk7Cit1aW50MTYgX19vdmxkIGFtZF9iaXRhbGlnbih1aW50MTYgYSwgdWludDE2IGIsIHVpbnQxNiBjKTsKKwordWludCBfX292bGQgYW1kX2J5dGVhbGlnbih1aW50IGEsIHVpbnQgYiwgdWludCBjKTsKK3VpbnQyIF9fb3ZsZCBhbWRfYnl0ZWFsaWduKHVpbnQyIGEsIHVpbnQyIGIsIHVpbnQyIGMpOwordWludDMgX19vdmxkIGFtZF9ieXRlYWxpZ24odWludDMgYSwgdWludDMgYiwgdWludDMgYyk7Cit1aW50NCBfX292bGQgYW1kX2J5dGVhbGlnbih1aW50NCBhLCB1aW50NCBiLCB1aW50NCBjKTsKK3VpbnQ4IF9fb3ZsZCBhbWRfYnl0ZWFsaWduKHVpbnQ4IGEsIHVpbnQ4IGIsIHVpbnQ4IGMpOwordWludDE2IF9fb3ZsZCBhbWRfYnl0ZWFsaWduKHVpbnQxNiBhLCB1aW50MTYgYiwgdWludDE2IGMpOworCit1aW50IF9fb3ZsZCBhbWRfbGVycCh1aW50IGEsIHVpbnQgYiwgdWludCBjKTsKK3VpbnQyIF9fb3ZsZCBhbWRfbGVycCh1aW50MiBhLCB1aW50MiBiLCB1aW50MiBjKTsKK3VpbnQzIF9fb3ZsZCBhbWRfbGVycCh1aW50MyBhLCB1aW50MyBiLCB1aW50MyBjKTsKK3VpbnQ0IF9fb3ZsZCBhbWRfbGVycCh1aW50NCBhLCB1aW50NCBiLCB1aW50NCBjKTsKK3VpbnQ4IF9fb3ZsZCBhbWRfbGVycCh1aW50OCBhLCB1aW50OCBiLCB1aW50OCBjKTsKK3VpbnQxNiBfX292bGQgYW1kX2xlcnAodWludDE2IGEsIHVpbnQxNiBiLCB1aW50MTYgYyk7CisKK3VpbnQgX19vdmxkIGFtZF9wYWNrKGZsb2F0NCB2KTsKKwordWludCBfX292bGQgYW1kX3NhZDQodWludDQgeCwgdWludDQgeSwgdWludCB6KTsKKwordWludCBfX292bGQgYW1kX3NhZGhpKHVpbnQgYSwgdWludCBiLCB1aW50IGMpOwordWludDIgX19vdmxkIGFtZF9zYWRoaSh1aW50MiBhLCB1aW50MiBiLCB1aW50MiBjKTsKK3VpbnQzIF9fb3ZsZCBhbWRfc2FkaGkodWludDMgYSwgdWludDMgYiwgdWludDMgYyk7Cit1aW50NCBfX292bGQgYW1kX3NhZGhpKHVpbnQ0IGEsIHVpbnQ0IGIsIHVpbnQ0IGMpOwordWludDggX19vdmxkIGFtZF9zYWRoaSh1aW50OCBhLCB1aW50OCBiLCB1aW50OCBjKTsKK3VpbnQxNiBfX292bGQgYW1kX3NhZGhpKHVpbnQxNiBhLCB1aW50MTYgYiwgdWludDE2IGMpOworCit1aW50IF9fb3ZsZCBhbWRfc2FkKHVpbnQgYSwgdWludCBiLCB1aW50IGMpOwordWludDIgX19vdmxkIGFtZF9zYWQodWludDIgYSwgdWludDIgYiwgdWludDIgYyk7Cit1aW50MyBfX292bGQgYW1kX3NhZCh1aW50MyBhLCB1aW50MyBiLCB1aW50MyBjKTsKK3VpbnQ0IF9fb3ZsZCBhbWRfc2FkKHVpbnQ0IGEsIHVpbnQ0IGIsIHVpbnQ0IGMpOwordWludDggX19vdmxkIGFtZF9zYWQodWludDggYSwgdWludDggYiwgdWludDggYyk7Cit1aW50MTYgX19vdmxkIGFtZF9zYWQodWludDE2IGEsIHVpbnQxNiBiLCB1aW50MTYgYyk7CisKK2Zsb2F0IF9fb3ZsZCBhbWRfdW5wYWNrMCh1aW50IGEpOworZmxvYXQyIF9fb3ZsZCBhbWRfdW5wYWNrMCh1aW50MiBhKTsKK2Zsb2F0MyBfX292bGQgYW1kX3VucGFjazAodWludDMgYSk7CitmbG9hdDQgX19vdmxkIGFtZF91bnBhY2swKHVpbnQ0IGEpOworZmxvYXQ4IF9fb3ZsZCBhbWRfdW5wYWNrMCh1aW50OCBhKTsKK2Zsb2F0MTYgX19vdmxkIGFtZF91bnBhY2swKHVpbnQxNiBhKTsKKworZmxvYXQgX19vdmxkIGFtZF91bnBhY2sxKHVpbnQgYSk7CitmbG9hdDIgX19vdmxkIGFtZF91bnBhY2sxKHVpbnQyIGEpOworZmxvYXQzIF9fb3ZsZCBhbWRfdW5wYWNrMSh1aW50MyBhKTsKK2Zsb2F0NCBfX292bGQgYW1kX3VucGFjazEodWludDQgYSk7CitmbG9hdDggX19vdmxkIGFtZF91bnBhY2sxKHVpbnQ4IGEpOworZmxvYXQxNiBfX292bGQgYW1kX3VucGFjazEodWludDE2IGEpOworCitmbG9hdCBfX292bGQgYW1kX3VucGFjazIodWludCBhKTsKK2Zsb2F0MiBfX292bGQgYW1kX3VucGFjazIodWludDIgYSk7CitmbG9hdDMgX19vdmxkIGFtZF91bnBhY2syKHVpbnQzIGEpOworZmxvYXQ0IF9fb3ZsZCBhbWRfdW5wYWNrMih1aW50NCBhKTsKK2Zsb2F0OCBfX292bGQgYW1kX3VucGFjazIodWludDggYSk7CitmbG9hdDE2IF9fb3ZsZCBhbWRfdW5wYWNrMih1aW50MTYgYSk7CisKK2Zsb2F0IF9fb3ZsZCBhbWRfdW5wYWNrMyh1aW50IGEpOworZmxvYXQyIF9fb3ZsZCBhbWRfdW5wYWNrMyh1aW50MiBhKTsKK2Zsb2F0MyBfX292bGQgYW1kX3VucGFjazModWludDMgYSk7CitmbG9hdDQgX19vdmxkIGFtZF91bnBhY2szKHVpbnQ0IGEpOworZmxvYXQ4IF9fb3ZsZCBhbWRfdW5wYWNrMyh1aW50OCBhKTsKK2Zsb2F0MTYgX19vdmxkIGFtZF91bnBhY2szKHVpbnQxNiBhKTsKKyNlbmRpZiAvLyBjbF9hbWRfbWVkaWFfb3BzCisKKyNpZmRlZiBjbF9hbWRfbWVkaWFfb3BzMgoraW50IF9fb3ZsZCBhbWRfYmZlKGludCBzcmMwLCB1aW50IHNyYzEsIHVpbnQgc3JjMik7CitpbnQyIF9fb3ZsZCBhbWRfYmZlKGludDIgc3JjMCwgdWludDIgc3JjMSwgdWludDIgc3JjMik7CitpbnQzIF9fb3ZsZCBhbWRfYmZlKGludDMgc3JjMCwgdWludDMgc3JjMSwgdWludDMgc3JjMik7CitpbnQ0IF9fb3ZsZCBhbWRfYmZlKGludDQgc3JjMCwgdWludDQgc3JjMSwgdWludDQgc3JjMik7CitpbnQ4IF9fb3ZsZCBhbWRfYmZlKGludDggc3JjMCwgdWludDggc3JjMSwgdWludDggc3JjMik7CitpbnQxNiBfX292bGQgYW1kX2JmZShpbnQxNiBzcmMwLCB1aW50MTYgc3JjMSwgdWludDE2IHNyYzIpOworCit1aW50IF9fb3ZsZCBhbWRfYmZlKHVpbnQgc3JjMCwgdWludCBzcmMxLCB1aW50IHNyYzIpOwordWludDIgX19vdmxkIGFtZF9iZmUodWludDIgc3JjMCwgdWludDIgc3JjMSwgdWludDIgc3JjMik7Cit1aW50MyBfX292bGQgYW1kX2JmZSh1aW50MyBzcmMwLCB1aW50MyBzcmMxLCB1aW50MyBzcmMyKTsKK3VpbnQ0IF9fb3ZsZCBhbWRfYmZlKHVpbnQ0IHNyYzAsIHVpbnQ0IHNyYzEsIHVpbnQ0IHNyYzIpOwordWludDggX19vdmxkIGFtZF9iZmUodWludDggc3JjMCwgdWludDggc3JjMSwgdWludDggc3JjMik7Cit1aW50MTYgX19vdmxkIGFtZF9iZmUodWludDE2IHNyYzAsIHVpbnQxNiBzcmMxLCB1aW50MTYgc3JjMik7CisKK3VpbnQgX19vdmxkIGFtZF9iZm0odWludCBzcmMwLCB1aW50IHNyYzEpOwordWludDIgX19vdmxkIGFtZF9iZm0odWludDIgc3JjMCwgdWludDIgc3JjMSk7Cit1aW50MyBfX292bGQgYW1kX2JmbSh1aW50MyBzcmMwLCB1aW50MyBzcmMxKTsKK3VpbnQ0IF9fb3ZsZCBhbWRfYmZtKHVpbnQ0IHNyYzAsIHVpbnQ0IHNyYzEpOwordWludDggX19vdmxkIGFtZF9iZm0odWludDggc3JjMCwgdWludDggc3JjMSk7Cit1aW50MTYgX19vdmxkIGFtZF9iZm0odWludDE2IHNyYzAsIHVpbnQxNiBzcmMxKTsKKworZmxvYXQgX19vdmxkIGFtZF9tYXgzKGZsb2F0IHNyYzAsIGZsb2F0IHNyYzEsIGZsb2F0IHNyYzIpOworZmxvYXQyIF9fb3ZsZCBhbWRfbWF4MyhmbG9hdDIgc3JjMCwgZmxvYXQyIHNyYzEsIGZsb2F0MiBzcmMyKTsKK2Zsb2F0MyBfX292bGQgYW1kX21heDMoZmxvYXQzIHNyYzAsIGZsb2F0MyBzcmMxLCBmbG9hdDMgc3JjMik7CitmbG9hdDQgX19vdmxkIGFtZF9tYXgzKGZsb2F0NCBzcmMwLCBmbG9hdDQgc3JjMSwgZmxvYXQ0IHNyYzIpOworZmxvYXQ4IF9fb3ZsZCBhbWRfbWF4MyhmbG9hdDggc3JjMCwgZmxvYXQ4IHNyYzEsIGZsb2F0OCBzcmMyKTsKK2Zsb2F0MTYgX19vdmxkIGFtZF9tYXgzKGZsb2F0MTYgc3JjMCwgZmxvYXQxNiBzcmMxLCBmbG9hdDE2IHNyYzIpOworCitpbnQgX19vdmxkIGFtZF9tYXgzKGludCBzcmMwLCBpbnQgc3JjMSwgaW50IHNyYzIpOworaW50MiBfX292bGQgYW1kX21heDMoaW50MiBzcmMwLCBpbnQyIHNyYzEsIGludDIgc3JjMik7CitpbnQzIF9fb3ZsZCBhbWRfbWF4MyhpbnQzIHNyYzAsIGludDMgc3JjMSwgaW50MyBzcmMyKTsKK2ludDQgX19vdmxkIGFtZF9tYXgzKGludDQgc3JjMCwgaW50NCBzcmMxLCBpbnQ0IHNyYzIpOworaW50OCBfX292bGQgYW1kX21heDMoaW50OCBzcmMwLCBpbnQ4IHNyYzEsIGludDggc3JjMik7CitpbnQxNiBfX292bGQgYW1kX21heDMoaW50MTYgc3JjMCwgaW50MTYgc3JjMSwgaW50MTYgc3JjMik7CisKK3VpbnQgX19vdmxkIGFtZF9tYXgzKHVpbnQgc3JjMCwgdWludCBzcmMxLCB1aW50IHNyYzIpOwordWludDIgX19vdmxkIGFtZF9tYXgzKHVpbnQyIHNyYzAsIHVpbnQyIHNyYzEsIHVpbnQyIHNyYzIpOwordWludDMgX19vdmxkIGFtZF9tYXgzKHVpbnQzIHNyYzAsIHVpbnQzIHNyYzEsIHVpbnQzIHNyYzIpOwordWludDQgX19vdmxkIGFtZF9tYXgzKHVpbnQ0IHNyYzAsIHVpbnQ0IHNyYzEsIHVpbnQ0IHNyYzIpOwordWludDggX19vdmxkIGFtZF9tYXgzKHVpbnQ4IHNyYzAsIHVpbnQ4IHNyYzEsIHVpbnQ4IHNyYzIpOwordWludDE2IF9fb3ZsZCBhbWRfbWF4Myh1aW50MTYgc3JjMCwgdWludDE2IHNyYzEsIHVpbnQxNiBzcmMyKTsKKworZmxvYXQgX19vdmxkIGFtZF9tZWRpYW4zKGZsb2F0IHNyYzAsIGZsb2F0IHNyYzEsIGZsb2F0IHNyYzIpOworZmxvYXQyIF9fb3ZsZCBhbWRfbWVkaWFuMyhmbG9hdDIgc3JjMCwgZmxvYXQyIHNyYzEsIGZsb2F0MiBzcmMyKTsKK2Zsb2F0MyBfX292bGQgYW1kX21lZGlhbjMoZmxvYXQzIHNyYzAsIGZsb2F0MyBzcmMxLCBmbG9hdDMgc3JjMik7CitmbG9hdDQgX19vdmxkIGFtZF9tZWRpYW4zKGZsb2F0NCBzcmMwLCBmbG9hdDQgc3JjMSwgZmxvYXQ0IHNyYzIpOworZmxvYXQ4IF9fb3ZsZCBhbWRfbWVkaWFuMyhmbG9hdDggc3JjMCwgZmxvYXQ4IHNyYzEsIGZsb2F0OCBzcmMyKTsKK2Zsb2F0MTYgX19vdmxkIGFtZF9tZWRpYW4zKGZsb2F0MTYgc3JjMCwgZmxvYXQxNiBzcmMxLCBmbG9hdDE2IHNyYzIpOworCitpbnQgX19vdmxkIGFtZF9tZWRpYW4zKGludCBzcmMwLCBpbnQgc3JjMSwgaW50IHNyYzIpOworaW50MiBfX292bGQgYW1kX21lZGlhbjMoaW50MiBzcmMwLCBpbnQyIHNyYzEsIGludDIgc3JjMik7CitpbnQzIF9fb3ZsZCBhbWRfbWVkaWFuMyhpbnQzIHNyYzAsIGludDMgc3JjMSwgaW50MyBzcmMyKTsKK2ludDQgX19vdmxkIGFtZF9tZWRpYW4zKGludDQgc3JjMCwgaW50NCBzcmMxLCBpbnQ0IHNyYzIpOworaW50OCBfX292bGQgYW1kX21lZGlhbjMoaW50OCBzcmMwLCBpbnQ4IHNyYzEsIGludDggc3JjMik7CitpbnQxNiBfX292bGQgYW1kX21lZGlhbjMoaW50MTYgc3JjMCwgaW50MTYgc3JjMSwgaW50MTYgc3JjMik7CisKK3VpbnQgX19vdmxkIGFtZF9tZWRpYW4zKHVpbnQgc3JjMCwgdWludCBzcmMxLCB1aW50IHNyYzIpOwordWludDIgX19vdmxkIGFtZF9tZWRpYW4zKHVpbnQyIHNyYzAsIHVpbnQyIHNyYzEsIHVpbnQyIHNyYzIpOwordWludDMgX19vdmxkIGFtZF9tZWRpYW4zKHVpbnQzIHNyYzAsIHVpbnQzIHNyYzEsIHVpbnQzIHNyYzIpOwordWludDQgX19vdmxkIGFtZF9tZWRpYW4zKHVpbnQ0IHNyYzAsIHVpbnQ0IHNyYzEsIHVpbnQ0IHNyYzIpOwordWludDggX19vdmxkIGFtZF9tZWRpYW4zKHVpbnQ4IHNyYzAsIHVpbnQ4IHNyYzEsIHVpbnQ4IHNyYzIpOwordWludDE2IF9fb3ZsZCBhbWRfbWVkaWFuMyh1aW50MTYgc3JjMCwgdWludDE2IHNyYzEsIHVpbnQxNiBzcmMyKTsKKworZmxvYXQgX19vdmxkIGFtZF9taW4zKGZsb2F0IHNyYzAsIGZsb2F0IHNyYzEsIGZsb2F0IHNyYyk7CitmbG9hdDIgX19vdmxkIGFtZF9taW4zKGZsb2F0MiBzcmMwLCBmbG9hdDIgc3JjMSwgZmxvYXQyIHNyYyk7CitmbG9hdDMgX19vdmxkIGFtZF9taW4zKGZsb2F0MyBzcmMwLCBmbG9hdDMgc3JjMSwgZmxvYXQzIHNyYyk7CitmbG9hdDQgX19vdmxkIGFtZF9taW4zKGZsb2F0NCBzcmMwLCBmbG9hdDQgc3JjMSwgZmxvYXQ0IHNyYyk7CitmbG9hdDggX19vdmxkIGFtZF9taW4zKGZsb2F0OCBzcmMwLCBmbG9hdDggc3JjMSwgZmxvYXQ4IHNyYyk7CitmbG9hdDE2IF9fb3ZsZCBhbWRfbWluMyhmbG9hdDE2IHNyYzAsIGZsb2F0MTYgc3JjMSwgZmxvYXQxNiBzcmMpOworCitpbnQgX19vdmxkIGFtZF9taW4zKGludCBzcmMwLCBpbnQgc3JjMSwgaW50IHNyYzIpOworaW50MiBfX292bGQgYW1kX21pbjMoaW50MiBzcmMwLCBpbnQyIHNyYzEsIGludDIgc3JjMik7CitpbnQzIF9fb3ZsZCBhbWRfbWluMyhpbnQzIHNyYzAsIGludDMgc3JjMSwgaW50MyBzcmMyKTsKK2ludDQgX19vdmxkIGFtZF9taW4zKGludDQgc3JjMCwgaW50NCBzcmMxLCBpbnQ0IHNyYzIpOworaW50OCBfX292bGQgYW1kX21pbjMoaW50OCBzcmMwLCBpbnQ4IHNyYzEsIGludDggc3JjMik7CitpbnQxNiBfX292bGQgYW1kX21pbjMoaW50MTYgc3JjMCwgaW50MTYgc3JjMSwgaW50MTYgc3JjMik7CisKK3VpbnQgX19vdmxkIGFtZF9taW4zKHVpbnQgc3JjMCwgdWludCBzcmMxLCB1aW50IHNyYzIpOwordWludDIgX19vdmxkIGFtZF9taW4zKHVpbnQyIHNyYzAsIHVpbnQyIHNyYzEsIHVpbnQyIHNyYzIpOwordWludDMgX19vdmxkIGFtZF9taW4zKHVpbnQzIHNyYzAsIHVpbnQzIHNyYzEsIHVpbnQzIHNyYzIpOwordWludDQgX19vdmxkIGFtZF9taW4zKHVpbnQ0IHNyYzAsIHVpbnQ0IHNyYzEsIHVpbnQ0IHNyYzIpOwordWludDggX19vdmxkIGFtZF9taW4zKHVpbnQ4IHNyYzAsIHVpbnQ4IHNyYzEsIHVpbnQ4IHNyYzIpOwordWludDE2IF9fb3ZsZCBhbWRfbWluMyh1aW50MTYgc3JjMCwgdWludDE2IHNyYzEsIHVpbnQxNiBzcmMyKTsKKwordWxvbmcgX19vdmxkIGFtZF9tcXNhZCh1bG9uZyBzcmMwLCB1aW50IHNyYzEsIHVsb25nIHNyYzIpOwordWxvbmcyIF9fb3ZsZCBhbWRfbXFzYWQodWxvbmcyIHNyYzAsIHVpbnQyIHNyYzEsIHVsb25nMiBzcmMyKTsKK3Vsb25nMyBfX292bGQgYW1kX21xc2FkKHVsb25nMyBzcmMwLCB1aW50MyBzcmMxLCB1bG9uZzMgc3JjMik7Cit1bG9uZzQgX19vdmxkIGFtZF9tcXNhZCh1bG9uZzQgc3JjMCwgdWludDQgc3JjMSwgdWxvbmc0IHNyYzIpOwordWxvbmc4IF9fb3ZsZCBhbWRfbXFzYWQodWxvbmc4IHNyYzAsIHVpbnQ4IHNyYzEsIHVsb25nOCBzcmMyKTsKK3Vsb25nMTYgX19vdmxkIGFtZF9tcXNhZCh1bG9uZzE2IHNyYzAsIHVpbnQxNiBzcmMxLCB1bG9uZzE2IHNyYzIpOworCit1bG9uZyBfX292bGQgYW1kX3FzYWQodWxvbmcgc3JjMCwgdWludCBzcmMxLCB1bG9uZyBzcmMyKTsKK3Vsb25nMiBfX292bGQgYW1kX3FzYWQodWxvbmcyIHNyYzAsIHVpbnQyIHNyYzEsIHVsb25nMiBzcmMyKTsKK3Vsb25nMyBfX292bGQgYW1kX3FzYWQodWxvbmczIHNyYzAsIHVpbnQzIHNyYzEsIHVsb25nMyBzcmMyKTsKK3Vsb25nNCBfX292bGQgYW1kX3FzYWQodWxvbmc0IHNyYzAsIHVpbnQ0IHNyYzEsIHVsb25nNCBzcmMyKTsKK3Vsb25nOCBfX292bGQgYW1kX3FzYWQodWxvbmc4IHNyYzAsIHVpbnQ4IHNyYzEsIHVsb25nOCBzcmMyKTsKK3Vsb25nMTYgX19vdmxkIGFtZF9xc2FkKHVsb25nMTYgc3JjMCwgdWludDE2IHNyYzEsIHVsb25nMTYgc3JjMik7CisKK3VpbnQgX19vdmxkIGFtZF9tc2FkKHVpbnQgc3JjMCwgdWludCBzcmMxLCB1aW50IHNyYzIpOwordWludDIgX19vdmxkIGFtZF9tc2FkKHVpbnQyIHNyYzAsIHVpbnQyIHNyYzEsIHVpbnQyIHNyYzIpOwordWludDMgX19vdmxkIGFtZF9tc2FkKHVpbnQzIHNyYzAsIHVpbnQzIHNyYzEsIHVpbnQzIHNyYzIpOwordWludDQgX19vdmxkIGFtZF9tc2FkKHVpbnQ0IHNyYzAsIHVpbnQ0IHNyYzEsIHVpbnQ0IHNyYzIpOwordWludDggX19vdmxkIGFtZF9tc2FkKHVpbnQ4IHNyYzAsIHVpbnQ4IHNyYzEsIHVpbnQ4IHNyYzIpOwordWludDE2IF9fb3ZsZCBhbWRfbXNhZCh1aW50MTYgc3JjMCwgdWludDE2IHNyYzEsIHVpbnQxNiBzcmMyKTsKKwordWludCBfX292bGQgYW1kX3NhZGQodWludCBzcmMwLCB1aW50IHNyYzEsIHVpbnQgc3JjMik7Cit1aW50MiBfX292bGQgYW1kX3NhZGQodWludDIgc3JjMCwgdWludDIgc3JjMSwgdWludDIgc3JjMik7Cit1aW50MyBfX292bGQgYW1kX3NhZGQodWludDMgc3JjMCwgdWludDMgc3JjMSwgdWludDMgc3JjMik7Cit1aW50NCBfX292bGQgYW1kX3NhZGQodWludDQgc3JjMCwgdWludDQgc3JjMSwgdWludDQgc3JjMik7Cit1aW50OCBfX292bGQgYW1kX3NhZGQodWludDggc3JjMCwgdWludDggc3JjMSwgdWludDggc3JjMik7Cit1aW50MTYgX19vdmxkIGFtZF9zYWRkKHVpbnQxNiBzcmMwLCB1aW50MTYgc3JjMSwgdWludDE2IHNyYzIpOworCit1aW50IF9fb3ZsZCBhbWRfc2Fkdyh1aW50IHNyYzAsIHVpbnQgc3JjMSwgdWludCBzcmMyKTsKK3VpbnQyIF9fb3ZsZCBhbWRfc2Fkdyh1aW50MiBzcmMwLCB1aW50MiBzcmMxLCB1aW50MiBzcmMyKTsKK3VpbnQzIF9fb3ZsZCBhbWRfc2Fkdyh1aW50MyBzcmMwLCB1aW50MyBzcmMxLCB1aW50MyBzcmMyKTsKK3VpbnQ0IF9fb3ZsZCBhbWRfc2Fkdyh1aW50NCBzcmMwLCB1aW50NCBzcmMxLCB1aW50NCBzcmMyKTsKK3VpbnQ4IF9fb3ZsZCBhbWRfc2Fkdyh1aW50OCBzcmMwLCB1aW50OCBzcmMxLCB1aW50OCBzcmMyKTsKK3VpbnQxNiBfX292bGQgYW1kX3NhZHcodWludDE2IHNyYzAsIHVpbnQxNiBzcmMxLCB1aW50MTYgc3JjMik7CisjZW5kaWYgLy8gY2xfYW1kX21lZGlhX29wczIKKworLy8gRGlzYWJsZSBhbnkgZXh0ZW5zaW9ucyB3ZSBtYXkgaGF2ZSBlbmFibGVkIHByZXZpb3VzbHkuCisjcHJhZ21hIE9QRU5DTCBFWFRFTlNJT04gYWxsIDogZGlzYWJsZQorCisjdW5kZWYgX19jbmZuCisjdW5kZWYgX19vdmxkCisjZW5kaWYgLy9fT1BFTkNMX0hfCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3BrdWludHJpbi5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9wa3VpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTU0NTk0Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9wa3VpbnRyaW4uaApAQCAtMCwwICsxLDQ4IEBACisvKj09PS0tLS0tLS0tLS0tLS0gcGt1aW50cmluLmggLSBQS1UgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8cGt1aW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX1BLVUlOVFJJTl9ICisjZGVmaW5lIF9fUEtVSU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJwa3UiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19yZHBrcnVfdTMyKHZvaWQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZHBrcnUoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK193cnBrcnUodW5zaWduZWQgaW50IF9fdmFsKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfd3Jwa3J1KF9fdmFsKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvcG1taW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3BtbWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMTA1ODAKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3BtbWludHJpbi5oCkBAIC0wLDAgKzEsMzExIEBACisvKj09PS0tLS0gcG1taW50cmluLmggLSBTU0UzIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fUE1NSU5UUklOX0gKKyNkZWZpbmUgX19QTU1JTlRSSU5fSAorCisjaW5jbHVkZSA8ZW1taW50cmluLmg+CisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIFwKKyAgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJzc2UzIikpKQorCisvLy8gXGJyaWVmIExvYWRzIGRhdGEgZnJvbSBhbiB1bmFsaWduZWQgbWVtb3J5IGxvY2F0aW9uIHRvIGVsZW1lbnRzIGluIGEgMTI4LWJpdAorLy8vICAgIHZlY3Rvci4gSWYgdGhlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgaXMgbm90IDE2LWJ5dGUgYWxpZ25lZCwgdGhlCisvLy8gICAgaW5zdHJ1Y3Rpb24gbWF5IHJlYWQgdHdvIGFkamFjZW50IGFsaWduZWQgYmxvY2tzIG9mIG1lbW9yeSB0byByZXRyaWV2ZQorLy8vICAgIHRoZSByZXF1ZXN0ZWQgZGF0YS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTEREUVUgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIGEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIGludGVnZXIgdmFsdWVzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3IgY29udGFpbmluZyB0aGUgbW92ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sZGRxdV9zaTEyOChfX20xMjhpIGNvbnN0ICpfX3ApCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9sZGRxdSgoY2hhciBjb25zdCAqKV9fcCk7Cit9CisKKy8vLyBcYnJpZWYgQWRkcyB0aGUgZXZlbi1pbmRleGVkIHZhbHVlcyBhbmQgc3VidHJhY3RzIHRoZSBvZGQtaW5kZXhlZCB2YWx1ZXMgb2YKKy8vLyAgICB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZBRERTVUJQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGxlZnQgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgcmlnaHQgc291cmNlIG9wZXJhbmQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBhbHRlcm5hdGluZyBzdW1zIGFuZAorLy8vICAgIGRpZmZlcmVuY2VzIG9mIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkc3ViX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9hZGRzdWJwcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBhZGRzIHRoZSBhZGphY2VudCBwYWlycyBvZiB2YWx1ZXMgY29udGFpbmVkIGluIHR3bworLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWSEFERFBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgaG9yaXpvbnRhbCBzdW1zIG9mIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgbG93ZXIgYml0cyBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vICAgIFRoZSBob3Jpem9udGFsIHN1bXMgb2YgdGhlIHZhbHVlcyBhcmUgc3RvcmVkIGluIHRoZSB1cHBlciBiaXRzIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbCBzdW1zIG9mCisvLy8gICAgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oYWRkX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9oYWRkcHMoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBIb3Jpem9udGFsbHkgc3VidHJhY3RzIHRoZSBhZGphY2VudCBwYWlycyBvZiB2YWx1ZXMgY29udGFpbmVkIGluIHR3bworLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWSFNVQlBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgbG93ZXIKKy8vLyAgICBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vICAgIFRoZSBob3Jpem9udGFsIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHZhbHVlcyBhcmUgc3RvcmVkIGluIHRoZSB1cHBlcgorLy8vICAgIGJpdHMgb2YgdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbAorLy8vICAgIGRpZmZlcmVuY2VzIG9mIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1Yl9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfaHN1YnBzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgTW92ZXMgYW5kIGR1cGxpY2F0ZXMgaGlnaC1vcmRlciAob2RkLWluZGV4ZWQpIHZhbHVlcyBmcm9tIGEgMTI4LWJpdAorLy8vICAgIHZlY3RvciBvZiBbNCB4IGZsb2F0XSB0byBmbG9hdCB2YWx1ZXMgc3RvcmVkIGluIGEgMTI4LWJpdCB2ZWN0b3Igb2YKKy8vLyAgICBbNCB4IGZsb2F0XS4KKy8vLyAgICBCaXRzIFsxMjc6OTZdIG9mIHRoZSBzb3VyY2UgYXJlIHdyaXR0ZW4gdG8gYml0cyBbMTI3Ojk2XSBhbmQgWzk1OjY0XSBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXRzIFs2MzozMl0gb2YgdGhlIHNvdXJjZSBhcmUgd3JpdHRlbiB0byBiaXRzIFs2MzozMl0gYW5kIFszMTowXSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WU0hEVVAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIG1vdmVkIGFuZCBkdXBsaWNhdGVkCisvLy8gICAgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdmVoZHVwX3BzKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNmKV9fYSwgKF9fdjRzZilfX2EsIDEsIDEsIDMsIDMpOworfQorCisvLy8gXGJyaWVmIER1cGxpY2F0ZXMgbG93LW9yZGVyIChldmVuLWluZGV4ZWQpIHZhbHVlcyBmcm9tIGEgMTI4LWJpdAorLy8vICAgIHZlY3RvciBvZiBbNCB4IGZsb2F0XSB0byBmbG9hdCB2YWx1ZXMgc3RvcmVkIGluIGEgMTI4LWJpdCB2ZWN0b3Igb2YKKy8vLyAgICBbNCB4IGZsb2F0XS4KKy8vLyAgICBCaXRzIFs5NTo2NF0gb2YgdGhlIHNvdXJjZSBhcmUgd3JpdHRlbiB0byBiaXRzIFsxMjc6OTZdIGFuZCBbOTU6NjRdIG9mCisvLy8gICAgdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIEJpdHMgWzMxOjBdIG9mIHRoZSBzb3VyY2UgYXJlIHdyaXR0ZW4gdG8gYml0cyBbNjM6MzJdIGFuZCBbMzE6MF0gb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVlNMRFVQIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBtb3ZlZCBhbmQgZHVwbGljYXRlZAorLy8vICAgIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlbGR1cF9wcyhfX20xMjggX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19hLCAwLCAwLCAyLCAyKTsKK30KKworLy8vIFxicmllZiBBZGRzIHRoZSBldmVuLWluZGV4ZWQgdmFsdWVzIGFuZCBzdWJ0cmFjdHMgdGhlIG9kZC1pbmRleGVkIHZhbHVlcyBvZgorLy8vICAgIHR3byAxMjgtYml0IHZlY3RvcnMgb2YgWzIgeCBkb3VibGVdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZBRERTVUJQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBsZWZ0IHNvdXJjZSBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSByaWdodCBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBhbHRlcm5hdGluZyBzdW1zCisvLy8gICAgYW5kIGRpZmZlcmVuY2VzIG9mIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZHN1Yl9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9hZGRzdWJwZCgoX192MmRmKV9fYSwgKF9fdjJkZilfX2IpOworfQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBhZGRzIHRoZSBwYWlycyBvZiB2YWx1ZXMgY29udGFpbmVkIGluIHR3byAxMjgtYml0CisvLy8gICAgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkhBRERQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vICAgIFRoZSBob3Jpem9udGFsIHN1bSBvZiB0aGUgdmFsdWVzIGlzIHN0b3JlZCBpbiB0aGUgbG93ZXIgYml0cyBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgaG9yaXpvbnRhbCBzdW0gb2YgdGhlIHZhbHVlcyBpcyBzdG9yZWQgaW4gdGhlIHVwcGVyIGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbCBzdW1zIG9mCisvLy8gICAgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZF9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9oYWRkcGQoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBIb3Jpem9udGFsbHkgc3VidHJhY3RzIHRoZSBwYWlycyBvZiB2YWx1ZXMgY29udGFpbmVkIGluIHR3byAxMjgtYml0CisvLy8gICAgdmVjdG9ycyBvZiBbMiB4IGRvdWJsZV0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkhTVUJQRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vICAgIFRoZSBob3Jpem9udGFsIGRpZmZlcmVuY2Ugb2YgdGhlIHZhbHVlcyBpcyBzdG9yZWQgaW4gdGhlIGxvd2VyIGJpdHMgb2YKKy8vLyAgICB0aGUgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gICAgVGhlIGhvcml6b250YWwgZGlmZmVyZW5jZSBvZiB0aGUgdmFsdWVzIGlzIHN0b3JlZCBpbiB0aGUgdXBwZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXSBjb250YWluaW5nIHRoZSBob3Jpem9udGFsCisvLy8gICAgZGlmZmVyZW5jZXMgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1Yl9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9oc3VicGQoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworLy8vIFxicmllZiBNb3ZlcyBhbmQgZHVwbGljYXRlcyBvbmUgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSB0byBkb3VibGUtcHJlY2lzaW9uCisvLy8gICAgdmFsdWVzIHN0b3JlZCBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mIFsyIHggZG91YmxlXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMTI4ZCBfbW1fbG9hZGR1cF9wZChkb3VibGUgY29uc3QgKiBkcCk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WRERVUCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBkcAorLy8vICAgIEEgcG9pbnRlciB0byBhIGRvdWJsZS1wcmVjaXNpb24gdmFsdWUgdG8gYmUgbW92ZWQgYW5kIGR1cGxpY2F0ZWQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgbW92ZWQgYW5kCisvLy8gICAgZHVwbGljYXRlZCB2YWx1ZXMuCisjZGVmaW5lICAgICAgICBfbW1fbG9hZGR1cF9wZChkcCkgICAgICAgIF9tbV9sb2FkMV9wZChkcCkKKworLy8vIFxicmllZiBNb3ZlcyBhbmQgZHVwbGljYXRlcyB0aGUgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpbiB0aGUgbG93ZXIgYml0cyBvZgorLy8vICAgIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdIHRvIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzIHN0b3JlZCBpbiBhCisvLy8gICAgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZERFVQIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzIgeCBkb3VibGVdLiBCaXRzIFs2MzowXSBhcmUgd3JpdHRlbiB0byBiaXRzCisvLy8gICAgWzEyNzo2NF0gYW5kIFs2MzowXSBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbMiB4IGRvdWJsZV0gY29udGFpbmluZyB0aGUgbW92ZWQgYW5kCisvLy8gICAgZHVwbGljYXRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdmVkdXBfcGQoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRmKV9fYSwgKF9fdjJkZilfX2EsIDAsIDApOworfQorCisjZGVmaW5lIF9NTV9ERU5PUk1BTFNfWkVST19PTiAgICgweDAwNDApCisjZGVmaW5lIF9NTV9ERU5PUk1BTFNfWkVST19PRkYgICgweDAwMDApCisKKyNkZWZpbmUgX01NX0RFTk9STUFMU19aRVJPX01BU0sgKDB4MDA0MCkKKworI2RlZmluZSBfTU1fR0VUX0RFTk9STUFMU19aRVJPX01PREUoKSAoX21tX2dldGNzcigpICYgX01NX0RFTk9STUFMU19aRVJPX01BU0spCisjZGVmaW5lIF9NTV9TRVRfREVOT1JNQUxTX1pFUk9fTU9ERSh4KSAoX21tX3NldGNzcigoX21tX2dldGNzcigpICYgfl9NTV9ERU5PUk1BTFNfWkVST19NQVNLKSB8ICh4KSkpCisKKy8vLyBcYnJpZWYgRXN0YWJsaXNoZXMgYSBsaW5lYXIgYWRkcmVzcyBtZW1vcnkgcmFuZ2UgdG8gYmUgbW9uaXRvcmVkIGFuZCBwdXRzCisvLy8gICAgdGhlIHByb2Nlc3NvciBpbiB0aGUgbW9uaXRvciBldmVudCBwZW5kaW5nIHN0YXRlLiBEYXRhIHN0b3JlZCBpbiB0aGUKKy8vLyAgICBtb25pdG9yZWQgYWRkcmVzcyByYW5nZSBjYXVzZXMgdGhlIHByb2Nlc3NvciB0byBleGl0IHRoZSBwZW5kaW5nIHN0YXRlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIE1PTklUT1IgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgVGhlIG1lbW9yeSByYW5nZSB0byBiZSBtb25pdG9yZWQuIFRoZSBzaXplIG9mIHRoZSByYW5nZSBpcyBkZXRlcm1pbmVkIGJ5CisvLy8gICAgQ1BVSUQgZnVuY3Rpb24gMDAwMF8wMDA1aC4KKy8vLyBccGFyYW0gX19leHRlbnNpb25zCisvLy8gICAgT3B0aW9uYWwgZXh0ZW5zaW9ucyBmb3IgdGhlIG1vbml0b3Jpbmcgc3RhdGUuCisvLy8gXHBhcmFtIF9faGludHMKKy8vLyAgICBPcHRpb25hbCBoaW50cyBmb3IgdGhlIG1vbml0b3Jpbmcgc3RhdGUuCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vbml0b3Iodm9pZCBjb25zdCAqX19wLCB1bnNpZ25lZCBfX2V4dGVuc2lvbnMsIHVuc2lnbmVkIF9faGludHMpCit7CisgIF9fYnVpbHRpbl9pYTMyX21vbml0b3IoKHZvaWQgKilfX3AsIF9fZXh0ZW5zaW9ucywgX19oaW50cyk7Cit9CisKKy8vLyBcYnJpZWYgVXNlZCB3aXRoIHRoZSBNT05JVE9SIGluc3RydWN0aW9uIHRvIHdhaXQgd2hpbGUgdGhlIHByb2Nlc3NvciBpcyBpbgorLy8vICAgIHRoZSBtb25pdG9yIGV2ZW50IHBlbmRpbmcgc3RhdGUuIERhdGEgc3RvcmVkIGluIHRoZSBtb25pdG9yZWQgYWRkcmVzcworLy8vICAgIHJhbmdlIGNhdXNlcyB0aGUgcHJvY2Vzc29yIHRvIGV4aXQgdGhlIHBlbmRpbmcgc3RhdGUuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgTVdBSVQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19leHRlbnNpb25zCisvLy8gICAgT3B0aW9uYWwgZXh0ZW5zaW9ucyBmb3IgdGhlIG1vbml0b3Jpbmcgc3RhdGUsIHdoaWNoIG1heSB2YXJ5IGJ5CisvLy8gICAgcHJvY2Vzc29yLgorLy8vIFxwYXJhbSBfX2hpbnRzCisvLy8gICAgT3B0aW9uYWwgaGludHMgZm9yIHRoZSBtb25pdG9yaW5nIHN0YXRlLCB3aGljaCBtYXkgdmFyeSBieSBwcm9jZXNzb3IuCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX213YWl0KHVuc2lnbmVkIF9fZXh0ZW5zaW9ucywgdW5zaWduZWQgX19oaW50cykKK3sKKyAgX19idWlsdGluX2lhMzJfbXdhaXQoX19leHRlbnNpb25zLCBfX2hpbnRzKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19QTU1JTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9wb3BjbnRpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvcG9wY250aW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyZjE2NwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvcG9wY250aW50cmluLmgKQEAgLTAsMCArMSw5OCBAQAorLyo9PT0tLS0tIHBvcGNudGludHJpbi5oIC0gUE9QQ05UIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfUE9QQ05USU5UUklOX0gKKyNkZWZpbmUgX1BPUENOVElOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygicG9wY250IikpKQorCisvLy8gXGJyaWVmIENvdW50cyB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIHNvdXJjZSBvcGVyYW5kIGhhdmluZyBhIHZhbHVlIG9mIDEuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUE9QQ05UIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fQQorLy8vICAgIEFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIG9wZXJhbmQuCisvLy8gXHJldHVybnMgQSAzMi1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgYml0cyB3aXRoIHZhbHVlIDEgaW4gdGhlCisvLy8gICAgc291cmNlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcG9wY250X3UzMih1bnNpZ25lZCBpbnQgX19BKQoreworICByZXR1cm4gX19idWlsdGluX3BvcGNvdW50KF9fQSk7Cit9CisKKy8vLyBcYnJpZWYgQ291bnRzIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgc291cmNlIG9wZXJhbmQgaGF2aW5nIGEgdmFsdWUgb2YgMS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQT1BDTlQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19BCisvLy8gICAgQSBzaWduZWQgMzItYml0IGludGVnZXIgb3BlcmFuZC4KKy8vLyBccmV0dXJucyBBIDMyLWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBiaXRzIHdpdGggdmFsdWUgMSBpbiB0aGUKKy8vLyAgICBzb3VyY2Ugb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19wb3BjbnQzMihpbnQgX19BKQoreworICByZXR1cm4gX19idWlsdGluX3BvcGNvdW50KF9fQSk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCisvLy8gXGJyaWVmIENvdW50cyB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIHNvdXJjZSBvcGVyYW5kIGhhdmluZyBhIHZhbHVlIG9mIDEuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUE9QQ05UIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fQQorLy8vICAgIEFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIG9wZXJhbmQuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgYml0cyB3aXRoIHZhbHVlIDEgaW4gdGhlCisvLy8gICAgc291cmNlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcG9wY250X3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19BKQoreworICByZXR1cm4gX19idWlsdGluX3BvcGNvdW50bGwoX19BKTsKK30KKworLy8vIFxicmllZiBDb3VudHMgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSBzb3VyY2Ugb3BlcmFuZCBoYXZpbmcgYSB2YWx1ZSBvZiAxLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBPUENOVCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX0EKKy8vLyAgICBBIHNpZ25lZCA2NC1iaXQgaW50ZWdlciBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGJpdHMgd2l0aCB2YWx1ZSAxIGluIHRoZQorLy8vICAgIHNvdXJjZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX3BvcGNudDY0KGxvbmcgbG9uZyBfX0EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fcG9wY291bnRsbChfX0EpOworfQorI2VuZGlmIC8qIF9feDg2XzY0X18gKi8KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX1BPUENOVElOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3ByZmNod2ludHJpbi5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9wcmZjaHdpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTAyODU3Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9wcmZjaHdpbnRyaW4uaApAQCAtMCwwICsxLDQ1IEBACisvKj09PS0tLS0gcHJmY2h3aW50cmluLmggLSBQUkVGRVRDSFcgaW50cmluc2ljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWYgIWRlZmluZWQoX19YODZJTlRSSU5fSCkgJiYgIWRlZmluZWQoX01NM0ROT1dfSF9JTkNMVURFRCkKKyNlcnJvciAiTmV2ZXIgdXNlIDxwcmZjaHdpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHg4NmludHJpbi5oPiBvciA8bW0zZG5vdy5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fUFJGQ0hXSU5UUklOX0gKKyNkZWZpbmUgX19QUkZDSFdJTlRSSU5fSAorCisjaWYgZGVmaW5lZChfX1BSRkNIV19fKSB8fCBkZWZpbmVkKF9fM2ROT1dfXykKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19tX3ByZWZldGNoKHZvaWQgKl9fUCkKK3sKKyAgX19idWlsdGluX3ByZWZldGNoIChfX1AsIDAsIDMgLyogX01NX0hJTlRfVDAgKi8pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfbV9wcmVmZXRjaHcodm9pZCAqX19QKQoreworICBfX2J1aWx0aW5fcHJlZmV0Y2ggKF9fUCwgMSwgMyAvKiBfTU1fSElOVF9UMCAqLyk7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fUFJGQ0hXSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvcmRzZWVkaW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3Jkc2VlZGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMWY0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3Jkc2VlZGludHJpbi5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qPT09LS0tLSByZHNlZWRpbnRyaW4uaCAtIFJEU0VFRCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19YODZJTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPHJkc2VlZGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8eDg2aW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19SRFNFRURJTlRSSU5fSAorI2RlZmluZSBfX1JEU0VFRElOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygicmRzZWVkIikpKQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfcmRzZWVkMTZfc3RlcCh1bnNpZ25lZCBzaG9ydCAqX19wKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcmRzZWVkMTZfc3RlcChfX3ApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfcmRzZWVkMzJfc3RlcCh1bnNpZ25lZCBpbnQgKl9fcCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Jkc2VlZDMyX3N0ZXAoX19wKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19yZHNlZWQ2NF9zdGVwKHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcmRzZWVkNjRfc3RlcChfX3ApOworfQorI2VuZGlmCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fUkRTRUVESU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvcnRtaW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3J0bWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YTU4ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3J0bWludHJpbi5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qPT09LS0tLSBydG1pbnRyaW4uaCAtIFJUTSBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPHJ0bWludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19SVE1JTlRSSU5fSAorI2RlZmluZSBfX1JUTUlOVFJJTl9ICisKKyNkZWZpbmUgX1hCRUdJTl9TVEFSVEVEICAgKH4wdSkKKyNkZWZpbmUgX1hBQk9SVF9FWFBMSUNJVCAgKDEgPDwgMCkKKyNkZWZpbmUgX1hBQk9SVF9SRVRSWSAgICAgKDEgPDwgMSkKKyNkZWZpbmUgX1hBQk9SVF9DT05GTElDVCAgKDEgPDwgMikKKyNkZWZpbmUgX1hBQk9SVF9DQVBBQ0lUWSAgKDEgPDwgMykKKyNkZWZpbmUgX1hBQk9SVF9ERUJVRyAgICAgKDEgPDwgNCkKKyNkZWZpbmUgX1hBQk9SVF9ORVNURUQgICAgKDEgPDwgNSkKKyNkZWZpbmUgX1hBQk9SVF9DT0RFKHgpICAgKCgoeCkgPj4gMjQpICYgMHhGRikKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJydG0iKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK194YmVnaW4odm9pZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3hiZWdpbigpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX3hlbmQodm9pZCkKK3sKKyAgX19idWlsdGluX2lhMzJfeGVuZCgpOworfQorCisjZGVmaW5lIF94YWJvcnQoaW1tKSBfX2J1aWx0aW5faWEzMl94YWJvcnQoKGltbSkpCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fUlRNSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvczM5MGludHJpbi5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zMzkwaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxMjc0YwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvczM5MGludHJpbi5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qPT09LS0tLSBzMzkwaW50cmluLmggLSBTeXN0ZW1aIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19TMzkwSU5UUklOX0gKKyNkZWZpbmUgX19TMzkwSU5UUklOX0gKKworI2lmbmRlZiBfX3MzOTBfXworI2Vycm9yICI8czM5MGludHJpbi5oPiBpcyBmb3IgczM5MCBvbmx5IgorI2VuZGlmCisKKyNpZmRlZiBfX0hUTV9fCisjaW5jbHVkZSA8aHRtaW50cmluLmg+CisjZW5kaWYKKworI2lmZGVmIF9fVkVDX18KKyNpbmNsdWRlIDx2ZWNpbnRyaW4uaD4KKyNlbmRpZgorCisjZW5kaWYgLyogX19TMzkwSU5UUklOX0gqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zYW5pdGl6ZXIvYWxsb2NhdG9yX2ludGVyZmFjZS5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zYW5pdGl6ZXIvYWxsb2NhdG9yX2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMjA2MzEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3Nhbml0aXplci9hbGxvY2F0b3JfaW50ZXJmYWNlLmgKQEAgLTAsMCArMSw4MyBAQAorLy89PT0tLSBhbGxvY2F0b3JfaW50ZXJmYWNlLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCisvLyBQdWJsaWMgaW50ZXJmYWNlIGhlYWRlciBmb3IgYWxsb2NhdG9yIHVzZWQgaW4gc2FuaXRpemVycyAoQVNhbi9UU2FuL01TYW4pLgorLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKyNpZm5kZWYgU0FOSVRJWkVSX0FMTE9DQVRPUl9JTlRFUkZBQ0VfSAorI2RlZmluZSBTQU5JVElaRVJfQUxMT0NBVE9SX0lOVEVSRkFDRV9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorICAvKiBSZXR1cm5zIHRoZSBlc3RpbWF0ZWQgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2lsbCBiZSByZXNlcnZlZCBieSBhbGxvY2F0b3IKKyAgICAgZm9yIHJlcXVlc3Qgb2YgInNpemUiIGJ5dGVzLiBJZiBhbGxvY2F0b3IgY2FuJ3QgYWxsb2NhdGUgdGhhdCBtdWNoCisgICAgIG1lbW9yeSwgcmV0dXJucyB0aGUgbWF4aW1hbCBwb3NzaWJsZSBhbGxvY2F0aW9uIHNpemUsIG90aGVyd2lzZSByZXR1cm5zCisgICAgICJzaXplIi4gKi8KKyAgc2l6ZV90IF9fc2FuaXRpemVyX2dldF9lc3RpbWF0ZWRfYWxsb2NhdGVkX3NpemUoc2l6ZV90IHNpemUpOworCisgIC8qIFJldHVybnMgdHJ1ZSBpZiBwIHdhcyByZXR1cm5lZCBieSB0aGUgYWxsb2NhdG9yIGFuZAorICAgICBpcyBub3QgeWV0IGZyZWVkLiAqLworICBpbnQgX19zYW5pdGl6ZXJfZ2V0X293bmVyc2hpcChjb25zdCB2b2xhdGlsZSB2b2lkICpwKTsKKworICAvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVzZXJ2ZWQgZm9yIHRoZSBwb2ludGVyIHAuCisgICAgIFJlcXVpcmVzIChnZXRfb3duZXJzaGlwKHApID09IHRydWUpIG9yIChwID09IDApLiAqLworICBzaXplX3QgX19zYW5pdGl6ZXJfZ2V0X2FsbG9jYXRlZF9zaXplKGNvbnN0IHZvbGF0aWxlIHZvaWQgKnApOworCisgIC8qIE51bWJlciBvZiBieXRlcywgYWxsb2NhdGVkIGFuZCBub3QgeWV0IGZyZWVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gKi8KKyAgc2l6ZV90IF9fc2FuaXRpemVyX2dldF9jdXJyZW50X2FsbG9jYXRlZF9ieXRlcygpOworCisgIC8qIE51bWJlciBvZiBieXRlcywgbW1hcGVkIGJ5IHRoZSBhbGxvY2F0b3IgdG8gZnVsZmlsbCBhbGxvY2F0aW9uIHJlcXVlc3RzLgorICAgICBHZW5lcmFsbHksIGZvciByZXF1ZXN0IG9mIFggYnl0ZXMsIGFsbG9jYXRvciBjYW4gcmVzZXJ2ZSBhbmQgYWRkIHRvIGZyZWUKKyAgICAgbGlzdHMgYSBsYXJnZSBudW1iZXIgb2YgY2h1bmtzIG9mIHNpemUgWCB0byB1c2UgdGhlbSBmb3IgZnV0dXJlIHJlcXVlc3RzLgorICAgICBBbGwgdGhlc2UgY2h1bmtzIGNvdW50IHRvd2FyZCB0aGUgaGVhcCBzaXplLiBDdXJyZW50bHksIGFsbG9jYXRvciBuZXZlcgorICAgICByZWxlYXNlcyBtZW1vcnkgdG8gT1MgKGluc3RlYWQsIGl0IGp1c3QgcHV0cyBmcmVlZCBjaHVua3MgdG8gZnJlZQorICAgICBsaXN0cykuICovCisgIHNpemVfdCBfX3Nhbml0aXplcl9nZXRfaGVhcF9zaXplKCk7CisKKyAgLyogTnVtYmVyIG9mIGJ5dGVzLCBtbWFwZWQgYnkgdGhlIGFsbG9jYXRvciwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZnVsZmlsbAorICAgICBhbGxvY2F0aW9uIHJlcXVlc3RzLiBXaGVuIGEgdXNlciBwcm9ncmFtIGZyZWVzIG1lbW9yeSBjaHVuaywgaXQgY2FuIGZpcnN0CisgICAgIGZhbGwgaW50byBxdWFyYW50aW5lIGFuZCB3aWxsIGNvdW50IHRvd2FyZCBfX3Nhbml0aXplcl9nZXRfZnJlZV9ieXRlcygpCisgICAgIGxhdGVyLiAqLworICBzaXplX3QgX19zYW5pdGl6ZXJfZ2V0X2ZyZWVfYnl0ZXMoKTsKKworICAvKiBOdW1iZXIgb2YgYnl0ZXMgaW4gdW5tYXBwZWQgcGFnZXMsIHRoYXQgYXJlIHJlbGVhc2VkIHRvIE9TLiBDdXJyZW50bHksCisgICAgIGFsd2F5cyByZXR1cm5zIDAuICovCisgIHNpemVfdCBfX3Nhbml0aXplcl9nZXRfdW5tYXBwZWRfYnl0ZXMoKTsKKworICAvKiBNYWxsb2MgaG9va3MgdGhhdCBtYXkgYmUgb3B0aW9uYWxseSBwcm92aWRlZCBieSB1c2VyLgorICAgICBfX3Nhbml0aXplcl9tYWxsb2NfaG9vayhwdHIsIHNpemUpIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlcgorICAgICAgIGFsbG9jYXRpb24gb2YgInNpemUiIGJ5dGVzLCB3aGljaCByZXR1cm5lZCAicHRyIi4KKyAgICAgX19zYW5pdGl6ZXJfZnJlZV9ob29rKHB0cikgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGJlZm9yZQorICAgICAgIGRlYWxsb2NhdGlvbiBvZiAicHRyIi4gKi8KKyAgdm9pZCBfX3Nhbml0aXplcl9tYWxsb2NfaG9vayhjb25zdCB2b2xhdGlsZSB2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKKyAgdm9pZCBfX3Nhbml0aXplcl9mcmVlX2hvb2soY29uc3Qgdm9sYXRpbGUgdm9pZCAqcHRyKTsKKworICAvKiBJbnN0YWxscyBhIHBhaXIgb2YgaG9va3MgZm9yIG1hbGxvYy9mcmVlLgorICAgICBTZXZlcmFsIChjdXJyZW50bHksIDUpIGhvb2sgcGFpcnMgbWF5IGJlIGluc3RhbGxlZCwgdGhleSBhcmUgZXhlY3V0ZWQKKyAgICAgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBpbnN0YWxsZWQgYW5kIGFmdGVyIGNhbGxpbmcKKyAgICAgX19zYW5pdGl6ZXJfbWFsbG9jX2hvb2svX19zYW5pdGl6ZXJfZnJlZV9ob29rLgorICAgICBVbmxpa2UgX19zYW5pdGl6ZXJfbWFsbG9jX2hvb2svX19zYW5pdGl6ZXJfZnJlZV9ob29rIHRoZXNlIGhvb2tzIGNhbiBiZQorICAgICBjaGFpbmVkIGFuZCBkbyBub3QgcmVseSBvbiB3ZWFrIHN5bWJvbHMgd29ya2luZyBvbiB0aGUgcGxhdGZvcm0sIGJ1dAorICAgICByZXF1aXJlIF9fc2FuaXRpemVyX2luc3RhbGxfbWFsbG9jX2FuZF9mcmVlX2hvb2tzIHRvIGJlIGNhbGxlZCBhdCBzdGFydHVwCisgICAgIGFuZCB0aHVzIHdpbGwgbm90IGJlIGNhbGxlZCBvbiBtYWxsb2MvZnJlZSB2ZXJ5IGVhcmx5IGluIHRoZSBwcm9jZXNzLgorICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaG9va3MgY3VycmVudGx5IGluc3RhbGxlZCBvciAwIG9uIGZhaWx1cmUuCisgICAgIE5vdCB0aHJlYWQtc2FmZSwgc2hvdWxkIGJlIGNhbGxlZCBpbiB0aGUgbWFpbiB0aHJlYWQgYmVmb3JlIHN0YXJ0aW5nCisgICAgIG90aGVyIHRocmVhZHMuCisgICovCisgIGludCBfX3Nhbml0aXplcl9pbnN0YWxsX21hbGxvY19hbmRfZnJlZV9ob29rcygKKyAgICAgIHZvaWQgKCptYWxsb2NfaG9vaykoY29uc3Qgdm9sYXRpbGUgdm9pZCAqLCBzaXplX3QpLAorICAgICAgdm9pZCAoKmZyZWVfaG9vaykoY29uc3Qgdm9sYXRpbGUgdm9pZCAqKSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zYW5pdGl6ZXIvYXNhbl9pbnRlcmZhY2UuaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc2FuaXRpemVyL2FzYW5faW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdiYTBjZQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc2FuaXRpemVyL2FzYW5faW50ZXJmYWNlLmgKQEAgLTAsMCArMSwxNTEgQEAKKy8vPT09LS0gc2FuaXRpemVyL2FzYW5faW50ZXJmYWNlLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi0gQysrIC0qLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBBZGRyZXNzU2FuaXRpemVyLgorLy8KKy8vIFB1YmxpYyBpbnRlcmZhY2UgaGVhZGVyLgorLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKyNpZm5kZWYgU0FOSVRJWkVSX0FTQU5fSU5URVJGQUNFX0gKKyNkZWZpbmUgU0FOSVRJWkVSX0FTQU5fSU5URVJGQUNFX0gKKworI2luY2x1ZGUgPHNhbml0aXplci9jb21tb25faW50ZXJmYWNlX2RlZnMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorICAvLyBNYXJrcyBtZW1vcnkgcmVnaW9uIFthZGRyLCBhZGRyK3NpemUpIGFzIHVuYWRkcmVzc2FibGUuCisgIC8vIFRoaXMgbWVtb3J5IG11c3QgYmUgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgdGhlIHVzZXIgcHJvZ3JhbS4gQWNjZXNzaW5nCisgIC8vIGFkZHJlc3NlcyBpbiB0aGlzIHJlZ2lvbiBmcm9tIGluc3RydW1lbnRlZCBjb2RlIGlzIGZvcmJpZGRlbiB1bnRpbAorICAvLyB0aGlzIHJlZ2lvbiBpcyB1bnBvaXNvbmVkLiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBndWFyYW50ZWVkIHRvIHBvaXNvbgorICAvLyB0aGUgd2hvbGUgcmVnaW9uIC0gaXQgbWF5IHBvaXNvbiBvbmx5IHN1YnJlZ2lvbiBvZiBbYWRkciwgYWRkcitzaXplKSBkdWUKKyAgLy8gdG8gQVNhbiBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zLgorICAvLyBNZXRob2QgaXMgTk9UIHRocmVhZC1zYWZlIGluIHRoZSBzZW5zZSB0aGF0IG5vIHR3byB0aHJlYWRzIGNhbgorICAvLyAodW4pcG9pc29uIG1lbW9yeSBpbiB0aGUgc2FtZSBtZW1vcnkgcmVnaW9uIHNpbXVsdGFuZW91c2x5LgorICB2b2lkIF9fYXNhbl9wb2lzb25fbWVtb3J5X3JlZ2lvbih2b2lkIGNvbnN0IHZvbGF0aWxlICphZGRyLCBzaXplX3Qgc2l6ZSk7CisgIC8vIE1hcmtzIG1lbW9yeSByZWdpb24gW2FkZHIsIGFkZHIrc2l6ZSkgYXMgYWRkcmVzc2FibGUuCisgIC8vIFRoaXMgbWVtb3J5IG11c3QgYmUgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgdGhlIHVzZXIgcHJvZ3JhbS4gQWNjZXNzaW5nCisgIC8vIGFkZHJlc3NlcyBpbiB0aGlzIHJlZ2lvbiBpcyBhbGxvd2VkIHVudGlsIHRoaXMgcmVnaW9uIGlzIHBvaXNvbmVkIGFnYWluLgorICAvLyBUaGlzIGZ1bmN0aW9uIG1heSB1bnBvaXNvbiBhIHN1cGVycmVnaW9uIG9mIFthZGRyLCBhZGRyK3NpemUpIGR1ZSB0bworICAvLyBBU2FuIGFsaWdubWVudCByZXN0cmljdGlvbnMuCisgIC8vIE1ldGhvZCBpcyBOT1QgdGhyZWFkLXNhZmUgaW4gdGhlIHNlbnNlIHRoYXQgbm8gdHdvIHRocmVhZHMgY2FuCisgIC8vICh1bilwb2lzb24gbWVtb3J5IGluIHRoZSBzYW1lIG1lbW9yeSByZWdpb24gc2ltdWx0YW5lb3VzbHkuCisgIHZvaWQgX19hc2FuX3VucG9pc29uX21lbW9yeV9yZWdpb24odm9pZCBjb25zdCB2b2xhdGlsZSAqYWRkciwgc2l6ZV90IHNpemUpOworCisvLyBVc2VyIGNvZGUgc2hvdWxkIHVzZSBtYWNyb3MgaW5zdGVhZCBvZiBmdW5jdGlvbnMuCisjaWYgX19oYXNfZmVhdHVyZShhZGRyZXNzX3Nhbml0aXplcikgfHwgZGVmaW5lZChfX1NBTklUSVpFX0FERFJFU1NfXykKKyNkZWZpbmUgQVNBTl9QT0lTT05fTUVNT1JZX1JFR0lPTihhZGRyLCBzaXplKSBcCisgIF9fYXNhbl9wb2lzb25fbWVtb3J5X3JlZ2lvbigoYWRkciksIChzaXplKSkKKyNkZWZpbmUgQVNBTl9VTlBPSVNPTl9NRU1PUllfUkVHSU9OKGFkZHIsIHNpemUpIFwKKyAgX19hc2FuX3VucG9pc29uX21lbW9yeV9yZWdpb24oKGFkZHIpLCAoc2l6ZSkpCisjZWxzZQorI2RlZmluZSBBU0FOX1BPSVNPTl9NRU1PUllfUkVHSU9OKGFkZHIsIHNpemUpIFwKKyAgKCh2b2lkKShhZGRyKSwgKHZvaWQpKHNpemUpKQorI2RlZmluZSBBU0FOX1VOUE9JU09OX01FTU9SWV9SRUdJT04oYWRkciwgc2l6ZSkgXAorICAoKHZvaWQpKGFkZHIpLCAodm9pZCkoc2l6ZSkpCisjZW5kaWYKKworICAvLyBSZXR1cm5zIDEgaWYgYWRkciBpcyBwb2lzb25lZCAoaS5lLiAxLWJ5dGUgcmVhZC93cml0ZSBhY2Nlc3MgdG8gdGhpcworICAvLyBhZGRyZXNzIHdpbGwgcmVzdWx0IGluIGVycm9yIHJlcG9ydCBmcm9tIEFkZHJlc3NTYW5pdGl6ZXIpLgorICAvLyBPdGhlcndpc2UgcmV0dXJucyAwLgorICBpbnQgX19hc2FuX2FkZHJlc3NfaXNfcG9pc29uZWQodm9pZCBjb25zdCB2b2xhdGlsZSAqYWRkcik7CisKKyAgLy8gSWYgYXQgbGVhc3Qgb25lIGJ5dGUgaW4gW2JlZywgYmVnK3NpemUpIGlzIHBvaXNvbmVkLCByZXR1cm4gdGhlIGFkZHJlc3MKKyAgLy8gb2YgdGhlIGZpcnN0IHN1Y2ggYnl0ZS4gT3RoZXJ3aXNlIHJldHVybiAwLgorICB2b2lkICpfX2FzYW5fcmVnaW9uX2lzX3BvaXNvbmVkKHZvaWQgKmJlZywgc2l6ZV90IHNpemUpOworCisgIC8vIFByaW50IHRoZSBkZXNjcmlwdGlvbiBvZiBhZGRyICh1c2VmdWwgd2hlbiBkZWJ1Z2dpbmcgaW4gZ2RiKS4KKyAgdm9pZCBfX2FzYW5fZGVzY3JpYmVfYWRkcmVzcyh2b2lkICphZGRyKTsKKworICAvLyBVc2VmdWwgZm9yIGNhbGxpbmcgZnJvbSBhIGRlYnVnZ2VyIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBhbiBBU2FuIGVycm9yLgorICAvLyBSZXR1cm5zIDEgaWYgYW4gZXJyb3IgaGFzIGJlZW4gKG9yIGlzIGJlaW5nKSByZXBvcnRlZCwgb3RoZXJ3aXNlIHJldHVybnMgMC4KKyAgaW50IF9fYXNhbl9yZXBvcnRfcHJlc2VudCgpOworCisgIC8vIFVzZWZ1bCBmb3IgY2FsbGluZyBmcm9tIGEgZGVidWdnZXIgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IGFuIEFTYW4gZXJyb3IuCisgIC8vIElmIGFuIGVycm9yIGhhcyBiZWVuIChvciBpcyBiZWluZykgcmVwb3J0ZWQsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHJldHVybgorICAvLyB0aGUgcGMsIGJwLCBzcCwgYWRkcmVzcywgYWNjZXNzIHR5cGUgKDAgPSByZWFkLCAxID0gd3JpdGUpLCBhY2Nlc3Mgc2l6ZSBhbmQKKyAgLy8gYnVnIGRlc2NyaXB0aW9uIChlLmcuICJoZWFwLXVzZS1hZnRlci1mcmVlIikuIE90aGVyd2lzZSB0aGV5IHJldHVybiAwLgorICB2b2lkICpfX2FzYW5fZ2V0X3JlcG9ydF9wYygpOworICB2b2lkICpfX2FzYW5fZ2V0X3JlcG9ydF9icCgpOworICB2b2lkICpfX2FzYW5fZ2V0X3JlcG9ydF9zcCgpOworICB2b2lkICpfX2FzYW5fZ2V0X3JlcG9ydF9hZGRyZXNzKCk7CisgIGludCBfX2FzYW5fZ2V0X3JlcG9ydF9hY2Nlc3NfdHlwZSgpOworICBzaXplX3QgX19hc2FuX2dldF9yZXBvcnRfYWNjZXNzX3NpemUoKTsKKyAgY29uc3QgY2hhciAqX19hc2FuX2dldF9yZXBvcnRfZGVzY3JpcHRpb24oKTsKKworICAvLyBVc2VmdWwgZm9yIGNhbGxpbmcgZnJvbSB0aGUgZGVidWdnZXIgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IGEgcG9pbnRlci4KKyAgLy8gUmV0dXJucyB0aGUgY2F0ZWdvcnkgb2YgdGhlIGdpdmVuIHBvaW50ZXIgYXMgYSBjb25zdGFudCBzdHJpbmcuCisgIC8vIFBvc3NpYmxlIHJldHVybiB2YWx1ZXMgYXJlICJnbG9iYWwiLCAic3RhY2siLCAic3RhY2stZmFrZSIsICJoZWFwIiwKKyAgLy8gImhlYXAtaW52YWxpZCIsICJzaGFkb3ctbG93IiwgInNoYWRvdy1nYXAiLCAic2hhZG93LWhpZ2giLCAidW5rbm93biIuCisgIC8vIElmIGdsb2JhbCBvciBzdGFjaywgdHJpZXMgdG8gYWxzbyByZXR1cm4gdGhlIHZhcmlhYmxlIG5hbWUsIGFkZHJlc3MgYW5kCisgIC8vIHNpemUuIElmIGhlYXAsIHRyaWVzIHRvIHJldHVybiB0aGUgY2h1bmsgYWRkcmVzcyBhbmQgc2l6ZS4gJ25hbWUnIHNob3VsZAorICAvLyBwb2ludCB0byBhbiBhbGxvY2F0ZWQgYnVmZmVyIG9mIHNpemUgJ25hbWVfc2l6ZScuCisgIGNvbnN0IGNoYXIgKl9fYXNhbl9sb2NhdGVfYWRkcmVzcyh2b2lkICphZGRyLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKnJlZ2lvbl9hZGRyZXNzLCBzaXplX3QgKnJlZ2lvbl9zaXplKTsKKworICAvLyBVc2VmdWwgZm9yIGNhbGxpbmcgZnJvbSB0aGUgZGVidWdnZXIgdG8gZ2V0IHRoZSBhbGxvY2F0aW9uIHN0YWNrIHRyYWNlCisgIC8vIGFuZCB0aHJlYWQgSUQgZm9yIGEgaGVhcCBhZGRyZXNzLiBTdG9yZXMgdXAgdG8gJ3NpemUnIGZyYW1lcyBpbnRvICd0cmFjZScsCisgIC8vIHJldHVybnMgdGhlIG51bWJlciBvZiBzdG9yZWQgZnJhbWVzIG9yIDAgb24gZXJyb3IuCisgIHNpemVfdCBfX2FzYW5fZ2V0X2FsbG9jX3N0YWNrKHZvaWQgKmFkZHIsIHZvaWQgKip0cmFjZSwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqdGhyZWFkX2lkKTsKKworICAvLyBVc2VmdWwgZm9yIGNhbGxpbmcgZnJvbSB0aGUgZGVidWdnZXIgdG8gZ2V0IHRoZSBmcmVlIHN0YWNrIHRyYWNlCisgIC8vIGFuZCB0aHJlYWQgSUQgZm9yIGEgaGVhcCBhZGRyZXNzLiBTdG9yZXMgdXAgdG8gJ3NpemUnIGZyYW1lcyBpbnRvICd0cmFjZScsCisgIC8vIHJldHVybnMgdGhlIG51bWJlciBvZiBzdG9yZWQgZnJhbWVzIG9yIDAgb24gZXJyb3IuCisgIHNpemVfdCBfX2FzYW5fZ2V0X2ZyZWVfc3RhY2sodm9pZCAqYWRkciwgdm9pZCAqKnRyYWNlLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnRocmVhZF9pZCk7CisKKyAgLy8gVXNlZnVsIGZvciBjYWxsaW5nIGZyb20gdGhlIGRlYnVnZ2VyIHRvIGdldCB0aGUgY3VycmVudCBzaGFkb3cgbWVtb3J5CisgIC8vIG1hcHBpbmcuCisgIHZvaWQgX19hc2FuX2dldF9zaGFkb3dfbWFwcGluZyhzaXplX3QgKnNoYWRvd19zY2FsZSwgc2l6ZV90ICpzaGFkb3dfb2Zmc2V0KTsKKworICAvLyBUaGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHRvIHJlcG9ydCBhbiBlcnJvci4KKyAgLy8gSG93ZXZlciBpdCBpcyBzdGlsbCBhIHBhcnQgb2YgdGhlIGludGVyZmFjZSBiZWNhdXNlIHVzZXJzIG1heSB3YW50IHRvCisgIC8vIHNldCBhIGJyZWFrcG9pbnQgb24gdGhpcyBmdW5jdGlvbiBpbiBhIGRlYnVnZ2VyLgorICB2b2lkIF9fYXNhbl9yZXBvcnRfZXJyb3Iodm9pZCAqcGMsIHZvaWQgKmJwLCB2b2lkICpzcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFkZHIsIGludCBpc193cml0ZSwgc2l6ZV90IGFjY2Vzc19zaXplKTsKKworICAvLyBEZXByZWNhdGVkLiBDYWxsIF9fc2FuaXRpemVyX3NldF9kZWF0aF9jYWxsYmFjayBpbnN0ZWFkLgorICB2b2lkIF9fYXNhbl9zZXRfZGVhdGhfY2FsbGJhY2sodm9pZCAoKmNhbGxiYWNrKSh2b2lkKSk7CisKKyAgdm9pZCBfX2FzYW5fc2V0X2Vycm9yX3JlcG9ydF9jYWxsYmFjayh2b2lkICgqY2FsbGJhY2spKGNvbnN0IGNoYXIqKSk7CisKKyAgLy8gVXNlciBtYXkgcHJvdmlkZSBmdW5jdGlvbiB0aGF0IHdvdWxkIGJlIGNhbGxlZCByaWdodCB3aGVuIEFTYW4gZGV0ZWN0cworICAvLyBhbiBlcnJvci4gVGhpcyBjYW4gYmUgdXNlZCB0byBub3RpY2UgY2FzZXMgd2hlbiBBU2FuIGRldGVjdHMgYW4gZXJyb3IsIGJ1dAorICAvLyB0aGUgcHJvZ3JhbSBjcmFzaGVzIGJlZm9yZSBBU2FuIHJlcG9ydCBpcyBwcmludGVkLgorICB2b2lkIF9fYXNhbl9vbl9lcnJvcigpOworCisgIC8vIFByaW50cyBhY2N1bXVsYXRlZCBzdGF0cyB0byBzdGRlcnIuIFVzZWQgZm9yIGRlYnVnZ2luZy4KKyAgdm9pZCBfX2FzYW5fcHJpbnRfYWNjdW11bGF0ZWRfc3RhdHMoKTsKKworICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHVzZXIgYW5kIHNob3VsZCByZXR1cm4KKyAgLy8gYSBzdHJpbmcgY29udGFpbmluZyBBU2FuIHJ1bnRpbWUgb3B0aW9ucy4gU2VlIGFzYW5fZmxhZ3MuaCBmb3IgZGV0YWlscy4KKyAgY29uc3QgY2hhciogX19hc2FuX2RlZmF1bHRfb3B0aW9ucygpOworCisgIC8vIFRoZSBmb2xsb3dpbmcgMiBmdW5jdGlvbnMgZmFjaWxpdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24gaW4gcHJlc2VuY2Ugb2YKKyAgLy8gYXNhbidzIGZha2Ugc3RhY2suCisKKyAgLy8gUmV0dXJucyBhbiBvcGFxdWUgaGFuZGxlciB0byBiZSB1c2VkIGxhdGVyIGluIF9fYXNhbl9hZGRyX2lzX2luX2Zha2Vfc3RhY2suCisgIC8vIFJldHVybnMgTlVMTCBpZiB0aGUgY3VycmVudCB0aHJlYWQgZG9lcyBub3QgaGF2ZSBhIGZha2Ugc3RhY2suCisgIHZvaWQgKl9fYXNhbl9nZXRfY3VycmVudF9mYWtlX3N0YWNrKCk7CisKKyAgLy8gSWYgZmFrZV9zdGFjayBpcyBub24tTlVMTCBhbmQgYWRkciBiZWxvbmdzIHRvIGEgZmFrZSBmcmFtZSBpbgorICAvLyBmYWtlX3N0YWNrLCByZXR1cm5zIHRoZSBhZGRyZXNzIG9uIHJlYWwgc3RhY2sgdGhhdCBjb3JyZXNwb25kcyB0bworICAvLyB0aGUgZmFrZSBmcmFtZSBhbmQgc2V0cyBiZWcvZW5kIHRvIHRoZSBib3VuZGFyaWVzIG9mIHRoaXMgZmFrZSBmcmFtZS4KKyAgLy8gT3RoZXJ3aXNlIHJldHVybnMgTlVMTCBhbmQgZG9lcyBub3QgdG91Y2ggYmVnL2VuZC4KKyAgLy8gSWYgYmVnL2VuZCBhcmUgTlVMTCwgdGhleSBhcmUgbm90IHRvdWNoZWQuCisgIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tIGEgdGhyZWFkIG90aGVyIHRoYW4gdGhlIG93bmVyIG9mCisgIC8vIGZha2Vfc3RhY2ssIGJ1dCB0aGUgb3duZXIgdGhyZWFkIG5lZWQgdG8gYmUgYWxpdmUuCisgIHZvaWQgKl9fYXNhbl9hZGRyX2lzX2luX2Zha2Vfc3RhY2sodm9pZCAqZmFrZV9zdGFjaywgdm9pZCAqYWRkciwgdm9pZCAqKmJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqZW5kKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBTQU5JVElaRVJfQVNBTl9JTlRFUkZBQ0VfSApkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zYW5pdGl6ZXIvY29tbW9uX2ludGVyZmFjZV9kZWZzLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3Nhbml0aXplci9jb21tb25faW50ZXJmYWNlX2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzBmMGYyCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zYW5pdGl6ZXIvY29tbW9uX2ludGVyZmFjZV9kZWZzLmgKQEAgLTAsMCArMSwxODkgQEAKKy8vPT09LS0gc2FuaXRpemVyL2NvbW1vbl9pbnRlcmZhY2VfZGVmcy5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi0gQysrIC0qLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gQ29tbW9uIHBhcnQgb2YgdGhlIHB1YmxpYyBzYW5pdGl6ZXIgaW50ZXJmYWNlLgorLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKworI2lmbmRlZiBTQU5JVElaRVJfQ09NTU9OX0lOVEVSRkFDRV9ERUZTX0gKKyNkZWZpbmUgU0FOSVRJWkVSX0NPTU1PTl9JTlRFUkZBQ0VfREVGU19ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworLy8gR0NDIGRvZXMgbm90IHVuZGVyc3RhbmQgX19oYXNfZmVhdHVyZS4KKyNpZiAhZGVmaW5lZChfX2hhc19mZWF0dXJlKQorIyBkZWZpbmUgX19oYXNfZmVhdHVyZSh4KSAwCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorICAvLyBBcmd1bWVudHMgZm9yIF9fc2FuaXRpemVyX3NhbmRib3hfb25fbm90aWZ5KCkgYmVsb3cuCisgIHR5cGVkZWYgc3RydWN0IHsKKyAgICAvLyBFbmFibGUgc2FuZGJveCBzdXBwb3J0IGluIHNhbml0aXplciBjb3ZlcmFnZS4KKyAgICBpbnQgY292ZXJhZ2Vfc2FuZGJveGVkOworICAgIC8vIEZpbGUgZGVzY3JpcHRvciB0byB3cml0ZSBjb3ZlcmFnZSBkYXRhIHRvLiBJZiAtMSBpcyBwYXNzZWQsIGEgZmlsZSB3aWxsCisgICAgLy8gYmUgcHJlLW9wZW5lZCBieSBfX3Nhbml0aXplcl9zYW5kb2J4X29uX25vdGlmeSgpLiBUaGlzIGZpZWxkIGhhcyBubworICAgIC8vIGVmZmVjdCBpZiBjb3ZlcmFnZV9zYW5kYm94ZWQgPT0gMC4KKyAgICBpbnRwdHJfdCBjb3ZlcmFnZV9mZDsKKyAgICAvLyBJZiBub24temVybywgc3BsaXQgdGhlIGNvdmVyYWdlIGRhdGEgaW50byB3ZWxsLWZvcm1lZCBibG9ja3MuIFRoaXMgaXMKKyAgICAvLyB1c2VmdWwgd2hlbiBjb3ZlcmFnZV9mZCBpcyBhIHNvY2tldCBkZXNjcmlwdG9yLiBFYWNoIGJsb2NrIHdpbGwgY29udGFpbgorICAgIC8vIGEgaGVhZGVyLCBhbGxvd2luZyBkYXRhIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzIHRvIGJlIHNlbnQgb3ZlciB0aGUgc2FtZQorICAgIC8vIHNvY2tldC4KKyAgICB1bnNpZ25lZCBpbnQgY292ZXJhZ2VfbWF4X2Jsb2NrX3NpemU7CisgIH0gX19zYW5pdGl6ZXJfc2FuZGJveF9hcmd1bWVudHM7CisKKyAgLy8gVGVsbCB0aGUgdG9vbHMgdG8gd3JpdGUgdGhlaXIgcmVwb3J0cyB0byAicGF0aC48cGlkPiIgaW5zdGVhZCBvZiBzdGRlcnIuCisgIHZvaWQgX19zYW5pdGl6ZXJfc2V0X3JlcG9ydF9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpOworICAvLyBUZWxsIHRoZSB0b29scyB0byB3cml0ZSB0aGVpciByZXBvcnRzIHRvIHRoZSBwcm92aWRlZCBmaWxlIGRlc2NyaXB0b3IKKyAgLy8gKGNhc3RlZCB0byB2b2lkICopLgorICB2b2lkIF9fc2FuaXRpemVyX3NldF9yZXBvcnRfZmQodm9pZCAqZmQpOworCisgIC8vIE5vdGlmeSB0aGUgdG9vbHMgdGhhdCB0aGUgc2FuZGJveCBpcyBnb2luZyB0byBiZSB0dXJuZWQgb24uIFRoZSByZXNlcnZlZAorICAvLyBwYXJhbWV0ZXIgd2lsbCBiZSB1c2VkIGluIHRoZSBmdXR1cmUgdG8gaG9sZCBhIHN0cnVjdHVyZSB3aXRoIGZ1bmN0aW9ucworICAvLyB0aGF0IHRoZSB0b29scyBtYXkgY2FsbCB0byBieXBhc3MgdGhlIHNhbmRib3guCisgIHZvaWQgX19zYW5pdGl6ZXJfc2FuZGJveF9vbl9ub3RpZnkoX19zYW5pdGl6ZXJfc2FuZGJveF9hcmd1bWVudHMgKmFyZ3MpOworCisgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0b29sIHdoZW4gaXQgaGFzIGp1c3QgZmluaXNoZWQgcmVwb3J0aW5nCisgIC8vIGFuIGVycm9yLiAnZXJyb3Jfc3VtbWFyeScgaXMgYSBvbmUtbGluZSBzdHJpbmcgdGhhdCBzdW1tYXJpemVzCisgIC8vIHRoZSBlcnJvciBtZXNzYWdlLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBjbGllbnQuCisgIHZvaWQgX19zYW5pdGl6ZXJfcmVwb3J0X2Vycm9yX3N1bW1hcnkoY29uc3QgY2hhciAqZXJyb3Jfc3VtbWFyeSk7CisKKyAgLy8gU29tZSBvZiB0aGUgc2FuaXRpemVycyAoZS5nLiBhc2FuL3RzYW4pIG1heSBtaXNzIGJ1Z3MgdGhhdCBoYXBwZW4KKyAgLy8gaW4gdW5hbGlnbmVkIGxvYWRzL3N0b3Jlcy4gSW4gb3JkZXIgdG8gZmluZCBzdWNoIGJ1Z3MgcmVsaWFibHkgb25lIG5lZWRzCisgIC8vIHRvIHJlcGxhY2UgcGxhaW4gdW5hbGlnbmVkIGxvYWRzL3N0b3JlcyB3aXRoIHRoZXNlIGNhbGxzLgorICB1aW50MTZfdCBfX3Nhbml0aXplcl91bmFsaWduZWRfbG9hZDE2KGNvbnN0IHZvaWQgKnApOworICB1aW50MzJfdCBfX3Nhbml0aXplcl91bmFsaWduZWRfbG9hZDMyKGNvbnN0IHZvaWQgKnApOworICB1aW50NjRfdCBfX3Nhbml0aXplcl91bmFsaWduZWRfbG9hZDY0KGNvbnN0IHZvaWQgKnApOworICB2b2lkIF9fc2FuaXRpemVyX3VuYWxpZ25lZF9zdG9yZTE2KHZvaWQgKnAsIHVpbnQxNl90IHgpOworICB2b2lkIF9fc2FuaXRpemVyX3VuYWxpZ25lZF9zdG9yZTMyKHZvaWQgKnAsIHVpbnQzMl90IHgpOworICB2b2lkIF9fc2FuaXRpemVyX3VuYWxpZ25lZF9zdG9yZTY0KHZvaWQgKnAsIHVpbnQ2NF90IHgpOworCisgIC8vIEFubm90YXRlIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgY29udGlndW91cyBjb250YWluZXIsIHN1Y2ggYXMKKyAgLy8gc3RkOjp2ZWN0b3IsIHN0ZDo6c3RyaW5nIG9yIHNpbWlsYXIuCisgIC8vIEEgY29udGlndW91cyBjb250YWluZXIgaXMgYSBjb250YWluZXIgdGhhdCBrZWVwcyBhbGwgb2YgaXRzIGVsZW1lbnRzCisgIC8vIGluIGEgY29udGlndW91cyByZWdpb24gb2YgbWVtb3J5LiBUaGUgY29udGFpbmVyIG93bnMgdGhlIHJlZ2lvbiBvZiBtZW1vcnkKKyAgLy8gW2JlZywgZW5kKTsgdGhlIG1lbW9yeSBbYmVnLCBtaWQpIGlzIHVzZWQgdG8gc3RvcmUgdGhlIGN1cnJlbnQgZWxlbWVudHMKKyAgLy8gYW5kIHRoZSBtZW1vcnkgW21pZCwgZW5kKSBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIGVsZW1lbnRzOworICAvLyBiZWcgPD0gbWlkIDw9IGVuZC4gRm9yIGV4YW1wbGUsIGluICJzdGQ6OnZlY3Rvcjw+IHYiCisgIC8vICAgYmVnID0gJnZbMF07CisgIC8vICAgZW5kID0gYmVnICsgdi5jYXBhY2l0eSgpICogc2l6ZW9mKHZbMF0pOworICAvLyAgIG1pZCA9IGJlZyArIHYuc2l6ZSgpICAgICAqIHNpemVvZih2WzBdKTsKKyAgLy8KKyAgLy8gVGhpcyBhbm5vdGF0aW9uIHRlbGxzIHRoZSBTYW5pdGl6ZXIgdG9vbCBhYm91dCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUKKyAgLy8gY29udGFpbmVyIHNvIHRoYXQgdGhlIHRvb2wgY2FuIHJlcG9ydCBlcnJvcnMgd2hlbiBtZW1vcnkgZnJvbSBbbWlkLCBlbmQpCisgIC8vIGlzIGFjY2Vzc2VkLiBJbnNlcnQgdGhpcyBhbm5vdGF0aW9uIGludG8gbWV0aG9kcyBsaWtlIHB1c2hfYmFjay9wb3BfYmFjay4KKyAgLy8gU3VwcGx5IHRoZSBvbGQgYW5kIHRoZSBuZXcgdmFsdWVzIG9mIG1pZCAob2xkX21pZC9uZXdfbWlkKS4KKyAgLy8gSW4gdGhlIGluaXRpYWwgc3RhdGUgbWlkID09IGVuZCBhbmQgc28gc2hvdWxkIGJlIHRoZSBmaW5hbAorICAvLyBzdGF0ZSB3aGVuIHRoZSBjb250YWluZXIgaXMgZGVzdHJveWVkIG9yIHdoZW4gaXQgcmVhbGxvY2F0ZXMgdGhlIHN0b3JhZ2UuCisgIC8vCisgIC8vIFVzZSB3aXRoIGNhdXRpb24gYW5kIGRvbid0IHVzZSBmb3IgYW55dGhpbmcgb3RoZXIgdGhhbiB2ZWN0b3ItbGlrZSBjbGFzc2VzLgorICAvLworICAvLyBGb3IgQWRkcmVzc1Nhbml0aXplciwgJ2JlZycgc2hvdWxkIGJlIDgtYWxpZ25lZCBhbmQgJ2VuZCcgc2hvdWxkCisgIC8vIGJlIGVpdGhlciA4LWFsaWduZWQgb3IgaXQgc2hvdWxkIHBvaW50IHRvIHRoZSBlbmQgb2YgYSBzZXBhcmF0ZSBoZWFwLSwKKyAgLy8gc3RhY2stLCBvciBnbG9iYWwtIGFsbG9jYXRlZCBidWZmZXIuIEkuZS4gdGhlIGZvbGxvd2luZyB3aWxsIG5vdCB3b3JrOgorICAvLyAgIGludDY0X3QgeFsyXTsgIC8vIDE2IGJ5dGVzLCA4LWFsaWduZWQuCisgIC8vICAgY2hhciAqYmVnID0gKGNoYXIgKikmeFswXTsKKyAgLy8gICBjaGFyICplbmQgPSBiZWcgKyAxMjsgIC8vIE5vdCA4IGFsaWduZWQsIG5vdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisgIC8vIFRoaXMgaG93ZXZlciB3aWxsIHdvcmsgZmluZToKKyAgLy8gICBpbnQzMl90IHhbM107ICAvLyAxMiBieXRlcywgYnV0IDgtYWxpZ25lZCB1bmRlciBBZGRyZXNzU2FuaXRpemVyLgorICAvLyAgIGNoYXIgKmJlZyA9IChjaGFyKikmeFswXTsKKyAgLy8gICBjaGFyICplbmQgPSBiZWcgKyAxMjsgIC8vIE5vdCA4LWFsaWduZWQsIGJ1dCBpcyB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisgIHZvaWQgX19zYW5pdGl6ZXJfYW5ub3RhdGVfY29udGlndW91c19jb250YWluZXIoY29uc3Qgdm9pZCAqYmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpvbGRfbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm5ld19taWQpOworICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRpZ3VvdXMgY29udGFpbmVyIFtiZWcsIGVuZCkgaXMgcHJvcGVybHkgcG9pc29uZWQKKyAgLy8gKGUuZy4gd2l0aCBfX3Nhbml0aXplcl9hbm5vdGF0ZV9jb250aWd1b3VzX2NvbnRhaW5lciksIGkuZS4gaWYKKyAgLy8gIC0gW2JlZywgbWlkKSBpcyBhZGRyZXNzYWJsZSwKKyAgLy8gIC0gW21pZCwgZW5kKSBpcyB1bmFkZHJlc3NhYmxlLgorICAvLyBGdWxsIHZlcmlmaWNhdGlvbiByZXF1aXJlcyBPKGVuZC1iZWcpIHRpbWU7IHRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gYXZvaWQKKyAgLy8gc3VjaCBjb21wbGV4aXR5IGJ5IHRvdWNoaW5nIG9ubHkgcGFydHMgb2YgdGhlIGNvbnRhaW5lciBhcm91bmQgYmVnL21pZC9lbmQuCisgIGludCBfX3Nhbml0aXplcl92ZXJpZnlfY29udGlndW91c19jb250YWluZXIoY29uc3Qgdm9pZCAqYmVnLCBjb25zdCB2b2lkICptaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZW5kKTsKKworICAvLyBTaW1pbGFyIHRvIF9fc2FuaXRpemVyX3ZlcmlmeV9jb250aWd1b3VzX2NvbnRhaW5lciBidXQgcmV0dXJucyB0aGUgYWRkcmVzcworICAvLyBvZiB0aGUgZmlyc3QgaW1wcm9wZXJseSBwb2lzb25lZCBieXRlIG90aGVyd2lzZS4gUmV0dXJucyBudWxsIGlmIHRoZSBhcmVhCisgIC8vIGlzIHBvaXNvbmVkIHByb3Blcmx5LgorICBjb25zdCB2b2lkICpfX3Nhbml0aXplcl9jb250aWd1b3VzX2NvbnRhaW5lcl9maW5kX2JhZF9hZGRyZXNzKAorICAgICAgY29uc3Qgdm9pZCAqYmVnLCBjb25zdCB2b2lkICptaWQsIGNvbnN0IHZvaWQgKmVuZCk7CisKKyAgLy8gUHJpbnQgdGhlIHN0YWNrIHRyYWNlIGxlYWRpbmcgdG8gdGhpcyBjYWxsLiBVc2VmdWwgZm9yIGRlYnVnZ2luZyB1c2VyIGNvZGUuCisgIHZvaWQgX19zYW5pdGl6ZXJfcHJpbnRfc3RhY2tfdHJhY2UoKTsKKworICAvLyBTeW1ib2xpemVzIHRoZSBzdXBwbGllZCAncGMnIHVzaW5nIHRoZSBmb3JtYXQgc3RyaW5nICdmbXQnLgorICAvLyBPdXRwdXRzIGF0IG1vc3QgJ291dF9idWZfc2l6ZScgYnl0ZXMgaW50byAnb3V0X2J1ZicuCisgIC8vIFRoZSBmb3JtYXQgc3ludGF4IGlzIGRlc2NyaWJlZCBpbgorICAvLyBsaWIvc2FuaXRpemVyX2NvbW1vbi9zYW5pdGl6ZXJfc3RhY2t0cmFjZV9wcmludGVyLmguCisgIHZvaWQgX19zYW5pdGl6ZXJfc3ltYm9saXplX3BjKHZvaWQgKnBjLCBjb25zdCBjaGFyICpmbXQsIGNoYXIgKm91dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRfYnVmX3NpemUpOworICAvLyBTYW1lIGFzIF9fc2FuaXRpemVyX3N5bWJvbGl6ZV9wYywgYnV0IGZvciBkYXRhIHNlY3Rpb24gKGkuZS4gZ2xvYmFscykuCisgIHZvaWQgX19zYW5pdGl6ZXJfc3ltYm9saXplX2dsb2JhbCh2b2lkICpkYXRhX3B0ciwgY29uc3QgY2hhciAqZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqb3V0X2J1Ziwgc2l6ZV90IG91dF9idWZfc2l6ZSk7CisKKyAgLy8gU2V0cyB0aGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHJpZ2h0IGJlZm9yZSBkZWF0aCBvbiBlcnJvci4KKyAgLy8gUGFzc2luZyAwIHdpbGwgdW5zZXQgdGhlIGNhbGxiYWNrLgorICB2b2lkIF9fc2FuaXRpemVyX3NldF9kZWF0aF9jYWxsYmFjayh2b2lkICgqY2FsbGJhY2spKHZvaWQpKTsKKworICAvLyBJbnRlcmNlcHRvciBob29rcy4KKyAgLy8gV2hlbmV2ZXIgYSBsaWJjIGZ1bmN0aW9uIGludGVyY2VwdG9yIGlzIGNhbGxlZCBpdCBjaGVja3MgaWYgdGhlCisgIC8vIGNvcnJlc3BvbmRpbmcgd2VhayBob29rIGlzIGRlZmluZWQsIGFuZCBpdCBzbyAtLSBjYWxscyBpdC4KKyAgLy8gVGhlIHByaW1hcnkgdXNlIGNhc2UgaXMgZGF0YS1mbG93LWd1aWRlZCBmdXp6aW5nLCB3aGVyZSB0aGUgZnV6emVyIG5lZWRzCisgIC8vIHRvIGtub3cgd2hhdCBpcyBiZWluZyBwYXNzZWQgdG8gbGliYyBmdW5jdGlvbnMsIGUuZy4gbWVtY21wLgorICAvLyBGSVhNRTogaW1wbGVtZW50IG1vcmUgaG9va3MuCisgIHZvaWQgX19zYW5pdGl6ZXJfd2Vha19ob29rX21lbWNtcCh2b2lkICpjYWxsZWRfcGMsIGNvbnN0IHZvaWQgKnMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqczIsIHNpemVfdCBuLCBpbnQgcmVzdWx0KTsKKyAgdm9pZCBfX3Nhbml0aXplcl93ZWFrX2hvb2tfc3RybmNtcCh2b2lkICpjYWxsZWRfcGMsIGNvbnN0IGNoYXIgKnMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqczIsIHNpemVfdCBuLCBpbnQgcmVzdWx0KTsKKyAgdm9pZCBfX3Nhbml0aXplcl93ZWFrX2hvb2tfc3RybmNhc2VjbXAodm9pZCAqY2FsbGVkX3BjLCBjb25zdCBjaGFyICpzMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqczIsIHNpemVfdCBuLCBpbnQgcmVzdWx0KTsKKyAgdm9pZCBfX3Nhbml0aXplcl93ZWFrX2hvb2tfc3RyY21wKHZvaWQgKmNhbGxlZF9wYywgY29uc3QgY2hhciAqczEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzMiwgaW50IHJlc3VsdCk7CisgIHZvaWQgX19zYW5pdGl6ZXJfd2Vha19ob29rX3N0cmNhc2VjbXAodm9pZCAqY2FsbGVkX3BjLCBjb25zdCBjaGFyICpzMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzMiwgaW50IHJlc3VsdCk7CisgIHZvaWQgX19zYW5pdGl6ZXJfd2Vha19ob29rX3N0cnN0cih2b2lkICpjYWxsZWRfcGMsIGNvbnN0IGNoYXIgKnMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqczIsIGNoYXIgKnJlc3VsdCk7CisgIHZvaWQgX19zYW5pdGl6ZXJfd2Vha19ob29rX3N0cmNhc2VzdHIodm9pZCAqY2FsbGVkX3BjLCBjb25zdCBjaGFyICpzMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzMiwgY2hhciAqcmVzdWx0KTsKKyAgdm9pZCBfX3Nhbml0aXplcl93ZWFrX2hvb2tfbWVtbWVtKHZvaWQgKmNhbGxlZF9wYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnMxLCBzaXplX3QgbGVuMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnMyLCBzaXplX3QgbGVuMiwgdm9pZCAqcmVzdWx0KTsKKworICAvLyBQcmludHMgc3RhY2sgdHJhY2VzIGZvciBhbGwgbGl2ZSBoZWFwIGFsbG9jYXRpb25zIG9yZGVyZWQgYnkgdG90YWwKKyAgLy8gYWxsb2NhdGlvbiBzaXplIHVudGlsIGB0b3BfcGVyY2VudGAgb2YgdG90YWwgbGl2ZSBoZWFwIGlzIHNob3duLgorICAvLyBgdG9wX3BlcmNlbnRgIHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDEwMC4KKyAgLy8gRXhwZXJpbWVudGFsIGZlYXR1cmUgY3VycmVudGx5IGF2YWlsYWJsZSBvbmx5IHdpdGggYXNhbiBvbiBMaW51eC94ODZfNjQuCisgIHZvaWQgX19zYW5pdGl6ZXJfcHJpbnRfbWVtb3J5X3Byb2ZpbGUoc2l6ZV90IHRvcF9wZXJjZW50KTsKKworICAvLyBGaWJlciBhbm5vdGF0aW9uIGludGVyZmFjZS4KKyAgLy8gQmVmb3JlIHN3aXRjaGluZyB0byBhIGRpZmZlcmVudCBzdGFjaywgb25lIG11c3QgY2FsbAorICAvLyBfX3Nhbml0aXplcl9zdGFydF9zd2l0Y2hfZmliZXIgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUKKyAgLy8gZGVzdGluYXRpb24gc3RhY2sgYW5kIGl0cyBzaXplLiBXaGVuIGNvZGUgc3RhcnRzIHJ1bm5pbmcgb24gdGhlIG5ldyBzdGFjaywKKyAgLy8gaXQgbXVzdCBjYWxsIF9fc2FuaXRpemVyX2ZpbmlzaF9zd2l0Y2hfZmliZXIgdG8gZmluYWxpemUgdGhlIHN3aXRjaC4KKyAgLy8gVGhlIHN0YXJ0X3N3aXRjaCBmdW5jdGlvbiB0YWtlcyBhIHZvaWQqKiB0byBzdG9yZSB0aGUgY3VycmVudCBmYWtlIHN0YWNrIGlmCisgIC8vIHRoZXJlIGlzIG9uZSAoaXQgaXMgbmVlZGVkIHdoZW4gZGV0ZWN0X3N0YWNrX3VzZV9hZnRlcl9yZXR1cm4gaXMgZW5hYmxlZCkuCisgIC8vIFdoZW4gcmVzdG9yaW5nIGEgc3RhY2ssIHRoaXMgcG9pbnRlciBtdXN0IGJlIGdpdmVuIHRvIHRoZSBmaW5pc2hfc3dpdGNoCisgIC8vIGZ1bmN0aW9uLiBJbiBtb3N0IGNhc2VzLCB0aGlzIHZvaWQqIGNhbiBiZSBzdG9yZWQgb24gdGhlIHN0YWNrIGp1c3QgYmVmb3JlCisgIC8vIHN3aXRjaGluZy4gIFdoZW4gbGVhdmluZyBhIGZpYmVyIGRlZmluaXRlbHksIG51bGwgbXVzdCBiZSBwYXNzZWQgYXMgZmlyc3QKKyAgLy8gYXJndW1lbnQgdG8gdGhlIHN0YXJ0X3N3aXRjaCBmdW5jdGlvbiBzbyB0aGF0IHRoZSBmYWtlIHN0YWNrIGlzIGRlc3Ryb3llZC4KKyAgLy8gSWYgeW91IGRvIG5vdCB3YW50IHN1cHBvcnQgZm9yIHN0YWNrIHVzZS1hZnRlci1yZXR1cm4gZGV0ZWN0aW9uLCB5b3UgY2FuCisgIC8vIGFsd2F5cyBwYXNzIG51bGwgdG8gdGhlc2UgdHdvIGZ1bmN0aW9ucy4KKyAgLy8gTm90ZSB0aGF0IHRoZSBmYWtlIHN0YWNrIG1lY2hhbmlzbSBpcyBkaXNhYmxlZCBkdXJpbmcgZmliZXIgc3dpdGNoLCBzbyBpZiBhCisgIC8vIHNpZ25hbCBjYWxsYmFjayBydW5zIGR1cmluZyB0aGUgc3dpdGNoLCBpdCB3aWxsIG5vdCBiZW5lZml0IGZyb20gdGhlIHN0YWNrCisgIC8vIHVzZS1hZnRlci1yZXR1cm4gZGV0ZWN0aW9uLgorICB2b2lkIF9fc2FuaXRpemVyX3N0YXJ0X3N3aXRjaF9maWJlcih2b2lkICoqZmFrZV9zdGFja19zYXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpib3R0b20sIHNpemVfdCBzaXplKTsKKyAgdm9pZCBfX3Nhbml0aXplcl9maW5pc2hfc3dpdGNoX2ZpYmVyKHZvaWQgKmZha2Vfc3RhY2tfc2F2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKipib3R0b21fb2xkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpzaXplX29sZCk7CisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIFNBTklUSVpFUl9DT01NT05fSU5URVJGQUNFX0RFRlNfSApkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zYW5pdGl6ZXIvY292ZXJhZ2VfaW50ZXJmYWNlLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3Nhbml0aXplci9jb3ZlcmFnZV9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2JjNTAyCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zYW5pdGl6ZXIvY292ZXJhZ2VfaW50ZXJmYWNlLmgKQEAgLTAsMCArMSw2NiBAQAorLy89PT0tLSBzYW5pdGl6ZXIvY292ZXJhZ2VfaW50ZXJmYWNlLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLSBDKysgLSotPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCisvLyBQdWJsaWMgaW50ZXJmYWNlIGZvciBzYW5pdGl6ZXIgY292ZXJhZ2UuCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworCisjaWZuZGVmIFNBTklUSVpFUl9DT1ZFUkFHX0lOVEVSRkFDRV9ICisjZGVmaW5lIFNBTklUSVpFUl9DT1ZFUkFHX0lOVEVSRkFDRV9ICisKKyNpbmNsdWRlIDxzYW5pdGl6ZXIvY29tbW9uX2ludGVyZmFjZV9kZWZzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworICAvLyBJbml0aWFsaXplIGNvdmVyYWdlLgorICB2b2lkIF9fc2FuaXRpemVyX2Nvdl9pbml0KCk7CisgIC8vIFJlY29yZCBhbmQgZHVtcCBjb3ZlcmFnZSBpbmZvLgorICB2b2lkIF9fc2FuaXRpemVyX2Nvdl9kdW1wKCk7CisgIC8vIE9wZW4gPG5hbWU+LnNhbmNvdi5wYWNrZWQgaW4gdGhlIGNvdmVyYWdlIGRpcmVjdG9yeSBhbmQgcmV0dXJuIHRoZSBmaWxlCisgIC8vIGRlc2NyaXB0b3IuIFJldHVybnMgLTEgb24gZmFpbHVyZSwgb3IgaWYgY292ZXJhZ2UgZHVtcGluZyBpcyBkaXNhYmxlZC4KKyAgLy8gVGhpcyBpcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IHNhbmRib3hpbmcgY29kZS4KKyAgaW50cHRyX3QgX19zYW5pdGl6ZXJfbWF5YmVfb3Blbl9jb3ZfZmlsZShjb25zdCBjaGFyICpuYW1lKTsKKyAgLy8gR2V0IHRoZSBudW1iZXIgb2YgdW5pcXVlIGNvdmVyZWQgYmxvY2tzIChvciBlZGdlcykuCisgIC8vIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgY292ZXJhZ2UtZGlyZWN0ZWQgaW4tcHJvY2VzcyBmdXp6ZXJzLgorICB1aW50cHRyX3QgX19zYW5pdGl6ZXJfZ2V0X3RvdGFsX3VuaXF1ZV9jb3ZlcmFnZSgpOworICAvLyBHZXQgdGhlIG51bWJlciBvZiB1bmlxdWUgaW5kaXJlY3QgY2FsbGVyLWNhbGxlZSBwYWlycy4KKyAgdWludHB0cl90IF9fc2FuaXRpemVyX2dldF90b3RhbF91bmlxdWVfY2FsbGVyX2NhbGxlZV9wYWlycygpOworCisgIC8vIFJlc2V0IHRoZSBiYXNpYy1ibG9jayAoZWRnZSkgY292ZXJhZ2UgdG8gdGhlIGluaXRpYWwgc3RhdGUuCisgIC8vIFVzZWZ1bCBmb3IgaW4tcHJvY2VzcyBmdXp6aW5nIHRvIHN0YXJ0IGNvbGxlY3RpbmcgY292ZXJhZ2UgZnJvbSBzY3JhdGNoLgorICAvLyBFeHBlcmltZW50YWwsIHdpbGwgbGlrZWx5IG5vdCB3b3JrIGZvciBtdWx0aS10aHJlYWRlZCBwcm9jZXNzLgorICB2b2lkIF9fc2FuaXRpemVyX3Jlc2V0X2NvdmVyYWdlKCk7CisgIC8vIFNldCAqZGF0YSB0byB0aGUgYXJyYXkgb2YgY292ZXJlZCBQQ3MgYW5kIHJldHVybiB0aGUgc2l6ZSBvZiB0aGF0IGFycmF5LgorICAvLyBTb21lIG9mIHRoZSBlbnRyaWVzIGluICpkYXRhIHdpbGwgYmUgemVyby4KKyAgdWludHB0cl90IF9fc2FuaXRpemVyX2dldF9jb3ZlcmFnZV9ndWFyZHModWludHB0cl90ICoqZGF0YSk7CisKKyAgLy8gVGhlIGNvdmVyYWdlIGluc3RydW1lbnRhdGlvbiBtYXkgb3B0aW9uYWxseSBwcm92aWRlIGltcHJlY2lzZSBjb3VudGVycy4KKyAgLy8gUmF0aGVyIHRoYW4gZXhwb3NpbmcgdGhlIGNvdW50ZXIgdmFsdWVzIHRvIHRoZSB1c2VyIHdlIGluc3RlYWQgbWFwCisgIC8vIHRoZSBjb3VudGVycyB0byBhIGJpdHNldC4KKyAgLy8gRXZlcnkgY291bnRlciBpcyBhc3NvY2lhdGVkIHdpdGggOCBiaXRzIGluIHRoZSBiaXRzZXQuCisgIC8vIFdlIGRlZmluZSA4IHZhbHVlIHJhbmdlczogMSwgMiwgMywgNC03LCA4LTE1LCAxNi0zMSwgMzItMTI3LCAxMjgrCisgIC8vIFRoZSBpLXRoIGJpdCBpcyBzZXQgdG8gMSBpZiB0aGUgY291bnRlciB2YWx1ZSBpcyBpbiB0aGUgaS10aCByYW5nZS4KKyAgLy8gVGhpcyBjb3VudGVyLWJhc2VkIGNvdmVyYWdlIGltcGxlbWVudGF0aW9uIGlzICpub3QqIHRocmVhZC1zYWZlLgorCisgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiByZWdpc3RlcmVkIGNvdmVyYWdlIGNvdW50ZXJzLgorICB1aW50cHRyX3QgX19zYW5pdGl6ZXJfZ2V0X251bWJlcl9vZl9jb3VudGVycygpOworICAvLyBVcGRhdGVzIHRoZSBjb3VudGVyICdiaXRzZXQnLCBjbGVhcnMgdGhlIGNvdW50ZXJzIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YKKyAgLy8gbmV3IGJpdHMgaW4gJ2JpdHNldCcuCisgIC8vIElmICdiaXRzZXQnIGlzIG51bGxwdHIsIG9ubHkgY2xlYXJzIHRoZSBjb3VudGVycy4KKyAgLy8gT3RoZXJ3aXNlICdiaXRzZXQnIHNob3VsZCBiZSBhdCBsZWFzdAorICAvLyBfX3Nhbml0aXplcl9nZXRfbnVtYmVyX29mX2NvdW50ZXJzIGJ5dGVzIGxvbmcgYW5kIDgtYWxpZ25lZC4KKyAgdWludHB0cl90CisgIF9fc2FuaXRpemVyX3VwZGF0ZV9jb3VudGVyX2JpdHNldF9hbmRfY2xlYXJfY291bnRlcnModWludDhfdCAqYml0c2V0KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBTQU5JVElaRVJfQ09WRVJBR19JTlRFUkZBQ0VfSApkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zYW5pdGl6ZXIvZGZzYW5faW50ZXJmYWNlLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3Nhbml0aXplci9kZnNhbl9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTY2NmY3Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zYW5pdGl6ZXIvZGZzYW5faW50ZXJmYWNlLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8vPT09LS0gZGZzYW5faW50ZXJmYWNlLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBEYXRhRmxvd1Nhbml0aXplci4KKy8vCisvLyBQdWJsaWMgaW50ZXJmYWNlIGhlYWRlci4KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisjaWZuZGVmIERGU0FOX0lOVEVSRkFDRV9ICisjZGVmaW5lIERGU0FOX0lOVEVSRkFDRV9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzYW5pdGl6ZXIvY29tbW9uX2ludGVyZmFjZV9kZWZzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiB1aW50MTZfdCBkZnNhbl9sYWJlbDsKKworLy8vIFN0b3JlcyBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBsYWJlbCBpZGVudGlmaWVyLiAgQSBsYWJlbAorLy8vIG1heSBiZSBhIGJhc2UgbGFiZWwgY3JlYXRlZCB1c2luZyBkZnNhbl9jcmVhdGVfbGFiZWwsIHdpdGggYXNzb2NpYXRlZAorLy8vIHRleHQgZGVzY3JpcHRpb24gYW5kIHVzZXIgZGF0YSwgb3IgYW4gYXV0b21hdGljYWxseSBjcmVhdGVkIHVuaW9uIGxhYmVsLAorLy8vIHdoaWNoIHJlcHJlc2VudHMgdGhlIHVuaW9uIG9mIHR3byBsYWJlbCBpZGVudGlmaWVycyAod2hpY2ggbWF5IHRoZW1zZWx2ZXMKKy8vLyBiZSBiYXNlIG9yIHVuaW9uIGxhYmVscykuCitzdHJ1Y3QgZGZzYW5fbGFiZWxfaW5mbyB7CisgIC8vIEZpZWxkcyBmb3IgdW5pb24gbGFiZWxzLCBzZXQgdG8gMCBmb3IgYmFzZSBsYWJlbHMuCisgIGRmc2FuX2xhYmVsIGwxOworICBkZnNhbl9sYWJlbCBsMjsKKworICAvLyBGaWVsZHMgZm9yIGJhc2UgbGFiZWxzLgorICBjb25zdCBjaGFyICpkZXNjOworICB2b2lkICp1c2VyZGF0YTsKK307CisKKy8vLyBTaWduYXR1cmUgb2YgdGhlIGNhbGxiYWNrIGFyZ3VtZW50IHRvIGRmc2FuX3NldF93cml0ZV9jYWxsYmFjaygpLgordHlwZWRlZiB2b2lkICgqZGZzYW5fd3JpdGVfY2FsbGJhY2tfdCkoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCk7CisKKy8vLyBDb21wdXRlcyB0aGUgdW5pb24gb2YgXGMgbDEgYW5kIFxjIGwyLCBwb3NzaWJseSBjcmVhdGluZyBhIHVuaW9uIGxhYmVsIGluCisvLy8gdGhlIHByb2Nlc3MuCitkZnNhbl9sYWJlbCBkZnNhbl91bmlvbihkZnNhbl9sYWJlbCBsMSwgZGZzYW5fbGFiZWwgbDIpOworCisvLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIGJhc2UgbGFiZWwgd2l0aCB0aGUgZ2l2ZW4gZGVzY3JpcHRpb24gYW5kIHVzZXIgZGF0YS4KK2Rmc2FuX2xhYmVsIGRmc2FuX2NyZWF0ZV9sYWJlbChjb25zdCBjaGFyICpkZXNjLCB2b2lkICp1c2VyZGF0YSk7CisKKy8vLyBTZXRzIHRoZSBsYWJlbCBmb3IgZWFjaCBhZGRyZXNzIGluIFthZGRyLGFkZHIrc2l6ZSkgdG8gXGMgbGFiZWwuCit2b2lkIGRmc2FuX3NldF9sYWJlbChkZnNhbl9sYWJlbCBsYWJlbCwgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUpOworCisvLy8gU2V0cyB0aGUgbGFiZWwgZm9yIGVhY2ggYWRkcmVzcyBpbiBbYWRkcixhZGRyK3NpemUpIHRvIHRoZSB1bmlvbiBvZiB0aGUKKy8vLyBjdXJyZW50IGxhYmVsIGZvciB0aGF0IGFkZHJlc3MgYW5kIFxjIGxhYmVsLgordm9pZCBkZnNhbl9hZGRfbGFiZWwoZGZzYW5fbGFiZWwgbGFiZWwsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKTsKKworLy8vIFJldHJpZXZlcyB0aGUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBkYXRhLgorLy8vCisvLy8gVGhlIHR5cGUgb2YgJ2RhdGEnIGlzIGFyYml0cmFyeS4gIFRoZSBmdW5jdGlvbiBhY2NlcHRzIGEgdmFsdWUgb2YgYW55IHR5cGUsCisvLy8gd2hpY2ggY2FuIGJlIHRydW5jYXRlZCBvciBleHRlbmRlZCAoaW1wbGljaXRseSBvciBleHBsaWNpdGx5KSBhcyBuZWNlc3NhcnkuCisvLy8gVGhlIHRydW5jYXRpb24vZXh0ZW5zaW9uIG9wZXJhdGlvbnMgd2lsbCBwcmVzZXJ2ZSB0aGUgbGFiZWwgb2YgdGhlIG9yaWdpbmFsCisvLy8gdmFsdWUuCitkZnNhbl9sYWJlbCBkZnNhbl9nZXRfbGFiZWwobG9uZyBkYXRhKTsKKworLy8vIFJldHJpZXZlcyB0aGUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRhIGF0IHRoZSBnaXZlbiBhZGRyZXNzLgorZGZzYW5fbGFiZWwgZGZzYW5fcmVhZF9sYWJlbChjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7CisKKy8vLyBSZXRyaWV2ZXMgYSBwb2ludGVyIHRvIHRoZSBkZnNhbl9sYWJlbF9pbmZvIHN0cnVjdCBmb3IgdGhlIGdpdmVuIGxhYmVsLgorY29uc3Qgc3RydWN0IGRmc2FuX2xhYmVsX2luZm8gKmRmc2FuX2dldF9sYWJlbF9pbmZvKGRmc2FuX2xhYmVsIGxhYmVsKTsKKworLy8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gbGFiZWwgbGFiZWwgY29udGFpbnMgdGhlIGxhYmVsIGVsZW0uCitpbnQgZGZzYW5faGFzX2xhYmVsKGRmc2FuX2xhYmVsIGxhYmVsLCBkZnNhbl9sYWJlbCBlbGVtKTsKKworLy8vIElmIHRoZSBnaXZlbiBsYWJlbCBsYWJlbCBjb250YWlucyBhIGxhYmVsIHdpdGggdGhlIGRlc2NyaXB0aW9uIGRlc2MsIHJldHVybnMKKy8vLyB0aGF0IGxhYmVsLCBlbHNlIHJldHVybnMgMC4KK2Rmc2FuX2xhYmVsIGRmc2FuX2hhc19sYWJlbF93aXRoX2Rlc2MoZGZzYW5fbGFiZWwgbGFiZWwsIGNvbnN0IGNoYXIgKmRlc2MpOworCisvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxhYmVscyBhbGxvY2F0ZWQuCitzaXplX3QgZGZzYW5fZ2V0X2xhYmVsX2NvdW50KHZvaWQpOworCisvLy8gU2V0cyBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgb24gY2FsbHMgdG8gd3JpdGUoKS4gIFRoZSBjYWxsYmFjayBpcyBpbnZva2VkCisvLy8gYmVmb3JlIHRoZSB3cml0ZSBpcyBkb25lLiAgVGhlIHdyaXRlIGlzIG5vdCBndWFyYW50ZWVkIHRvIHN1Y2NlZWQgd2hlbiB0aGUKKy8vLyBjYWxsYmFjayBleGVjdXRlcy4gIFBhc3MgaW4gTlVMTCB0byByZW1vdmUgYW55IGNhbGxiYWNrLgordm9pZCBkZnNhbl9zZXRfd3JpdGVfY2FsbGJhY2soZGZzYW5fd3JpdGVfY2FsbGJhY2tfdCBsYWJlbGVkX3dyaXRlX2NhbGxiYWNrKTsKKworLy8vIFdyaXRlcyB0aGUgbGFiZWxzIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBwcm9ncmFtIHRvIHRoZSBnaXZlbiBmaWxlCisvLy8gZGVzY3JpcHRvci4gVGhlIGxpbmVzIG9mIHRoZSBvdXRwdXQgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKy8vLworLy8vIDxsYWJlbD4gPHBhcmVudCBsYWJlbCAxPiA8cGFyZW50IGxhYmVsIDI+IDxsYWJlbCBkZXNjcmlwdGlvbiBpZiBhbnk+Cit2b2lkIGRmc2FuX2R1bXBfbGFiZWxzKGludCBmZCk7CisKKy8vLyBJbnRlcmNlcHRvciBob29rcy4KKy8vLyBXaGVuZXZlciBhIGRmc2FuJ3MgY3VzdG9tIGZ1bmN0aW9uIGlzIGNhbGxlZCB0aGUgY29ycmVzcG9uZGluZworLy8vIGhvb2sgaXMgY2FsbGVkIGl0IG5vbi16ZXJvLiBUaGUgaG9va3Mgc2hvdWxkIGJlIGRlZmluZWQgYnkgdGhlIHVzZXIuCisvLy8gVGhlIHByaW1hcnkgdXNlIGNhc2UgaXMgdGFpbnQtZ3VpZGVkIGZ1enppbmcsIHdoZXJlIHRoZSBmdXp6ZXIKKy8vLyBuZWVkcyB0byBzZWUgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgbGFiZWxzLgorLy8vIEZJWE1FOiBpbXBsZW1lbnQgbW9yZSBob29rcy4KK3ZvaWQgZGZzYW5fd2Vha19ob29rX21lbWNtcCh2b2lkICpjYWxsZXJfcGMsIGNvbnN0IHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiwgZGZzYW5fbGFiZWwgczFfbGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZzYW5fbGFiZWwgczJfbGFiZWwsIGRmc2FuX2xhYmVsIG5fbGFiZWwpOwordm9pZCBkZnNhbl93ZWFrX2hvb2tfc3RybmNtcCh2b2lkICpjYWxsZXJfcGMsIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4sIGRmc2FuX2xhYmVsIHMxX2xhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnNhbl9sYWJlbCBzMl9sYWJlbCwgZGZzYW5fbGFiZWwgbl9sYWJlbCk7CisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIGRmc2FuX3NldF9sYWJlbChkZnNhbl9sYWJlbCBsYWJlbCwgVCAmZGF0YSkgeyAgLy8gTk9MSU5UCisgIGRmc2FuX3NldF9sYWJlbChsYWJlbCwgKHZvaWQgKikmZGF0YSwgc2l6ZW9mKFQpKTsKK30KKworI2VuZGlmCisKKyNlbmRpZiAgLy8gREZTQU5fSU5URVJGQUNFX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc2FuaXRpemVyL2VzYW5faW50ZXJmYWNlLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3Nhbml0aXplci9lc2FuX2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZmY4ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3Nhbml0aXplci9lc2FuX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8vPT09LS0gc2FuaXRpemVyL2VzYW5faW50ZXJmYWNlLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi0gQysrIC0qLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBFZmZpY2llbmN5U2FuaXRpemVyLCBhIGZhbWlseSBvZiBwZXJmb3JtYW5jZSB0dW5lcnMuCisvLworLy8gUHVibGljIGludGVyZmFjZSBoZWFkZXIuCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworI2lmbmRlZiBTQU5JVElaRVJfRVNBTl9JTlRFUkZBQ0VfSAorI2RlZmluZSBTQU5JVElaRVJfRVNBTl9JTlRFUkZBQ0VfSAorCisjaW5jbHVkZSA8c2FuaXRpemVyL2NvbW1vbl9pbnRlcmZhY2VfZGVmcy5oPgorCisvLyBXZSBkZWNsYXJlIG91ciBpbnRlcmZhY2Ugcm91dGluZXMgYXMgd2VhayB0byBhbGxvdyB0aGUgdXNlciB0byBhdm9pZAorLy8gaWZkZWZzIGFuZCBpbnN0ZWFkIHVzZSB0aGlzIHBhdHRlcm4gdG8gYWxsb3cgYnVpbGRpbmcgdGhlIHNhbWUgc291cmNlcworLy8gd2l0aCBhbmQgd2l0aG91dCBvdXIgcnVudGltZSBsaWJyYXJ5OgorLy8gICAgIGlmIChfX2VzYW5fcmVwb3J0KQorLy8gICAgICAgX19lc2FuX3JlcG9ydCgpOworI2lmZGVmIF9NU0NfVkVSCisvKiBzZWxlY3RhbnkgaXMgYXMgY2xvc2UgdG8gd2VhayBhcyB3ZSdsbCBnZXQuICovCisjZGVmaW5lIENPTVBJTEVSX1JUX1dFQUsgX19kZWNsc3BlYyhzZWxlY3RhbnkpCisjZWxpZiBfX0dOVUNfXworI2RlZmluZSBDT01QSUxFUl9SVF9XRUFLIF9fYXR0cmlidXRlX18oKHdlYWspKQorI2Vsc2UKKyNkZWZpbmUgQ09NUElMRVJfUlRfV0VBSworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG1pZC1ydW4gKG9yIGF0IHRoZSBlbmQgb2YgYSBydW4gZm9yCisvLyBhIHNlcnZlciBwcm9jZXNzIHRoYXQgZG9lc24ndCBzaHV0IGRvd24gbm9ybWFsbHkpIHRvIHJlcXVlc3QgdGhhdAorLy8gZGF0YSBmb3IgdGhhdCBwb2ludCBpbiB0aGUgcnVuIGJlIHJlcG9ydGVkIGZyb20gdGhlIHRvb2wuCit2b2lkIENPTVBJTEVSX1JUX1dFQUsgX19lc2FuX3JlcG9ydCgpOworCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgdGhlIGVzYW4gdG9vbCBoYXMgY29sbGVjdGVkCisvLyB0byB0aGlzIHBvaW50LiAgVGhpcyBpcyB1c2VmdWwgZm9yIHRlc3RpbmcuCit1bnNpZ25lZCBpbnQgQ09NUElMRVJfUlRfV0VBSyBfX2VzYW5fZ2V0X3NhbXBsZV9jb3VudCgpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAvLyBTQU5JVElaRVJfRVNBTl9JTlRFUkZBQ0VfSApkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zYW5pdGl6ZXIvbGludXhfc3lzY2FsbF9ob29rcy5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zYW5pdGl6ZXIvbGludXhfc3lzY2FsbF9ob29rcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZjI2MWQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3Nhbml0aXplci9saW51eF9zeXNjYWxsX2hvb2tzLmgKQEAgLTAsMCArMSwzMDgzIEBACisvLz09PS0tIGxpbnV4X3N5c2NhbGxfaG9va3MuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKKy8vIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vIFRoaXMgZmlsZSBpcyBhIHBhcnQgb2YgcHVibGljIHNhbml0aXplciBpbnRlcmZhY2UuCisvLworLy8gU3lzdGVtIGNhbGwgaGFuZGxlcnMuCisvLworLy8gSW50ZXJmYWNlIG1ldGhvZHMgZGVjbGFyZWQgaW4gdGhpcyBoZWFkZXIgaW1wbGVtZW50IHByZS0gYW5kIHBvc3QtIHN5c2NhbGwKKy8vIGFjdGlvbnMgZm9yIHRoZSBhY3RpdmUgc2FuaXRpemVyLgorLy8gVXNhZ2U6CisvLyAgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGZvbyguLi5hcmdzLi4uKTsKKy8vICAgbG9uZyByZXMgPSBzeXNjYWxsKF9fTlJfZ2V0Zm9vLCAuLi5hcmdzLi4uKTsKKy8vICAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGZvbyhyZXMsIC4uLmFyZ3MuLi4pOworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKyNpZm5kZWYgU0FOSVRJWkVSX0xJTlVYX1NZU0NBTExfSE9PS1NfSAorI2RlZmluZSBTQU5JVElaRVJfTElOVVhfU1lTQ0FMTF9IT09LU19ICisKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGltZSh0bG9jKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZSgobG9uZykodGxvYykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90aW1lKHJlcywgdGxvYykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lKHJlcywgKGxvbmcpKHRsb2MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zdGltZSh0cHRyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3RpbWUoKGxvbmcpKHRwdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3RpbWUocmVzLCB0cHRyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N0aW1lKHJlcywgKGxvbmcpKHRwdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXR0aW1lb2ZkYXkodHYsIHR6KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0dGltZW9mZGF5KChsb25nKSh0diksIChsb25nKSh0eikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXR0aW1lb2ZkYXkocmVzLCB0diwgdHopIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0dGltZW9mZGF5KHJlcywgKGxvbmcpKHR2KSwgKGxvbmcpKHR6KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0dGltZW9mZGF5KHR2LCB0eikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHRpbWVvZmRheSgobG9uZykodHYpLCAobG9uZykodHopKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0dGltZW9mZGF5KHJlcywgdHYsIHR6KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHRpbWVvZmRheShyZXMsIChsb25nKSh0diksIChsb25nKSh0eikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2FkanRpbWV4KHR4Y19wKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWRqdGltZXgoKGxvbmcpKHR4Y19wKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2FkanRpbWV4KHJlcywgdHhjX3ApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWRqdGltZXgocmVzLCAobG9uZykodHhjX3ApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90aW1lcyh0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXMoKGxvbmcpKHRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGltZXMocmVzLCB0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVzKHJlcywgKGxvbmcpKHRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXR0aWQoKSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHRpZCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXR0aWQocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHRpZChyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX25hbm9zbGVlcChycXRwLCBybXRwKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmFub3NsZWVwKChsb25nKShycXRwKSwgKGxvbmcpKHJtdHApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbmFub3NsZWVwKHJlcywgcnF0cCwgcm10cCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uYW5vc2xlZXAocmVzLCAobG9uZykocnF0cCksIChsb25nKShybXRwKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYWxhcm0oc2Vjb25kcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FsYXJtKChsb25nKShzZWNvbmRzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2FsYXJtKHJlcywgc2Vjb25kcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hbGFybShyZXMsIChsb25nKShzZWNvbmRzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cGlkKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRwaWQoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cGlkKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwaWQocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRwcGlkKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRwcGlkKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHBwaWQocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHBwaWQocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXR1aWQoKSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHVpZCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXR1aWQocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHVpZChyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGV1aWQoKSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGV1aWQoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0ZXVpZChyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0ZXVpZChyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGdpZCgpIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Z2lkKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGdpZChyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Z2lkKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0ZWdpZCgpIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0ZWdpZCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRlZ2lkKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRlZ2lkKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cmVzdWlkKHJ1aWQsIGV1aWQsIHN1aWQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRyZXN1aWQoKGxvbmcpKHJ1aWQpLCAobG9uZykoZXVpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN1aWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cmVzdWlkKHJlcywgcnVpZCwgZXVpZCwgc3VpZCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRyZXN1aWQocmVzLCAobG9uZykocnVpZCksIChsb25nKShldWlkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN1aWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRyZXNnaWQocmdpZCwgZWdpZCwgc2dpZCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHJlc2dpZCgobG9uZykocmdpZCksIChsb25nKShlZ2lkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2dpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRyZXNnaWQocmVzLCByZ2lkLCBlZ2lkLCBzZ2lkKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJlc2dpZChyZXMsIChsb25nKShyZ2lkKSwgKGxvbmcpKGVnaWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2dpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHBnaWQocGlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cGdpZCgobG9uZykocGlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHBnaWQocmVzLCBwaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cGdpZChyZXMsIChsb25nKShwaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRwZ3JwKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRwZ3JwKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHBncnAocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHBncnAocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRzaWQocGlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0c2lkKChsb25nKShwaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0c2lkKHJlcywgcGlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHNpZChyZXMsIChsb25nKShwaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRncm91cHMoZ2lkc2V0c2l6ZSwgZ3JvdXBsaXN0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Z3JvdXBzKChsb25nKShnaWRzZXRzaXplKSwgKGxvbmcpKGdyb3VwbGlzdCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRncm91cHMocmVzLCBnaWRzZXRzaXplLCBncm91cGxpc3QpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Z3JvdXBzKHJlcywgKGxvbmcpKGdpZHNldHNpemUpLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGdyb3VwbGlzdCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJlZ2lkKHJnaWQsIGVnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZWdpZCgobG9uZykocmdpZCksIChsb25nKShlZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHJlZ2lkKHJlcywgcmdpZCwgZWdpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZWdpZChyZXMsIChsb25nKShyZ2lkKSwgKGxvbmcpKGVnaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRnaWQoZ2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0Z2lkKChsb25nKShnaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0Z2lkKHJlcywgZ2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGdpZChyZXMsIChsb25nKShnaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRyZXVpZChydWlkLCBldWlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmV1aWQoKGxvbmcpKHJ1aWQpLCAobG9uZykoZXVpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRyZXVpZChyZXMsIHJ1aWQsIGV1aWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmV1aWQocmVzLCAobG9uZykocnVpZCksIChsb25nKShldWlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0dWlkKHVpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHVpZCgobG9uZykodWlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHVpZChyZXMsIHVpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXR1aWQocmVzLCAobG9uZykodWlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cmVzdWlkKHJ1aWQsIGV1aWQsIHN1aWQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXN1aWQoKGxvbmcpKHJ1aWQpLCAobG9uZykoZXVpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN1aWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmVzdWlkKHJlcywgcnVpZCwgZXVpZCwgc3VpZCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXN1aWQocmVzLCAobG9uZykocnVpZCksIChsb25nKShldWlkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN1aWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRyZXNnaWQocmdpZCwgZWdpZCwgc2dpZCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlc2dpZCgobG9uZykocmdpZCksIChsb25nKShlZ2lkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2dpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRyZXNnaWQocmVzLCByZ2lkLCBlZ2lkLCBzZ2lkKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJlc2dpZChyZXMsIChsb25nKShyZ2lkKSwgKGxvbmcpKGVnaWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2dpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGZzdWlkKHVpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGZzdWlkKChsb25nKSh1aWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0ZnN1aWQocmVzLCB1aWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZnN1aWQocmVzLCAobG9uZykodWlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0ZnNnaWQoZ2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0ZnNnaWQoKGxvbmcpKGdpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRmc2dpZChyZXMsIGdpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRmc2dpZChyZXMsIChsb25nKShnaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRwZ2lkKHBpZCwgcGdpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHBnaWQoKGxvbmcpKHBpZCksIChsb25nKShwZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHBnaWQocmVzLCBwaWQsIHBnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cGdpZChyZXMsIChsb25nKShwaWQpLCAobG9uZykocGdpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHNpZCgpIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0c2lkKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHNpZChyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0c2lkKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0Z3JvdXBzKGdpZHNldHNpemUsIGdyb3VwbGlzdCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGdyb3VwcygobG9uZykoZ2lkc2V0c2l6ZSksIChsb25nKShncm91cGxpc3QpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0Z3JvdXBzKHJlcywgZ2lkc2V0c2l6ZSwgZ3JvdXBsaXN0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGdyb3VwcyhyZXMsIChsb25nKShnaWRzZXRzaXplKSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShncm91cGxpc3QpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9hY2N0KG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hY2N0KChsb25nKShuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2FjY3QocmVzLCBuYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2FjY3QocmVzLCAobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2NhcGdldChoZWFkZXIsIGRhdGFwdHIpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jYXBnZXQoKGxvbmcpKGhlYWRlciksIChsb25nKShkYXRhcHRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2NhcGdldChyZXMsIGhlYWRlciwgZGF0YXB0cikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jYXBnZXQocmVzLCAobG9uZykoaGVhZGVyKSwgKGxvbmcpKGRhdGFwdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jYXBzZXQoaGVhZGVyLCBkYXRhKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2Fwc2V0KChsb25nKShoZWFkZXIpLCAobG9uZykoZGF0YSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jYXBzZXQocmVzLCBoZWFkZXIsIGRhdGEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2Fwc2V0KHJlcywgKGxvbmcpKGhlYWRlciksIChsb25nKShkYXRhKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcGVyc29uYWxpdHkocGVyc29uYWxpdHkpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wZXJzb25hbGl0eSgobG9uZykocGVyc29uYWxpdHkpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcGVyc29uYWxpdHkocmVzLCBwZXJzb25hbGl0eSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wZXJzb25hbGl0eShyZXMsIChsb25nKShwZXJzb25hbGl0eSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NpZ3BlbmRpbmcoc2V0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2lncGVuZGluZygobG9uZykoc2V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NpZ3BlbmRpbmcocmVzLCBzZXQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2lncGVuZGluZyhyZXMsIChsb25nKShzZXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaWdwcm9jbWFzayhob3csIHNldCwgb3NldCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NpZ3Byb2NtYXNrKChsb25nKShob3cpLCAobG9uZykoc2V0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvc2V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NpZ3Byb2NtYXNrKHJlcywgaG93LCBzZXQsIG9zZXQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2lncHJvY21hc2socmVzLCAobG9uZykoaG93KSwgKGxvbmcpKHNldCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9zZXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRpdGltZXIod2hpY2gsIHZhbHVlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0aXRpbWVyKChsb25nKSh3aGljaCksIChsb25nKSh2YWx1ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRpdGltZXIocmVzLCB3aGljaCwgdmFsdWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0aXRpbWVyKHJlcywgKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHZhbHVlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0aXRpbWVyKHdoaWNoLCB2YWx1ZSwgb3ZhbHVlKSAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGl0aW1lcigobG9uZykod2hpY2gpLCAobG9uZykodmFsdWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvdmFsdWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0aXRpbWVyKHJlcywgd2hpY2gsIHZhbHVlLCBvdmFsdWUpICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGl0aW1lcihyZXMsIChsb25nKSh3aGljaCksIChsb25nKSh2YWx1ZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvdmFsdWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90aW1lcl9jcmVhdGUod2hpY2hfY2xvY2ssIHRpbWVyX2V2ZW50X3NwZWMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRfdGltZXJfaWQpICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXJfY3JlYXRlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKHdoaWNoX2Nsb2NrKSwgKGxvbmcpKHRpbWVyX2V2ZW50X3NwZWMpLCAobG9uZykoY3JlYXRlZF90aW1lcl9pZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90aW1lcl9jcmVhdGUoICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXMsIHdoaWNoX2Nsb2NrLCB0aW1lcl9ldmVudF9zcGVjLCBjcmVhdGVkX3RpbWVyX2lkKSAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcl9jcmVhdGUocmVzLCAobG9uZykod2hpY2hfY2xvY2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodGltZXJfZXZlbnRfc3BlYyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjcmVhdGVkX3RpbWVyX2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGltZXJfZ2V0dGltZSh0aW1lcl9pZCwgc2V0dGluZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyX2dldHRpbWUoKGxvbmcpKHRpbWVyX2lkKSwgKGxvbmcpKHNldHRpbmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGltZXJfZ2V0dGltZShyZXMsIHRpbWVyX2lkLCBzZXR0aW5nKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX2dldHRpbWUocmVzLCAobG9uZykodGltZXJfaWQpLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2V0dGluZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RpbWVyX2dldG92ZXJydW4odGltZXJfaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9nZXRvdmVycnVuKChsb25nKSh0aW1lcl9pZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90aW1lcl9nZXRvdmVycnVuKHJlcywgdGltZXJfaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJfZ2V0b3ZlcnJ1bihyZXMsIChsb25nKSh0aW1lcl9pZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RpbWVyX3NldHRpbWUodGltZXJfaWQsIGZsYWdzLCBuZXdfc2V0dGluZywgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX3NldHRpbmcpICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXJfc2V0dGltZSgobG9uZykodGltZXJfaWQpLCAobG9uZykoZmxhZ3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3X3NldHRpbmcpLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob2xkX3NldHRpbmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGltZXJfc2V0dGltZShyZXMsIHRpbWVyX2lkLCBmbGFncywgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3NldHRpbmcsIG9sZF9zZXR0aW5nKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX3NldHRpbWUoICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykodGltZXJfaWQpLCAobG9uZykoZmxhZ3MpLCAobG9uZykobmV3X3NldHRpbmcpLCAgICAgICAgIFwKKyAgICAgIChsb25nKShvbGRfc2V0dGluZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RpbWVyX2RlbGV0ZSh0aW1lcl9pZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyX2RlbGV0ZSgobG9uZykodGltZXJfaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGltZXJfZGVsZXRlKHJlcywgdGltZXJfaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJfZGVsZXRlKHJlcywgKGxvbmcpKHRpbWVyX2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2xvY2tfc2V0dGltZSh3aGljaF9jbG9jaywgdHApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9ja19zZXR0aW1lKChsb25nKSh3aGljaF9jbG9jayksIChsb25nKSh0cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jbG9ja19zZXR0aW1lKHJlcywgd2hpY2hfY2xvY2ssIHRwKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb2NrX3NldHRpbWUocmVzLCAobG9uZykod2hpY2hfY2xvY2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHRwKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2xvY2tfZ2V0dGltZSh3aGljaF9jbG9jaywgdHApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9ja19nZXR0aW1lKChsb25nKSh3aGljaF9jbG9jayksIChsb25nKSh0cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jbG9ja19nZXR0aW1lKHJlcywgd2hpY2hfY2xvY2ssIHRwKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb2NrX2dldHRpbWUocmVzLCAobG9uZykod2hpY2hfY2xvY2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHRwKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2xvY2tfYWRqdGltZSh3aGljaF9jbG9jaywgdHgpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9ja19hZGp0aW1lKChsb25nKSh3aGljaF9jbG9jayksIChsb25nKSh0eCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jbG9ja19hZGp0aW1lKHJlcywgd2hpY2hfY2xvY2ssIHR4KSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb2NrX2FkanRpbWUocmVzLCAobG9uZykod2hpY2hfY2xvY2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHR4KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2xvY2tfZ2V0cmVzKHdoaWNoX2Nsb2NrLCB0cCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nsb2NrX2dldHJlcygobG9uZykod2hpY2hfY2xvY2spLCAobG9uZykodHApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2xvY2tfZ2V0cmVzKHJlcywgd2hpY2hfY2xvY2ssIHRwKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb2NrX2dldHJlcyhyZXMsIChsb25nKSh3aGljaF9jbG9jayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh0cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Nsb2NrX25hbm9zbGVlcCh3aGljaF9jbG9jaywgZmxhZ3MsIHJxdHAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJtdHApICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nsb2NrX25hbm9zbGVlcCggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAobG9uZykod2hpY2hfY2xvY2spLCAobG9uZykoZmxhZ3MpLCAobG9uZykocnF0cCksIChsb25nKShybXRwKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Nsb2NrX25hbm9zbGVlcChyZXMsIHdoaWNoX2Nsb2NrLCBmbGFncywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJxdHAsIHJtdHApICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb2NrX25hbm9zbGVlcCggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKHdoaWNoX2Nsb2NrKSwgKGxvbmcpKGZsYWdzKSwgKGxvbmcpKHJxdHApLCAobG9uZykocm10cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX25pY2UoaW5jcmVtZW50KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmljZSgobG9uZykoaW5jcmVtZW50KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X25pY2UocmVzLCBpbmNyZW1lbnQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmljZShyZXMsIChsb25nKShpbmNyZW1lbnQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zY2hlZF9zZXRzY2hlZHVsZXIocGlkLCBwb2xpY3ksIHBhcmFtKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9zZXRzY2hlZHVsZXIoKGxvbmcpKHBpZCksIChsb25nKShwb2xpY3kpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwYXJhbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zY2hlZF9zZXRzY2hlZHVsZXIocmVzLCBwaWQsIHBvbGljeSwgcGFyYW0pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfc2V0c2NoZWR1bGVyKCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykocGlkKSwgKGxvbmcpKHBvbGljeSksIChsb25nKShwYXJhbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NjaGVkX3NldHBhcmFtKHBpZCwgcGFyYW0pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9zZXRwYXJhbSgobG9uZykocGlkKSwgKGxvbmcpKHBhcmFtKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NjaGVkX3NldHBhcmFtKHJlcywgcGlkLCBwYXJhbSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9zZXRwYXJhbShyZXMsIChsb25nKShwaWQpLCAobG9uZykocGFyYW0pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zY2hlZF9nZXRzY2hlZHVsZXIocGlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfZ2V0c2NoZWR1bGVyKChsb25nKShwaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2NoZWRfZ2V0c2NoZWR1bGVyKHJlcywgcGlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX2dldHNjaGVkdWxlcihyZXMsIChsb25nKShwaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zY2hlZF9nZXRwYXJhbShwaWQsIHBhcmFtKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfZ2V0cGFyYW0oKGxvbmcpKHBpZCksIChsb25nKShwYXJhbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zY2hlZF9nZXRwYXJhbShyZXMsIHBpZCwgcGFyYW0pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfZ2V0cGFyYW0ocmVzLCAobG9uZykocGlkKSwgKGxvbmcpKHBhcmFtKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2NoZWRfc2V0YWZmaW5pdHkocGlkLCBsZW4sIHVzZXJfbWFza19wdHIpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9zZXRhZmZpbml0eSgobG9uZykocGlkKSwgKGxvbmcpKGxlbiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodXNlcl9tYXNrX3B0cikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zY2hlZF9zZXRhZmZpbml0eShyZXMsIHBpZCwgbGVuLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX21hc2tfcHRyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX3NldGFmZmluaXR5KCAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKShwaWQpLCAobG9uZykobGVuKSwgKGxvbmcpKHVzZXJfbWFza19wdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zY2hlZF9nZXRhZmZpbml0eShwaWQsIGxlbiwgdXNlcl9tYXNrX3B0cikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldGFmZmluaXR5KChsb25nKShwaWQpLCAobG9uZykobGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1c2VyX21hc2tfcHRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NjaGVkX2dldGFmZmluaXR5KHJlcywgcGlkLCBsZW4sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfbWFza19wdHIpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfZ2V0YWZmaW5pdHkoICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKHBpZCksIChsb25nKShsZW4pLCAobG9uZykodXNlcl9tYXNrX3B0cikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NjaGVkX3lpZWxkKCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX3lpZWxkKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NjaGVkX3lpZWxkKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF95aWVsZChyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NjaGVkX2dldF9wcmlvcml0eV9tYXgocG9saWN5KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCgobG9uZykocG9saWN5KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NjaGVkX2dldF9wcmlvcml0eV9tYXgocmVzLCBwb2xpY3kpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfZ2V0X3ByaW9yaXR5X21heChyZXMsIChsb25nKShwb2xpY3kpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zY2hlZF9nZXRfcHJpb3JpdHlfbWluKHBvbGljeSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldF9wcmlvcml0eV9taW4oKGxvbmcpKHBvbGljeSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zY2hlZF9nZXRfcHJpb3JpdHlfbWluKHJlcywgcG9saWN5KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX2dldF9wcmlvcml0eV9taW4ocmVzLCAobG9uZykocG9saWN5KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2NoZWRfcnJfZ2V0X2ludGVydmFsKHBpZCwgaW50ZXJ2YWwpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwoKGxvbmcpKHBpZCksICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGludGVydmFsKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NjaGVkX3JyX2dldF9pbnRlcnZhbChyZXMsIHBpZCwgaW50ZXJ2YWwpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfcnJfZ2V0X2ludGVydmFsKHJlcywgKGxvbmcpKHBpZCksICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShpbnRlcnZhbCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHByaW9yaXR5KHdoaWNoLCB3aG8sIG5pY2V2YWwpICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRwcmlvcml0eSgobG9uZykod2hpY2gpLCAobG9uZykod2hvKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuaWNldmFsKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHByaW9yaXR5KHJlcywgd2hpY2gsIHdobywgbmljZXZhbCkgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRwcmlvcml0eShyZXMsIChsb25nKSh3aGljaCksIChsb25nKSh3aG8pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuaWNldmFsKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cHJpb3JpdHkod2hpY2gsIHdobykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHByaW9yaXR5KChsb25nKSh3aGljaCksIChsb25nKSh3aG8pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cHJpb3JpdHkocmVzLCB3aGljaCwgd2hvKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHByaW9yaXR5KHJlcywgKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHdobykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NodXRkb3duKGFyZzAsIGFyZzEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaHV0ZG93bigobG9uZykoYXJnMCksIChsb25nKShhcmcxKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NodXRkb3duKHJlcywgYXJnMCwgYXJnMSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaHV0ZG93bihyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZWJvb3QobWFnaWMxLCBtYWdpYzIsIGNtZCwgYXJnKSAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWJvb3QoKGxvbmcpKG1hZ2ljMSksIChsb25nKShtYWdpYzIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjbWQpLCAobG9uZykoYXJnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlYm9vdChyZXMsIG1hZ2ljMSwgbWFnaWMyLCBjbWQsIGFyZykgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlYm9vdChyZXMsIChsb25nKShtYWdpYzEpLCAobG9uZykobWFnaWMyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNtZCksIChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZXN0YXJ0X3N5c2NhbGwoKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVzdGFydF9zeXNjYWxsKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Jlc3RhcnRfc3lzY2FsbChyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVzdGFydF9zeXNjYWxsKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfa2V4ZWNfbG9hZChlbnRyeSwgbnJfc2VnbWVudHMsIHNlZ21lbnRzLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9rZXhlY19sb2FkKChsb25nKShlbnRyeSksIChsb25nKShucl9zZWdtZW50cyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZWdtZW50cyksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9rZXhlY19sb2FkKHJlcywgZW50cnksIG5yX3NlZ21lbnRzLCBzZWdtZW50cywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfa2V4ZWNfbG9hZChyZXMsIChsb25nKShlbnRyeSksICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5yX3NlZ21lbnRzKSwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZWdtZW50cyksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2V4aXQoZXJyb3JfY29kZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2V4aXQoKGxvbmcpKGVycm9yX2NvZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXhpdChyZXMsIGVycm9yX2NvZGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXhpdChyZXMsIChsb25nKShlcnJvcl9jb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZXhpdF9ncm91cChlcnJvcl9jb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXhpdF9ncm91cCgobG9uZykoZXJyb3JfY29kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9leGl0X2dyb3VwKHJlcywgZXJyb3JfY29kZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9leGl0X2dyb3VwKHJlcywgKGxvbmcpKGVycm9yX2NvZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV93YWl0NChwaWQsIHN0YXRfYWRkciwgb3B0aW9ucywgcnUpICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3dhaXQ0KChsb25nKShwaWQpLCAobG9uZykoc3RhdF9hZGRyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcHRpb25zKSwgKGxvbmcpKHJ1KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3dhaXQ0KHJlcywgcGlkLCBzdGF0X2FkZHIsIG9wdGlvbnMsIHJ1KSAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfd2FpdDQocmVzLCAobG9uZykocGlkKSwgKGxvbmcpKHN0YXRfYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdGlvbnMpLCAobG9uZykocnUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV93YWl0aWQod2hpY2gsIHBpZCwgaW5mb3AsIG9wdGlvbnMsIHJ1KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfd2FpdGlkKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKSh3aGljaCksIChsb25nKShwaWQpLCAobG9uZykoaW5mb3ApLCAobG9uZykob3B0aW9ucyksIChsb25nKShydSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF93YWl0aWQocmVzLCB3aGljaCwgcGlkLCBpbmZvcCwgb3B0aW9ucywgcnUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfd2FpdGlkKHJlcywgKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHBpZCksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGluZm9wKSwgKGxvbmcpKG9wdGlvbnMpLCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocnUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV93YWl0cGlkKHBpZCwgc3RhdF9hZGRyLCBvcHRpb25zKSAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfd2FpdHBpZCgobG9uZykocGlkKSwgKGxvbmcpKHN0YXRfYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcHRpb25zKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3dhaXRwaWQocmVzLCBwaWQsIHN0YXRfYWRkciwgb3B0aW9ucykgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF93YWl0cGlkKHJlcywgKGxvbmcpKHBpZCksIChsb25nKShzdGF0X2FkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdGlvbnMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRfdGlkX2FkZHJlc3ModGlkcHRyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0X3RpZF9hZGRyZXNzKChsb25nKSh0aWRwdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0X3RpZF9hZGRyZXNzKHJlcywgdGlkcHRyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldF90aWRfYWRkcmVzcyhyZXMsIChsb25nKSh0aWRwdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbml0X21vZHVsZSh1bW9kLCBsZW4sIHVhcmdzKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbml0X21vZHVsZSgobG9uZykodW1vZCksIChsb25nKShsZW4pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHVhcmdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2luaXRfbW9kdWxlKHJlcywgdW1vZCwgbGVuLCB1YXJncykgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2luaXRfbW9kdWxlKHJlcywgKGxvbmcpKHVtb2QpLCAobG9uZykobGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodWFyZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9kZWxldGVfbW9kdWxlKG5hbWVfdXNlciwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kZWxldGVfbW9kdWxlKChsb25nKShuYW1lX3VzZXIpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZGVsZXRlX21vZHVsZShyZXMsIG5hbWVfdXNlciwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZGVsZXRlX21vZHVsZShyZXMsIChsb25nKShuYW1lX3VzZXIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcnRfc2lncHJvY21hc2soaG93LCBzZXQsIG9zZXQsIHNpZ3NldHNpemUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ydF9zaWdwcm9jbWFzayggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShob3cpLCAobG9uZykoc2V0KSwgKGxvbmcpKG9zZXQpLCAobG9uZykoc2lnc2V0c2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ydF9zaWdwcm9jbWFzayhyZXMsIGhvdywgc2V0LCBvc2V0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdzZXRzaXplKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3J0X3NpZ3Byb2NtYXNrKCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKShob3cpLCAobG9uZykoc2V0KSwgKGxvbmcpKG9zZXQpLCAobG9uZykoc2lnc2V0c2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3J0X3NpZ3BlbmRpbmcoc2V0LCBzaWdzZXRzaXplKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lncGVuZGluZygobG9uZykoc2V0KSwgKGxvbmcpKHNpZ3NldHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfc2lncGVuZGluZyhyZXMsIHNldCwgc2lnc2V0c2l6ZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ydF9zaWdwZW5kaW5nKHJlcywgKGxvbmcpKHNldCksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaWdzZXRzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcnRfc2lndGltZWR3YWl0KHV0aGVzZSwgdWluZm8sIHV0cywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnc2V0c2l6ZSkgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lndGltZWR3YWl0KCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKSh1dGhlc2UpLCAobG9uZykodWluZm8pLCAobG9uZykodXRzKSwgKGxvbmcpKHNpZ3NldHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfc2lndGltZWR3YWl0KHJlcywgdXRoZXNlLCB1aW5mbywgdXRzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnc2V0c2l6ZSkgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfc2lndGltZWR3YWl0KCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykodXRoZXNlKSwgKGxvbmcpKHVpbmZvKSwgKGxvbmcpKHV0cyksIChsb25nKShzaWdzZXRzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcnRfdGdzaWdxdWV1ZWluZm8odGdpZCwgcGlkLCBzaWcsIHVpbmZvKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfdGdzaWdxdWV1ZWluZm8oKGxvbmcpKHRnaWQpLCAobG9uZykocGlkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaWcpLCAobG9uZykodWluZm8pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfdGdzaWdxdWV1ZWluZm8ocmVzLCB0Z2lkLCBwaWQsIHNpZywgdWluZm8pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfdGdzaWdxdWV1ZWluZm8oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKSh0Z2lkKSwgKGxvbmcpKHBpZCksIChsb25nKShzaWcpLCAobG9uZykodWluZm8pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9raWxsKHBpZCwgc2lnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfa2lsbCgobG9uZykocGlkKSwgKGxvbmcpKHNpZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9raWxsKHJlcywgcGlkLCBzaWcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfa2lsbChyZXMsIChsb25nKShwaWQpLCAobG9uZykoc2lnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGdraWxsKHRnaWQsIHBpZCwgc2lnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGdraWxsKChsb25nKSh0Z2lkKSwgKGxvbmcpKHBpZCksIChsb25nKShzaWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGdraWxsKHJlcywgdGdpZCwgcGlkLCBzaWcpICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Rna2lsbChyZXMsIChsb25nKSh0Z2lkKSwgKGxvbmcpKHBpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90a2lsbChwaWQsIHNpZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RraWxsKChsb25nKShwaWQpLCAobG9uZykoc2lnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RraWxsKHJlcywgcGlkLCBzaWcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGtpbGwocmVzLCAobG9uZykocGlkKSwgKGxvbmcpKHNpZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3J0X3NpZ3F1ZXVlaW5mbyhwaWQsIHNpZywgdWluZm8pICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3J0X3NpZ3F1ZXVlaW5mbygobG9uZykocGlkKSwgKGxvbmcpKHNpZyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHVpbmZvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3J0X3NpZ3F1ZXVlaW5mbyhyZXMsIHBpZCwgc2lnLCB1aW5mbykgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3J0X3NpZ3F1ZXVlaW5mbyhyZXMsIChsb25nKShwaWQpLCAobG9uZykoc2lnKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHVpbmZvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2dldG1hc2soKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2dldG1hc2soKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2dldG1hc2socmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NnZXRtYXNrKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3NldG1hc2sobmV3bWFzaykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NzZXRtYXNrKChsb25nKShuZXdtYXNrKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NzZXRtYXNrKHJlcywgbmV3bWFzaykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zc2V0bWFzayhyZXMsIChsb25nKShuZXdtYXNrKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2lnbmFsKHNpZywgaGFuZGxlcikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NpZ25hbCgobG9uZykoc2lnKSwgKGxvbmcpKGhhbmRsZXIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2lnbmFsKHJlcywgc2lnLCBoYW5kbGVyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NpZ25hbChyZXMsIChsb25nKShzaWcpLCAobG9uZykoaGFuZGxlcikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BhdXNlKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wYXVzZSgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wYXVzZShyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGF1c2UocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zeW5jKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeW5jKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N5bmMocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N5bmMocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mc3luYyhmZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZzeW5jKChsb25nKShmZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mc3luYyhyZXMsIGZkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzeW5jKHJlcywgKGxvbmcpKGZkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmRhdGFzeW5jKGZkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmRhdGFzeW5jKChsb25nKShmZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mZGF0YXN5bmMocmVzLCBmZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mZGF0YXN5bmMocmVzLCAobG9uZykoZmQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9iZGZsdXNoKGZ1bmMsIGRhdGEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9iZGZsdXNoKChsb25nKShmdW5jKSwgKGxvbmcpKGRhdGEpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYmRmbHVzaChyZXMsIGZ1bmMsIGRhdGEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYmRmbHVzaChyZXMsIChsb25nKShmdW5jKSwgKGxvbmcpKGRhdGEpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tb3VudChkZXZfbmFtZSwgZGlyX25hbWUsIHR5cGUsIGZsYWdzLCBkYXRhKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbW91bnQoKGxvbmcpKGRldl9uYW1lKSwgKGxvbmcpKGRpcl9uYW1lKSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodHlwZSksIChsb25nKShmbGFncyksICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShkYXRhKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21vdW50KHJlcywgZGV2X25hbWUsIGRpcl9uYW1lLCB0eXBlLCBmbGFncywgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tb3VudChyZXMsIChsb25nKShkZXZfbmFtZSksIChsb25nKShkaXJfbmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHR5cGUpLCAobG9uZykoZmxhZ3MpLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShkYXRhKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdW1vdW50KG5hbWUsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdW1vdW50KChsb25nKShuYW1lKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Vtb3VudChyZXMsIG5hbWUsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Vtb3VudChyZXMsIChsb25nKShuYW1lKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfb2xkdW1vdW50KG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vbGR1bW91bnQoKGxvbmcpKG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb2xkdW1vdW50KHJlcywgbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGR1bW91bnQocmVzLCAobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RydW5jYXRlKHBhdGgsIGxlbmd0aCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RydW5jYXRlKChsb25nKShwYXRoKSwgKGxvbmcpKGxlbmd0aCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90cnVuY2F0ZShyZXMsIHBhdGgsIGxlbmd0aCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90cnVuY2F0ZShyZXMsIChsb25nKShwYXRoKSwgKGxvbmcpKGxlbmd0aCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Z0cnVuY2F0ZShmZCwgbGVuZ3RoKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnRydW5jYXRlKChsb25nKShmZCksIChsb25nKShsZW5ndGgpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnRydW5jYXRlKHJlcywgZmQsIGxlbmd0aCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mdHJ1bmNhdGUocmVzLCAobG9uZykoZmQpLCAobG9uZykobGVuZ3RoKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3RhdChmaWxlbmFtZSwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N0YXQoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3RhdChyZXMsIGZpbGVuYW1lLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N0YXQocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N0YXRmcyhwYXRoLCBidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zdGF0ZnMoKGxvbmcpKHBhdGgpLCAobG9uZykoYnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N0YXRmcyhyZXMsIHBhdGgsIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zdGF0ZnMocmVzLCAobG9uZykocGF0aCksIChsb25nKShidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zdGF0ZnM2NChwYXRoLCBzeiwgYnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3RhdGZzNjQoKGxvbmcpKHBhdGgpLCAobG9uZykoc3opLCAobG9uZykoYnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N0YXRmczY0KHJlcywgcGF0aCwgc3osIGJ1ZikgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3RhdGZzNjQocmVzLCAobG9uZykocGF0aCksIChsb25nKShzeiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZzdGF0ZnMoZmQsIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZzdGF0ZnMoKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mc3RhdGZzKHJlcywgZmQsIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mc3RhdGZzKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZzdGF0ZnM2NChmZCwgc3osIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZzdGF0ZnM2NCgobG9uZykoZmQpLCAobG9uZykoc3opLCAobG9uZykoYnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZzdGF0ZnM2NChyZXMsIGZkLCBzeiwgYnVmKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mc3RhdGZzNjQocmVzLCAobG9uZykoZmQpLCAobG9uZykoc3opLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbHN0YXQoZmlsZW5hbWUsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sc3RhdCgobG9uZykoZmlsZW5hbWUpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sc3RhdChyZXMsIGZpbGVuYW1lLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xzdGF0KHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mc3RhdChmZCwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZzdGF0KChsb25nKShmZCksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZzdGF0KHJlcywgZmQsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnN0YXQocmVzLCAobG9uZykoZmQpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX25ld3N0YXQoZmlsZW5hbWUsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uZXdzdGF0KChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X25ld3N0YXQocmVzLCBmaWxlbmFtZSwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uZXdzdGF0KHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9uZXdsc3RhdChmaWxlbmFtZSwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25ld2xzdGF0KChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X25ld2xzdGF0KHJlcywgZmlsZW5hbWUsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmV3bHN0YXQocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX25ld2ZzdGF0KGZkLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmV3ZnN0YXQoKGxvbmcpKGZkKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbmV3ZnN0YXQocmVzLCBmZCwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uZXdmc3RhdChyZXMsIChsb25nKShmZCksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdXN0YXQoZGV2LCB1YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXN0YXQoKGxvbmcpKGRldiksIChsb25nKSh1YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3VzdGF0KHJlcywgZGV2LCB1YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VzdGF0KHJlcywgKGxvbmcpKGRldiksIChsb25nKSh1YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3RhdDY0KGZpbGVuYW1lLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3RhdDY0KChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N0YXQ2NChyZXMsIGZpbGVuYW1lLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N0YXQ2NChyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZnN0YXQ2NChmZCwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZzdGF0NjQoKGxvbmcpKGZkKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnN0YXQ2NChyZXMsIGZkLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzdGF0NjQocmVzLCAobG9uZykoZmQpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xzdGF0NjQoZmlsZW5hbWUsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sc3RhdDY0KChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xzdGF0NjQocmVzLCBmaWxlbmFtZSwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sc3RhdDY0KHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXR4YXR0cihwYXRoLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXR4YXR0ciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAobG9uZykocGF0aCksIChsb25nKShuYW1lKSwgKGxvbmcpKHZhbHVlKSwgKGxvbmcpKHNpemUpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0eGF0dHIocmVzLCBwYXRoLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0eGF0dHIocmVzLCAobG9uZykocGF0aCksIChsb25nKShuYW1lKSwgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2YWx1ZSksIChsb25nKShzaXplKSwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9sc2V0eGF0dHIocGF0aCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbHNldHhhdHRyKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShwYXRoKSwgKGxvbmcpKG5hbWUpLCAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sc2V0eGF0dHIocmVzLCBwYXRoLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xzZXR4YXR0cihyZXMsIChsb25nKShwYXRoKSwgKGxvbmcpKG5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSksICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mc2V0eGF0dHIoZmQsIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZzZXR4YXR0ciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKGZkKSwgKGxvbmcpKG5hbWUpLCAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mc2V0eGF0dHIocmVzLCBmZCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzZXR4YXR0cihyZXMsIChsb25nKShmZCksIChsb25nKShuYW1lKSwgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSksICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXR4YXR0cihwYXRoLCBuYW1lLCB2YWx1ZSwgc2l6ZSkgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0eGF0dHIoKGxvbmcpKHBhdGgpLCAobG9uZykobmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXR4YXR0cihyZXMsIHBhdGgsIG5hbWUsIHZhbHVlLCBzaXplKSAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0eGF0dHIocmVzLCAobG9uZykocGF0aCksIChsb25nKShuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xnZXR4YXR0cihwYXRoLCBuYW1lLCB2YWx1ZSwgc2l6ZSkgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGdldHhhdHRyKChsb25nKShwYXRoKSwgKGxvbmcpKG5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2YWx1ZSksIChsb25nKShzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xnZXR4YXR0cihyZXMsIHBhdGgsIG5hbWUsIHZhbHVlLCBzaXplKSAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGdldHhhdHRyKHJlcywgKGxvbmcpKHBhdGgpLCAobG9uZykobmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2YWx1ZSksIChsb25nKShzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmdldHhhdHRyKGZkLCBuYW1lLCB2YWx1ZSwgc2l6ZSkgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmdldHhhdHRyKChsb25nKShmZCksIChsb25nKShuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mZ2V0eGF0dHIocmVzLCBmZCwgbmFtZSwgdmFsdWUsIHNpemUpICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mZ2V0eGF0dHIocmVzLCAobG9uZykoZmQpLCAobG9uZykobmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2YWx1ZSksIChsb25nKShzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbGlzdHhhdHRyKHBhdGgsIGxpc3QsIHNpemUpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9saXN0eGF0dHIoKGxvbmcpKHBhdGgpLCAobG9uZykobGlzdCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbGlzdHhhdHRyKHJlcywgcGF0aCwgbGlzdCwgc2l6ZSkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9saXN0eGF0dHIocmVzLCAobG9uZykocGF0aCksIChsb25nKShsaXN0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9sbGlzdHhhdHRyKHBhdGgsIGxpc3QsIHNpemUpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sbGlzdHhhdHRyKChsb25nKShwYXRoKSwgKGxvbmcpKGxpc3QpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sbGlzdHhhdHRyKHJlcywgcGF0aCwgbGlzdCwgc2l6ZSkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sbGlzdHhhdHRyKHJlcywgKGxvbmcpKHBhdGgpLCAobG9uZykobGlzdCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZsaXN0eGF0dHIoZmQsIGxpc3QsIHNpemUpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mbGlzdHhhdHRyKChsb25nKShmZCksIChsb25nKShsaXN0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmxpc3R4YXR0cihyZXMsIGZkLCBsaXN0LCBzaXplKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZsaXN0eGF0dHIocmVzLCAobG9uZykoZmQpLCAobG9uZykobGlzdCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlbW92ZXhhdHRyKHBhdGgsIG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZW1vdmV4YXR0cigobG9uZykocGF0aCksIChsb25nKShuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlbW92ZXhhdHRyKHJlcywgcGF0aCwgbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZW1vdmV4YXR0cihyZXMsIChsb25nKShwYXRoKSwgKGxvbmcpKG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9scmVtb3ZleGF0dHIocGF0aCwgbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xyZW1vdmV4YXR0cigobG9uZykocGF0aCksIChsb25nKShuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xyZW1vdmV4YXR0cihyZXMsIHBhdGgsIG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbHJlbW92ZXhhdHRyKHJlcywgKGxvbmcpKHBhdGgpLCAobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZyZW1vdmV4YXR0cihmZCwgbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZyZW1vdmV4YXR0cigobG9uZykoZmQpLCAobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mcmVtb3ZleGF0dHIocmVzLCBmZCwgbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mcmVtb3ZleGF0dHIocmVzLCAobG9uZykoZmQpLCAobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2JyayhicmspIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9icmsoKGxvbmcpKGJyaykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9icmsocmVzLCBicmspIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYnJrKHJlcywgKGxvbmcpKGJyaykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21wcm90ZWN0KHN0YXJ0LCBsZW4sIHByb3QpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcHJvdGVjdCgobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwcm90KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21wcm90ZWN0KHJlcywgc3RhcnQsIGxlbiwgcHJvdCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcHJvdGVjdChyZXMsIChsb25nKShzdGFydCksIChsb25nKShsZW4pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwcm90KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXJlbWFwKGFkZHIsIG9sZF9sZW4sIG5ld19sZW4sIGZsYWdzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYWRkcikgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21yZW1hcCgobG9uZykoYWRkciksIChsb25nKShvbGRfbGVuKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld19sZW4pLCAobG9uZykoZmxhZ3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuZXdfYWRkcikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tcmVtYXAocmVzLCBhZGRyLCBvbGRfbGVuLCBuZXdfbGVuLCBmbGFncywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19hZGRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXJlbWFwKHJlcywgKGxvbmcpKGFkZHIpLCAobG9uZykob2xkX2xlbiksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3X2xlbiksIChsb25nKShmbGFncyksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld19hZGRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVtYXBfZmlsZV9wYWdlcyhzdGFydCwgc2l6ZSwgcHJvdCwgcGdvZmYsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZW1hcF9maWxlX3BhZ2VzKCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShzdGFydCksIChsb25nKShzaXplKSwgKGxvbmcpKHByb3QpLCAobG9uZykocGdvZmYpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVtYXBfZmlsZV9wYWdlcyhyZXMsIHN0YXJ0LCBzaXplLCBwcm90LCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnb2ZmLCBmbGFncykgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVtYXBfZmlsZV9wYWdlcyhyZXMsIChsb25nKShzdGFydCksICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaXplKSwgKGxvbmcpKHByb3QpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBnb2ZmKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXN5bmMoc3RhcnQsIGxlbiwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc3luYygobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21zeW5jKHJlcywgc3RhcnQsIGxlbiwgZmxhZ3MpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tc3luYyhyZXMsIChsb25nKShzdGFydCksIChsb25nKShsZW4pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX211bm1hcChhZGRyLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tdW5tYXAoKGxvbmcpKGFkZHIpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X211bm1hcChyZXMsIGFkZHIsIGxlbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tdW5tYXAocmVzLCAobG9uZykoYWRkciksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tbG9jayhzdGFydCwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWxvY2soKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tbG9jayhyZXMsIHN0YXJ0LCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWxvY2socmVzLCAobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXVubG9jayhzdGFydCwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXVubG9jaygobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X211bmxvY2socmVzLCBzdGFydCwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX211bmxvY2socmVzLCAobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbWxvY2thbGwoZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tbG9ja2FsbCgobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbWxvY2thbGwocmVzLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tbG9ja2FsbChyZXMsIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX211bmxvY2thbGwoKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXVubG9ja2FsbCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tdW5sb2NrYWxsKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tdW5sb2NrYWxsKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbWFkdmlzZShzdGFydCwgbGVuLCBiZWhhdmlvcikgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWFkdmlzZSgobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJlaGF2aW9yKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21hZHZpc2UocmVzLCBzdGFydCwgbGVuLCBiZWhhdmlvcikgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21hZHZpc2UocmVzLCAobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShiZWhhdmlvcikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21pbmNvcmUoc3RhcnQsIGxlbiwgdmVjKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWluY29yZSgobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSwgKGxvbmcpKHZlYykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9taW5jb3JlKHJlcywgc3RhcnQsIGxlbiwgdmVjKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9taW5jb3JlKHJlcywgKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmVjKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcGl2b3Rfcm9vdChuZXdfcm9vdCwgcHV0X29sZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Bpdm90X3Jvb3QoKGxvbmcpKG5ld19yb290KSwgKGxvbmcpKHB1dF9vbGQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcGl2b3Rfcm9vdChyZXMsIG5ld19yb290LCBwdXRfb2xkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Bpdm90X3Jvb3QocmVzLCAobG9uZykobmV3X3Jvb3QpLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocHV0X29sZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Nocm9vdChmaWxlbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nocm9vdCgobG9uZykoZmlsZW5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2hyb290KHJlcywgZmlsZW5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2hyb290KHJlcywgKGxvbmcpKGZpbGVuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbWtub2QoZmlsZW5hbWUsIG1vZGUsIGRldikgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ta25vZCgobG9uZykoZmlsZW5hbWUpLCAobG9uZykobW9kZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZGV2KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21rbm9kKHJlcywgZmlsZW5hbWUsIG1vZGUsIGRldikgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWtub2QocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykobW9kZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGRldikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xpbmsob2xkbmFtZSwgbmV3bmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xpbmsoKGxvbmcpKG9sZG5hbWUpLCAobG9uZykobmV3bmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9saW5rKHJlcywgb2xkbmFtZSwgbmV3bmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9saW5rKHJlcywgKGxvbmcpKG9sZG5hbWUpLCAobG9uZykobmV3bmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N5bWxpbmsob2xkLCBuZXdfKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3ltbGluaygobG9uZykob2xkKSwgKGxvbmcpKG5ld18pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3ltbGluayhyZXMsIG9sZCwgbmV3XykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeW1saW5rKHJlcywgKGxvbmcpKG9sZCksIChsb25nKShuZXdfKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdW5saW5rKHBhdGhuYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdW5saW5rKChsb25nKShwYXRobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91bmxpbmsocmVzLCBwYXRobmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91bmxpbmsocmVzLCAobG9uZykocGF0aG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZW5hbWUob2xkbmFtZSwgbmV3bmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlbmFtZSgobG9uZykob2xkbmFtZSksIChsb25nKShuZXduYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlbmFtZShyZXMsIG9sZG5hbWUsIG5ld25hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVuYW1lKHJlcywgKGxvbmcpKG9sZG5hbWUpLCAobG9uZykobmV3bmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2NobW9kKGZpbGVuYW1lLCBtb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2htb2QoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2htb2QocmVzLCBmaWxlbmFtZSwgbW9kZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jaG1vZChyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmNobW9kKGZkLCBtb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNobW9kKChsb25nKShmZCksIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZjaG1vZChyZXMsIGZkLCBtb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjaG1vZChyZXMsIChsb25nKShmZCksIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmNudGwoZmQsIGNtZCwgYXJnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNudGwoKGxvbmcpKGZkKSwgKGxvbmcpKGNtZCksIChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmNudGwocmVzLCBmZCwgY21kLCBhcmcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNudGwocmVzLCAobG9uZykoZmQpLCAobG9uZykoY21kKSwgKGxvbmcpKGFyZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZjbnRsNjQoZmQsIGNtZCwgYXJnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNudGw2NCgobG9uZykoZmQpLCAobG9uZykoY21kKSwgKGxvbmcpKGFyZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mY250bDY0KHJlcywgZmQsIGNtZCwgYXJnKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY250bDY0KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGNtZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcGlwZShmaWxkZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9waXBlKChsb25nKShmaWxkZXMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcGlwZShyZXMsIGZpbGRlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9waXBlKHJlcywgKGxvbmcpKGZpbGRlcykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BpcGUyKGZpbGRlcywgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9waXBlMigobG9uZykoZmlsZGVzKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3BpcGUyKHJlcywgZmlsZGVzLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9waXBlMihyZXMsIChsb25nKShmaWxkZXMpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9kdXAoZmlsZGVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZHVwKChsb25nKShmaWxkZXMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZHVwKHJlcywgZmlsZGVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2R1cChyZXMsIChsb25nKShmaWxkZXMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9kdXAyKG9sZGZkLCBuZXdmZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2R1cDIoKGxvbmcpKG9sZGZkKSwgKGxvbmcpKG5ld2ZkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2R1cDIocmVzLCBvbGRmZCwgbmV3ZmQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZHVwMihyZXMsIChsb25nKShvbGRmZCksIChsb25nKShuZXdmZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2R1cDMob2xkZmQsIG5ld2ZkLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2R1cDMoKGxvbmcpKG9sZGZkKSwgKGxvbmcpKG5ld2ZkKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2R1cDMocmVzLCBvbGRmZCwgbmV3ZmQsIGZsYWdzKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZHVwMyhyZXMsIChsb25nKShvbGRmZCksIChsb25nKShuZXdmZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pb3Blcm0oZnJvbSwgbnVtLCBvbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvcGVybSgobG9uZykoZnJvbSksIChsb25nKShudW0pLCAobG9uZykob24pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW9wZXJtKHJlcywgZnJvbSwgbnVtLCBvbikgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvcGVybShyZXMsIChsb25nKShmcm9tKSwgKGxvbmcpKG51bSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lvY3RsKGZkLCBjbWQsIGFyZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvY3RsKChsb25nKShmZCksIChsb25nKShjbWQpLCAobG9uZykoYXJnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lvY3RsKHJlcywgZmQsIGNtZCwgYXJnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvY3RsKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGNtZCksIChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mbG9jayhmZCwgY21kKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmxvY2soKGxvbmcpKGZkKSwgKGxvbmcpKGNtZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mbG9jayhyZXMsIGZkLCBjbWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmxvY2socmVzLCAobG9uZykoZmQpLCAobG9uZykoY21kKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9fc2V0dXAobnJfcmVxcywgY3R4KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9fc2V0dXAoKGxvbmcpKG5yX3JlcXMpLCAobG9uZykoY3R4KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lvX3NldHVwKHJlcywgbnJfcmVxcywgY3R4KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvX3NldHVwKHJlcywgKGxvbmcpKG5yX3JlcXMpLCAobG9uZykoY3R4KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9fZGVzdHJveShjdHgpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb19kZXN0cm95KChsb25nKShjdHgpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW9fZGVzdHJveShyZXMsIGN0eCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb19kZXN0cm95KHJlcywgKGxvbmcpKGN0eCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lvX2dldGV2ZW50cyhjdHhfaWQsIG1pbl9uciwgbnIsIGV2ZW50cywgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb19nZXRldmVudHMoKGxvbmcpKGN0eF9pZCksIChsb25nKShtaW5fbnIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuciksIChsb25nKShldmVudHMpLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodGltZW91dCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pb19nZXRldmVudHMocmVzLCBjdHhfaWQsIG1pbl9uciwgbnIsIGV2ZW50cywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9fZ2V0ZXZlbnRzKHJlcywgKGxvbmcpKGN0eF9pZCksICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobWluX25yKSwgKGxvbmcpKG5yKSwgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGV2ZW50cyksIChsb25nKSh0aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9fc3VibWl0KGN0eF9pZCwgYXJnMSwgYXJnMikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvX3N1Ym1pdCgobG9uZykoY3R4X2lkKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lvX3N1Ym1pdChyZXMsIGN0eF9pZCwgYXJnMSwgYXJnMikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb19zdWJtaXQocmVzLCAobG9uZykoY3R4X2lkKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lvX2NhbmNlbChjdHhfaWQsIGlvY2IsIHJlc3VsdCkgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb19jYW5jZWwoKGxvbmcpKGN0eF9pZCksIChsb25nKShpb2NiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocmVzdWx0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lvX2NhbmNlbChyZXMsIGN0eF9pZCwgaW9jYiwgcmVzdWx0KSAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb19jYW5jZWwocmVzLCAobG9uZykoY3R4X2lkKSwgKGxvbmcpKGlvY2IpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocmVzdWx0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2VuZGZpbGUob3V0X2ZkLCBpbl9mZCwgb2Zmc2V0LCBjb3VudCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbmRmaWxlKChsb25nKShvdXRfZmQpLCAobG9uZykoaW5fZmQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9mZnNldCksIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZW5kZmlsZShyZXMsIG91dF9mZCwgaW5fZmQsIG9mZnNldCwgY291bnQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VuZGZpbGUocmVzLCAobG9uZykob3V0X2ZkKSwgKGxvbmcpKGluX2ZkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob2Zmc2V0KSwgKGxvbmcpKGNvdW50KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2VuZGZpbGU2NChvdXRfZmQsIGluX2ZkLCBvZmZzZXQsIGNvdW50KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZGZpbGU2NCgobG9uZykob3V0X2ZkKSwgKGxvbmcpKGluX2ZkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9mZnNldCksIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZW5kZmlsZTY0KHJlcywgb3V0X2ZkLCBpbl9mZCwgb2Zmc2V0LCBjb3VudCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW5kZmlsZTY0KHJlcywgKGxvbmcpKG91dF9mZCksIChsb25nKShpbl9mZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob2Zmc2V0KSwgKGxvbmcpKGNvdW50KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVhZGxpbmsocGF0aCwgYnVmLCBidWZzaXopICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVhZGxpbmsoKGxvbmcpKHBhdGgpLCAobG9uZykoYnVmKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShidWZzaXopKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVhZGxpbmsocmVzLCBwYXRoLCBidWYsIGJ1ZnNpeikgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVhZGxpbmsocmVzLCAobG9uZykocGF0aCksIChsb25nKShidWYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShidWZzaXopKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jcmVhdChwYXRobmFtZSwgbW9kZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2NyZWF0KChsb25nKShwYXRobmFtZSksIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2NyZWF0KHJlcywgcGF0aG5hbWUsIG1vZGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY3JlYXQocmVzLCAobG9uZykocGF0aG5hbWUpLCAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29wZW4oZmlsZW5hbWUsIGZsYWdzLCBtb2RlKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb3BlbigobG9uZykoZmlsZW5hbWUpLCAobG9uZykoZmxhZ3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vcGVuKHJlcywgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29wZW4ocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykoZmxhZ3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jbG9zZShmZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nsb3NlKChsb25nKShmZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jbG9zZShyZXMsIGZkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb3NlKHJlcywgKGxvbmcpKGZkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYWNjZXNzKGZpbGVuYW1lLCBtb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWNjZXNzKChsb25nKShmaWxlbmFtZSksIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2FjY2VzcyhyZXMsIGZpbGVuYW1lLCBtb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2FjY2VzcyhyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdmhhbmd1cCgpIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdmhhbmd1cCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF92aGFuZ3VwKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF92aGFuZ3VwKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2hvd24oZmlsZW5hbWUsIHVzZXIsIGdyb3VwKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaG93bigobG9uZykoZmlsZW5hbWUpLCAobG9uZykodXNlciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZ3JvdXApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2hvd24ocmVzLCBmaWxlbmFtZSwgdXNlciwgZ3JvdXApICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jaG93bihyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKSh1c2VyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZ3JvdXApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9sY2hvd24oZmlsZW5hbWUsIHVzZXIsIGdyb3VwKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sY2hvd24oKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHVzZXIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShncm91cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sY2hvd24ocmVzLCBmaWxlbmFtZSwgdXNlciwgZ3JvdXApICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sY2hvd24ocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykodXNlciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShncm91cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZjaG93bihmZCwgdXNlciwgZ3JvdXApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY2hvd24oKGxvbmcpKGZkKSwgKGxvbmcpKHVzZXIpLCAobG9uZykoZ3JvdXApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmNob3duKHJlcywgZmQsIHVzZXIsIGdyb3VwKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNob3duKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKHVzZXIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZ3JvdXApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jaG93bjE2KGZpbGVuYW1lLCB1c2VyLCBncm91cCkgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nob3duMTYoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpdXNlciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpZ3JvdXApCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jaG93bjE2KHJlcywgZmlsZW5hbWUsIHVzZXIsIGdyb3VwKSAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nob3duMTYocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZyl1c2VyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpZ3JvdXApCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xjaG93bjE2KGZpbGVuYW1lLCB1c2VyLCBncm91cCkgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xjaG93bjE2KChsb25nKShmaWxlbmFtZSksIChsb25nKXVzZXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylncm91cCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xjaG93bjE2KHJlcywgZmlsZW5hbWUsIHVzZXIsIGdyb3VwKSAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xjaG93bjE2KHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpdXNlciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylncm91cCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmNob3duMTYoZmQsIHVzZXIsIGdyb3VwKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNob3duMTYoKGxvbmcpKGZkKSwgKGxvbmcpdXNlciwgKGxvbmcpZ3JvdXApCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mY2hvd24xNihyZXMsIGZkLCB1c2VyLCBncm91cCkgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY2hvd24xNihyZXMsIChsb25nKShmZCksIChsb25nKXVzZXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpZ3JvdXApCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJlZ2lkMTYocmdpZCwgZWdpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlZ2lkMTYoKGxvbmcpcmdpZCwgKGxvbmcpZWdpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHJlZ2lkMTYocmVzLCByZ2lkLCBlZ2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJlZ2lkMTYocmVzLCAobG9uZylyZ2lkLCAobG9uZyllZ2lkKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRnaWQxNihnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRnaWQxNigobG9uZylnaWQpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRnaWQxNihyZXMsIGdpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRnaWQxNihyZXMsIChsb25nKWdpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cmV1aWQxNihydWlkLCBldWlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmV1aWQxNigobG9uZylydWlkLCAobG9uZylldWlkKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmV1aWQxNihyZXMsIHJ1aWQsIGV1aWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmV1aWQxNihyZXMsIChsb25nKXJ1aWQsIChsb25nKWV1aWQpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHVpZDE2KHVpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHVpZDE2KChsb25nKXVpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHVpZDE2KHJlcywgdWlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHVpZDE2KHJlcywgKGxvbmcpdWlkKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRyZXN1aWQxNihydWlkLCBldWlkLCBzdWlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmVzdWlkMTYoKGxvbmcpcnVpZCwgKGxvbmcpZXVpZCwgKGxvbmcpc3VpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHJlc3VpZDE2KHJlcywgcnVpZCwgZXVpZCwgc3VpZCkgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJlc3VpZDE2KHJlcywgKGxvbmcpcnVpZCwgKGxvbmcpZXVpZCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylzdWlkKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRyZXN1aWQxNihydWlkLCBldWlkLCBzdWlkKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cmVzdWlkMTYoKGxvbmcpKHJ1aWQpLCAobG9uZykoZXVpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc3VpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRyZXN1aWQxNihyZXMsIHJ1aWQsIGV1aWQsIHN1aWQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cmVzdWlkMTYocmVzLCAobG9uZykocnVpZCksIChsb25nKShldWlkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc3VpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJlc2dpZDE2KHJnaWQsIGVnaWQsIHNnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXNnaWQxNigobG9uZylyZ2lkLCAobG9uZyllZ2lkLCAobG9uZylzZ2lkKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmVzZ2lkMTYocmVzLCByZ2lkLCBlZ2lkLCBzZ2lkKSAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmVzZ2lkMTYocmVzLCAobG9uZylyZ2lkLCAobG9uZyllZ2lkLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKXNnaWQpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHJlc2dpZDE2KHJnaWQsIGVnaWQsIHNnaWQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRyZXNnaWQxNigobG9uZykocmdpZCksIChsb25nKShlZ2lkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHJlc2dpZDE2KHJlcywgcmdpZCwgZWdpZCwgc2dpZCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRyZXNnaWQxNihyZXMsIChsb25nKShyZ2lkKSwgKGxvbmcpKGVnaWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0ZnN1aWQxNih1aWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRmc3VpZDE2KChsb25nKXVpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGZzdWlkMTYocmVzLCB1aWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZnN1aWQxNihyZXMsIChsb25nKXVpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0ZnNnaWQxNihnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRmc2dpZDE2KChsb25nKWdpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGZzZ2lkMTYocmVzLCBnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZnNnaWQxNihyZXMsIChsb25nKWdpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0Z3JvdXBzMTYoZ2lkc2V0c2l6ZSwgZ3JvdXBsaXN0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Z3JvdXBzMTYoKGxvbmcpKGdpZHNldHNpemUpLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShncm91cGxpc3QpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0Z3JvdXBzMTYocmVzLCBnaWRzZXRzaXplLCBncm91cGxpc3QpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Z3JvdXBzMTYocmVzLCAobG9uZykoZ2lkc2V0c2l6ZSksICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShncm91cGxpc3QpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRncm91cHMxNihnaWRzZXRzaXplLCBncm91cGxpc3QpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRncm91cHMxNigobG9uZykoZ2lkc2V0c2l6ZSksICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGdyb3VwbGlzdCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRncm91cHMxNihyZXMsIGdpZHNldHNpemUsIGdyb3VwbGlzdCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRncm91cHMxNihyZXMsIChsb25nKShnaWRzZXRzaXplKSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGdyb3VwbGlzdCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHVpZDE2KCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHVpZDE2KCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHVpZDE2KHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXR1aWQxNihyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGV1aWQxNigpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRldWlkMTYoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0ZXVpZDE2KHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRldWlkMTYocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRnaWQxNigpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRnaWQxNigpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRnaWQxNihyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Z2lkMTYocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRlZ2lkMTYoKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0ZWdpZDE2KCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGVnaWQxNihyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0ZWdpZDE2KHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdXRpbWUoZmlsZW5hbWUsIHRpbWVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXRpbWUoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHRpbWVzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3V0aW1lKHJlcywgZmlsZW5hbWUsIHRpbWVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3V0aW1lKHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHRpbWVzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdXRpbWVzKGZpbGVuYW1lLCB1dGltZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91dGltZXMoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHV0aW1lcykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91dGltZXMocmVzLCBmaWxlbmFtZSwgdXRpbWVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3V0aW1lcyhyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKSh1dGltZXMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9sc2VlayhmZCwgb2Zmc2V0LCBvcmlnaW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sc2VlaygobG9uZykoZmQpLCAobG9uZykob2Zmc2V0KSwgKGxvbmcpKG9yaWdpbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sc2VlayhyZXMsIGZkLCBvZmZzZXQsIG9yaWdpbikgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbHNlZWsocmVzLCAobG9uZykoZmQpLCAobG9uZykob2Zmc2V0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3JpZ2luKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbGxzZWVrKGZkLCBvZmZzZXRfaGlnaCwgb2Zmc2V0X2xvdywgcmVzdWx0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xsc2VlaygobG9uZykoZmQpLCAobG9uZykob2Zmc2V0X2hpZ2gpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9mZnNldF9sb3cpLCAobG9uZykocmVzdWx0KSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcmlnaW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbGxzZWVrKHJlcywgZmQsIG9mZnNldF9oaWdoLCBvZmZzZXRfbG93LCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCBvcmlnaW4pICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGxzZWVrKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKG9mZnNldF9oaWdoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9mZnNldF9sb3cpLCAobG9uZykocmVzdWx0KSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3JpZ2luKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVhZChmZCwgYnVmLCBjb3VudCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlYWQoKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZiksIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWFkKHJlcywgZmQsIGJ1ZiwgY291bnQpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWFkKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY291bnQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZWFkdihmZCwgdmVjLCB2bGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVhZHYoKGxvbmcpKGZkKSwgKGxvbmcpKHZlYyksIChsb25nKSh2bGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlYWR2KHJlcywgZmQsIHZlYywgdmxlbikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWFkdihyZXMsIChsb25nKShmZCksIChsb25nKSh2ZWMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2bGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfd3JpdGUoZmQsIGJ1ZiwgY291bnQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF93cml0ZSgobG9uZykoZmQpLCAobG9uZykoYnVmKSwgKGxvbmcpKGNvdW50KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3dyaXRlKHJlcywgZmQsIGJ1ZiwgY291bnQpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF93cml0ZShyZXMsIChsb25nKShmZCksIChsb25nKShidWYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3dyaXRldihmZCwgdmVjLCB2bGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfd3JpdGV2KChsb25nKShmZCksIChsb25nKSh2ZWMpLCAobG9uZykodmxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF93cml0ZXYocmVzLCBmZCwgdmVjLCB2bGVuKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3dyaXRldihyZXMsIChsb25nKShmZCksIChsb25nKSh2ZWMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmxlbikpCisKKyNpZmRlZiBfTFA2NAorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wcmVhZDY0KGZkLCBidWYsIGNvdW50LCBwb3MpICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wcmVhZDY0KChsb25nKShmZCksIChsb25nKShidWYpLCAobG9uZykoY291bnQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocG9zKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3ByZWFkNjQocmVzLCBmZCwgYnVmLCBjb3VudCwgcG9zKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3ByZWFkNjQocmVzLCAobG9uZykoZmQpLCAobG9uZykoYnVmKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjb3VudCksIChsb25nKShwb3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wd3JpdGU2NChmZCwgYnVmLCBjb3VudCwgcG9zKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHdyaXRlNjQoKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY291bnQpLCAobG9uZykocG9zKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3B3cml0ZTY0KHJlcywgZmQsIGJ1ZiwgY291bnQsIHBvcykgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wd3JpdGU2NChyZXMsIChsb25nKShmZCksIChsb25nKShidWYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjb3VudCksIChsb25nKShwb3MpKQorI2Vsc2UKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHJlYWQ2NChmZCwgYnVmLCBjb3VudCwgcG9zMCwgcG9zMSkgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHJlYWQ2NCgobG9uZykoZmQpLCAobG9uZykoYnVmKSwgKGxvbmcpKGNvdW50KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBvczApLCAobG9uZykocG9zMSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wcmVhZDY0KHJlcywgZmQsIGJ1ZiwgY291bnQsIHBvczAsIHBvczEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJlYWQ2NChyZXMsIChsb25nKShmZCksIChsb25nKShidWYpLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjb3VudCksIChsb25nKShwb3MwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwb3MxKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHdyaXRlNjQoZmQsIGJ1ZiwgY291bnQsIHBvczAsIHBvczEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wd3JpdGU2NCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShmZCksIChsb25nKShidWYpLCAobG9uZykoY291bnQpLCAobG9uZykocG9zMCksIChsb25nKShwb3MxKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3B3cml0ZTY0KHJlcywgZmQsIGJ1ZiwgY291bnQsIHBvczAsIHBvczEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHdyaXRlNjQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZiksIChsb25nKShjb3VudCksIChsb25nKShwb3MwKSwgKGxvbmcpKHBvczEpKQorI2VuZGlmCisKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHJlYWR2KGZkLCB2ZWMsIHZsZW4sIHBvc19sLCBwb3NfaCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3ByZWFkdigobG9uZykoZmQpLCAobG9uZykodmVjKSwgKGxvbmcpKHZsZW4pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwb3NfbCksIChsb25nKShwb3NfaCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wcmVhZHYocmVzLCBmZCwgdmVjLCB2bGVuLCBwb3NfbCwgcG9zX2gpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJlYWR2KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKHZlYyksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZsZW4pLCAobG9uZykocG9zX2wpLCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocG9zX2gpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wd3JpdGV2KGZkLCB2ZWMsIHZsZW4sIHBvc19sLCBwb3NfaCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3B3cml0ZXYoKGxvbmcpKGZkKSwgKGxvbmcpKHZlYyksIChsb25nKSh2bGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBvc19sKSwgKGxvbmcpKHBvc19oKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3B3cml0ZXYocmVzLCBmZCwgdmVjLCB2bGVuLCBwb3NfbCwgcG9zX2gpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHdyaXRldihyZXMsIChsb25nKShmZCksIChsb25nKSh2ZWMpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmxlbiksIChsb25nKShwb3NfbCksICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocG9zX2gpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRjd2QoYnVmLCBzaXplKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Y3dkKChsb25nKShidWYpLCAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRjd2QocmVzLCBidWYsIHNpemUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Y3dkKHJlcywgKGxvbmcpKGJ1ZiksIChsb25nKShzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbWtkaXIocGF0aG5hbWUsIG1vZGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ta2RpcigobG9uZykocGF0aG5hbWUpLCAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ta2RpcihyZXMsIHBhdGhuYW1lLCBtb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21rZGlyKHJlcywgKGxvbmcpKHBhdGhuYW1lKSwgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jaGRpcihmaWxlbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2NoZGlyKChsb25nKShmaWxlbmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jaGRpcihyZXMsIGZpbGVuYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2NoZGlyKHJlcywgKGxvbmcpKGZpbGVuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmNoZGlyKGZkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNoZGlyKChsb25nKShmZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mY2hkaXIocmVzLCBmZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY2hkaXIocmVzLCAobG9uZykoZmQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9ybWRpcihwYXRobmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JtZGlyKChsb25nKShwYXRobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ybWRpcihyZXMsIHBhdGhuYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JtZGlyKHJlcywgKGxvbmcpKHBhdGhuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbG9va3VwX2Rjb29raWUoY29va2llNjQsIGJ1ZiwgbGVuKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xvb2t1cF9kY29va2llKChsb25nKShjb29raWU2NCksIChsb25nKShidWYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sb29rdXBfZGNvb2tpZShyZXMsIGNvb2tpZTY0LCBidWYsIGxlbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sb29rdXBfZGNvb2tpZShyZXMsIChsb25nKShjb29raWU2NCksICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJ1ZiksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9xdW90YWN0bChjbWQsIHNwZWNpYWwsIGlkLCBhZGRyKSAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9xdW90YWN0bCgobG9uZykoY21kKSwgKGxvbmcpKHNwZWNpYWwpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGlkKSwgKGxvbmcpKGFkZHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcXVvdGFjdGwocmVzLCBjbWQsIHNwZWNpYWwsIGlkLCBhZGRyKSAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcXVvdGFjdGwocmVzLCAobG9uZykoY21kKSwgKGxvbmcpKHNwZWNpYWwpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShpZCksIChsb25nKShhZGRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0ZGVudHMoZmQsIGRpcmVudCwgY291bnQpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGRlbnRzKChsb25nKShmZCksIChsb25nKShkaXJlbnQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNvdW50KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGRlbnRzKHJlcywgZmQsIGRpcmVudCwgY291bnQpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRkZW50cyhyZXMsIChsb25nKShmZCksIChsb25nKShkaXJlbnQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGRlbnRzNjQoZmQsIGRpcmVudCwgY291bnQpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGRlbnRzNjQoKGxvbmcpKGZkKSwgKGxvbmcpKGRpcmVudCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRkZW50czY0KHJlcywgZmQsIGRpcmVudCwgY291bnQpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRkZW50czY0KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGRpcmVudCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY291bnQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRzb2Nrb3B0KGZkLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRzb2Nrb3B0KChsb25nKShmZCksIChsb25nKShsZXZlbCksICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3B0bmFtZSksIChsb25nKShvcHR2YWwpLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRzb2Nrb3B0KHJlcywgZmQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0bGVuKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRzb2Nrb3B0KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGxldmVsKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdG5hbWUpLCAobG9uZykob3B0dmFsKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3B0bGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0c29ja29wdChmZCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0c29ja29wdCgobG9uZykoZmQpLCAobG9uZykobGV2ZWwpLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdG5hbWUpLCAobG9uZykob3B0dmFsKSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcHRsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0c29ja29wdChyZXMsIGZkLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGxlbikgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0c29ja29wdChyZXMsIChsb25nKShmZCksIChsb25nKShsZXZlbCksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcHRuYW1lKSwgKGxvbmcpKG9wdHZhbCksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2JpbmQoYXJnMCwgYXJnMSwgYXJnMikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2JpbmQoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2JpbmQocmVzLCBhcmcwLCBhcmcxLCBhcmcyKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2JpbmQocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY29ubmVjdChhcmcwLCBhcmcxLCBhcmcyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY29ubmVjdCgobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY29ubmVjdChyZXMsIGFyZzAsIGFyZzEsIGFyZzIpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY29ubmVjdChyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9hY2NlcHQoYXJnMCwgYXJnMSwgYXJnMikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FjY2VwdCgobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYWNjZXB0KHJlcywgYXJnMCwgYXJnMSwgYXJnMikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hY2NlcHQocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9hY2NlcHQ0KGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hY2NlcHQ0KChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMiksIChsb25nKShhcmczKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2FjY2VwdDQocmVzLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2FjY2VwdDQocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRzb2NrbmFtZShhcmcwLCBhcmcxLCBhcmcyKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0c29ja25hbWUoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRzb2NrbmFtZShyZXMsIGFyZzAsIGFyZzEsIGFyZzIpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0c29ja25hbWUocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHBlZXJuYW1lKGFyZzAsIGFyZzEsIGFyZzIpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRwZWVybmFtZSgobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHBlZXJuYW1lKHJlcywgYXJnMCwgYXJnMSwgYXJnMikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwZWVybmFtZShyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2VuZChhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW5kKChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAobG9uZykoYXJnMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmczKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlbmQocmVzLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmQocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZW5kdG8oYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbmR0bygobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMiksIChsb25nKShhcmczKSwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnNCksIChsb25nKShhcmc1KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlbmR0byhyZXMsIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmc1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VuZHRvKHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmc0KSwgKGxvbmcpKGFyZzUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZW5kbXNnKGZkLCBtc2csIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZG1zZygobG9uZykoZmQpLCAobG9uZykobXNnKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlbmRtc2cocmVzLCBmZCwgbXNnLCBmbGFncykgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmRtc2cocmVzLCAobG9uZykoZmQpLCAobG9uZykobXNnKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NlbmRtbXNnKGZkLCBtc2csIHZsZW4sIGZsYWdzKSAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbmRtbXNnKChsb25nKShmZCksIChsb25nKShtc2cpLCAobG9uZykodmxlbiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2VuZG1tc2cocmVzLCBmZCwgbXNnLCB2bGVuLCBmbGFncykgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmRtbXNnKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKG1zZyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZsZW4pLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZWN2KGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlY3YoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIChsb25nKShhcmcyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVjdihyZXMsIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVjdihyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlY3Zmcm9tKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWN2ZnJvbSgobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzQpLCAobG9uZykoYXJnNSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWN2ZnJvbShyZXMsIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWN2ZnJvbShyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzQpLCAobG9uZykoYXJnNSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlY3Ztc2coZmQsIG1zZywgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWN2bXNnKChsb25nKShmZCksIChsb25nKShtc2cpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVjdm1zZyhyZXMsIGZkLCBtc2csIGZsYWdzKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVjdm1zZyhyZXMsIChsb25nKShmZCksIChsb25nKShtc2cpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVjdm1tc2coZmQsIG1zZywgdmxlbiwgZmxhZ3MsIHRpbWVvdXQpICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVjdm1tc2coKGxvbmcpKGZkKSwgKGxvbmcpKG1zZyksIChsb25nKSh2bGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncyksIChsb25nKSh0aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlY3ZtbXNnKHJlcywgZmQsIG1zZywgdmxlbiwgZmxhZ3MsIHRpbWVvdXQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVjdm1tc2cocmVzLCAobG9uZykoZmQpLCAobG9uZykobXNnKSwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZsZW4pLCAobG9uZykoZmxhZ3MpLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHRpbWVvdXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zb2NrZXQoYXJnMCwgYXJnMSwgYXJnMikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NvY2tldCgobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc29ja2V0KHJlcywgYXJnMCwgYXJnMSwgYXJnMikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zb2NrZXQocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zb2NrZXRwYWlyKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zb2NrZXRwYWlyKChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMiksIChsb25nKShhcmczKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NvY2tldHBhaXIocmVzLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NvY2tldHBhaXIocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zb2NrZXRjYWxsKGNhbGwsIGFyZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zb2NrZXRjYWxsKChsb25nKShjYWxsKSwgKGxvbmcpKGFyZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc29ja2V0Y2FsbChyZXMsIGNhbGwsIGFyZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc29ja2V0Y2FsbChyZXMsIChsb25nKShjYWxsKSwgKGxvbmcpKGFyZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9saXN0ZW4oYXJnMCwgYXJnMSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xpc3RlbigobG9uZykoYXJnMCksIChsb25nKShhcmcxKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xpc3RlbihyZXMsIGFyZzAsIGFyZzEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGlzdGVuKHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BvbGwodWZkcywgbmZkcywgdGltZW91dCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BvbGwoKGxvbmcpKHVmZHMpLCAobG9uZykobmZkcyksIChsb25nKSh0aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3BvbGwocmVzLCB1ZmRzLCBuZmRzLCB0aW1lb3V0KSAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BvbGwocmVzLCAobG9uZykodWZkcyksIChsb25nKShuZmRzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh0aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2VsZWN0KG4sIGlucCwgb3V0cCwgZXhwLCB0dnApICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VsZWN0KChsb25nKShuKSwgKGxvbmcpKGlucCksIChsb25nKShvdXRwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZXhwKSwgKGxvbmcpKHR2cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZWxlY3QocmVzLCBuLCBpbnAsIG91dHAsIGV4cCwgdHZwKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbGVjdChyZXMsIChsb25nKShuKSwgKGxvbmcpKGlucCksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3V0cCksIChsb25nKShleHApLCAobG9uZykodHZwKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfb2xkX3NlbGVjdChhcmcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vbGRfc2VsZWN0KChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb2xkX3NlbGVjdChyZXMsIGFyZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGRfc2VsZWN0KHJlcywgKGxvbmcpKGFyZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Vwb2xsX2NyZWF0ZShzaXplKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXBvbGxfY3JlYXRlKChsb25nKShzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Vwb2xsX2NyZWF0ZShyZXMsIHNpemUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXBvbGxfY3JlYXRlKHJlcywgKGxvbmcpKHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9lcG9sbF9jcmVhdGUxKGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXBvbGxfY3JlYXRlMSgobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXBvbGxfY3JlYXRlMShyZXMsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Vwb2xsX2NyZWF0ZTEocmVzLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9lcG9sbF9jdGwoZXBmZCwgb3AsIGZkLCBldmVudCkgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9lcG9sbF9jdGwoKGxvbmcpKGVwZmQpLCAobG9uZykob3ApLCAobG9uZykoZmQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShldmVudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9lcG9sbF9jdGwocmVzLCBlcGZkLCBvcCwgZmQsIGV2ZW50KSAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9lcG9sbF9jdGwocmVzLCAobG9uZykoZXBmZCksIChsb25nKShvcCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmZCksIChsb25nKShldmVudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Vwb2xsX3dhaXQoZXBmZCwgZXZlbnRzLCBtYXhldmVudHMsIHRpbWVvdXQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9lcG9sbF93YWl0KChsb25nKShlcGZkKSwgKGxvbmcpKGV2ZW50cyksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1heGV2ZW50cyksIChsb25nKSh0aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Vwb2xsX3dhaXQocmVzLCBlcGZkLCBldmVudHMsIG1heGV2ZW50cywgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXBvbGxfd2FpdChyZXMsIChsb25nKShlcGZkKSwgKGxvbmcpKGV2ZW50cyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobWF4ZXZlbnRzKSwgKGxvbmcpKHRpbWVvdXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9lcG9sbF9wd2FpdChlcGZkLCBldmVudHMsIG1heGV2ZW50cywgdGltZW91dCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdtYXNrLCBzaWdzZXRzaXplKSAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX3B3YWl0KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKGVwZmQpLCAobG9uZykoZXZlbnRzKSwgKGxvbmcpKG1heGV2ZW50cyksIChsb25nKSh0aW1lb3V0KSwgICAgICAgXAorICAgICAgKGxvbmcpKHNpZ21hc2spLCAobG9uZykoc2lnc2V0c2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9lcG9sbF9wd2FpdChyZXMsIGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsIHNpZ21hc2ssIHNpZ3NldHNpemUpICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9lcG9sbF9wd2FpdCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKShlcGZkKSwgKGxvbmcpKGV2ZW50cyksIChsb25nKShtYXhldmVudHMpLCAobG9uZykodGltZW91dCksIFwKKyAgICAgIChsb25nKShzaWdtYXNrKSwgKGxvbmcpKHNpZ3NldHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRob3N0bmFtZShuYW1lLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRob3N0bmFtZSgobG9uZykobmFtZSksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0aG9zdG5hbWUocmVzLCBuYW1lLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0aG9zdG5hbWUocmVzLCAobG9uZykobmFtZSksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRob3N0bmFtZShuYW1lLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRob3N0bmFtZSgobG9uZykobmFtZSksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0aG9zdG5hbWUocmVzLCBuYW1lLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0aG9zdG5hbWUocmVzLCAobG9uZykobmFtZSksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRkb21haW5uYW1lKG5hbWUsIGxlbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGRvbWFpbm5hbWUoKGxvbmcpKG5hbWUpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGRvbWFpbm5hbWUocmVzLCBuYW1lLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZG9tYWlubmFtZShyZXMsIChsb25nKShuYW1lKSwgKGxvbmcpKGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX25ld3VuYW1lKG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uZXd1bmFtZSgobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9uZXd1bmFtZShyZXMsIG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmV3dW5hbWUocmVzLCAobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3VuYW1lKGFyZzApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bmFtZSgobG9uZykoYXJnMCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91bmFtZShyZXMsIGFyZzApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW5hbWUocmVzLCAobG9uZykoYXJnMCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZHVuYW1lKGFyZzApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vbGR1bmFtZSgobG9uZykoYXJnMCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vbGR1bmFtZShyZXMsIGFyZzApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb2xkdW5hbWUocmVzLCAobG9uZykoYXJnMCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHJsaW1pdChyZXNvdXJjZSwgcmxpbSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHJsaW1pdCgobG9uZykocmVzb3VyY2UpLCAobG9uZykocmxpbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRybGltaXQocmVzLCByZXNvdXJjZSwgcmxpbSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRybGltaXQocmVzLCAobG9uZykocmVzb3VyY2UpLCAobG9uZykocmxpbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZF9nZXRybGltaXQocmVzb3VyY2UsIHJsaW0pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vbGRfZ2V0cmxpbWl0KChsb25nKShyZXNvdXJjZSksIChsb25nKShybGltKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X29sZF9nZXRybGltaXQocmVzLCByZXNvdXJjZSwgcmxpbSkgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb2xkX2dldHJsaW1pdChyZXMsIChsb25nKShyZXNvdXJjZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocmxpbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJsaW1pdChyZXNvdXJjZSwgcmxpbSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJsaW1pdCgobG9uZykocmVzb3VyY2UpLCAobG9uZykocmxpbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRybGltaXQocmVzLCByZXNvdXJjZSwgcmxpbSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRybGltaXQocmVzLCAobG9uZykocmVzb3VyY2UpLCAobG9uZykocmxpbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BybGltaXQ2NChwaWQsIHJlc291cmNlLCBuZXdfcmxpbSwgb2xkX3JsaW0pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wcmxpbWl0NjQoKGxvbmcpKHBpZCksIChsb25nKShyZXNvdXJjZSksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3X3JsaW0pLCAobG9uZykob2xkX3JsaW0pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHJsaW1pdDY0KHJlcywgcGlkLCByZXNvdXJjZSwgbmV3X3JsaW0sICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9ybGltKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wcmxpbWl0NjQocmVzLCAobG9uZykocGlkKSwgKGxvbmcpKHJlc291cmNlKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld19ybGltKSwgKGxvbmcpKG9sZF9ybGltKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cnVzYWdlKHdobywgcnUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRydXNhZ2UoKGxvbmcpKHdobyksIChsb25nKShydSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRydXNhZ2UocmVzLCB3aG8sIHJ1KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJ1c2FnZShyZXMsIChsb25nKSh3aG8pLCAobG9uZykocnUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91bWFzayhtYXNrKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdW1hc2soKGxvbmcpKG1hc2spKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdW1hc2socmVzLCBtYXNrKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VtYXNrKHJlcywgKGxvbmcpKG1hc2spKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tc2dnZXQoa2V5LCBtc2dmbGcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc2dnZXQoKGxvbmcpKGtleSksIChsb25nKShtc2dmbGcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXNnZ2V0KHJlcywga2V5LCBtc2dmbGcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXNnZ2V0KHJlcywgKGxvbmcpKGtleSksIChsb25nKShtc2dmbGcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tc2dzbmQobXNxaWQsIG1zZ3AsIG1zZ3N6LCBtc2dmbGcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc2dzbmQoKGxvbmcpKG1zcWlkKSwgKGxvbmcpKG1zZ3ApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtc2dzeiksIChsb25nKShtc2dmbGcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXNnc25kKHJlcywgbXNxaWQsIG1zZ3AsIG1zZ3N6LCBtc2dmbGcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXNnc25kKHJlcywgKGxvbmcpKG1zcWlkKSwgKGxvbmcpKG1zZ3ApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobXNnc3opLCAobG9uZykobXNnZmxnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXNncmN2KG1zcWlkLCBtc2dwLCBtc2dzeiwgbXNndHlwLCBtc2dmbGcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc2dyY3YoKGxvbmcpKG1zcWlkKSwgKGxvbmcpKG1zZ3ApLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1zZ3N6KSwgKGxvbmcpKG1zZ3R5cCksICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1zZ2ZsZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tc2dyY3YocmVzLCBtc3FpZCwgbXNncCwgbXNnc3osIG1zZ3R5cCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2ZsZykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXNncmN2KHJlcywgKGxvbmcpKG1zcWlkKSwgKGxvbmcpKG1zZ3ApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobXNnc3opLCAobG9uZykobXNndHlwKSwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1zZ2ZsZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21zZ2N0bChtc3FpZCwgY21kLCBidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc2djdGwoKGxvbmcpKG1zcWlkKSwgKGxvbmcpKGNtZCksIChsb25nKShidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXNnY3RsKHJlcywgbXNxaWQsIGNtZCwgYnVmKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tc2djdGwocmVzLCAobG9uZykobXNxaWQpLCAobG9uZykoY21kKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NlbWdldChrZXksIG5zZW1zLCBzZW1mbGcpICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VtZ2V0KChsb25nKShrZXkpLCAobG9uZykobnNlbXMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZW1mbGcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2VtZ2V0KHJlcywga2V5LCBuc2Vtcywgc2VtZmxnKSAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW1nZXQocmVzLCAobG9uZykoa2V5KSwgKGxvbmcpKG5zZW1zKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNlbWZsZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NlbW9wKHNlbWlkLCBzb3BzLCBuc29wcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbW9wKChsb25nKShzZW1pZCksIChsb25nKShzb3BzKSwgKGxvbmcpKG5zb3BzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlbW9wKHJlcywgc2VtaWQsIHNvcHMsIG5zb3BzKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2Vtb3AocmVzLCAobG9uZykoc2VtaWQpLCAobG9uZykoc29wcyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5zb3BzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2VtY3RsKHNlbWlkLCBzZW1udW0sIGNtZCwgYXJnKSAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW1jdGwoKGxvbmcpKHNlbWlkKSwgKGxvbmcpKHNlbW51bSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNtZCksIChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2VtY3RsKHJlcywgc2VtaWQsIHNlbW51bSwgY21kLCBhcmcpICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW1jdGwocmVzLCAobG9uZykoc2VtaWQpLCAobG9uZykoc2VtbnVtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNtZCksIChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZW10aW1lZG9wKHNlbWlkLCBzb3BzLCBuc29wcywgdGltZW91dCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbXRpbWVkb3AoKGxvbmcpKHNlbWlkKSwgKGxvbmcpKHNvcHMpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5zb3BzKSwgKGxvbmcpKHRpbWVvdXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2VtdGltZWRvcChyZXMsIHNlbWlkLCBzb3BzLCBuc29wcywgdGltZW91dCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW10aW1lZG9wKHJlcywgKGxvbmcpKHNlbWlkKSwgKGxvbmcpKHNvcHMpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuc29wcyksIChsb25nKSh0aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2htYXQoc2htaWQsIHNobWFkZHIsIHNobWZsZykgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaG1hdCgobG9uZykoc2htaWQpLCAobG9uZykoc2htYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2htZmxnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NobWF0KHJlcywgc2htaWQsIHNobWFkZHIsIHNobWZsZykgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2htYXQocmVzLCAobG9uZykoc2htaWQpLCAobG9uZykoc2htYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNobWZsZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NobWdldChrZXksIHNpemUsIGZsYWcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaG1nZXQoKGxvbmcpKGtleSksIChsb25nKShzaXplKSwgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2htZ2V0KHJlcywga2V5LCBzaXplLCBmbGFnKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NobWdldChyZXMsIChsb25nKShrZXkpLCAobG9uZykoc2l6ZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2htZHQoc2htYWRkcikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NobWR0KChsb25nKShzaG1hZGRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NobWR0KHJlcywgc2htYWRkcikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaG1kdChyZXMsIChsb25nKShzaG1hZGRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2htY3RsKHNobWlkLCBjbWQsIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NobWN0bCgobG9uZykoc2htaWQpLCAobG9uZykoY21kKSwgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaG1jdGwocmVzLCBzaG1pZCwgY21kLCBidWYpICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NobWN0bChyZXMsIChsb25nKShzaG1pZCksIChsb25nKShjbWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaXBjKGNhbGwsIGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBwdHIsIGZpZnRoKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaXBjKChsb25nKShjYWxsKSwgKGxvbmcpKGZpcnN0KSwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2Vjb25kKSwgKGxvbmcpKHRoaXJkKSwgKGxvbmcpKHB0ciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZpZnRoKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lwYyhyZXMsIGNhbGwsIGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBwdHIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWZ0aCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaXBjKHJlcywgKGxvbmcpKGNhbGwpLCAobG9uZykoZmlyc3QpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZWNvbmQpLCAobG9uZykodGhpcmQpLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwdHIpLCAobG9uZykoZmlmdGgpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tcV9vcGVuKG5hbWUsIG9mbGFnLCBtb2RlLCBhdHRyKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfb3BlbigobG9uZykobmFtZSksIChsb25nKShvZmxhZyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSwgKGxvbmcpKGF0dHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXFfb3BlbihyZXMsIG5hbWUsIG9mbGFnLCBtb2RlLCBhdHRyKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX29wZW4ocmVzLCAobG9uZykobmFtZSksIChsb25nKShvZmxhZyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSksIChsb25nKShhdHRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXFfdW5saW5rKG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV91bmxpbmsoKGxvbmcpKG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXFfdW5saW5rKHJlcywgbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV91bmxpbmsocmVzLCAobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21xX3RpbWVkc2VuZChtcWRlcywgbXNnX3B0ciwgbXNnX2xlbiwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnX3ByaW8sIGFic190aW1lb3V0KSAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV90aW1lZHNlbmQoKGxvbmcpKG1xZGVzKSwgKGxvbmcpKG1zZ19wdHIpLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtc2dfbGVuKSwgKGxvbmcpKG1zZ19wcmlvKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYWJzX3RpbWVvdXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXFfdGltZWRzZW5kKHJlcywgbXFkZXMsIG1zZ19wdHIsIG1zZ19sZW4sICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ19wcmlvLCBhYnNfdGltZW91dCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV90aW1lZHNlbmQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykobXFkZXMpLCAobG9uZykobXNnX3B0ciksIChsb25nKShtc2dfbGVuKSwgKGxvbmcpKG1zZ19wcmlvKSwgXAorICAgICAgKGxvbmcpKGFic190aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXFfdGltZWRyZWNlaXZlKG1xZGVzLCBtc2dfcHRyLCBtc2dfbGVuLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dfcHJpbywgYWJzX3RpbWVvdXQpICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21xX3RpbWVkcmVjZWl2ZSggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShtcWRlcyksIChsb25nKShtc2dfcHRyKSwgKGxvbmcpKG1zZ19sZW4pLCAobG9uZykobXNnX3ByaW8pLCBcCisgICAgICAobG9uZykoYWJzX3RpbWVvdXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXFfdGltZWRyZWNlaXZlKHJlcywgbXFkZXMsIG1zZ19wdHIsIG1zZ19sZW4sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dfcHJpbywgYWJzX3RpbWVvdXQpICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX3RpbWVkcmVjZWl2ZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykobXFkZXMpLCAobG9uZykobXNnX3B0ciksIChsb25nKShtc2dfbGVuKSwgKGxvbmcpKG1zZ19wcmlvKSwgIFwKKyAgICAgIChsb25nKShhYnNfdGltZW91dCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21xX25vdGlmeShtcWRlcywgbm90aWZpY2F0aW9uKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfbm90aWZ5KChsb25nKShtcWRlcyksIChsb25nKShub3RpZmljYXRpb24pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXFfbm90aWZ5KHJlcywgbXFkZXMsIG5vdGlmaWNhdGlvbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV9ub3RpZnkocmVzLCAobG9uZykobXFkZXMpLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5vdGlmaWNhdGlvbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21xX2dldHNldGF0dHIobXFkZXMsIG1xc3RhdCwgb21xc3RhdCkgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21xX2dldHNldGF0dHIoKGxvbmcpKG1xZGVzKSwgKGxvbmcpKG1xc3RhdCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvbXFzdGF0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21xX2dldHNldGF0dHIocmVzLCBtcWRlcywgbXFzdGF0LCBvbXFzdGF0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX2dldHNldGF0dHIocmVzLCAobG9uZykobXFkZXMpLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtcXN0YXQpLCAobG9uZykob21xc3RhdCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BjaWNvbmZpZ19pb2Jhc2Uod2hpY2gsIGJ1cywgZGV2Zm4pICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BjaWNvbmZpZ19pb2Jhc2UoKGxvbmcpKHdoaWNoKSwgKGxvbmcpKGJ1cyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShkZXZmbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wY2ljb25maWdfaW9iYXNlKHJlcywgd2hpY2gsIGJ1cywgZGV2Zm4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGNpY29uZmlnX2lvYmFzZShyZXMsIChsb25nKSh3aGljaCksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShidXMpLCAobG9uZykoZGV2Zm4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wY2ljb25maWdfcmVhZChidXMsIGRmbiwgb2ZmLCBsZW4sIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BjaWNvbmZpZ19yZWFkKCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKGJ1cyksIChsb25nKShkZm4pLCAobG9uZykob2ZmKSwgKGxvbmcpKGxlbiksIChsb25nKShidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcGNpY29uZmlnX3JlYWQocmVzLCBidXMsIGRmbiwgb2ZmLCBsZW4sIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wY2ljb25maWdfcmVhZCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykoYnVzKSwgKGxvbmcpKGRmbiksIChsb25nKShvZmYpLCAobG9uZykobGVuKSwgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BjaWNvbmZpZ193cml0ZShidXMsIGRmbiwgb2ZmLCBsZW4sIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BjaWNvbmZpZ193cml0ZSggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShidXMpLCAobG9uZykoZGZuKSwgKGxvbmcpKG9mZiksIChsb25nKShsZW4pLCAobG9uZykoYnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3BjaWNvbmZpZ193cml0ZShyZXMsIGJ1cywgZGZuLCBvZmYsIGxlbiwgYnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BjaWNvbmZpZ193cml0ZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykoYnVzKSwgKGxvbmcpKGRmbiksIChsb25nKShvZmYpLCAobG9uZykobGVuKSwgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N3YXBvbihzcGVjaWFsZmlsZSwgc3dhcF9mbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N3YXBvbigobG9uZykoc3BlY2lhbGZpbGUpLCAobG9uZykoc3dhcF9mbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zd2Fwb24ocmVzLCBzcGVjaWFsZmlsZSwgc3dhcF9mbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zd2Fwb24ocmVzLCAobG9uZykoc3BlY2lhbGZpbGUpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzd2FwX2ZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3dhcG9mZihzcGVjaWFsZmlsZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N3YXBvZmYoKGxvbmcpKHNwZWNpYWxmaWxlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N3YXBvZmYocmVzLCBzcGVjaWFsZmlsZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zd2Fwb2ZmKHJlcywgKGxvbmcpKHNwZWNpYWxmaWxlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3lzY3RsKGFyZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeXNjdGwoKGxvbmcpKGFyZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3lzY3RsKHJlcywgYXJncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeXNjdGwocmVzLCAobG9uZykoYXJncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N5c2luZm8oaW5mbykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5c2luZm8oKGxvbmcpKGluZm8pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3lzaW5mbyhyZXMsIGluZm8pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3lzaW5mbyhyZXMsIChsb25nKShpbmZvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3lzZnMob3B0aW9uLCBhcmcxLCBhcmcyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3lzZnMoKGxvbmcpKG9wdGlvbiksIChsb25nKShhcmcxKSwgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3lzZnMocmVzLCBvcHRpb24sIGFyZzEsIGFyZzIpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3lzZnMocmVzLCAobG9uZykob3B0aW9uKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3lzbG9nKHR5cGUsIGJ1ZiwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3lzbG9nKChsb25nKSh0eXBlKSwgKGxvbmcpKGJ1ZiksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3lzbG9nKHJlcywgdHlwZSwgYnVmLCBsZW4pICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N5c2xvZyhyZXMsIChsb25nKSh0eXBlKSwgKGxvbmcpKGJ1ZiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91c2VsaWIobGlicmFyeSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3VzZWxpYigobG9uZykobGlicmFyeSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91c2VsaWIocmVzLCBsaWJyYXJ5KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VzZWxpYihyZXMsIChsb25nKShsaWJyYXJ5KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbmlfc3lzY2FsbCgpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uaV9zeXNjYWxsKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X25pX3N5c2NhbGwocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25pX3N5c2NhbGwocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wdHJhY2UocmVxdWVzdCwgcGlkLCBhZGRyLCBkYXRhKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHRyYWNlKChsb25nKShyZXF1ZXN0KSwgKGxvbmcpKHBpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFkZHIpLCAobG9uZykoZGF0YSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wdHJhY2UocmVzLCByZXF1ZXN0LCBwaWQsIGFkZHIsIGRhdGEpICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHRyYWNlKHJlcywgKGxvbmcpKHJlcXVlc3QpLCAobG9uZykocGlkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFkZHIpLCAobG9uZykoZGF0YSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2FkZF9rZXkoX3R5cGUsIF9kZXNjcmlwdGlvbiwgX3BheWxvYWQsIHBsZW4sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cmluZ2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FkZF9rZXkoKGxvbmcpKF90eXBlKSwgKGxvbmcpKF9kZXNjcmlwdGlvbiksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoX3BheWxvYWQpLCAobG9uZykocGxlbiksICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShkZXN0cmluZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2FkZF9rZXkocmVzLCBfdHlwZSwgX2Rlc2NyaXB0aW9uLCBfcGF5bG9hZCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGVuLCBkZXN0cmluZ2lkKSAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2FkZF9rZXkoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKF90eXBlKSwgKGxvbmcpKF9kZXNjcmlwdGlvbiksIChsb25nKShfcGF5bG9hZCksICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKHBsZW4pLCAobG9uZykoZGVzdHJpbmdpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlcXVlc3Rfa2V5KF90eXBlLCBfZGVzY3JpcHRpb24sICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhbGxvdXRfaW5mbywgZGVzdHJpbmdpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlcXVlc3Rfa2V5KCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAobG9uZykoX3R5cGUpLCAobG9uZykoX2Rlc2NyaXB0aW9uKSwgKGxvbmcpKF9jYWxsb3V0X2luZm8pLCAgICAgIFwKKyAgICAgIChsb25nKShkZXN0cmluZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlcXVlc3Rfa2V5KHJlcywgX3R5cGUsIF9kZXNjcmlwdGlvbiwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWxsb3V0X2luZm8sIGRlc3RyaW5naWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVxdWVzdF9rZXkoICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKF90eXBlKSwgKGxvbmcpKF9kZXNjcmlwdGlvbiksIChsb25nKShfY2FsbG91dF9pbmZvKSwgIFwKKyAgICAgIChsb25nKShkZXN0cmluZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfa2V5Y3RsKGNtZCwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSkgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfa2V5Y3RsKChsb25nKShjbWQpLCAobG9uZykoYXJnMiksIChsb25nKShhcmczKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnNCksIChsb25nKShhcmc1KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2tleWN0bChyZXMsIGNtZCwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9rZXljdGwocmVzLCAobG9uZykoY21kKSwgKGxvbmcpKGFyZzIpLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMyksIChsb25nKShhcmc0KSwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmc1KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9wcmlvX3NldCh3aGljaCwgd2hvLCBpb3ByaW8pICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9wcmlvX3NldCgobG9uZykod2hpY2gpLCAobG9uZykod2hvKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGlvcHJpbykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pb3ByaW9fc2V0KHJlcywgd2hpY2gsIHdobywgaW9wcmlvKSAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb3ByaW9fc2V0KHJlcywgKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHdobyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoaW9wcmlvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9wcmlvX2dldCh3aGljaCwgd2hvKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9wcmlvX2dldCgobG9uZykod2hpY2gpLCAobG9uZykod2hvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lvcHJpb19nZXQocmVzLCB3aGljaCwgd2hvKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvcHJpb19nZXQocmVzLCAobG9uZykod2hpY2gpLCAobG9uZykod2hvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0X21lbXBvbGljeShtb2RlLCBubWFzaywgbWF4bm9kZSkgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldF9tZW1wb2xpY3koKGxvbmcpKG1vZGUpLCAobG9uZykobm1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobWF4bm9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRfbWVtcG9saWN5KHJlcywgbW9kZSwgbm1hc2ssIG1heG5vZGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0X21lbXBvbGljeShyZXMsIChsb25nKShtb2RlKSwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShubWFzayksIChsb25nKShtYXhub2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbWlncmF0ZV9wYWdlcyhwaWQsIG1heG5vZGUsIGZyb20sIHRvKSAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9taWdyYXRlX3BhZ2VzKChsb25nKShwaWQpLCAobG9uZykobWF4bm9kZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmcm9tKSwgKGxvbmcpKHRvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21pZ3JhdGVfcGFnZXMocmVzLCBwaWQsIG1heG5vZGUsIGZyb20sIHRvKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21pZ3JhdGVfcGFnZXMoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykocGlkKSwgKGxvbmcpKG1heG5vZGUpLCAobG9uZykoZnJvbSksIChsb25nKSh0bykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21vdmVfcGFnZXMocGlkLCBucl9wYWdlcywgcGFnZXMsIG5vZGVzLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgZmxhZ3MpICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tb3ZlX3BhZ2VzKChsb25nKShwaWQpLCAobG9uZykobnJfcGFnZXMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocGFnZXMpLCAobG9uZykobm9kZXMpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN0YXR1cyksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tb3ZlX3BhZ2VzKHJlcywgcGlkLCBucl9wYWdlcywgcGFnZXMsIG5vZGVzLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbW92ZV9wYWdlcyhyZXMsIChsb25nKShwaWQpLCAobG9uZykobnJfcGFnZXMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBhZ2VzKSwgKGxvbmcpKG5vZGVzKSwgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzdGF0dXMpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tYmluZChzdGFydCwgbGVuLCBtb2RlLCBubWFzaywgbWF4bm9kZSwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tYmluZCgobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSwgKGxvbmcpKG1vZGUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5tYXNrKSwgKGxvbmcpKG1heG5vZGUpLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tYmluZChyZXMsIHN0YXJ0LCBsZW4sIG1vZGUsIG5tYXNrLCBtYXhub2RlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21iaW5kKHJlcywgKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbiksICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSwgKGxvbmcpKG5tYXNrKSwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtYXhub2RlKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0X21lbXBvbGljeShwb2xpY3ksIG5tYXNrLCBtYXhub2RlLCBhZGRyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldF9tZW1wb2xpY3koKGxvbmcpKHBvbGljeSksIChsb25nKShubWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtYXhub2RlKSwgKGxvbmcpKGFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0X21lbXBvbGljeShyZXMsIHBvbGljeSwgbm1hc2ssIG1heG5vZGUsICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyLCBmbGFncykgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRfbWVtcG9saWN5KHJlcywgKGxvbmcpKHBvbGljeSksICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShubWFzayksIChsb25nKShtYXhub2RlKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhZGRyKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW5vdGlmeV9pbml0KCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lub3RpZnlfaW5pdCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbm90aWZ5X2luaXQocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lub3RpZnlfaW5pdChyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lub3RpZnlfaW5pdDEoZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X2luaXQxKChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbm90aWZ5X2luaXQxKHJlcywgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW5vdGlmeV9pbml0MShyZXMsIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lub3RpZnlfYWRkX3dhdGNoKGZkLCBwYXRoLCBtYXNrKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW5vdGlmeV9hZGRfd2F0Y2goKGxvbmcpKGZkKSwgKGxvbmcpKHBhdGgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1hc2spKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW5vdGlmeV9hZGRfd2F0Y2gocmVzLCBmZCwgcGF0aCwgbWFzaykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pbm90aWZ5X2FkZF93YXRjaChyZXMsIChsb25nKShmZCksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocGF0aCksIChsb25nKShtYXNrKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW5vdGlmeV9ybV93YXRjaChmZCwgd2QpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X3JtX3dhdGNoKChsb25nKShmZCksIChsb25nKSh3ZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbm90aWZ5X3JtX3dhdGNoKHJlcywgZmQsIHdkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lub3RpZnlfcm1fd2F0Y2gocmVzLCAobG9uZykoZmQpLCAobG9uZykod2QpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zcHVfcnVuKGZkLCB1bnBjLCB1c3RhdHVzKSAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3B1X3J1bigobG9uZykoZmQpLCAobG9uZykodW5wYyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1c3RhdHVzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NwdV9ydW4ocmVzLCBmZCwgdW5wYywgdXN0YXR1cykgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zcHVfcnVuKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKHVucGMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHVzdGF0dXMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zcHVfY3JlYXRlKG5hbWUsIGZsYWdzLCBtb2RlLCBmZCkgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3B1X2NyZWF0ZSgobG9uZykobmFtZSksIChsb25nKShmbGFncyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSwgKGxvbmcpKGZkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NwdV9jcmVhdGUocmVzLCBuYW1lLCBmbGFncywgbW9kZSwgZmQpICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zcHVfY3JlYXRlKHJlcywgKGxvbmcpKG5hbWUpLCAobG9uZykoZmxhZ3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpLCAobG9uZykoZmQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9ta25vZGF0KGRmZCwgZmlsZW5hbWUsIG1vZGUsIGRldikgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ta25vZGF0KChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSksIChsb25nKShkZXYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbWtub2RhdChyZXMsIGRmZCwgZmlsZW5hbWUsIG1vZGUsIGRldikgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWtub2RhdChyZXMsIChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpLCAobG9uZykoZGV2KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbWtkaXJhdChkZmQsIHBhdGhuYW1lLCBtb2RlKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWtkaXJhdCgobG9uZykoZGZkKSwgKGxvbmcpKHBhdGhuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbWtkaXJhdChyZXMsIGRmZCwgcGF0aG5hbWUsIG1vZGUpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWtkaXJhdChyZXMsIChsb25nKShkZmQpLCAobG9uZykocGF0aG5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91bmxpbmthdChkZmQsIHBhdGhuYW1lLCBmbGFnKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdW5saW5rYXQoKGxvbmcpKGRmZCksIChsb25nKShwYXRobmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91bmxpbmthdChyZXMsIGRmZCwgcGF0aG5hbWUsIGZsYWcpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW5saW5rYXQocmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKHBhdGhuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N5bWxpbmthdChvbGRuYW1lLCBuZXdkZmQsIG5ld25hbWUpICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeW1saW5rYXQoKGxvbmcpKG9sZG5hbWUpLCAobG9uZykobmV3ZGZkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3bmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zeW1saW5rYXQocmVzLCBvbGRuYW1lLCBuZXdkZmQsIG5ld25hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3ltbGlua2F0KHJlcywgKGxvbmcpKG9sZG5hbWUpLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld2RmZCksIChsb25nKShuZXduYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbGlua2F0KG9sZGRmZCwgb2xkbmFtZSwgbmV3ZGZkLCBuZXduYW1lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xpbmthdCgobG9uZykob2xkZGZkKSwgKGxvbmcpKG9sZG5hbWUpLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld2RmZCksIChsb25nKShuZXduYW1lKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9saW5rYXQocmVzLCBvbGRkZmQsIG9sZG5hbWUsIG5ld2RmZCwgbmV3bmFtZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGlua2F0KHJlcywgKGxvbmcpKG9sZGRmZCksIChsb25nKShvbGRuYW1lKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3ZGZkKSwgKGxvbmcpKG5ld25hbWUpLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVuYW1lYXQob2xkZGZkLCBvbGRuYW1lLCBuZXdkZmQsIG5ld25hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZW5hbWVhdCgobG9uZykob2xkZGZkKSwgKGxvbmcpKG9sZG5hbWUpLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3ZGZkKSwgKGxvbmcpKG5ld25hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVuYW1lYXQocmVzLCBvbGRkZmQsIG9sZG5hbWUsIG5ld2RmZCwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld25hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlbmFtZWF0KHJlcywgKGxvbmcpKG9sZGRmZCksIChsb25nKShvbGRuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3ZGZkKSwgKGxvbmcpKG5ld25hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mdXRpbWVzYXQoZGZkLCBmaWxlbmFtZSwgdXRpbWVzKSAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Z1dGltZXNhdCgobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodXRpbWVzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Z1dGltZXNhdChyZXMsIGRmZCwgZmlsZW5hbWUsIHV0aW1lcykgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnV0aW1lc2F0KHJlcywgKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1dGltZXMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mYWNjZXNzYXQoZGZkLCBmaWxlbmFtZSwgbW9kZSkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZhY2Nlc3NhdCgobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mYWNjZXNzYXQocmVzLCBkZmQsIGZpbGVuYW1lLCBtb2RlKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZhY2Nlc3NhdChyZXMsIChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZjaG1vZGF0KGRmZCwgZmlsZW5hbWUsIG1vZGUpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY2htb2RhdCgobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZjaG1vZGF0KHJlcywgZGZkLCBmaWxlbmFtZSwgbW9kZSkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY2htb2RhdChyZXMsIChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmNob3duYXQoZGZkLCBmaWxlbmFtZSwgdXNlciwgZ3JvdXAsIGZsYWcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY2hvd25hdCgobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodXNlciksIChsb25nKShncm91cCksICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mY2hvd25hdChyZXMsIGRmZCwgZmlsZW5hbWUsIHVzZXIsIGdyb3VwLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY2hvd25hdChyZXMsIChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1c2VyKSwgKGxvbmcpKGdyb3VwKSwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9vcGVuYXQoZGZkLCBmaWxlbmFtZSwgZmxhZ3MsIG1vZGUpICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29wZW5hdCgobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpLCAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vcGVuYXQocmVzLCBkZmQsIGZpbGVuYW1lLCBmbGFncywgbW9kZSkgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29wZW5hdChyZXMsIChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpLCAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX25ld2ZzdGF0YXQoZGZkLCBmaWxlbmFtZSwgc3RhdGJ1ZiwgZmxhZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25ld2ZzdGF0YXQoKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzdGF0YnVmKSwgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbmV3ZnN0YXRhdChyZXMsIGRmZCwgZmlsZW5hbWUsIHN0YXRidWYsIGZsYWcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmV3ZnN0YXRhdChyZXMsIChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN0YXRidWYpLCAobG9uZykoZmxhZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZzdGF0YXQ2NChkZmQsIGZpbGVuYW1lLCBzdGF0YnVmLCBmbGFnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN0YXRhdDY0KChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzdGF0YnVmKSwgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnN0YXRhdDY0KHJlcywgZGZkLCBmaWxlbmFtZSwgc3RhdGJ1ZiwgZmxhZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mc3RhdGF0NjQocmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN0YXRidWYpLCAobG9uZykoZmxhZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlYWRsaW5rYXQoZGZkLCBwYXRoLCBidWYsIGJ1ZnNpeikgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVhZGxpbmthdCgobG9uZykoZGZkKSwgKGxvbmcpKHBhdGgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYnVmKSwgKGxvbmcpKGJ1ZnNpeikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWFkbGlua2F0KHJlcywgZGZkLCBwYXRoLCBidWYsIGJ1ZnNpeikgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlYWRsaW5rYXQocmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKHBhdGgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJ1ZiksIChsb25nKShidWZzaXopKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91dGltZW5zYXQoZGZkLCBmaWxlbmFtZSwgdXRpbWVzLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3V0aW1lbnNhdCgobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodXRpbWVzKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3V0aW1lbnNhdChyZXMsIGRmZCwgZmlsZW5hbWUsIHV0aW1lcywgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdXRpbWVuc2F0KHJlcywgKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1dGltZXMpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91bnNoYXJlKHVuc2hhcmVfZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bnNoYXJlKChsb25nKSh1bnNoYXJlX2ZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Vuc2hhcmUocmVzLCB1bnNoYXJlX2ZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Vuc2hhcmUocmVzLCAobG9uZykodW5zaGFyZV9mbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NwbGljZShmZF9pbiwgb2ZmX2luLCBmZF9vdXQsIG9mZl9vdXQsIGxlbiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zcGxpY2UoKGxvbmcpKGZkX2luKSwgKGxvbmcpKG9mZl9pbiksICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmZF9vdXQpLCAobG9uZykob2ZmX291dCksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobGVuKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NwbGljZShyZXMsIGZkX2luLCBvZmZfaW4sIGZkX291dCwgb2ZmX291dCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiwgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NwbGljZShyZXMsIChsb25nKShmZF9pbiksIChsb25nKShvZmZfaW4pLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmZF9vdXQpLCAobG9uZykob2ZmX291dCksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGxlbiksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3Ztc3BsaWNlKGZkLCBpb3YsIG5yX3NlZ3MsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdm1zcGxpY2UoKGxvbmcpKGZkKSwgKGxvbmcpKGlvdiksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5yX3NlZ3MpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfdm1zcGxpY2UocmVzLCBmZCwgaW92LCBucl9zZWdzLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF92bXNwbGljZShyZXMsIChsb25nKShmZCksIChsb25nKShpb3YpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobnJfc2VncyksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RlZShmZGluLCBmZG91dCwgbGVuLCBmbGFncykgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90ZWUoKGxvbmcpKGZkaW4pLCAobG9uZykoZmRvdXQpLCAobG9uZykobGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGVlKHJlcywgZmRpbiwgZmRvdXQsIGxlbiwgZmxhZ3MpICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGVlKHJlcywgKGxvbmcpKGZkaW4pLCAobG9uZykoZmRvdXQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobGVuKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0X3JvYnVzdF9saXN0KHBpZCwgaGVhZF9wdHIsIGxlbl9wdHIpICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRfcm9idXN0X2xpc3QoKGxvbmcpKHBpZCksIChsb25nKShoZWFkX3B0ciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGxlbl9wdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0X3JvYnVzdF9saXN0KHJlcywgcGlkLCBoZWFkX3B0ciwgbGVuX3B0cikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRfcm9idXN0X2xpc3QoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykocGlkKSwgKGxvbmcpKGhlYWRfcHRyKSwgKGxvbmcpKGxlbl9wdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRfcm9idXN0X2xpc3QoaGVhZCwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0X3JvYnVzdF9saXN0KChsb25nKShoZWFkKSwgKGxvbmcpKGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRfcm9idXN0X2xpc3QocmVzLCBoZWFkLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0X3JvYnVzdF9saXN0KHJlcywgKGxvbmcpKGhlYWQpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0Y3B1KGNwdSwgbm9kZSwgY2FjaGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRjcHUoKGxvbmcpKGNwdSksIChsb25nKShub2RlKSwgKGxvbmcpKGNhY2hlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGNwdShyZXMsIGNwdSwgbm9kZSwgY2FjaGUpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRjcHUocmVzLCAobG9uZykoY3B1KSwgKGxvbmcpKG5vZGUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY2FjaGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaWduYWxmZCh1ZmQsIHVzZXJfbWFzaywgc2l6ZW1hc2spICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NpZ25hbGZkKChsb25nKSh1ZmQpLCAobG9uZykodXNlcl9tYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaXplbWFzaykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaWduYWxmZChyZXMsIHVmZCwgdXNlcl9tYXNrLCBzaXplbWFzaykgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NpZ25hbGZkKHJlcywgKGxvbmcpKHVmZCksIChsb25nKSh1c2VyX21hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaXplbWFzaykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NpZ25hbGZkNCh1ZmQsIHVzZXJfbWFzaywgc2l6ZW1hc2ssIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2lnbmFsZmQ0KChsb25nKSh1ZmQpLCAobG9uZykodXNlcl9tYXNrKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaXplbWFzayksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaWduYWxmZDQocmVzLCB1ZmQsIHVzZXJfbWFzaywgc2l6ZW1hc2ssICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2lnbmFsZmQ0KHJlcywgKGxvbmcpKHVmZCksIChsb25nKSh1c2VyX21hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2l6ZW1hc2spLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90aW1lcmZkX2NyZWF0ZShjbG9ja2lkLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyZmRfY3JlYXRlKChsb25nKShjbG9ja2lkKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RpbWVyZmRfY3JlYXRlKHJlcywgY2xvY2tpZCwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJmZF9jcmVhdGUocmVzLCAobG9uZykoY2xvY2tpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGltZXJmZF9zZXR0aW1lKHVmZCwgZmxhZ3MsIHV0bXIsIG90bXIpICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcmZkX3NldHRpbWUoKGxvbmcpKHVmZCksIChsb25nKShmbGFncyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHV0bXIpLCAobG9uZykob3RtcikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90aW1lcmZkX3NldHRpbWUocmVzLCB1ZmQsIGZsYWdzLCB1dG1yLCBvdG1yKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyZmRfc2V0dGltZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKSh1ZmQpLCAobG9uZykoZmxhZ3MpLCAobG9uZykodXRtciksIChsb25nKShvdG1yKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGltZXJmZF9nZXR0aW1lKHVmZCwgb3RtcikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyZmRfZ2V0dGltZSgobG9uZykodWZkKSwgKGxvbmcpKG90bXIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGltZXJmZF9nZXR0aW1lKHJlcywgdWZkLCBvdG1yKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyZmRfZ2V0dGltZShyZXMsIChsb25nKSh1ZmQpLCAobG9uZykob3RtcikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2V2ZW50ZmQoY291bnQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ldmVudGZkKChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ldmVudGZkKHJlcywgY291bnQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXZlbnRmZChyZXMsIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2V2ZW50ZmQyKGNvdW50LCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2V2ZW50ZmQyKChsb25nKShjb3VudCksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ldmVudGZkMihyZXMsIGNvdW50LCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ldmVudGZkMihyZXMsIChsb25nKShjb3VudCksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZF9yZWFkZGlyKGFyZzAsIGFyZzEsIGFyZzIpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vbGRfcmVhZGRpcigobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X29sZF9yZWFkZGlyKHJlcywgYXJnMCwgYXJnMSwgYXJnMikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGRfcmVhZGRpcihyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHNlbGVjdDYoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BzZWxlY3Q2KChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMyksICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnNCksIChsb25nKShhcmc1KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3BzZWxlY3Q2KHJlcywgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BzZWxlY3Q2KHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMyksICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnNCksIChsb25nKShhcmc1KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHBvbGwoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHBvbGwoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIChsb25nKShhcmcyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmczKSwgKGxvbmcpKGFyZzQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHBvbGwocmVzLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Bwb2xsKHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMyksICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnNCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N5bmNmcyhmZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5bmNmcygobG9uZykoZmQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3luY2ZzKHJlcywgZmQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3luY2ZzKHJlcywgKGxvbmcpKGZkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcGVyZl9ldmVudF9vcGVuKGF0dHJfdXB0ciwgcGlkLCBjcHUsIGdyb3VwX2ZkLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BlcmZfZXZlbnRfb3BlbigobG9uZykoYXR0cl91cHRyKSwgKGxvbmcpKHBpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNwdSksIChsb25nKShncm91cF9mZCksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wZXJmX2V2ZW50X29wZW4ocmVzLCBhdHRyX3VwdHIsIHBpZCwgY3B1LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBfZmQsIGZsYWdzKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BlcmZfZXZlbnRfb3BlbiggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKShhdHRyX3VwdHIpLCAobG9uZykocGlkKSwgKGxvbmcpKGNwdSksIChsb25nKShncm91cF9mZCksICBcCisgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tbWFwX3Bnb2ZmKGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIGZkLCBwZ29mZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21tYXBfcGdvZmYoKGxvbmcpKGFkZHIpLCAobG9uZykobGVuKSwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHByb3QpLCAobG9uZykoZmxhZ3MpLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZkKSwgKGxvbmcpKHBnb2ZmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21tYXBfcGdvZmYocmVzLCBhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBmZCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ29mZikgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21tYXBfcGdvZmYocmVzLCAobG9uZykoYWRkciksIChsb25nKShsZW4pLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocHJvdCksIChsb25nKShmbGFncyksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmZCksIChsb25nKShwZ29mZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZF9tbWFwKGFyZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZF9tbWFwKChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb2xkX21tYXAocmVzLCBhcmcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb2xkX21tYXAocmVzLCAobG9uZykoYXJnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbmFtZV90b19oYW5kbGVfYXQoZGZkLCBuYW1lLCBoYW5kbGUsIG1udF9pZCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnKSAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmFtZV90b19oYW5kbGVfYXQoICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShkZmQpLCAobG9uZykobmFtZSksIChsb25nKShoYW5kbGUpLCAobG9uZykobW50X2lkKSwgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbmFtZV90b19oYW5kbGVfYXQocmVzLCBkZmQsIG5hbWUsIGhhbmRsZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW50X2lkLCBmbGFnKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uYW1lX3RvX2hhbmRsZV9hdCggICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKG5hbWUpLCAobG9uZykoaGFuZGxlKSwgKGxvbmcpKG1udF9pZCksICAgICAgXAorICAgICAgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9vcGVuX2J5X2hhbmRsZV9hdChtb3VudGRpcmZkLCBoYW5kbGUsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb3Blbl9ieV9oYW5kbGVfYXQoICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShtb3VudGRpcmZkKSwgKGxvbmcpKGhhbmRsZSksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vcGVuX2J5X2hhbmRsZV9hdChyZXMsIG1vdW50ZGlyZmQsIGhhbmRsZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb3Blbl9ieV9oYW5kbGVfYXQoICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKShtb3VudGRpcmZkKSwgKGxvbmcpKGhhbmRsZSksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldG5zKGZkLCBuc3R5cGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRucygobG9uZykoZmQpLCAobG9uZykobnN0eXBlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldG5zKHJlcywgZmQsIG5zdHlwZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRucyhyZXMsIChsb25nKShmZCksIChsb25nKShuc3R5cGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wcm9jZXNzX3ZtX3JlYWR2KHBpZCwgbHZlYywgbGlvdmNudCwgcnZlYywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpb3ZjbnQsIGZsYWdzKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Byb2Nlc3Nfdm1fcmVhZHYoICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKHBpZCksIChsb25nKShsdmVjKSwgKGxvbmcpKGxpb3ZjbnQpLCAobG9uZykocnZlYyksICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKHJpb3ZjbnQpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHJvY2Vzc192bV9yZWFkdihyZXMsIHBpZCwgbHZlYywgbGlvdmNudCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydmVjLCByaW92Y250LCBmbGFncykgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wcm9jZXNzX3ZtX3JlYWR2KCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykocGlkKSwgKGxvbmcpKGx2ZWMpLCAobG9uZykobGlvdmNudCksIChsb25nKShydmVjKSwgICAgICAgXAorICAgICAgKGxvbmcpKHJpb3ZjbnQpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wcm9jZXNzX3ZtX3dyaXRldihwaWQsIGx2ZWMsIGxpb3ZjbnQsIHJ2ZWMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlvdmNudCwgZmxhZ3MpICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHJvY2Vzc192bV93cml0ZXYoICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKHBpZCksIChsb25nKShsdmVjKSwgKGxvbmcpKGxpb3ZjbnQpLCAobG9uZykocnZlYyksICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShyaW92Y250KSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Byb2Nlc3Nfdm1fd3JpdGV2KHJlcywgcGlkLCBsdmVjLCBsaW92Y250LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydmVjLCByaW92Y250LCBmbGFncykgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wcm9jZXNzX3ZtX3dyaXRldiggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKHBpZCksIChsb25nKShsdmVjKSwgKGxvbmcpKGxpb3ZjbnQpLCAobG9uZykocnZlYyksICAgICAgICBcCisgICAgICAobG9uZykocmlvdmNudCksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZvcmsoKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZm9yaygpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mb3JrKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mb3JrKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdmZvcmsoKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdmZvcmsoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdmZvcmsocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Zmb3JrKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2lnYWN0aW9uKHNpZ251bSwgYWN0LCBvbGRhY3QpICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2lnYWN0aW9uKChsb25nKXNpZ251bSwgKGxvbmcpYWN0LCAobG9uZylvbGRhY3QpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaWdhY3Rpb24ocmVzLCBzaWdudW0sIGFjdCwgb2xkYWN0KSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWdhY3Rpb24ocmVzLCAobG9uZylzaWdudW0sIChsb25nKWFjdCwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKW9sZGFjdCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcnRfc2lnYWN0aW9uKHNpZ251bSwgYWN0LCBvbGRhY3QsIHN6KSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lnYWN0aW9uKChsb25nKXNpZ251bSwgKGxvbmcpYWN0LCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylvbGRhY3QsIChsb25nKXN6KQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfc2lnYWN0aW9uKHJlcywgc2lnbnVtLCBhY3QsIG9sZGFjdCwgc3opICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfc2lnYWN0aW9uKHJlcywgKGxvbmcpc2lnbnVtLCAobG9uZylhY3QsICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylvbGRhY3QsIChsb25nKXN6KQorCisvLyBBbmQgbm93IGEgZmV3IHN5c2NhbGxzIHdlIGRvbid0IGhhbmRsZSB5ZXQuCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Fmc19zeXNjYWxsKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYXJjaF9wcmN0bCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2JyZWFrKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2hvd24zMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Nsb25lKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY3JlYXRlX21vZHVsZSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Vwb2xsX2N0bF9vbGQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9lcG9sbF93YWl0X29sZCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2V4ZWN2ZSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZhZHZpc2U2NCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZhZHZpc2U2NF82NCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZhbGxvY2F0ZSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Zhbm90aWZ5X2luaXQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mYW5vdGlmeV9tYXJrKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmNob3duMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mdGltZSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Z0cnVuY2F0ZTY0KC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZnV0ZXgoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRlZ2lkMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRldWlkMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRnaWQzMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGdyb3VwczMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0X2tlcm5lbF9zeW1zKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cG1zZyguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHJlc2dpZDMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cmVzdWlkMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRfdGhyZWFkX2FyZWEoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXR1aWQzMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2d0dHkoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pZGxlKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9wbCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xjaG93bjMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfX2xsc2VlayguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xvY2soLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tYWR2aXNlMSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21tYXAoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tbWFwMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21vZGlmeV9sZHQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tcHgoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9fbmV3c2VsZWN0KC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbmZzc2VydmN0bCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZGZzdGF0KC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfb2xkbHN0YXQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9vbGRvbGR1bmFtZSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZHN0YXQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wcmN0bCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3Byb2YoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wcm9maWwoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wdXRwbXNnKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcXVlcnlfbW9kdWxlKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVhZGFoZWFkKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVhZGRpciguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3J0X3NpZ3JldHVybiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3J0X3NpZ3N1c3BlbmQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZWN1cml0eSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGZzZ2lkMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRmc3VpZDMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0Z2lkMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRncm91cHMzMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJlZ2lkMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRyZXNnaWQzMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJlc3VpZDMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cmV1aWQzMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldF90aHJlYWRfYXJlYSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHVpZDMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2lnYWx0c3RhY2soLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaWdyZXR1cm4oLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaWdzdXNwZW5kKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3R0eSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N5bmNfZmlsZV9yYW5nZSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX19zeXNjdGwoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90cnVuY2F0ZTY0KC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdHV4Y2FsbCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3VnZXRybGltaXQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91bGltaXQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91bW91bnQyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdm04NiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3ZtODZvbGQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV92c2VydmVyKC4uLikKKworI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYWZzX3N5c2NhbGwocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9hcmNoX3ByY3RsKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYnJlYWsocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jaG93bjMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2xvbmUocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jcmVhdGVfbW9kdWxlKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXBvbGxfY3RsX29sZChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Vwb2xsX3dhaXRfb2xkKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXhlY3ZlKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmFkdmlzZTY0KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmFkdmlzZTY0XzY0KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmFsbG9jYXRlKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmFub3RpZnlfaW5pdChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Zhbm90aWZ5X21hcmsocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mY2hvd24zMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Z0aW1lKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnRydW5jYXRlNjQocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mdXRleChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGVnaWQzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGV1aWQzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGdpZDMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0Z3JvdXBzMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRfa2VybmVsX3N5bXMocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRwbXNnKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cmVzZ2lkMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRyZXN1aWQzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldF90aHJlYWRfYXJlYShyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHVpZDMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ3R0eShyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lkbGUocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pb3BsKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbGNob3duMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9fbGxzZWVrKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbG9jayhyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21hZHZpc2UxKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbW1hcDIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tbWFwKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbW9kaWZ5X2xkdChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21weChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X19uZXdzZWxlY3QocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9uZnNzZXJ2Y3RsKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb2xkZnN0YXQocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vbGRsc3RhdChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X29sZG9sZHVuYW1lKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb2xkc3RhdChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3ByY3RsKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHJvZmlsKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHJvZihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3B1dHBtc2cocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9xdWVyeV9tb2R1bGUocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWFkYWhlYWQocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWFkZGlyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfc2lncmV0dXJuKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfc2lnc3VzcGVuZChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlY3VyaXR5KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0ZnNnaWQzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGZzdWlkMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRnaWQzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGdyb3VwczMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmVnaWQzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHJlc2dpZDMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmVzdWlkMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRyZXVpZDMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0X3RocmVhZF9hcmVhKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0dWlkMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaWdhbHRzdGFjayhyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NpZ3JldHVybihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NpZ3N1c3BlbmQocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zdHR5KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3luY19maWxlX3JhbmdlKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfX3N5c2N0bChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RydW5jYXRlNjQocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90dXhjYWxsKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdWdldHJsaW1pdChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3VsaW1pdChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Vtb3VudDIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF92bTg2b2xkKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfdm04NihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3ZzZXJ2ZXIocmVzLCAuLi4pCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8gUHJpdmF0ZSBkZWNsYXJhdGlvbnMuIERvIG5vdCBjYWxsIGRpcmVjdGx5IGZyb20gdXNlciBjb2RlLiBVc2UgbWFjcm9zIGFib3ZlLgordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWUobG9uZyB0bG9jKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZShsb25nIHJlcywgbG9uZyB0bG9jKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zdGltZShsb25nIHRwdHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zdGltZShsb25nIHJlcywgbG9uZyB0cHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXR0aW1lb2ZkYXkobG9uZyB0diwgbG9uZyB0eik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHRpbWVvZmRheShsb25nIHJlcywgbG9uZyB0diwgbG9uZyB0eik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0dGltZW9mZGF5KGxvbmcgdHYsIGxvbmcgdHopOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXR0aW1lb2ZkYXkobG9uZyByZXMsIGxvbmcgdHYsIGxvbmcgdHopOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FkanRpbWV4KGxvbmcgdHhjX3ApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hZGp0aW1leChsb25nIHJlcywgbG9uZyB0eGNfcCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXMobG9uZyB0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXMobG9uZyByZXMsIGxvbmcgdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0dGlkKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHRpZChsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmFub3NsZWVwKGxvbmcgcnF0cCwgbG9uZyBybXRwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmFub3NsZWVwKGxvbmcgcmVzLCBsb25nIHJxdHAsIGxvbmcgcm10cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWxhcm0obG9uZyBzZWNvbmRzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWxhcm0obG9uZyByZXMsIGxvbmcgc2Vjb25kcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cGlkKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHBpZChsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cHBpZCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwcGlkKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXR1aWQoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0dWlkKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRldWlkKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGV1aWQobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGdpZCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRnaWQobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGVnaWQoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0ZWdpZChsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cmVzdWlkKGxvbmcgcnVpZCwgbG9uZyBldWlkLCBsb25nIHN1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRyZXN1aWQobG9uZyByZXMsIGxvbmcgcnVpZCwgbG9uZyBldWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRyZXNnaWQobG9uZyByZ2lkLCBsb25nIGVnaWQsIGxvbmcgc2dpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJlc2dpZChsb25nIHJlcywgbG9uZyByZ2lkLCBsb25nIGVnaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHBnaWQobG9uZyBwaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwZ2lkKGxvbmcgcmVzLCBsb25nIHBpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cGdycCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwZ3JwKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRzaWQobG9uZyBwaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRzaWQobG9uZyByZXMsIGxvbmcgcGlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRncm91cHMobG9uZyBnaWRzZXRzaXplLCBsb25nIGdyb3VwbGlzdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGdyb3Vwcyhsb25nIHJlcywgbG9uZyBnaWRzZXRzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBncm91cGxpc3QpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlZ2lkKGxvbmcgcmdpZCwgbG9uZyBlZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmVnaWQobG9uZyByZXMsIGxvbmcgcmdpZCwgbG9uZyBlZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRnaWQobG9uZyBnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRnaWQobG9uZyByZXMsIGxvbmcgZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXVpZChsb25nIHJ1aWQsIGxvbmcgZXVpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJldWlkKGxvbmcgcmVzLCBsb25nIHJ1aWQsIGxvbmcgZXVpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0dWlkKGxvbmcgdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0dWlkKGxvbmcgcmVzLCBsb25nIHVpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmVzdWlkKGxvbmcgcnVpZCwgbG9uZyBldWlkLCBsb25nIHN1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXN1aWQobG9uZyByZXMsIGxvbmcgcnVpZCwgbG9uZyBldWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXNnaWQobG9uZyByZ2lkLCBsb25nIGVnaWQsIGxvbmcgc2dpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJlc2dpZChsb25nIHJlcywgbG9uZyByZ2lkLCBsb25nIGVnaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGZzdWlkKGxvbmcgdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZnN1aWQobG9uZyByZXMsIGxvbmcgdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRmc2dpZChsb25nIGdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGZzZ2lkKGxvbmcgcmVzLCBsb25nIGdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cGdpZChsb25nIHBpZCwgbG9uZyBwZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cGdpZChsb25nIHJlcywgbG9uZyBwaWQsIGxvbmcgcGdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0c2lkKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHNpZChsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0Z3JvdXBzKGxvbmcgZ2lkc2V0c2l6ZSwgbG9uZyBncm91cGxpc3QpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRncm91cHMobG9uZyByZXMsIGxvbmcgZ2lkc2V0c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXBsaXN0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hY2N0KGxvbmcgbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2FjY3QobG9uZyByZXMsIGxvbmcgbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2FwZ2V0KGxvbmcgaGVhZGVyLCBsb25nIGRhdGFwdHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jYXBnZXQobG9uZyByZXMsIGxvbmcgaGVhZGVyLCBsb25nIGRhdGFwdHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2NhcHNldChsb25nIGhlYWRlciwgbG9uZyBkYXRhKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2Fwc2V0KGxvbmcgcmVzLCBsb25nIGhlYWRlciwgbG9uZyBkYXRhKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wZXJzb25hbGl0eShsb25nIHBlcnNvbmFsaXR5KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGVyc29uYWxpdHkobG9uZyByZXMsIGxvbmcgcGVyc29uYWxpdHkpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NpZ3BlbmRpbmcobG9uZyBzZXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWdwZW5kaW5nKGxvbmcgcmVzLCBsb25nIHNldCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2lncHJvY21hc2sobG9uZyBob3csIGxvbmcgc2V0LCBsb25nIG9zZXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWdwcm9jbWFzayhsb25nIHJlcywgbG9uZyBob3csIGxvbmcgc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9zZXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGl0aW1lcihsb25nIHdoaWNoLCBsb25nIHZhbHVlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0aXRpbWVyKGxvbmcgcmVzLCBsb25nIHdoaWNoLCBsb25nIHZhbHVlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRpdGltZXIobG9uZyB3aGljaCwgbG9uZyB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvdmFsdWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRpdGltZXIobG9uZyByZXMsIGxvbmcgd2hpY2gsIGxvbmcgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG92YWx1ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXJfY3JlYXRlKGxvbmcgd2hpY2hfY2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZXJfZXZlbnRfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjcmVhdGVkX3RpbWVyX2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJfY3JlYXRlKGxvbmcgcmVzLCBsb25nIHdoaWNoX2Nsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lcl9ldmVudF9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjcmVhdGVkX3RpbWVyX2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9nZXR0aW1lKGxvbmcgdGltZXJfaWQsIGxvbmcgc2V0dGluZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX2dldHRpbWUobG9uZyByZXMsIGxvbmcgdGltZXJfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzZXR0aW5nKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9nZXRvdmVycnVuKGxvbmcgdGltZXJfaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcl9nZXRvdmVycnVuKGxvbmcgcmVzLCBsb25nIHRpbWVyX2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9zZXR0aW1lKGxvbmcgdGltZXJfaWQsIGxvbmcgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5ld19zZXR0aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvbGRfc2V0dGluZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX3NldHRpbWUobG9uZyByZXMsIGxvbmcgdGltZXJfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywgbG9uZyBuZXdfc2V0dGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9sZF9zZXR0aW5nKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9kZWxldGUobG9uZyB0aW1lcl9pZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX2RlbGV0ZShsb25nIHJlcywgbG9uZyB0aW1lcl9pZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2xvY2tfc2V0dGltZShsb25nIHdoaWNoX2Nsb2NrLCBsb25nIHRwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2xvY2tfc2V0dGltZShsb25nIHJlcywgbG9uZyB3aGljaF9jbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9ja19nZXR0aW1lKGxvbmcgd2hpY2hfY2xvY2ssIGxvbmcgdHApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9ja19nZXR0aW1lKGxvbmcgcmVzLCBsb25nIHdoaWNoX2Nsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdHApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nsb2NrX2FkanRpbWUobG9uZyB3aGljaF9jbG9jaywgbG9uZyB0eCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb2NrX2FkanRpbWUobG9uZyByZXMsIGxvbmcgd2hpY2hfY2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0eCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2xvY2tfZ2V0cmVzKGxvbmcgd2hpY2hfY2xvY2ssIGxvbmcgdHApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9ja19nZXRyZXMobG9uZyByZXMsIGxvbmcgd2hpY2hfY2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9ja19uYW5vc2xlZXAobG9uZyB3aGljaF9jbG9jaywgbG9uZyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBycXRwLCBsb25nIHJtdHApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9ja19uYW5vc2xlZXAobG9uZyByZXMsIGxvbmcgd2hpY2hfY2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzLCBsb25nIHJxdHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJtdHApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25pY2UobG9uZyBpbmNyZW1lbnQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uaWNlKGxvbmcgcmVzLCBsb25nIGluY3JlbWVudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfc2V0c2NoZWR1bGVyKGxvbmcgcGlkLCBsb25nIHBvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwYXJhbSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX3NldHNjaGVkdWxlcihsb25nIHJlcywgbG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBvbGljeSwgbG9uZyBwYXJhbSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfc2V0cGFyYW0obG9uZyBwaWQsIGxvbmcgcGFyYW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9zZXRwYXJhbShsb25nIHJlcywgbG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcGFyYW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldHNjaGVkdWxlcihsb25nIHBpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX2dldHNjaGVkdWxlcihsb25nIHJlcywgbG9uZyBwaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldHBhcmFtKGxvbmcgcGlkLCBsb25nIHBhcmFtKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfZ2V0cGFyYW0obG9uZyByZXMsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBhcmFtKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9zZXRhZmZpbml0eShsb25nIHBpZCwgbG9uZyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1c2VyX21hc2tfcHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfc2V0YWZmaW5pdHkobG9uZyByZXMsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1c2VyX21hc2tfcHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9nZXRhZmZpbml0eShsb25nIHBpZCwgbG9uZyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1c2VyX21hc2tfcHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfZ2V0YWZmaW5pdHkobG9uZyByZXMsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1c2VyX21hc2tfcHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF95aWVsZCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF95aWVsZChsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfZ2V0X3ByaW9yaXR5X21heChsb25nIHBvbGljeSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX2dldF9wcmlvcml0eV9tYXgobG9uZyByZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwb2xpY3kpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldF9wcmlvcml0eV9taW4obG9uZyBwb2xpY3kpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9nZXRfcHJpb3JpdHlfbWluKGxvbmcgcmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcG9saWN5KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwobG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ZXJ2YWwpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwobG9uZyByZXMsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnRlcnZhbCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cHJpb3JpdHkobG9uZyB3aGljaCwgbG9uZyB3aG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuaWNldmFsKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cHJpb3JpdHkobG9uZyByZXMsIGxvbmcgd2hpY2gsIGxvbmcgd2hvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5pY2V2YWwpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHByaW9yaXR5KGxvbmcgd2hpY2gsIGxvbmcgd2hvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cHJpb3JpdHkobG9uZyByZXMsIGxvbmcgd2hpY2gsIGxvbmcgd2hvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaHV0ZG93bihsb25nIGFyZzAsIGxvbmcgYXJnMSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NodXRkb3duKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVib290KGxvbmcgbWFnaWMxLCBsb25nIG1hZ2ljMiwgbG9uZyBjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVib290KGxvbmcgcmVzLCBsb25nIG1hZ2ljMSwgbG9uZyBtYWdpYzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNtZCwgbG9uZyBhcmcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Jlc3RhcnRfc3lzY2FsbCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZXN0YXJ0X3N5c2NhbGwobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2tleGVjX2xvYWQobG9uZyBlbnRyeSwgbG9uZyBucl9zZWdtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2VnbWVudHMsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9rZXhlY19sb2FkKGxvbmcgcmVzLCBsb25nIGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbnJfc2VnbWVudHMsIGxvbmcgc2VnbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXhpdChsb25nIGVycm9yX2NvZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9leGl0KGxvbmcgcmVzLCBsb25nIGVycm9yX2NvZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2V4aXRfZ3JvdXAobG9uZyBlcnJvcl9jb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXhpdF9ncm91cChsb25nIHJlcywgbG9uZyBlcnJvcl9jb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF93YWl0NChsb25nIHBpZCwgbG9uZyBzdGF0X2FkZHIsIGxvbmcgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJ1KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfd2FpdDQobG9uZyByZXMsIGxvbmcgcGlkLCBsb25nIHN0YXRfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcHRpb25zLCBsb25nIHJ1KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF93YWl0aWQobG9uZyB3aGljaCwgbG9uZyBwaWQsIGxvbmcgaW5mb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3B0aW9ucywgbG9uZyBydSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3dhaXRpZChsb25nIHJlcywgbG9uZyB3aGljaCwgbG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGluZm9wLCBsb25nIG9wdGlvbnMsIGxvbmcgcnUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3dhaXRwaWQobG9uZyBwaWQsIGxvbmcgc3RhdF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcHRpb25zKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfd2FpdHBpZChsb25nIHJlcywgbG9uZyBwaWQsIGxvbmcgc3RhdF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3B0aW9ucyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0X3RpZF9hZGRyZXNzKGxvbmcgdGlkcHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0X3RpZF9hZGRyZXNzKGxvbmcgcmVzLCBsb25nIHRpZHB0cik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW5pdF9tb2R1bGUobG9uZyB1bW9kLCBsb25nIGxlbiwgbG9uZyB1YXJncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2luaXRfbW9kdWxlKGxvbmcgcmVzLCBsb25nIHVtb2QsIGxvbmcgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHVhcmdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kZWxldGVfbW9kdWxlKGxvbmcgbmFtZV91c2VyLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZGVsZXRlX21vZHVsZShsb25nIHJlcywgbG9uZyBuYW1lX3VzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lncHJvY21hc2sobG9uZyBob3csIGxvbmcgc2V0LCBsb25nIG9zZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaWdzZXRzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfc2lncHJvY21hc2sobG9uZyByZXMsIGxvbmcgaG93LCBsb25nIHNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvc2V0LCBsb25nIHNpZ3NldHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3J0X3NpZ3BlbmRpbmcobG9uZyBzZXQsIGxvbmcgc2lnc2V0c2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3J0X3NpZ3BlbmRpbmcobG9uZyByZXMsIGxvbmcgc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2lnc2V0c2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lndGltZWR3YWl0KGxvbmcgdXRoZXNlLCBsb25nIHVpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHV0cywgbG9uZyBzaWdzZXRzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfc2lndGltZWR3YWl0KGxvbmcgcmVzLCBsb25nIHV0aGVzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdWluZm8sIGxvbmcgdXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaWdzZXRzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ydF90Z3NpZ3F1ZXVlaW5mbyhsb25nIHRnaWQsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2lnLCBsb25nIHVpbmZvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfdGdzaWdxdWV1ZWluZm8obG9uZyByZXMsIGxvbmcgdGdpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwaWQsIGxvbmcgc2lnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHVpbmZvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9raWxsKGxvbmcgcGlkLCBsb25nIHNpZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2tpbGwobG9uZyByZXMsIGxvbmcgcGlkLCBsb25nIHNpZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGdraWxsKGxvbmcgdGdpZCwgbG9uZyBwaWQsIGxvbmcgc2lnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGdraWxsKGxvbmcgcmVzLCBsb25nIHRnaWQsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaWcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RraWxsKGxvbmcgcGlkLCBsb25nIHNpZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RraWxsKGxvbmcgcmVzLCBsb25nIHBpZCwgbG9uZyBzaWcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3J0X3NpZ3F1ZXVlaW5mbyhsb25nIHBpZCwgbG9uZyBzaWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdWluZm8pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ydF9zaWdxdWV1ZWluZm8obG9uZyByZXMsIGxvbmcgcGlkLCBsb25nIHNpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdWluZm8pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NnZXRtYXNrKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NnZXRtYXNrKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zc2V0bWFzayhsb25nIG5ld21hc2spOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zc2V0bWFzayhsb25nIHJlcywgbG9uZyBuZXdtYXNrKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaWduYWwobG9uZyBzaWcsIGxvbmcgaGFuZGxlcik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NpZ25hbChsb25nIHJlcywgbG9uZyBzaWcsIGxvbmcgaGFuZGxlcik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGF1c2UoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGF1c2UobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5bmMoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3luYyhsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN5bmMobG9uZyBmZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzeW5jKGxvbmcgcmVzLCBsb25nIGZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mZGF0YXN5bmMobG9uZyBmZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZkYXRhc3luYyhsb25nIHJlcywgbG9uZyBmZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYmRmbHVzaChsb25nIGZ1bmMsIGxvbmcgZGF0YSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2JkZmx1c2gobG9uZyByZXMsIGxvbmcgZnVuYywgbG9uZyBkYXRhKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tb3VudChsb25nIGRldl9uYW1lLCBsb25nIGRpcl9uYW1lLCBsb25nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywgbG9uZyBkYXRhKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbW91bnQobG9uZyByZXMsIGxvbmcgZGV2X25hbWUsIGxvbmcgZGlyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdHlwZSwgbG9uZyBmbGFncywgbG9uZyBkYXRhKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bW91bnQobG9uZyBuYW1lLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW1vdW50KGxvbmcgcmVzLCBsb25nIG5hbWUsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZHVtb3VudChsb25nIG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGR1bW91bnQobG9uZyByZXMsIGxvbmcgbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdHJ1bmNhdGUobG9uZyBwYXRoLCBsb25nIGxlbmd0aCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RydW5jYXRlKGxvbmcgcmVzLCBsb25nIHBhdGgsIGxvbmcgbGVuZ3RoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mdHJ1bmNhdGUobG9uZyBmZCwgbG9uZyBsZW5ndGgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mdHJ1bmNhdGUobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbGVuZ3RoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zdGF0KGxvbmcgZmlsZW5hbWUsIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N0YXQobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3RhdGZzKGxvbmcgcGF0aCwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zdGF0ZnMobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N0YXRmczY0KGxvbmcgcGF0aCwgbG9uZyBzeiwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zdGF0ZnM2NChsb25nIHJlcywgbG9uZyBwYXRoLCBsb25nIHN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN0YXRmcyhsb25nIGZkLCBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzdGF0ZnMobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgYnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc3RhdGZzNjQobG9uZyBmZCwgbG9uZyBzeiwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mc3RhdGZzNjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgc3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbHN0YXQobG9uZyBmaWxlbmFtZSwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbHN0YXQobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN0YXQobG9uZyBmZCwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnN0YXQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmV3c3RhdChsb25nIGZpbGVuYW1lLCBsb25nIHN0YXRidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uZXdzdGF0KGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmV3bHN0YXQobG9uZyBmaWxlbmFtZSwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmV3bHN0YXQobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmV3ZnN0YXQobG9uZyBmZCwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmV3ZnN0YXQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXN0YXQobG9uZyBkZXYsIGxvbmcgdWJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VzdGF0KGxvbmcgcmVzLCBsb25nIGRldiwgbG9uZyB1YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zdGF0NjQobG9uZyBmaWxlbmFtZSwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3RhdDY0KGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc3RhdDY0KGxvbmcgZmQsIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzdGF0NjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbHN0YXQ2NChsb25nIGZpbGVuYW1lLCBsb25nIHN0YXRidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sc3RhdDY0KGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0eGF0dHIobG9uZyBwYXRoLCBsb25nIG5hbWUsIGxvbmcgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0eGF0dHIobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZhbHVlLCBsb25nIHNpemUsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xzZXR4YXR0cihsb25nIHBhdGgsIGxvbmcgbmFtZSwgbG9uZyB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbHNldHhhdHRyKGxvbmcgcmVzLCBsb25nIHBhdGgsIGxvbmcgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdmFsdWUsIGxvbmcgc2l6ZSwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnNldHhhdHRyKGxvbmcgZmQsIGxvbmcgbmFtZSwgbG9uZyB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnNldHhhdHRyKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZhbHVlLCBsb25nIHNpemUsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHhhdHRyKGxvbmcgcGF0aCwgbG9uZyBuYW1lLCBsb25nIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHhhdHRyKGxvbmcgcmVzLCBsb25nIHBhdGgsIGxvbmcgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2YWx1ZSwgbG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sZ2V0eGF0dHIobG9uZyBwYXRoLCBsb25nIG5hbWUsIGxvbmcgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xnZXR4YXR0cihsb25nIHJlcywgbG9uZyBwYXRoLCBsb25nIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZhbHVlLCBsb25nIHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZnZXR4YXR0cihsb25nIGZkLCBsb25nIG5hbWUsIGxvbmcgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZnZXR4YXR0cihsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2YWx1ZSwgbG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9saXN0eGF0dHIobG9uZyBwYXRoLCBsb25nIGxpc3QsIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xpc3R4YXR0cihsb25nIHJlcywgbG9uZyBwYXRoLCBsb25nIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xsaXN0eGF0dHIobG9uZyBwYXRoLCBsb25nIGxpc3QsIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xsaXN0eGF0dHIobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmxpc3R4YXR0cihsb25nIGZkLCBsb25nIGxpc3QsIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZsaXN0eGF0dHIobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlbW92ZXhhdHRyKGxvbmcgcGF0aCwgbG9uZyBuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVtb3ZleGF0dHIobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9scmVtb3ZleGF0dHIobG9uZyBwYXRoLCBsb25nIG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9scmVtb3ZleGF0dHIobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mcmVtb3ZleGF0dHIobG9uZyBmZCwgbG9uZyBuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnJlbW92ZXhhdHRyKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Jyayhsb25nIGJyayk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Jyayhsb25nIHJlcywgbG9uZyBicmspOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21wcm90ZWN0KGxvbmcgc3RhcnQsIGxvbmcgbGVuLCBsb25nIHByb3QpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcHJvdGVjdChsb25nIHJlcywgbG9uZyBzdGFydCwgbG9uZyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcHJvdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXJlbWFwKGxvbmcgYWRkciwgbG9uZyBvbGRfbGVuLCBsb25nIG5ld19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsIGxvbmcgbmV3X2FkZHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcmVtYXAobG9uZyByZXMsIGxvbmcgYWRkciwgbG9uZyBvbGRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXdfbGVuLCBsb25nIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXdfYWRkcik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVtYXBfZmlsZV9wYWdlcyhsb25nIHN0YXJ0LCBsb25nIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHByb3QsIGxvbmcgcGdvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVtYXBfZmlsZV9wYWdlcyhsb25nIHJlcywgbG9uZyBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemUsIGxvbmcgcHJvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBnb2ZmLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc3luYyhsb25nIHN0YXJ0LCBsb25nIGxlbiwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21zeW5jKGxvbmcgcmVzLCBsb25nIHN0YXJ0LCBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXVubWFwKGxvbmcgYWRkciwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tdW5tYXAobG9uZyByZXMsIGxvbmcgYWRkciwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21sb2NrKGxvbmcgc3RhcnQsIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWxvY2sobG9uZyByZXMsIGxvbmcgc3RhcnQsIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tdW5sb2NrKGxvbmcgc3RhcnQsIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXVubG9jayhsb25nIHJlcywgbG9uZyBzdGFydCwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21sb2NrYWxsKGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tbG9ja2FsbChsb25nIHJlcywgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXVubG9ja2FsbCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tdW5sb2NrYWxsKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tYWR2aXNlKGxvbmcgc3RhcnQsIGxvbmcgbGVuLCBsb25nIGJlaGF2aW9yKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWFkdmlzZShsb25nIHJlcywgbG9uZyBzdGFydCwgbG9uZyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBiZWhhdmlvcik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWluY29yZShsb25nIHN0YXJ0LCBsb25nIGxlbiwgbG9uZyB2ZWMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9taW5jb3JlKGxvbmcgcmVzLCBsb25nIHN0YXJ0LCBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZlYyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGl2b3Rfcm9vdChsb25nIG5ld19yb290LCBsb25nIHB1dF9vbGQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9waXZvdF9yb290KGxvbmcgcmVzLCBsb25nIG5ld19yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcHV0X29sZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2hyb290KGxvbmcgZmlsZW5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jaHJvb3QobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21rbm9kKGxvbmcgZmlsZW5hbWUsIGxvbmcgbW9kZSwgbG9uZyBkZXYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ta25vZChsb25nIHJlcywgbG9uZyBmaWxlbmFtZSwgbG9uZyBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRldik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGluayhsb25nIG9sZG5hbWUsIGxvbmcgbmV3bmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xpbmsobG9uZyByZXMsIGxvbmcgb2xkbmFtZSwgbG9uZyBuZXduYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeW1saW5rKGxvbmcgb2xkLCBsb25nIG5ld18pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeW1saW5rKGxvbmcgcmVzLCBsb25nIG9sZCwgbG9uZyBuZXdfKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bmxpbmsobG9uZyBwYXRobmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VubGluayhsb25nIHJlcywgbG9uZyBwYXRobmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVuYW1lKGxvbmcgb2xkbmFtZSwgbG9uZyBuZXduYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVuYW1lKGxvbmcgcmVzLCBsb25nIG9sZG5hbWUsIGxvbmcgbmV3bmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2htb2QobG9uZyBmaWxlbmFtZSwgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2htb2QobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNobW9kKGxvbmcgZmQsIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjaG1vZChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY250bChsb25nIGZkLCBsb25nIGNtZCwgbG9uZyBhcmcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY250bChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBjbWQsIGxvbmcgYXJnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY250bDY0KGxvbmcgZmQsIGxvbmcgY21kLCBsb25nIGFyZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjbnRsNjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9waXBlKGxvbmcgZmlsZGVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGlwZShsb25nIHJlcywgbG9uZyBmaWxkZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BpcGUyKGxvbmcgZmlsZGVzLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGlwZTIobG9uZyByZXMsIGxvbmcgZmlsZGVzLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kdXAobG9uZyBmaWxkZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9kdXAobG9uZyByZXMsIGxvbmcgZmlsZGVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kdXAyKGxvbmcgb2xkZmQsIGxvbmcgbmV3ZmQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9kdXAyKGxvbmcgcmVzLCBsb25nIG9sZGZkLCBsb25nIG5ld2ZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kdXAzKGxvbmcgb2xkZmQsIGxvbmcgbmV3ZmQsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9kdXAzKGxvbmcgcmVzLCBsb25nIG9sZGZkLCBsb25nIG5ld2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvcGVybShsb25nIGZyb20sIGxvbmcgbnVtLCBsb25nIG9uKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9wZXJtKGxvbmcgcmVzLCBsb25nIGZyb20sIGxvbmcgbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9jdGwobG9uZyBmZCwgbG9uZyBjbWQsIGxvbmcgYXJnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9jdGwobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgY21kLCBsb25nIGFyZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmxvY2sobG9uZyBmZCwgbG9uZyBjbWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mbG9jayhsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBjbWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvX3NldHVwKGxvbmcgbnJfcmVxcywgbG9uZyBjdHgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb19zZXR1cChsb25nIHJlcywgbG9uZyBucl9yZXFzLCBsb25nIGN0eCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9fZGVzdHJveShsb25nIGN0eCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvX2Rlc3Ryb3kobG9uZyByZXMsIGxvbmcgY3R4KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb19nZXRldmVudHMobG9uZyBjdHhfaWQsIGxvbmcgbWluX25yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5yLCBsb25nIGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lb3V0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9fZ2V0ZXZlbnRzKGxvbmcgcmVzLCBsb25nIGN0eF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWluX25yLCBsb25nIG5yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBldmVudHMsIGxvbmcgdGltZW91dCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9fc3VibWl0KGxvbmcgY3R4X2lkLCBsb25nIGFyZzEsIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvX3N1Ym1pdChsb25nIHJlcywgbG9uZyBjdHhfaWQsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9fY2FuY2VsKGxvbmcgY3R4X2lkLCBsb25nIGlvY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcmVzdWx0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9fY2FuY2VsKGxvbmcgcmVzLCBsb25nIGN0eF9pZCwgbG9uZyBpb2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyByZXN1bHQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbmRmaWxlKGxvbmcgb3V0X2ZkLCBsb25nIGluX2ZkLCBsb25nIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNvdW50KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VuZGZpbGUobG9uZyByZXMsIGxvbmcgb3V0X2ZkLCBsb25nIGluX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9mZnNldCwgbG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZGZpbGU2NChsb25nIG91dF9mZCwgbG9uZyBpbl9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2Zmc2V0LCBsb25nIGNvdW50KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VuZGZpbGU2NChsb25nIHJlcywgbG9uZyBvdXRfZmQsIGxvbmcgaW5fZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvZmZzZXQsIGxvbmcgY291bnQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlYWRsaW5rKGxvbmcgcGF0aCwgbG9uZyBidWYsIGxvbmcgYnVmc2l6KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVhZGxpbmsobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVmc2l6KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jcmVhdChsb25nIHBhdGhuYW1lLCBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jcmVhdChsb25nIHJlcywgbG9uZyBwYXRobmFtZSwgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vcGVuKGxvbmcgZmlsZW5hbWUsIGxvbmcgZmxhZ3MsIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29wZW4obG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9zZShsb25nIGZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2xvc2UobG9uZyByZXMsIGxvbmcgZmQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FjY2Vzcyhsb25nIGZpbGVuYW1lLCBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hY2Nlc3MobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdmhhbmd1cCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF92aGFuZ3VwKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaG93bihsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsIGxvbmcgZ3JvdXApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jaG93bihsb25nIHJlcywgbG9uZyBmaWxlbmFtZSwgbG9uZyB1c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sY2hvd24obG9uZyBmaWxlbmFtZSwgbG9uZyB1c2VyLCBsb25nIGdyb3VwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGNob3duKGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY2hvd24obG9uZyBmZCwgbG9uZyB1c2VyLCBsb25nIGdyb3VwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNob3duKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaG93bjE2KGxvbmcgZmlsZW5hbWUsIGxvbmcgdXNlciwgbG9uZyBncm91cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nob3duMTYobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sY2hvd24xNihsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBncm91cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xjaG93bjE2KGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaG93bjE2KGxvbmcgZmQsIGxvbmcgdXNlciwgbG9uZyBncm91cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjaG93bjE2KGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlZ2lkMTYobG9uZyByZ2lkLCBsb25nIGVnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZWdpZDE2KGxvbmcgcmVzLCBsb25nIHJnaWQsIGxvbmcgZWdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0Z2lkMTYobG9uZyBnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRnaWQxNihsb25nIHJlcywgbG9uZyBnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJldWlkMTYobG9uZyBydWlkLCBsb25nIGV1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXVpZDE2KGxvbmcgcmVzLCBsb25nIHJ1aWQsIGxvbmcgZXVpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0dWlkMTYobG9uZyB1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXR1aWQxNihsb25nIHJlcywgbG9uZyB1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlc3VpZDE2KGxvbmcgcnVpZCwgbG9uZyBldWlkLCBsb25nIHN1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXN1aWQxNihsb25nIHJlcywgbG9uZyBydWlkLCBsb25nIGV1aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3VpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cmVzdWlkMTYobG9uZyBydWlkLCBsb25nIGV1aWQsIGxvbmcgc3VpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJlc3VpZDE2KGxvbmcgcmVzLCBsb25nIHJ1aWQsIGxvbmcgZXVpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXNnaWQxNihsb25nIHJnaWQsIGxvbmcgZWdpZCwgbG9uZyBzZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmVzZ2lkMTYobG9uZyByZXMsIGxvbmcgcmdpZCwgbG9uZyBlZ2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHJlc2dpZDE2KGxvbmcgcmdpZCwgbG9uZyBlZ2lkLCBsb25nIHNnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRyZXNnaWQxNihsb25nIHJlcywgbG9uZyByZ2lkLCBsb25nIGVnaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2dpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0ZnN1aWQxNihsb25nIHVpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGZzdWlkMTYobG9uZyByZXMsIGxvbmcgdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRmc2dpZDE2KGxvbmcgZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZnNnaWQxNihsb25nIHJlcywgbG9uZyBnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGdyb3VwczE2KGxvbmcgZ2lkc2V0c2l6ZSwgbG9uZyBncm91cGxpc3QpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRncm91cHMxNihsb25nIHJlcywgbG9uZyBnaWRzZXRzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwbGlzdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0Z3JvdXBzMTYobG9uZyBnaWRzZXRzaXplLCBsb25nIGdyb3VwbGlzdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGdyb3VwczE2KGxvbmcgcmVzLCBsb25nIGdpZHNldHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXBsaXN0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXR1aWQxNigpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXR1aWQxNihsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0ZXVpZDE2KCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGV1aWQxNihsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Z2lkMTYoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Z2lkMTYobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGVnaWQxNigpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRlZ2lkMTYobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3V0aW1lKGxvbmcgZmlsZW5hbWUsIGxvbmcgdGltZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91dGltZShsb25nIHJlcywgbG9uZyBmaWxlbmFtZSwgbG9uZyB0aW1lcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXRpbWVzKGxvbmcgZmlsZW5hbWUsIGxvbmcgdXRpbWVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdXRpbWVzKGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLCBsb25nIHV0aW1lcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbHNlZWsobG9uZyBmZCwgbG9uZyBvZmZzZXQsIGxvbmcgb3JpZ2luKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbHNlZWsobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9yaWdpbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGxzZWVrKGxvbmcgZmQsIGxvbmcgb2Zmc2V0X2hpZ2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2Zmc2V0X2xvdywgbG9uZyByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3JpZ2luKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGxzZWVrKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG9mZnNldF9oaWdoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvZmZzZXRfbG93LCBsb25nIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3JpZ2luKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWFkKGxvbmcgZmQsIGxvbmcgYnVmLCBsb25nIGNvdW50KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVhZChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVhZHYobG9uZyBmZCwgbG9uZyB2ZWMsIGxvbmcgdmxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlYWR2KGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2bGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF93cml0ZShsb25nIGZkLCBsb25nIGJ1ZiwgbG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3dyaXRlKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfd3JpdGV2KGxvbmcgZmQsIGxvbmcgdmVjLCBsb25nIHZsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF93cml0ZXYobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgdmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2bGVuKTsKKworI2lmZGVmIF9MUDY0Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHJlYWQ2NChsb25nIGZkLCBsb25nIGJ1ZiwgbG9uZyBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcG9zKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJlYWQ2NChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCwgbG9uZyBwb3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3B3cml0ZTY0KGxvbmcgZmQsIGxvbmcgYnVmLCBsb25nIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcG9zKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHdyaXRlNjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNvdW50LCBsb25nIHBvcyk7CisjZWxzZQordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3ByZWFkNjQobG9uZyBmZCwgbG9uZyBidWYsIGxvbmcgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBvczAsIGxvbmcgcG9zMSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3ByZWFkNjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgY291bnQsIGxvbmcgcG9zMCwgbG9uZyBwb3MxKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wd3JpdGU2NChsb25nIGZkLCBsb25nIGJ1ZiwgbG9uZyBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBvczAsIGxvbmcgcG9zMSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3B3cml0ZTY0KGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCwgbG9uZyBwb3MwLCBsb25nIHBvczEpOworI2VuZGlmCisKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wcmVhZHYobG9uZyBmZCwgbG9uZyB2ZWMsIGxvbmcgdmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwb3NfbCwgbG9uZyBwb3NfaCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3ByZWFkdihsb25nIHJlcywgbG9uZyBmZCwgbG9uZyB2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZsZW4sIGxvbmcgcG9zX2wsIGxvbmcgcG9zX2gpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3B3cml0ZXYobG9uZyBmZCwgbG9uZyB2ZWMsIGxvbmcgdmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcG9zX2wsIGxvbmcgcG9zX2gpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wd3JpdGV2KGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZsZW4sIGxvbmcgcG9zX2wsIGxvbmcgcG9zX2gpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGN3ZChsb25nIGJ1ZiwgbG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Y3dkKGxvbmcgcmVzLCBsb25nIGJ1ZiwgbG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ta2Rpcihsb25nIHBhdGhuYW1lLCBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ta2Rpcihsb25nIHJlcywgbG9uZyBwYXRobmFtZSwgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaGRpcihsb25nIGZpbGVuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2hkaXIobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaGRpcihsb25nIGZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNoZGlyKGxvbmcgcmVzLCBsb25nIGZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ybWRpcihsb25nIHBhdGhuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcm1kaXIobG9uZyByZXMsIGxvbmcgcGF0aG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xvb2t1cF9kY29va2llKGxvbmcgY29va2llNjQsIGxvbmcgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbG9va3VwX2Rjb29raWUobG9uZyByZXMsIGxvbmcgY29va2llNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVmLCBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcXVvdGFjdGwobG9uZyBjbWQsIGxvbmcgc3BlY2lhbCwgbG9uZyBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFkZHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9xdW90YWN0bChsb25nIHJlcywgbG9uZyBjbWQsIGxvbmcgc3BlY2lhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpZCwgbG9uZyBhZGRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRkZW50cyhsb25nIGZkLCBsb25nIGRpcmVudCwgbG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGRlbnRzKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIGRpcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0ZGVudHM2NChsb25nIGZkLCBsb25nIGRpcmVudCwgbG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGRlbnRzNjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgZGlyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgY291bnQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHNvY2tvcHQobG9uZyBmZCwgbG9uZyBsZXZlbCwgbG9uZyBvcHRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcHR2YWwsIGxvbmcgb3B0bGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0c29ja29wdChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9wdG5hbWUsIGxvbmcgb3B0dmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3B0bGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRzb2Nrb3B0KGxvbmcgZmQsIGxvbmcgbGV2ZWwsIGxvbmcgb3B0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3B0dmFsLCBsb25nIG9wdGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHNvY2tvcHQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcHRuYW1lLCBsb25nIG9wdHZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9wdGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYmluZChsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYmluZChsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jb25uZWN0KGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jb25uZWN0KGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FjY2VwdChsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWNjZXB0KGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWNjZXB0NChsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmczKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWNjZXB0NChsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyLCBsb25nIGFyZzMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHNvY2tuYW1lKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRzb2NrbmFtZShsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cGVlcm5hbWUobG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHBlZXJuYW1lKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW5kKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW5kKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIsIGxvbmcgYXJnMyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZHRvKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMywgbG9uZyBhcmc0LCBsb25nIGFyZzUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW5kdG8obG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyLCBsb25nIGFyZzMsIGxvbmcgYXJnNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnNSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZG1zZyhsb25nIGZkLCBsb25nIG1zZywgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmRtc2cobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbmRtbXNnKGxvbmcgZmQsIGxvbmcgbXNnLCBsb25nIHZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmRtbXNnKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2bGVuLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWN2KGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWN2KGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIsIGxvbmcgYXJnMyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVjdmZyb20obG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzMsIGxvbmcgYXJnNCwgbG9uZyBhcmc1KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVjdmZyb20obG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIsIGxvbmcgYXJnMywgbG9uZyBhcmc0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlY3Ztc2cobG9uZyBmZCwgbG9uZyBtc2csIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWN2bXNnKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWN2bW1zZyhsb25nIGZkLCBsb25nIG1zZywgbG9uZyB2bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsIGxvbmcgdGltZW91dCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlY3ZtbXNnKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2bGVuLCBsb25nIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NvY2tldChsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc29ja2V0KGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc29ja2V0cGFpcihsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmczKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc29ja2V0cGFpcihsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyLCBsb25nIGFyZzMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NvY2tldGNhbGwobG9uZyBjYWxsLCBsb25nIGFyZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zb2NrZXRjYWxsKGxvbmcgcmVzLCBsb25nIGNhbGwsIGxvbmcgYXJncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGlzdGVuKGxvbmcgYXJnMCwgbG9uZyBhcmcxKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGlzdGVuKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcG9sbChsb25nIHVmZHMsIGxvbmcgbmZkcywgbG9uZyB0aW1lb3V0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcG9sbChsb25nIHJlcywgbG9uZyB1ZmRzLCBsb25nIG5mZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lb3V0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZWxlY3QobG9uZyBuLCBsb25nIGlucCwgbG9uZyBvdXRwLCBsb25nIGV4cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0dnApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZWxlY3QobG9uZyByZXMsIGxvbmcgbiwgbG9uZyBpbnAsIGxvbmcgb3V0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZXhwLCBsb25nIHR2cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb2xkX3NlbGVjdChsb25nIGFyZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29sZF9zZWxlY3QobG9uZyByZXMsIGxvbmcgYXJnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9lcG9sbF9jcmVhdGUobG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXBvbGxfY3JlYXRlKGxvbmcgcmVzLCBsb25nIHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX2NyZWF0ZTEobG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Vwb2xsX2NyZWF0ZTEobG9uZyByZXMsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX2N0bChsb25nIGVwZmQsIGxvbmcgb3AsIGxvbmcgZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZXZlbnQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9lcG9sbF9jdGwobG9uZyByZXMsIGxvbmcgZXBmZCwgbG9uZyBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmQsIGxvbmcgZXZlbnQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX3dhaXQobG9uZyBlcGZkLCBsb25nIGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWF4ZXZlbnRzLCBsb25nIHRpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9lcG9sbF93YWl0KGxvbmcgcmVzLCBsb25nIGVwZmQsIGxvbmcgZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWF4ZXZlbnRzLCBsb25nIHRpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX3B3YWl0KGxvbmcgZXBmZCwgbG9uZyBldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtYXhldmVudHMsIGxvbmcgdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpZ21hc2ssIGxvbmcgc2lnc2V0c2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Vwb2xsX3B3YWl0KGxvbmcgcmVzLCBsb25nIGVwZmQsIGxvbmcgZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1heGV2ZW50cywgbG9uZyB0aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpZ21hc2ssIGxvbmcgc2lnc2V0c2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0aG9zdG5hbWUobG9uZyBuYW1lLCBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGhvc3RuYW1lKGxvbmcgcmVzLCBsb25nIG5hbWUsIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRob3N0bmFtZShsb25nIG5hbWUsIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0aG9zdG5hbWUobG9uZyByZXMsIGxvbmcgbmFtZSwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGRvbWFpbm5hbWUobG9uZyBuYW1lLCBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGRvbWFpbm5hbWUobG9uZyByZXMsIGxvbmcgbmFtZSwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25ld3VuYW1lKGxvbmcgbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25ld3VuYW1lKGxvbmcgcmVzLCBsb25nIG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3VuYW1lKGxvbmcgYXJnMCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VuYW1lKGxvbmcgcmVzLCBsb25nIGFyZzApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZHVuYW1lKGxvbmcgYXJnMCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29sZHVuYW1lKGxvbmcgcmVzLCBsb25nIGFyZzApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHJsaW1pdChsb25nIHJlc291cmNlLCBsb25nIHJsaW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRybGltaXQobG9uZyByZXMsIGxvbmcgcmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJsaW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZF9nZXRybGltaXQobG9uZyByZXNvdXJjZSwgbG9uZyBybGltKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb2xkX2dldHJsaW1pdChsb25nIHJlcywgbG9uZyByZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJsaW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJsaW1pdChsb25nIHJlc291cmNlLCBsb25nIHJsaW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRybGltaXQobG9uZyByZXMsIGxvbmcgcmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJsaW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BybGltaXQ2NChsb25nIHBpZCwgbG9uZyByZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXdfcmxpbSwgbG9uZyBvbGRfcmxpbSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BybGltaXQ2NChsb25nIHJlcywgbG9uZyBwaWQsIGxvbmcgcmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5ld19ybGltLCBsb25nIG9sZF9ybGltKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRydXNhZ2UobG9uZyB3aG8sIGxvbmcgcnUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRydXNhZ2UobG9uZyByZXMsIGxvbmcgd2hvLCBsb25nIHJ1KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bWFzayhsb25nIG1hc2spOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91bWFzayhsb25nIHJlcywgbG9uZyBtYXNrKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc2dnZXQobG9uZyBrZXksIGxvbmcgbXNnZmxnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXNnZ2V0KGxvbmcgcmVzLCBsb25nIGtleSwgbG9uZyBtc2dmbGcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21zZ3NuZChsb25nIG1zcWlkLCBsb25nIG1zZ3AsIGxvbmcgbXNnc3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbXNnZmxnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXNnc25kKGxvbmcgcmVzLCBsb25nIG1zcWlkLCBsb25nIG1zZ3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ3N6LCBsb25nIG1zZ2ZsZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXNncmN2KGxvbmcgbXNxaWQsIGxvbmcgbXNncCwgbG9uZyBtc2dzeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtc2d0eXAsIGxvbmcgbXNnZmxnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXNncmN2KGxvbmcgcmVzLCBsb25nIG1zcWlkLCBsb25nIG1zZ3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ3N6LCBsb25nIG1zZ3R5cCwgbG9uZyBtc2dmbGcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21zZ2N0bChsb25nIG1zcWlkLCBsb25nIGNtZCwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tc2djdGwobG9uZyByZXMsIGxvbmcgbXNxaWQsIGxvbmcgY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbWdldChsb25nIGtleSwgbG9uZyBuc2VtcywgbG9uZyBzZW1mbGcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW1nZXQobG9uZyByZXMsIGxvbmcga2V5LCBsb25nIG5zZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzZW1mbGcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbW9wKGxvbmcgc2VtaWQsIGxvbmcgc29wcywgbG9uZyBuc29wcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbW9wKGxvbmcgcmVzLCBsb25nIHNlbWlkLCBsb25nIHNvcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbnNvcHMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbWN0bChsb25nIHNlbWlkLCBsb25nIHNlbW51bSwgbG9uZyBjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VtY3RsKGxvbmcgcmVzLCBsb25nIHNlbWlkLCBsb25nIHNlbW51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgY21kLCBsb25nIGFyZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VtdGltZWRvcChsb25nIHNlbWlkLCBsb25nIHNvcHMsIGxvbmcgbnNvcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW10aW1lZG9wKGxvbmcgcmVzLCBsb25nIHNlbWlkLCBsb25nIHNvcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuc29wcywgbG9uZyB0aW1lb3V0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaG1hdChsb25nIHNobWlkLCBsb25nIHNobWFkZHIsIGxvbmcgc2htZmxnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2htYXQobG9uZyByZXMsIGxvbmcgc2htaWQsIGxvbmcgc2htYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaG1mbGcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NobWdldChsb25nIGtleSwgbG9uZyBzaXplLCBsb25nIGZsYWcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaG1nZXQobG9uZyByZXMsIGxvbmcga2V5LCBsb25nIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NobWR0KGxvbmcgc2htYWRkcik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NobWR0KGxvbmcgcmVzLCBsb25nIHNobWFkZHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NobWN0bChsb25nIHNobWlkLCBsb25nIGNtZCwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaG1jdGwobG9uZyByZXMsIGxvbmcgc2htaWQsIGxvbmcgY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lwYyhsb25nIGNhbGwsIGxvbmcgZmlyc3QsIGxvbmcgc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRoaXJkLCBsb25nIHB0ciwgbG9uZyBmaWZ0aCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lwYyhsb25nIHJlcywgbG9uZyBjYWxsLCBsb25nIGZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzZWNvbmQsIGxvbmcgdGhpcmQsIGxvbmcgcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmaWZ0aCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfb3Blbihsb25nIG5hbWUsIGxvbmcgb2ZsYWcsIGxvbmcgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXR0cik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX29wZW4obG9uZyByZXMsIGxvbmcgbmFtZSwgbG9uZyBvZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1vZGUsIGxvbmcgYXR0cik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfdW5saW5rKGxvbmcgbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX3VubGluayhsb25nIHJlcywgbG9uZyBuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV90aW1lZHNlbmQobG9uZyBtcWRlcywgbG9uZyBtc2dfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ19sZW4sIGxvbmcgbXNnX3ByaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYWJzX3RpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV90aW1lZHNlbmQobG9uZyByZXMsIGxvbmcgbXFkZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ19wdHIsIGxvbmcgbXNnX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbXNnX3ByaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFic190aW1lb3V0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV90aW1lZHJlY2VpdmUobG9uZyBtcWRlcywgbG9uZyBtc2dfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ19sZW4sIGxvbmcgbXNnX3ByaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYWJzX3RpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV90aW1lZHJlY2VpdmUobG9uZyByZXMsIGxvbmcgbXFkZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ19wdHIsIGxvbmcgbXNnX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbXNnX3ByaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFic190aW1lb3V0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV9ub3RpZnkobG9uZyBtcWRlcywgbG9uZyBub3RpZmljYXRpb24pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV9ub3RpZnkobG9uZyByZXMsIGxvbmcgbXFkZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5vdGlmaWNhdGlvbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfZ2V0c2V0YXR0cihsb25nIG1xZGVzLCBsb25nIG1xc3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb21xc3RhdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX2dldHNldGF0dHIobG9uZyByZXMsIGxvbmcgbXFkZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtcXN0YXQsIGxvbmcgb21xc3RhdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGNpY29uZmlnX2lvYmFzZShsb25nIHdoaWNoLCBsb25nIGJ1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGV2Zm4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wY2ljb25maWdfaW9iYXNlKGxvbmcgcmVzLCBsb25nIHdoaWNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVzLCBsb25nIGRldmZuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wY2ljb25maWdfcmVhZChsb25nIGJ1cywgbG9uZyBkZm4sIGxvbmcgb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGVuLCBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BjaWNvbmZpZ19yZWFkKGxvbmcgcmVzLCBsb25nIGJ1cywgbG9uZyBkZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2ZmLCBsb25nIGxlbiwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BjaWNvbmZpZ193cml0ZShsb25nIGJ1cywgbG9uZyBkZm4sIGxvbmcgb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbiwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wY2ljb25maWdfd3JpdGUobG9uZyByZXMsIGxvbmcgYnVzLCBsb25nIGRmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2ZmLCBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zd2Fwb24obG9uZyBzcGVjaWFsZmlsZSwgbG9uZyBzd2FwX2ZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3dhcG9uKGxvbmcgcmVzLCBsb25nIHNwZWNpYWxmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzd2FwX2ZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zd2Fwb2ZmKGxvbmcgc3BlY2lhbGZpbGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zd2Fwb2ZmKGxvbmcgcmVzLCBsb25nIHNwZWNpYWxmaWxlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeXNjdGwobG9uZyBhcmdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3lzY3RsKGxvbmcgcmVzLCBsb25nIGFyZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5c2luZm8obG9uZyBpbmZvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3lzaW5mbyhsb25nIHJlcywgbG9uZyBpbmZvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeXNmcyhsb25nIG9wdGlvbiwgbG9uZyBhcmcxLCBsb25nIGFyZzIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeXNmcyhsb25nIHJlcywgbG9uZyBvcHRpb24sIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeXNsb2cobG9uZyB0eXBlLCBsb25nIGJ1ZiwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeXNsb2cobG9uZyByZXMsIGxvbmcgdHlwZSwgbG9uZyBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXNlbGliKGxvbmcgbGlicmFyeSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VzZWxpYihsb25nIHJlcywgbG9uZyBsaWJyYXJ5KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uaV9zeXNjYWxsKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25pX3N5c2NhbGwobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3B0cmFjZShsb25nIHJlcXVlc3QsIGxvbmcgcGlkLCBsb25nIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0YSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3B0cmFjZShsb25nIHJlcywgbG9uZyByZXF1ZXN0LCBsb25nIHBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYWRkciwgbG9uZyBkYXRhKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hZGRfa2V5KGxvbmcgX3R5cGUsIGxvbmcgX2Rlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfcGF5bG9hZCwgbG9uZyBwbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkZXN0cmluZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWRkX2tleShsb25nIHJlcywgbG9uZyBfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIF9kZXNjcmlwdGlvbiwgbG9uZyBfcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBsZW4sIGxvbmcgZGVzdHJpbmdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVxdWVzdF9rZXkobG9uZyBfdHlwZSwgbG9uZyBfZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfY2FsbG91dF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGVzdHJpbmdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlcXVlc3Rfa2V5KGxvbmcgcmVzLCBsb25nIF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIF9kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfY2FsbG91dF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRlc3RyaW5naWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2tleWN0bChsb25nIGNtZCwgbG9uZyBhcmcyLCBsb25nIGFyZzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnNCwgbG9uZyBhcmc1KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfa2V5Y3RsKGxvbmcgcmVzLCBsb25nIGNtZCwgbG9uZyBhcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmczLCBsb25nIGFyZzQsIGxvbmcgYXJnNSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9wcmlvX3NldChsb25nIHdoaWNoLCBsb25nIHdobywgbG9uZyBpb3ByaW8pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb3ByaW9fc2V0KGxvbmcgcmVzLCBsb25nIHdoaWNoLCBsb25nIHdobywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlvcHJpbyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9wcmlvX2dldChsb25nIHdoaWNoLCBsb25nIHdobyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvcHJpb19nZXQobG9uZyByZXMsIGxvbmcgd2hpY2gsIGxvbmcgd2hvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRfbWVtcG9saWN5KGxvbmcgbW9kZSwgbG9uZyBubWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWF4bm9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldF9tZW1wb2xpY3kobG9uZyByZXMsIGxvbmcgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5tYXNrLCBsb25nIG1heG5vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21pZ3JhdGVfcGFnZXMobG9uZyBwaWQsIGxvbmcgbWF4bm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZnJvbSwgbG9uZyB0byk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21pZ3JhdGVfcGFnZXMobG9uZyByZXMsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWF4bm9kZSwgbG9uZyBmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdG8pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21vdmVfcGFnZXMobG9uZyBwaWQsIGxvbmcgbnJfcGFnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBhZ2VzLCBsb25nIG5vZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdGF0dXMsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tb3ZlX3BhZ2VzKGxvbmcgcmVzLCBsb25nIHBpZCwgbG9uZyBucl9wYWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBhZ2VzLCBsb25nIG5vZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3RhdHVzLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tYmluZChsb25nIHN0YXJ0LCBsb25nIGxlbiwgbG9uZyBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbm1hc2ssIGxvbmcgbWF4bm9kZSwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21iaW5kKGxvbmcgcmVzLCBsb25nIHN0YXJ0LCBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtb2RlLCBsb25nIG5tYXNrLCBsb25nIG1heG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldF9tZW1wb2xpY3kobG9uZyBwb2xpY3ksIGxvbmcgbm1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1heG5vZGUsIGxvbmcgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRfbWVtcG9saWN5KGxvbmcgcmVzLCBsb25nIHBvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5tYXNrLCBsb25nIG1heG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhZGRyLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X2luaXQoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW5vdGlmeV9pbml0KGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X2luaXQxKGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pbm90aWZ5X2luaXQxKGxvbmcgcmVzLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X2FkZF93YXRjaChsb25nIGZkLCBsb25nIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtYXNrKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW5vdGlmeV9hZGRfd2F0Y2gobG9uZyByZXMsIGxvbmcgZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcGF0aCwgbG9uZyBtYXNrKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X3JtX3dhdGNoKGxvbmcgZmQsIGxvbmcgd2QpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pbm90aWZ5X3JtX3dhdGNoKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHdkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zcHVfcnVuKGxvbmcgZmQsIGxvbmcgdW5wYywgbG9uZyB1c3RhdHVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3B1X3J1bihsb25nIHJlcywgbG9uZyBmZCwgbG9uZyB1bnBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdXN0YXR1cyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3B1X2NyZWF0ZShsb25nIG5hbWUsIGxvbmcgZmxhZ3MsIGxvbmcgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zcHVfY3JlYXRlKGxvbmcgcmVzLCBsb25nIG5hbWUsIGxvbmcgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtb2RlLCBsb25nIGZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ta25vZGF0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLCBsb25nIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRldik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21rbm9kYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbW9kZSwgbG9uZyBkZXYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21rZGlyYXQobG9uZyBkZmQsIGxvbmcgcGF0aG5hbWUsIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21rZGlyYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIHBhdGhuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdW5saW5rYXQobG9uZyBkZmQsIGxvbmcgcGF0aG5hbWUsIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VubGlua2F0KGxvbmcgcmVzLCBsb25nIGRmZCwgbG9uZyBwYXRobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeW1saW5rYXQobG9uZyBvbGRuYW1lLCBsb25nIG5ld2RmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXduYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3ltbGlua2F0KGxvbmcgcmVzLCBsb25nIG9sZG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5ld2RmZCwgbG9uZyBuZXduYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9saW5rYXQobG9uZyBvbGRkZmQsIGxvbmcgb2xkbmFtZSwgbG9uZyBuZXdkZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbmV3bmFtZSwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xpbmthdChsb25nIHJlcywgbG9uZyBvbGRkZmQsIGxvbmcgb2xkbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbmV3ZGZkLCBsb25nIG5ld25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZW5hbWVhdChsb25nIG9sZGRmZCwgbG9uZyBvbGRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbmV3ZGZkLCBsb25nIG5ld25hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZW5hbWVhdChsb25nIHJlcywgbG9uZyBvbGRkZmQsIGxvbmcgb2xkbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXdkZmQsIGxvbmcgbmV3bmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnV0aW1lc2F0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHV0aW1lcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Z1dGltZXNhdChsb25nIHJlcywgbG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHV0aW1lcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmFjY2Vzc2F0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLCBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mYWNjZXNzYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY2htb2RhdChsb25nIGRmZCwgbG9uZyBmaWxlbmFtZSwgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNobW9kYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaG93bmF0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBncm91cCwgbG9uZyBmbGFnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNob3duYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHVzZXIsIGxvbmcgZ3JvdXAsIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb3BlbmF0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLCBsb25nIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vcGVuYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uZXdmc3RhdGF0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdGF0YnVmLCBsb25nIGZsYWcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uZXdmc3RhdGF0KGxvbmcgcmVzLCBsb25nIGRmZCwgbG9uZyBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN0YXRidWYsIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZnN0YXRhdDY0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN0YXRidWYsIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzdGF0YXQ2NChsb25nIHJlcywgbG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN0YXRidWYsIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVhZGxpbmthdChsb25nIGRmZCwgbG9uZyBwYXRoLCBsb25nIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVmc2l6KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVhZGxpbmthdChsb25nIHJlcywgbG9uZyBkZmQsIGxvbmcgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGJ1ZiwgbG9uZyBidWZzaXopOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3V0aW1lbnNhdChsb25nIGRmZCwgbG9uZyBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1dGltZXMsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91dGltZW5zYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1dGltZXMsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Vuc2hhcmUobG9uZyB1bnNoYXJlX2ZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW5zaGFyZShsb25nIHJlcywgbG9uZyB1bnNoYXJlX2ZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zcGxpY2UobG9uZyBmZF9pbiwgbG9uZyBvZmZfaW4sIGxvbmcgZmRfb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9mZl9vdXQsIGxvbmcgbGVuLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3BsaWNlKGxvbmcgcmVzLCBsb25nIGZkX2luLCBsb25nIG9mZl9pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmRfb3V0LCBsb25nIG9mZl9vdXQsIGxvbmcgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdm1zcGxpY2UobG9uZyBmZCwgbG9uZyBpb3YsIGxvbmcgbnJfc2VncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdm1zcGxpY2UobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgaW92LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5yX3NlZ3MsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RlZShsb25nIGZkaW4sIGxvbmcgZmRvdXQsIGxvbmcgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGVlKGxvbmcgcmVzLCBsb25nIGZkaW4sIGxvbmcgZmRvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbiwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0X3JvYnVzdF9saXN0KGxvbmcgcGlkLCBsb25nIGhlYWRfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbl9wdHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRfcm9idXN0X2xpc3QobG9uZyByZXMsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBoZWFkX3B0ciwgbG9uZyBsZW5fcHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRfcm9idXN0X2xpc3QobG9uZyBoZWFkLCBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldF9yb2J1c3RfbGlzdChsb25nIHJlcywgbG9uZyBoZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGNwdShsb25nIGNwdSwgbG9uZyBub2RlLCBsb25nIGNhY2hlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Y3B1KGxvbmcgcmVzLCBsb25nIGNwdSwgbG9uZyBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjYWNoZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2lnbmFsZmQobG9uZyB1ZmQsIGxvbmcgdXNlcl9tYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZW1hc2spOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWduYWxmZChsb25nIHJlcywgbG9uZyB1ZmQsIGxvbmcgdXNlcl9tYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemVtYXNrKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaWduYWxmZDQobG9uZyB1ZmQsIGxvbmcgdXNlcl9tYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemVtYXNrLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2lnbmFsZmQ0KGxvbmcgcmVzLCBsb25nIHVmZCwgbG9uZyB1c2VyX21hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemVtYXNrLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcmZkX2NyZWF0ZShsb25nIGNsb2NraWQsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcmZkX2NyZWF0ZShsb25nIHJlcywgbG9uZyBjbG9ja2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcmZkX3NldHRpbWUobG9uZyB1ZmQsIGxvbmcgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdXRtciwgbG9uZyBvdG1yKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJmZF9zZXR0aW1lKGxvbmcgcmVzLCBsb25nIHVmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsIGxvbmcgdXRtciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3Rtcik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXJmZF9nZXR0aW1lKGxvbmcgdWZkLCBsb25nIG90bXIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcmZkX2dldHRpbWUobG9uZyByZXMsIGxvbmcgdWZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvdG1yKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ldmVudGZkKGxvbmcgY291bnQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ldmVudGZkKGxvbmcgcmVzLCBsb25nIGNvdW50KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ldmVudGZkMihsb25nIGNvdW50LCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXZlbnRmZDIobG9uZyByZXMsIGxvbmcgY291bnQsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29sZF9yZWFkZGlyKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGRfcmVhZGRpcihsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHNlbGVjdDYobG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzMsIGxvbmcgYXJnNCwgbG9uZyBhcmc1KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHNlbGVjdDYobG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIsIGxvbmcgYXJnMywgbG9uZyBhcmc0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Bwb2xsKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmczLCBsb25nIGFyZzQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wcG9sbChsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMiwgbG9uZyBhcmczLCBsb25nIGFyZzQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Zhbm90aWZ5X2luaXQobG9uZyBmbGFncywgbG9uZyBldmVudF9mX2ZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmFub3RpZnlfaW5pdChsb25nIHJlcywgbG9uZyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGV2ZW50X2ZfZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Zhbm90aWZ5X21hcmsobG9uZyBmYW5vdGlmeV9mZCwgbG9uZyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWFzaywgbG9uZyBmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcGF0aG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mYW5vdGlmeV9tYXJrKGxvbmcgcmVzLCBsb25nIGZhbm90aWZ5X2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsIGxvbmcgbWFzaywgbG9uZyBmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBhdGhuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeW5jZnMobG9uZyBmZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N5bmNmcyhsb25nIHJlcywgbG9uZyBmZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGVyZl9ldmVudF9vcGVuKGxvbmcgYXR0cl91cHRyLCBsb25nIHBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjcHUsIGxvbmcgZ3JvdXBfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wZXJmX2V2ZW50X29wZW4obG9uZyByZXMsIGxvbmcgYXR0cl91cHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwaWQsIGxvbmcgY3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBncm91cF9mZCwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbW1hcF9wZ29mZihsb25nIGFkZHIsIGxvbmcgbGVuLCBsb25nIHByb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzLCBsb25nIGZkLCBsb25nIHBnb2ZmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbW1hcF9wZ29mZihsb25nIHJlcywgbG9uZyBhZGRyLCBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHByb3QsIGxvbmcgZmxhZ3MsIGxvbmcgZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwZ29mZik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb2xkX21tYXAobG9uZyBhcmcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGRfbW1hcChsb25nIHJlcywgbG9uZyBhcmcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25hbWVfdG9faGFuZGxlX2F0KGxvbmcgZGZkLCBsb25nIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBoYW5kbGUsIGxvbmcgbW50X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25hbWVfdG9faGFuZGxlX2F0KGxvbmcgcmVzLCBsb25nIGRmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuYW1lLCBsb25nIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtbnRfaWQsIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb3Blbl9ieV9oYW5kbGVfYXQobG9uZyBtb3VudGRpcmZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaGFuZGxlLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb3Blbl9ieV9oYW5kbGVfYXQobG9uZyByZXMsIGxvbmcgbW91bnRkaXJmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBoYW5kbGUsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldG5zKGxvbmcgZmQsIGxvbmcgbnN0eXBlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0bnMobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbnN0eXBlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wcm9jZXNzX3ZtX3JlYWR2KGxvbmcgcGlkLCBsb25nIGx2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxpb3ZjbnQsIGxvbmcgcnZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcmlvdmNudCwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Byb2Nlc3Nfdm1fcmVhZHYobG9uZyByZXMsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbHZlYywgbG9uZyBsaW92Y250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcnZlYywgbG9uZyByaW92Y250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Byb2Nlc3Nfdm1fd3JpdGV2KGxvbmcgcGlkLCBsb25nIGx2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsaW92Y250LCBsb25nIHJ2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyByaW92Y250LCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJvY2Vzc192bV93cml0ZXYobG9uZyByZXMsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGx2ZWMsIGxvbmcgbGlvdmNudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBydmVjLCBsb25nIHJpb3ZjbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZvcmsoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZm9yayhsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdmZvcmsoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdmZvcmsobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NpZ2FjdGlvbihsb25nIHNpZ251bSwgbG9uZyBhY3QsIGxvbmcgb2xkYWN0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2lnYWN0aW9uKGxvbmcgcmVzLCBsb25nIHNpZ251bSwgbG9uZyBhY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9sZGFjdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lnYWN0aW9uKGxvbmcgc2lnbnVtLCBsb25nIGFjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvbGRhY3QsIGxvbmcgc3opOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ydF9zaWdhY3Rpb24obG9uZyByZXMsIGxvbmcgc2lnbnVtLCBsb25nIGFjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2xkYWN0LCBsb25nIHN6KTsKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gU0FOSVRJWkVSX0xJTlVYX1NZU0NBTExfSE9PS1NfSApkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zYW5pdGl6ZXIvbHNhbl9pbnRlcmZhY2UuaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc2FuaXRpemVyL2xzYW5faW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiOGU3NQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc2FuaXRpemVyL2xzYW5faW50ZXJmYWNlLmgKQEAgLTAsMCArMSw4NCBAQAorLy89PT0tLSBzYW5pdGl6ZXIvbHNhbl9pbnRlcmZhY2UuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLSBDKysgLSotPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCisvLyBUaGlzIGZpbGUgaXMgYSBwYXJ0IG9mIExlYWtTYW5pdGl6ZXIuCisvLworLy8gUHVibGljIGludGVyZmFjZSBoZWFkZXIuCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworI2lmbmRlZiBTQU5JVElaRVJfTFNBTl9JTlRFUkZBQ0VfSAorI2RlZmluZSBTQU5JVElaRVJfTFNBTl9JTlRFUkZBQ0VfSAorCisjaW5jbHVkZSA8c2FuaXRpemVyL2NvbW1vbl9pbnRlcmZhY2VfZGVmcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisgIC8vIEFsbG9jYXRpb25zIG1hZGUgYmV0d2VlbiBjYWxscyB0byBfX2xzYW5fZGlzYWJsZSgpIGFuZCBfX2xzYW5fZW5hYmxlKCkgd2lsbAorICAvLyBiZSB0cmVhdGVkIGFzIG5vbi1sZWFrcy4gRGlzYWJsZS9lbmFibGUgcGFpcnMgbWF5IGJlIG5lc3RlZC4KKyAgdm9pZCBfX2xzYW5fZGlzYWJsZSgpOworICB2b2lkIF9fbHNhbl9lbmFibGUoKTsKKworICAvLyBUaGUgaGVhcCBvYmplY3QgaW50byB3aGljaCBwIHBvaW50cyB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBub24tbGVhay4KKyAgdm9pZCBfX2xzYW5faWdub3JlX29iamVjdChjb25zdCB2b2lkICpwKTsKKworICAvLyBNZW1vcnkgcmVnaW9ucyByZWdpc3RlcmVkIHRocm91Z2ggdGhpcyBpbnRlcmZhY2Ugd2lsbCBiZSB0cmVhdGVkIGFzIHNvdXJjZXMKKyAgLy8gb2YgbGl2ZSBwb2ludGVycyBkdXJpbmcgbGVhayBjaGVja2luZy4gVXNlZnVsIGlmIHlvdSBzdG9yZSBwb2ludGVycyBpbgorICAvLyBtYXBwZWQgbWVtb3J5LgorICAvLyBQb2ludHMgb2Ygbm90ZToKKyAgLy8gLSBfX2xzYW5fdW5yZWdpc3Rlcl9yb290X3JlZ2lvbigpIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHNhbWUgcG9pbnRlciBhbmQKKyAgLy8gc2l6ZSB0aGF0IGhhdmUgZWFybGllciBiZWVuIHBhc3NlZCB0byBfX2xzYW5fcmVnaXN0ZXJfcm9vdF9yZWdpb24oKQorICAvLyAtIExTYW4gd2lsbCBza2lwIGFueSBpbmFjY2Vzc2libGUgbWVtb3J5IHdoZW4gc2Nhbm5pbmcgYSByb290IHJlZ2lvbi4gRS5nLiwKKyAgLy8gaWYgeW91IG1hcCBtZW1vcnkgd2l0aGluIGEgbGFyZ2VyIHJlZ2lvbiB0aGF0IHlvdSBoYXZlIG1wcm90ZWN0J2VkLCB5b3UgY2FuCisgIC8vIHJlZ2lzdGVyIHRoZSBlbnRpcmUgbGFyZ2UgcmVnaW9uLgorICAvLyAtIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3Qgb3B0aW1pemVkIGZvciBwZXJmb3JtYW5jZS4gVGhpcyBpbnRlcmZhY2UgaXMKKyAgLy8gaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgYSBzbWFsbCBudW1iZXIgb2YgcmVsYXRpdmVseSBzdGF0aWMgcmVnaW9ucy4KKyAgdm9pZCBfX2xzYW5fcmVnaXN0ZXJfcm9vdF9yZWdpb24oY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUpOworICB2b2lkIF9fbHNhbl91bnJlZ2lzdGVyX3Jvb3RfcmVnaW9uKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplKTsKKworICAvLyBDaGVjayBmb3IgbGVha3Mgbm93LiBUaGlzIGZ1bmN0aW9uIGJlaGF2ZXMgaWRlbnRpY2FsbHkgdG8gdGhlIGRlZmF1bHQKKyAgLy8gZW5kLW9mLXByb2Nlc3MgbGVhayBjaGVjay4gSW4gcGFydGljdWxhciwgaXQgd2lsbCB0ZXJtaW5hdGUgdGhlIHByb2Nlc3MgaWYKKyAgLy8gbGVha3MgYXJlIGZvdW5kIGFuZCB0aGUgZXhpdGNvZGUgcnVudGltZSBmbGFnIGlzIG5vbi16ZXJvLgorICAvLyBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBoYXZlIG5vIGVmZmVjdCBhbmQgZW5kLW9mLXByb2Nlc3MKKyAgLy8gbGVhayBjaGVjayB3aWxsIG5vdCBydW4uIEVmZmVjdGl2ZWx5LCBlbmQtb2YtcHJvY2VzcyBsZWFrIGNoZWNrIGlzIG1vdmVkIHRvCisgIC8vIHRoZSB0aW1lIG9mIGZpcnN0IGludm9jYXRpb24gb2YgdGhpcyBmdW5jdGlvbi4KKyAgLy8gQnkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGVhcmx5IGR1cmluZyBwcm9jZXNzIHNodXRkb3duLCB5b3UgY2FuIGluc3RydWN0CisgIC8vIExTYW4gdG8gaWdub3JlIHNodXRkb3duLW9ubHkgbGVha3Mgd2hpY2ggaGFwcGVuIGxhdGVyIG9uLgorICB2b2lkIF9fbHNhbl9kb19sZWFrX2NoZWNrKCk7CisKKyAgLy8gQ2hlY2sgZm9yIGxlYWtzIG5vdy4gUmV0dXJucyB6ZXJvIGlmIG5vIGxlYWtzIGhhdmUgYmVlbiBmb3VuZCBvciBpZiBsZWFrCisgIC8vIGRldGVjdGlvbiBpcyBkaXNhYmxlZCwgbm9uLXplcm8gb3RoZXJ3aXNlLgorICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgcmVwZWF0ZWRseSwgZS5nLiB0byBwZXJpb2RpY2FsbHkgY2hlY2sgYQorICAvLyBsb25nLXJ1bm5pbmcgcHJvY2Vzcy4gSXQgcHJpbnRzIGEgbGVhayByZXBvcnQgaWYgYXBwcm9wcmlhdGUsIGJ1dCBkb2VzIG5vdAorICAvLyB0ZXJtaW5hdGUgdGhlIHByb2Nlc3MuIEl0IGRvZXMgbm90IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YKKyAgLy8gX19sc2FuX2RvX2xlYWtfY2hlY2soKSBvciB0aGUgZW5kLW9mLXByb2Nlc3MgbGVhayBjaGVjaywgYW5kIGlzIG5vdAorICAvLyBhZmZlY3RlZCBieSB0aGVtLgorICBpbnQgX19sc2FuX2RvX3JlY292ZXJhYmxlX2xlYWtfY2hlY2soKTsKKworICAvLyBUaGUgdXNlciBtYXkgb3B0aW9uYWxseSBwcm92aWRlIHRoaXMgZnVuY3Rpb24gdG8gZGlzYWxsb3cgbGVhayBjaGVja2luZworICAvLyBmb3IgdGhlIHByb2dyYW0gaXQgaXMgbGlua2VkIGludG8gKGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgbm9uLXplcm8pLiBUaGlzCisgIC8vIGZ1bmN0aW9uIG11c3QgYmUgZGVmaW5lZCBhcyByZXR1cm5pbmcgYSBjb25zdGFudCB2YWx1ZTsgYW55IGJlaGF2aW9yIGJleW9uZAorICAvLyB0aGF0IGlzIHVuc3VwcG9ydGVkLgorICBpbnQgX19sc2FuX2lzX3R1cm5lZF9vZmYoKTsKKworICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGFuZCBzaG91bGQgcmV0dXJuCisgIC8vIGEgc3RyaW5nIGNvbnRhaW5pbmcgTFNhbiBzdXBwcmVzc2lvbnMuCisgIGNvbnN0IGNoYXIgKl9fbHNhbl9kZWZhdWx0X3N1cHByZXNzaW9ucygpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisKK25hbWVzcGFjZSBfX2xzYW4geworY2xhc3MgU2NvcGVkRGlzYWJsZXIgeworIHB1YmxpYzoKKyAgU2NvcGVkRGlzYWJsZXIoKSB7IF9fbHNhbl9kaXNhYmxlKCk7IH0KKyAgflNjb3BlZERpc2FibGVyKCkgeyBfX2xzYW5fZW5hYmxlKCk7IH0KK307Cit9ICAvLyBuYW1lc3BhY2UgX19sc2FuCisjZW5kaWYKKworI2VuZGlmICAvLyBTQU5JVElaRVJfTFNBTl9JTlRFUkZBQ0VfSApkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zYW5pdGl6ZXIvbXNhbl9pbnRlcmZhY2UuaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc2FuaXRpemVyL21zYW5faW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ2YTM3NgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc2FuaXRpemVyL21zYW5faW50ZXJmYWNlLmgKQEAgLTAsMCArMSwxMTEgQEAKKy8vPT09LS0gbXNhbl9pbnRlcmZhY2UuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBNZW1vcnlTYW5pdGl6ZXIuCisvLworLy8gUHVibGljIGludGVyZmFjZSBoZWFkZXIuCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworI2lmbmRlZiBNU0FOX0lOVEVSRkFDRV9ICisjZGVmaW5lIE1TQU5fSU5URVJGQUNFX0gKKworI2luY2x1ZGUgPHNhbml0aXplci9jb21tb25faW50ZXJmYWNlX2RlZnMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorICAvKiBTZXQgcmF3IG9yaWdpbiBmb3IgdGhlIG1lbW9yeSByYW5nZS4gKi8KKyAgdm9pZCBfX21zYW5fc2V0X29yaWdpbihjb25zdCB2b2xhdGlsZSB2b2lkICphLCBzaXplX3Qgc2l6ZSwgdWludDMyX3Qgb3JpZ2luKTsKKworICAvKiBHZXQgcmF3IG9yaWdpbiBmb3IgYW4gYWRkcmVzcy4gKi8KKyAgdWludDMyX3QgX19tc2FuX2dldF9vcmlnaW4oY29uc3Qgdm9sYXRpbGUgdm9pZCAqYSk7CisKKyAgLyogVGVzdCB0aGF0IHRoaXNfaWQgaXMgYSBkZXNjZW5kYW50IG9mIHByZXZfaWQgKG9yIHRoZXkgYXJlIHNpbXBseSBlcXVhbCkuCisgICAqICJkZXNjZW5kYW50IiBoZXJlIG1lYW5zIHRoZXkgYXJlIHBhcnQgb2YgdGhlIHNhbWUgY2hhaW4sIGNyZWF0ZWQgd2l0aAorICAgKiBfX21zYW5fY2hhaW5fb3JpZ2luLiAqLworICBpbnQgX19tc2FuX29yaWdpbl9pc19kZXNjZW5kYW50X29yX3NhbWUodWludDMyX3QgdGhpc19pZCwgdWludDMyX3QgcHJldl9pZCk7CisKKyAgLyogUmV0dXJucyBub24temVybyBpZiB0cmFja2luZyBvcmlnaW5zLiAqLworICBpbnQgX19tc2FuX2dldF90cmFja19vcmlnaW5zKCk7CisKKyAgLyogUmV0dXJucyB0aGUgb3JpZ2luIGlkIG9mIHRoZSBsYXRlc3QgVU1SIGluIHRoZSBjYWxsaW5nIHRocmVhZC4gKi8KKyAgdWludDMyX3QgX19tc2FuX2dldF91bXJfb3JpZ2luKCk7CisKKyAgLyogTWFrZSBtZW1vcnkgcmVnaW9uIGZ1bGx5IGluaXRpYWxpemVkICh3aXRob3V0IGNoYW5naW5nIGl0cyBjb250ZW50cykuICovCisgIHZvaWQgX19tc2FuX3VucG9pc29uKGNvbnN0IHZvbGF0aWxlIHZvaWQgKmEsIHNpemVfdCBzaXplKTsKKworICAvKiBNYWtlIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBmdWxseSBpbml0aWFsaXplZCAod2l0aG91dCBjaGFuZ2luZyBpdHMKKyAgICAgY29udGVudHMpLiAqLworICB2b2lkIF9fbXNhbl91bnBvaXNvbl9zdHJpbmcoY29uc3Qgdm9sYXRpbGUgY2hhciAqYSk7CisKKyAgLyogTWFrZSBtZW1vcnkgcmVnaW9uIGZ1bGx5IHVuaW5pdGlhbGl6ZWQgKHdpdGhvdXQgY2hhbmdpbmcgaXRzIGNvbnRlbnRzKS4KKyAgICAgVGhpcyBpcyBhIGxlZ2FjeSBpbnRlcmZhY2UgdGhhdCBkb2VzIG5vdCB1cGRhdGUgb3JpZ2luIGluZm9ybWF0aW9uLiBVc2UKKyAgICAgX19tc2FuX2FsbG9jYXRlZF9tZW1vcnkoKSBpbnN0ZWFkLiAqLworICB2b2lkIF9fbXNhbl9wb2lzb24oY29uc3Qgdm9sYXRpbGUgdm9pZCAqYSwgc2l6ZV90IHNpemUpOworCisgIC8qIE1ha2UgbWVtb3J5IHJlZ2lvbiBwYXJ0aWFsbHkgdW5pbml0aWFsaXplZCAod2l0aG91dCBjaGFuZ2luZyBpdHMgY29udGVudHMpLgorICAgKi8KKyAgdm9pZCBfX21zYW5fcGFydGlhbF9wb2lzb24oY29uc3Qgdm9sYXRpbGUgdm9pZCAqZGF0YSwgdm9pZCAqc2hhZG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSk7CisKKyAgLyogUmV0dXJucyB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCAoYXQgbGVhc3QgcGFydGlhbGx5KSBwb2lzb25lZCBieXRlIGluIHRoZQorICAgICBtZW1vcnkgcmFuZ2UsIG9yIC0xIGlmIHRoZSB3aG9sZSByYW5nZSBpcyBnb29kLiAqLworICBpbnRwdHJfdCBfX21zYW5fdGVzdF9zaGFkb3coY29uc3Qgdm9sYXRpbGUgdm9pZCAqeCwgc2l6ZV90IHNpemUpOworCisgIC8qIENoZWNrcyB0aGF0IG1lbW9yeSByYW5nZSBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIHJlcG9ydHMgYW4gZXJyb3IgaWYgaXQKKyAgICogaXMgbm90LiAqLworICB2b2lkIF9fbXNhbl9jaGVja19tZW1faXNfaW5pdGlhbGl6ZWQoY29uc3Qgdm9sYXRpbGUgdm9pZCAqeCwgc2l6ZV90IHNpemUpOworCisgIC8qIEZvciB0ZXN0aW5nOgorICAgICBfX21zYW5fc2V0X2V4cGVjdF91bXIoMSk7CisgICAgIC4uLiBzb21lIGJ1Z2d5IGNvZGUgLi4uCisgICAgIF9fbXNhbl9zZXRfZXhwZWN0X3VtcigwKTsKKyAgICAgVGhlIGxhc3QgbGluZSB3aWxsIHZlcmlmeSB0aGF0IGEgVU1SIGhhcHBlbmVkLiAqLworICB2b2lkIF9fbXNhbl9zZXRfZXhwZWN0X3VtcihpbnQgZXhwZWN0X3Vtcik7CisKKyAgLyogQ2hhbmdlIHRoZSB2YWx1ZSBvZiBrZWVwX2dvaW5nIGZsYWcuIE5vbi16ZXJvIHZhbHVlIG1lYW5zIGRvbid0IHRlcm1pbmF0ZQorICAgICBwcm9ncmFtIGV4ZWN1dGlvbiB3aGVuIGFuIGVycm9yIGlzIGRldGVjdGVkLiBUaGlzIHdpbGwgbm90IGFmZmVjdCBlcnJvciBpbgorICAgICBtb2R1bGVzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRob3V0IHRoZSBjb3JyZXNwb25kaW5nIGNvbXBpbGVyIGZsYWcuICovCisgIHZvaWQgX19tc2FuX3NldF9rZWVwX2dvaW5nKGludCBrZWVwX2dvaW5nKTsKKworICAvKiBQcmludCBzaGFkb3cgYW5kIG9yaWdpbiBmb3IgdGhlIG1lbW9yeSByYW5nZSB0byBzdGRlcnIgaW4gYSBodW1hbi1yZWFkYWJsZQorICAgICBmb3JtYXQuICovCisgIHZvaWQgX19tc2FuX3ByaW50X3NoYWRvdyhjb25zdCB2b2xhdGlsZSB2b2lkICp4LCBzaXplX3Qgc2l6ZSk7CisKKyAgLyogUHJpbnQgc2hhZG93IGZvciB0aGUgbWVtb3J5IHJhbmdlIHRvIHN0ZGVyciBpbiBhIG1pbmltYWxpc3RpYworICAgICBodW1hbi1yZWFkYWJsZSBmb3JtYXQuICovCisgIHZvaWQgX19tc2FuX2R1bXBfc2hhZG93KGNvbnN0IHZvbGF0aWxlIHZvaWQgKngsIHNpemVfdCBzaXplKTsKKworICAvKiBSZXR1cm5zIHRydWUgaWYgcnVubmluZyB1bmRlciBhIGR5bmFtaWMgdG9vbCAoRHluYW1vUmlvLWJhc2VkKS4gKi8KKyAgaW50ICBfX21zYW5faGFzX2R5bmFtaWNfY29tcG9uZW50KCk7CisKKyAgLyogVGVsbCBNU2FuIGFib3V0IG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgKGV4LjogY3VzdG9tIGFsbG9jYXRvcikuCisgICAgIE1lbW9yeSB3aWxsIGJlIG1hcmtlZCB1bmluaXRpYWxpemVkLCB3aXRoIG9yaWdpbiBhdCB0aGUgY2FsbCBzaXRlLiAqLworICB2b2lkIF9fbXNhbl9hbGxvY2F0ZWRfbWVtb3J5KGNvbnN0IHZvbGF0aWxlIHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKKworICAvKiBUZWxsIE1TYW4gYWJvdXQgbmV3bHkgZGVzdHJveWVkIG1lbW9yeS4gTWFyayBtZW1vcnkgYXMgdW5pbml0aWFsaXplZC4gKi8KKyAgdm9pZCBfX3Nhbml0aXplcl9kdG9yX2NhbGxiYWNrKGNvbnN0IHZvbGF0aWxlIHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKKworICAvKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHVzZXIgYW5kIHNob3VsZCByZXR1cm4KKyAgICAgYSBzdHJpbmcgY29udGFpbmluZyBNc2FuIHJ1bnRpbWUgb3B0aW9ucy4gU2VlIG1zYW5fZmxhZ3MuaCBmb3IgZGV0YWlscy4gKi8KKyAgY29uc3QgY2hhciogX19tc2FuX2RlZmF1bHRfb3B0aW9ucygpOworCisgIC8qIERlcHJlY2F0ZWQuIENhbGwgX19zYW5pdGl6ZXJfc2V0X2RlYXRoX2NhbGxiYWNrIGluc3RlYWQuICovCisgIHZvaWQgX19tc2FuX3NldF9kZWF0aF9jYWxsYmFjayh2b2lkICgqY2FsbGJhY2spKHZvaWQpKTsKKworICAvKiBVcGRhdGUgc2hhZG93IGZvciB0aGUgYXBwbGljYXRpb24gY29weSBvZiBzaXplIGJ5dGVzIGZyb20gc3JjIHRvIGRzdC4KKyAgICAgU3JjIGFuZCBkc3QgYXJlIGFwcGxpY2F0aW9uIGFkZHJlc3Nlcy4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjb3B5IHRoZQorICAgICBhY3R1YWwgYXBwbGljYXRpb24gbWVtb3J5LCBpdCBvbmx5IHVwZGF0ZXMgc2hhZG93IGFuZCBvcmlnaW4gZm9yIHN1Y2gKKyAgICAgY29weS4gU291cmNlIGFuZCBkZXN0aW5hdGlvbiByZWdpb25zIGNhbiBvdmVybGFwLiAqLworICB2b2lkIF9fbXNhbl9jb3B5X3NoYWRvdyhjb25zdCB2b2xhdGlsZSB2b2lkICpkc3QsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3Nhbml0aXplci90c2FuX2ludGVyZmFjZV9hdG9taWMuaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc2FuaXRpemVyL3RzYW5faW50ZXJmYWNlX2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYTc3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3Nhbml0aXplci90c2FuX2ludGVyZmFjZV9hdG9taWMuaApAQCAtMCwwICsxLDIyMiBAQAorLy89PT0tLSB0c2FuX2ludGVyZmFjZV9hdG9taWMuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLSBDKysgLSotPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCisvLyBUaGlzIGZpbGUgaXMgYSBwYXJ0IG9mIFRocmVhZFNhbml0aXplciAoVFNhbiksIGEgcmFjZSBkZXRlY3Rvci4KKy8vCisvLyBQdWJsaWMgaW50ZXJmYWNlIGhlYWRlciBmb3IgVFNhbiBhdG9taWNzLgorLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKyNpZm5kZWYgVFNBTl9JTlRFUkZBQ0VfQVRPTUlDX0gKKyNkZWZpbmUgVFNBTl9JTlRFUkZBQ0VfQVRPTUlDX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIGNoYXIgICAgIF9fdHNhbl9hdG9taWM4OwordHlwZWRlZiBzaG9ydCAgICBfX3RzYW5fYXRvbWljMTY7ICAvLyBOT0xJTlQKK3R5cGVkZWYgaW50ICAgICAgX190c2FuX2F0b21pYzMyOwordHlwZWRlZiBsb25nICAgICBfX3RzYW5fYXRvbWljNjQ7ICAvLyBOT0xJTlQKKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEyOF9fKSBcCisgICAgfHwgKF9fY2xhbmdfbWFqb3JfXyAqIDEwMCArIF9fY2xhbmdfbWlub3JfXyA+PSAzMDIpCitfX2V4dGVuc2lvbl9fIHR5cGVkZWYgX19pbnQxMjggX190c2FuX2F0b21pYzEyODsKKyMgZGVmaW5lIF9fVFNBTl9IQVNfSU5UMTI4IDEKKyNlbHNlCisjIGRlZmluZSBfX1RTQU5fSEFTX0lOVDEyOCAwCisjZW5kaWYKKworLy8gUGFydCBvZiBBQkksIGRvIG5vdCBjaGFuZ2UuCisvLyBodHRwOi8vbGx2bS5vcmcvdmlld3ZjL2xsdm0tcHJvamVjdC9saWJjeHgvdHJ1bmsvaW5jbHVkZS9hdG9taWM/dmlldz1tYXJrdXAKK3R5cGVkZWYgZW51bSB7CisgIF9fdHNhbl9tZW1vcnlfb3JkZXJfcmVsYXhlZCwKKyAgX190c2FuX21lbW9yeV9vcmRlcl9jb25zdW1lLAorICBfX3RzYW5fbWVtb3J5X29yZGVyX2FjcXVpcmUsCisgIF9fdHNhbl9tZW1vcnlfb3JkZXJfcmVsZWFzZSwKKyAgX190c2FuX21lbW9yeV9vcmRlcl9hY3FfcmVsLAorICBfX3RzYW5fbWVtb3J5X29yZGVyX3NlcV9jc3QKK30gX190c2FuX21lbW9yeV9vcmRlcjsKKworX190c2FuX2F0b21pYzggX190c2FuX2F0b21pYzhfbG9hZChjb25zdCB2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwKKyAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfbG9hZChjb25zdCB2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljMzIgX190c2FuX2F0b21pYzMyX2xvYWQoY29uc3Qgdm9sYXRpbGUgX190c2FuX2F0b21pYzMyICphLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9sb2FkKGNvbnN0IHZvbGF0aWxlIF9fdHNhbl9hdG9taWM2NCAqYSwKKyAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAorX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2xvYWQoY29uc3Qgdm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKKyAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNlbmRpZgorCit2b2lkIF9fdHNhbl9hdG9taWM4X3N0b3JlKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLCBfX3RzYW5fYXRvbWljOCB2LAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOwordm9pZCBfX3RzYW5fYXRvbWljMTZfc3RvcmUodm9sYXRpbGUgX190c2FuX2F0b21pYzE2ICphLCBfX3RzYW5fYXRvbWljMTYgdiwKKyAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK3ZvaWQgX190c2FuX2F0b21pYzMyX3N0b3JlKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMzMiAqYSwgX190c2FuX2F0b21pYzMyIHYsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbyk7Cit2b2lkIF9fdHNhbl9hdG9taWM2NF9zdG9yZSh2b2xhdGlsZSBfX3RzYW5fYXRvbWljNjQgKmEsIF9fdHNhbl9hdG9taWM2NCB2LAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2lmIF9fVFNBTl9IQVNfSU5UMTI4Cit2b2lkIF9fdHNhbl9hdG9taWMxMjhfc3RvcmUodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwgX190c2FuX2F0b21pYzEyOCB2LAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2VuZGlmCisKK19fdHNhbl9hdG9taWM4IF9fdHNhbl9hdG9taWM4X2V4Y2hhbmdlKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLAorICAgIF9fdHNhbl9hdG9taWM4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzE2IF9fdHNhbl9hdG9taWMxNl9leGNoYW5nZSh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCisgICAgX190c2FuX2F0b21pYzE2IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzMyIF9fdHNhbl9hdG9taWMzMl9leGNoYW5nZSh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCisgICAgX190c2FuX2F0b21pYzMyIHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9leGNoYW5nZSh2b2xhdGlsZSBfX3RzYW5fYXRvbWljNjQgKmEsCisgICAgX190c2FuX2F0b21pYzY0IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2lmIF9fVFNBTl9IQVNfSU5UMTI4CitfX3RzYW5fYXRvbWljMTI4IF9fdHNhbl9hdG9taWMxMjhfZXhjaGFuZ2Uodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTI4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2VuZGlmCisKK19fdHNhbl9hdG9taWM4IF9fdHNhbl9hdG9taWM4X2ZldGNoX2FkZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfZmV0Y2hfYWRkKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxNiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTYgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljMzIgX190c2FuX2F0b21pYzMyX2ZldGNoX2FkZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCisgICAgX190c2FuX2F0b21pYzMyIHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9mZXRjaF9hZGQodm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLAorICAgIF9fdHNhbl9hdG9taWM2NCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAorX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2ZldGNoX2FkZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTI4ICphLAorICAgIF9fdHNhbl9hdG9taWMxMjggdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CisjZW5kaWYKKworX190c2FuX2F0b21pYzggX190c2FuX2F0b21pYzhfZmV0Y2hfc3ViKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLAorICAgIF9fdHNhbl9hdG9taWM4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzE2IF9fdHNhbl9hdG9taWMxNl9mZXRjaF9zdWIodm9sYXRpbGUgX190c2FuX2F0b21pYzE2ICphLAorICAgIF9fdHNhbl9hdG9taWMxNiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWMzMiBfX3RzYW5fYXRvbWljMzJfZmV0Y2hfc3ViKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMzMiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMzIgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljNjQgX190c2FuX2F0b21pYzY0X2ZldGNoX3N1Yih2b2xhdGlsZSBfX3RzYW5fYXRvbWljNjQgKmEsCisgICAgX190c2FuX2F0b21pYzY0IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2lmIF9fVFNBTl9IQVNfSU5UMTI4CitfX3RzYW5fYXRvbWljMTI4IF9fdHNhbl9hdG9taWMxMjhfZmV0Y2hfc3ViKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsCisgICAgX190c2FuX2F0b21pYzEyOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNlbmRpZgorCitfX3RzYW5fYXRvbWljOCBfX3RzYW5fYXRvbWljOF9mZXRjaF9hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzggKmEsCisgICAgX190c2FuX2F0b21pYzggdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljMTYgX190c2FuX2F0b21pYzE2X2ZldGNoX2FuZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCisgICAgX190c2FuX2F0b21pYzE2IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzMyIF9fdHNhbl9hdG9taWMzMl9mZXRjaF9hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzMyICphLAorICAgIF9fdHNhbl9hdG9taWMzMiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWM2NCBfX3RzYW5fYXRvbWljNjRfZmV0Y2hfYW5kKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM2NCAqYSwKKyAgICBfX3RzYW5fYXRvbWljNjQgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CisjaWYgX19UU0FOX0hBU19JTlQxMjgKK19fdHNhbl9hdG9taWMxMjggX190c2FuX2F0b21pYzEyOF9mZXRjaF9hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTI4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2VuZGlmCisKK19fdHNhbl9hdG9taWM4IF9fdHNhbl9hdG9taWM4X2ZldGNoX29yKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLAorICAgIF9fdHNhbl9hdG9taWM4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzE2IF9fdHNhbl9hdG9taWMxNl9mZXRjaF9vcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCisgICAgX190c2FuX2F0b21pYzE2IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzMyIF9fdHNhbl9hdG9taWMzMl9mZXRjaF9vcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCisgICAgX190c2FuX2F0b21pYzMyIHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9mZXRjaF9vcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljNjQgKmEsCisgICAgX190c2FuX2F0b21pYzY0IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2lmIF9fVFNBTl9IQVNfSU5UMTI4CitfX3RzYW5fYXRvbWljMTI4IF9fdHNhbl9hdG9taWMxMjhfZmV0Y2hfb3Iodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTI4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2VuZGlmCisKK19fdHNhbl9hdG9taWM4IF9fdHNhbl9hdG9taWM4X2ZldGNoX3hvcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfZmV0Y2hfeG9yKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxNiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTYgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljMzIgX190c2FuX2F0b21pYzMyX2ZldGNoX3hvcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCisgICAgX190c2FuX2F0b21pYzMyIHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9mZXRjaF94b3Iodm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLAorICAgIF9fdHNhbl9hdG9taWM2NCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAorX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2ZldGNoX3hvcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTI4ICphLAorICAgIF9fdHNhbl9hdG9taWMxMjggdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CisjZW5kaWYKKworX190c2FuX2F0b21pYzggX190c2FuX2F0b21pYzhfZmV0Y2hfbmFuZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfZmV0Y2hfbmFuZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCisgICAgX190c2FuX2F0b21pYzE2IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzMyIF9fdHNhbl9hdG9taWMzMl9mZXRjaF9uYW5kKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMzMiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMzIgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljNjQgX190c2FuX2F0b21pYzY0X2ZldGNoX25hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLAorICAgIF9fdHNhbl9hdG9taWM2NCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAorX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2ZldGNoX25hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTI4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2VuZGlmCisKK2ludCBfX3RzYW5fYXRvbWljOF9jb21wYXJlX2V4Y2hhbmdlX3dlYWsodm9sYXRpbGUgX190c2FuX2F0b21pYzggKmEsCisgICAgX190c2FuX2F0b21pYzggKmMsIF9fdHNhbl9hdG9taWM4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8sCisgICAgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKK2ludCBfX3RzYW5fYXRvbWljMTZfY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxNiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTYgKmMsIF9fdHNhbl9hdG9taWMxNiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CitpbnQgX190c2FuX2F0b21pYzMyX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vhayh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCisgICAgX190c2FuX2F0b21pYzMyICpjLCBfX3RzYW5fYXRvbWljMzIgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbywKKyAgICBfX3RzYW5fbWVtb3J5X29yZGVyIGZhaWxfbW8pOworaW50IF9fdHNhbl9hdG9taWM2NF9jb21wYXJlX2V4Y2hhbmdlX3dlYWsodm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLAorICAgIF9fdHNhbl9hdG9taWM2NCAqYywgX190c2FuX2F0b21pYzY0IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8sCisgICAgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAoraW50IF9fdHNhbl9hdG9taWMxMjhfY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsCisgICAgX190c2FuX2F0b21pYzEyOCAqYywgX190c2FuX2F0b21pYzEyOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CisjZW5kaWYKKworaW50IF9fdHNhbl9hdG9taWM4X2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLAorICAgIF9fdHNhbl9hdG9taWM4ICpjLCBfX3RzYW5fYXRvbWljOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CitpbnQgX190c2FuX2F0b21pYzE2X2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxNiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTYgKmMsIF9fdHNhbl9hdG9taWMxNiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CitpbnQgX190c2FuX2F0b21pYzMyX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMzMiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMzIgKmMsIF9fdHNhbl9hdG9taWMzMiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CitpbnQgX190c2FuX2F0b21pYzY0X2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM2NCAqYSwKKyAgICBfX3RzYW5fYXRvbWljNjQgKmMsIF9fdHNhbl9hdG9taWM2NCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CisjaWYgX19UU0FOX0hBU19JTlQxMjgKK2ludCBfX3RzYW5fYXRvbWljMTI4X2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsCisgICAgX190c2FuX2F0b21pYzEyOCAqYywgX190c2FuX2F0b21pYzEyOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CisjZW5kaWYKKworX190c2FuX2F0b21pYzggX190c2FuX2F0b21pYzhfY29tcGFyZV9leGNoYW5nZV92YWwoCisgICAgdm9sYXRpbGUgX190c2FuX2F0b21pYzggKmEsIF9fdHNhbl9hdG9taWM4IGMsIF9fdHNhbl9hdG9taWM4IHYsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbywgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKK19fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfY29tcGFyZV9leGNoYW5nZV92YWwoCisgICAgdm9sYXRpbGUgX190c2FuX2F0b21pYzE2ICphLCBfX3RzYW5fYXRvbWljMTYgYywgX190c2FuX2F0b21pYzE2IHYsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbywgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKK19fdHNhbl9hdG9taWMzMiBfX3RzYW5fYXRvbWljMzJfY29tcGFyZV9leGNoYW5nZV92YWwoCisgICAgdm9sYXRpbGUgX190c2FuX2F0b21pYzMyICphLCBfX3RzYW5fYXRvbWljMzIgYywgX190c2FuX2F0b21pYzMyIHYsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbywgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKK19fdHNhbl9hdG9taWM2NCBfX3RzYW5fYXRvbWljNjRfY29tcGFyZV9leGNoYW5nZV92YWwoCisgICAgdm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLCBfX3RzYW5fYXRvbWljNjQgYywgX190c2FuX2F0b21pYzY0IHYsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbywgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAorX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2NvbXBhcmVfZXhjaGFuZ2VfdmFsKAorICAgIHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsIF9fdHNhbl9hdG9taWMxMjggYywgX190c2FuX2F0b21pYzEyOCB2LAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8sIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CisjZW5kaWYKKwordm9pZCBfX3RzYW5fYXRvbWljX3RocmVhZF9mZW5jZShfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK3ZvaWQgX190c2FuX2F0b21pY19zaWduYWxfZmVuY2UoX190c2FuX21lbW9yeV9vcmRlciBtbyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gVFNBTl9JTlRFUkZBQ0VfQVRPTUlDX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc2hhaW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3NoYWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNWQyMTgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3NoYWludHJpbi5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qPT09LS0tLSBzaGFpbnRyaW4uaCAtIFNIQSBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPHNoYWludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19TSEFJTlRSSU5fSAorI2RlZmluZSBfX1NIQUlOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygic2hhIikpKQorCisjZGVmaW5lIF9tbV9zaGExcm5kczRfZXB1MzIoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2hhMXJuZHM0KChfX3Y0c2kpKF9fbTEyOGkpKFYxKSwgKF9fdjRzaSkoX19tMTI4aSkoVjIpLCAoTSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYTFuZXh0ZV9lcHUzMihfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zaGExbmV4dGUoKF9fdjRzaSlfX1gsIChfX3Y0c2kpX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaGExbXNnMV9lcHUzMihfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zaGExbXNnMSgoX192NHNpKV9fWCwgKF9fdjRzaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYTFtc2cyX2VwdTMyKF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NoYTFtc2cyKChfX3Y0c2kpX19YLCAoX192NHNpKV9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2hhMjU2cm5kczJfZXB1MzIoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZLCBfX20xMjhpIF9fWikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NoYTI1NnJuZHMyKChfX3Y0c2kpX19YLCAoX192NHNpKV9fWSwgKF9fdjRzaSlfX1opOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYTI1Nm1zZzFfZXB1MzIoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2hhMjU2bXNnMSgoX192NHNpKV9fWCwgKF9fdjRzaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYTI1Nm1zZzJfZXB1MzIoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2hhMjU2bXNnMigoX192NHNpKV9fWCwgKF9fdjRzaSlfX1kpOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX1NIQUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3NtbWludHJpbi5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zbW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDhhYjAzCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zbW1pbnRyaW4uaApAQCAtMCwwICsxLDUwNyBAQAorLyo9PT0tLS0tIHNtbWludHJpbi5oIC0gU1NFNCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfU01NSU5UUklOX0gKKyNkZWZpbmUgX1NNTUlOVFJJTl9ICisKKyNpbmNsdWRlIDx0bW1pbnRyaW4uaD4KKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJzc2U0LjEiKSkpCisKKy8qIFNTRTQgUm91bmRpbmcgbWFjcm9zLiAqLworI2RlZmluZSBfTU1fRlJPVU5EX1RPX05FQVJFU1RfSU5UICAgIDB4MDAKKyNkZWZpbmUgX01NX0ZST1VORF9UT19ORUdfSU5GICAgICAgICAweDAxCisjZGVmaW5lIF9NTV9GUk9VTkRfVE9fUE9TX0lORiAgICAgICAgMHgwMgorI2RlZmluZSBfTU1fRlJPVU5EX1RPX1pFUk8gICAgICAgICAgIDB4MDMKKyNkZWZpbmUgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OICAgICAweDA0CisKKyNkZWZpbmUgX01NX0ZST1VORF9SQUlTRV9FWEMgICAgICAgICAweDAwCisjZGVmaW5lIF9NTV9GUk9VTkRfTk9fRVhDICAgICAgICAgICAgMHgwOAorCisjZGVmaW5lIF9NTV9GUk9VTkRfTklOVCAgICAgIChfTU1fRlJPVU5EX1JBSVNFX0VYQyB8IF9NTV9GUk9VTkRfVE9fTkVBUkVTVF9JTlQpCisjZGVmaW5lIF9NTV9GUk9VTkRfRkxPT1IgICAgIChfTU1fRlJPVU5EX1JBSVNFX0VYQyB8IF9NTV9GUk9VTkRfVE9fTkVHX0lORikKKyNkZWZpbmUgX01NX0ZST1VORF9DRUlMICAgICAgKF9NTV9GUk9VTkRfUkFJU0VfRVhDIHwgX01NX0ZST1VORF9UT19QT1NfSU5GKQorI2RlZmluZSBfTU1fRlJPVU5EX1RSVU5DICAgICAoX01NX0ZST1VORF9SQUlTRV9FWEMgfCBfTU1fRlJPVU5EX1RPX1pFUk8pCisjZGVmaW5lIF9NTV9GUk9VTkRfUklOVCAgICAgIChfTU1fRlJPVU5EX1JBSVNFX0VYQyB8IF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKyNkZWZpbmUgX01NX0ZST1VORF9ORUFSQllJTlQgKF9NTV9GUk9VTkRfTk9fRVhDIHwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbV9jZWlsX3BzKFgpICAgICAgIF9tbV9yb3VuZF9wcygoWCksIF9NTV9GUk9VTkRfQ0VJTCkKKyNkZWZpbmUgX21tX2NlaWxfcGQoWCkgICAgICAgX21tX3JvdW5kX3BkKChYKSwgX01NX0ZST1VORF9DRUlMKQorI2RlZmluZSBfbW1fY2VpbF9zcyhYLCBZKSAgICBfbW1fcm91bmRfc3MoKFgpLCAoWSksIF9NTV9GUk9VTkRfQ0VJTCkKKyNkZWZpbmUgX21tX2NlaWxfc2QoWCwgWSkgICAgX21tX3JvdW5kX3NkKChYKSwgKFkpLCBfTU1fRlJPVU5EX0NFSUwpCisKKyNkZWZpbmUgX21tX2Zsb29yX3BzKFgpICAgICAgX21tX3JvdW5kX3BzKChYKSwgX01NX0ZST1VORF9GTE9PUikKKyNkZWZpbmUgX21tX2Zsb29yX3BkKFgpICAgICAgX21tX3JvdW5kX3BkKChYKSwgX01NX0ZST1VORF9GTE9PUikKKyNkZWZpbmUgX21tX2Zsb29yX3NzKFgsIFkpICAgX21tX3JvdW5kX3NzKChYKSwgKFkpLCBfTU1fRlJPVU5EX0ZMT09SKQorI2RlZmluZSBfbW1fZmxvb3Jfc2QoWCwgWSkgICBfbW1fcm91bmRfc2QoKFgpLCAoWSksIF9NTV9GUk9VTkRfRkxPT1IpCisKKyNkZWZpbmUgX21tX3JvdW5kX3BzKFgsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JvdW5kcHMoKF9fdjRzZikoX19tMTI4KShYKSwgKE0pKTsgfSkKKworI2RlZmluZSBfbW1fcm91bmRfc3MoWCwgWSwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcm91bmRzcygoX192NHNmKShfX20xMjgpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFkpLCAoTSkpOyB9KQorCisjZGVmaW5lIF9tbV9yb3VuZF9wZChYLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcm91bmRwZCgoX192MmRmKShfX20xMjhkKShYKSwgKE0pKTsgfSkKKworI2RlZmluZSBfbW1fcm91bmRfc2QoWCwgWSwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JvdW5kc2QoKF9fdjJkZikoX19tMTI4ZCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShZKSwgKE0pKTsgfSkKKworLyogU1NFNCBQYWNrZWQgQmxlbmRpbmcgSW50cmluc2ljcy4gICovCisjZGVmaW5lIF9tbV9ibGVuZF9wZChWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRmKShfX20xMjhkKShWMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVjIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMSkgPyAyIDogMCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAyKSA/IDMgOiAxKSk7IH0pCisKKyNkZWZpbmUgX21tX2JsZW5kX3BzKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZikoX19tMTI4KShWMSksIChfX3Y0c2YpKF9fbTEyOCkoVjIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAxKSA/IDQgOiAwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMikgPyA1IDogMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDQpID8gNiA6IDIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA4KSA/IDcgOiAzKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYmxlbmR2X3BkIChfX20xMjhkIF9fVjEsIF9fbTEyOGQgX19WMiwgX19tMTI4ZCBfX00pCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYmxlbmR2cGQgKChfX3YyZGYpX19WMSwgKF9fdjJkZilfX1YyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9ibGVuZHZfcHMgKF9fbTEyOCBfX1YxLCBfX20xMjggX19WMiwgX19tMTI4IF9fTSkKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2JsZW5kdnBzICgoX192NHNmKV9fVjEsIChfX3Y0c2YpX19WMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYmxlbmR2X2VwaTggKF9fbTEyOGkgX19WMSwgX19tMTI4aSBfX1YyLCBfX20xMjhpIF9fTSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYmxlbmR2YjEyOCAoKF9fdjE2cWkpX19WMSwgKF9fdjE2cWkpX19WMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX19NKTsKK30KKworI2RlZmluZSBfbW1fYmxlbmRfZXBpMTYoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSkoX19tMTI4aSkoVjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKFYyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDEpID8gIDggOiAwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDIpID8gIDkgOiAxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDQpID8gMTAgOiAyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDgpID8gMTEgOiAzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MTApID8gMTIgOiA0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MjApID8gMTMgOiA1KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4NDApID8gMTQgOiA2KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4ODApID8gMTUgOiA3KSk7IH0pCisKKy8qIFNTRTQgRHdvcmQgTXVsdGlwbHkgSW5zdHJ1Y3Rpb25zLiAgKi8KK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX211bGxvX2VwaTMyIChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSAoKF9fdjRzdSlfX1YxICogKF9fdjRzdSlfX1YyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsX2VwaTMyIChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsZHExMjggKChfX3Y0c2kpX19WMSwgKF9fdjRzaSlfX1YyKTsKK30KKworLyogU1NFNCBGbG9hdGluZyBQb2ludCBEb3QgUHJvZHVjdCBJbnN0cnVjdGlvbnMuICAqLworI2RlZmluZSBfbW1fZHBfcHMoWCwgWSwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2RwcHMoKF9fdjRzZikoX19tMTI4KShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoWSksIChNKSk7IH0pCisKKyNkZWZpbmUgX21tX2RwX3BkKFgsIFksIE0pIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9kcHBkKChfX3YyZGYpKF9fbTEyOGQpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFkpLCAoTSkpOyB9KQorCisvKiBTU0U0IFN0cmVhbWluZyBMb2FkIEhpbnQgSW5zdHJ1Y3Rpb24uICAqLworc3RhdGljIF9faW5saW5lX18gIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RyZWFtX2xvYWRfc2kxMjggKF9fbTEyOGkgY29uc3QgKl9fVikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9tb3ZudGRxYSAoKGNvbnN0IF9fdjJkaSAqKSBfX1YpOworfQorCisvKiBTU0U0IFBhY2tlZCBJbnRlZ2VyIE1pbi9NYXggSW5zdHJ1Y3Rpb25zLiAgKi8KK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21pbl9lcGk4IChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWluc2IxMjggKChfX3YxNnFpKSBfX1YxLCAoX192MTZxaSkgX19WMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9lcGk4IChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2IxMjggKChfX3YxNnFpKSBfX1YxLCAoX192MTZxaSkgX19WMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21pbl9lcHUxNiAoX19tMTI4aSBfX1YxLCBfX20xMjhpIF9fVjIpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnV3MTI4ICgoX192OGhpKSBfX1YxLCAoX192OGhpKSBfX1YyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWF4X2VwdTE2IChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXcxMjggKChfX3Y4aGkpIF9fVjEsIChfX3Y4aGkpIF9fVjIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyAgX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9taW5fZXBpMzIgKF9fbTEyOGkgX19WMSwgX19tMTI4aSBfX1YyKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zZDEyOCAoKF9fdjRzaSkgX19WMSwgKF9fdjRzaSkgX19WMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9lcGkzMiAoX19tMTI4aSBfX1YxLCBfX20xMjhpIF9fVjIpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHNkMTI4ICgoX192NHNpKSBfX1YxLCAoX192NHNpKSBfX1YyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX2VwdTMyIChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWludWQxMjgoKF9fdjRzaSkgX19WMSwgKF9fdjRzaSkgX19WMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9lcHUzMiAoX19tMTI4aSBfX1YxLCBfX20xMjhpIF9fVjIpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHVkMTI4KChfX3Y0c2kpIF9fVjEsIChfX3Y0c2kpIF9fVjIpOworfQorCisvKiBTU0U0IEluc2VydGlvbiBhbmQgRXh0cmFjdGlvbiBmcm9tIFhNTSBSZWdpc3RlciBJbnN0cnVjdGlvbnMuICAqLworI2RlZmluZSBfbW1faW5zZXJ0X3BzKFgsIFksIE4pIF9fYnVpbHRpbl9pYTMyX2luc2VydHBzMTI4KChYKSwgKFkpLCAoTikpCisjZGVmaW5lIF9tbV9leHRyYWN0X3BzKFgsIE4pIChfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7IHVuaW9uIHsgaW50IF9faTsgZmxvYXQgX19mOyB9IF9fdDsgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdjRzZiBfX2EgPSAoX192NHNmKShfX20xMjgpKFgpOyAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3QuX19mID0gX19hWyhOKSAmIDNdOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Ll9faTt9KSkKKworLyogTWlzY2VsbGFuZW91cyBpbnNlcnQgYW5kIGV4dHJhY3QgbWFjcm9zLiAgKi8KKy8qIEV4dHJhY3QgYSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0IGZyb20gWCBhdCBpbmRleCBOIGludG8gRC4gICovCisjZGVmaW5lIF9NTV9FWFRSQUNUX0ZMT0FUKEQsIFgsIE4pIChfX2V4dGVuc2lvbl9fICh7IF9fdjRzZiBfX2EgPSAoX192NHNmKShYKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEKSA9IF9fYVtOXTsgfSkpCisKKy8qIE9yIHRvZ2V0aGVyIDIgc2V0cyBvZiBpbmRleGVzIChYIGFuZCBZKSB3aXRoIHRoZSB6ZXJvaW5nIGJpdHMgKFopIHRvIGNyZWF0ZQorICAgYW4gaW5kZXggc3VpdGFibGUgZm9yIF9tbV9pbnNlcnRfcHMuICAqLworI2RlZmluZSBfTU1fTUtfSU5TRVJUUFNfTkRYKFgsIFksIFopICgoKFgpIDw8IDYpIHwgKChZKSA8PCA0KSB8IChaKSkKKworLyogRXh0cmFjdCBhIGZsb2F0IGZyb20gWCBhdCBpbmRleCBOIGludG8gdGhlIGZpcnN0IGluZGV4IG9mIHRoZSByZXR1cm4uICAqLworI2RlZmluZSBfTU1fUElDS19PVVRfUFMoWCwgTikgX21tX2luc2VydF9wcyAoX21tX3NldHplcm9fcHMoKSwgKFgpLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9NS19JTlNFUlRQU19ORFgoKE4pLCAwLCAweDBlKSkKKworLyogSW5zZXJ0IGludCBpbnRvIHBhY2tlZCBpbnRlZ2VyIGFycmF5IGF0IGluZGV4LiAgKi8KKyNkZWZpbmUgX21tX2luc2VydF9lcGk4KFgsIEksIE4pIChfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7IF9fdjE2cWkgX19hID0gKF9fdjE2cWkpKF9fbTEyOGkpKFgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hWyhOKSAmIDE1XSA9IChJKTsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tMTI4aSlfX2E7fSkpCisjZGVmaW5lIF9tbV9pbnNlcnRfZXBpMzIoWCwgSSwgTikgKF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeyBfX3Y0c2kgX19hID0gKF9fdjRzaSkoX19tMTI4aSkoWCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hWyhOKSAmIDNdID0gKEkpOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX20xMjhpKV9fYTt9KSkKKyNpZmRlZiBfX3g4Nl82NF9fCisjZGVmaW5lIF9tbV9pbnNlcnRfZXBpNjQoWCwgSSwgTikgKF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeyBfX3YyZGkgX19hID0gKF9fdjJkaSkoX19tMTI4aSkoWCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hWyhOKSAmIDFdID0gKEkpOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX20xMjhpKV9fYTt9KSkKKyNlbmRpZiAvKiBfX3g4Nl82NF9fICovCisKKy8qIEV4dHJhY3QgaW50IGZyb20gcGFja2VkIGludGVnZXIgYXJyYXkgYXQgaW5kZXguICBUaGlzIHJldHVybnMgdGhlIGVsZW1lbnQKKyAqIGFzIGEgemVybyBleHRlbmRlZCB2YWx1ZSwgc28gaXQgaXMgdW5zaWduZWQuCisgKi8KKyNkZWZpbmUgX21tX2V4dHJhY3RfZXBpOChYLCBOKSAoX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHsgX192MTZxaSBfX2EgPSAoX192MTZxaSkoX19tMTI4aSkoWCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkodW5zaWduZWQgY2hhcikgX19hWyhOKSAmIDE1XTt9KSkKKyNkZWZpbmUgX21tX2V4dHJhY3RfZXBpMzIoWCwgTikgKF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHsgX192NHNpIF9fYSA9IChfX3Y0c2kpKF9fbTEyOGkpKFgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KV9fYVsoTikgJiAzXTt9KSkKKyNpZmRlZiBfX3g4Nl82NF9fCisjZGVmaW5lIF9tbV9leHRyYWN0X2VwaTY0KFgsIE4pIChfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7IF9fdjJkaSBfX2EgPSAoX192MmRpKShfX20xMjhpKShYKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZylfX2FbKE4pICYgMV07fSkpCisjZW5kaWYgLyogX194ODZfNjQgKi8KKworLyogU1NFNCAxMjgtYml0IFBhY2tlZCBJbnRlZ2VyIENvbXBhcmlzb25zLiAgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV90ZXN0el9zaTEyOChfX20xMjhpIF9fTSwgX19tMTI4aSBfX1YpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wdGVzdHoxMjgoKF9fdjJkaSlfX00sIChfX3YyZGkpX19WKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Rlc3RjX3NpMTI4KF9fbTEyOGkgX19NLCBfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3B0ZXN0YzEyOCgoX192MmRpKV9fTSwgKF9fdjJkaSlfX1YpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdGVzdG56Y19zaTEyOChfX20xMjhpIF9fTSwgX19tMTI4aSBfX1YpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wdGVzdG56YzEyOCgoX192MmRpKV9fTSwgKF9fdjJkaSlfX1YpOworfQorCisjZGVmaW5lIF9tbV90ZXN0X2FsbF9vbmVzKFYpIF9tbV90ZXN0Y19zaTEyOCgoViksIF9tbV9jbXBlcV9lcGkzMigoViksIChWKSkpCisjZGVmaW5lIF9tbV90ZXN0X21peF9vbmVzX3plcm9zKE0sIFYpIF9tbV90ZXN0bnpjX3NpMTI4KChNKSwgKFYpKQorI2RlZmluZSBfbW1fdGVzdF9hbGxfemVyb3MoTSwgVikgX21tX3Rlc3R6X3NpMTI4ICgoTSksIChWKSkKKworLyogU1NFNCA2NC1iaXQgUGFja2VkIEludGVnZXIgQ29tcGFyaXNvbnMuICAqLworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9lcGk2NChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192MmRpKV9fVjEgPT0gKF9fdjJkaSlfX1YyKTsKK30KKworLyogU1NFNCBQYWNrZWQgSW50ZWdlciBTaWduLUV4dGVuc2lvbi4gICovCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaThfZXBpMTYoX19tMTI4aSBfX1YpCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGV4dGVuc2lvbiwgYnV0IF9fdjE2cWkgaXMgYSBjaGFyCisgICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YxNnFzLiAqLworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cXMpX19WLCAoX192MTZxcylfX1YsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpLCBfX3Y4aGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaThfZXBpMzIoX19tMTI4aSBfX1YpCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGV4dGVuc2lvbiwgYnV0IF9fdjE2cWkgaXMgYSBjaGFyCisgICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YxNnFzLiAqLworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cXMpX19WLCAoX192MTZxcylfX1YsIDAsIDEsIDIsIDMpLCBfX3Y0c2kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaThfZXBpNjQoX19tMTI4aSBfX1YpCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGV4dGVuc2lvbiwgYnV0IF9fdjE2cWkgaXMgYSBjaGFyCisgICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YxNnFzLiAqLworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cXMpX19WLCAoX192MTZxcylfX1YsIDAsIDEpLCBfX3YyZGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaTE2X2VwaTMyKF9fbTEyOGkgX19WKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSlfX1YsIChfX3Y4aGkpX19WLCAwLCAxLCAyLCAzKSwgX192NHNpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcGkxNl9lcGk2NChfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4aGkpX19WLCAoX192OGhpKV9fViwgMCwgMSksIF9fdjJkaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXBpMzJfZXBpNjQoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNpKV9fViwgKF9fdjRzaSlfX1YsIDAsIDEpLCBfX3YyZGkpOworfQorCisvKiBTU0U0IFBhY2tlZCBJbnRlZ2VyIFplcm8tRXh0ZW5zaW9uLiAgKi8KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXB1OF9lcGkxNihfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnF1KV9fViwgKF9fdjE2cXUpX19WLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KSwgX192OGhpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcHU4X2VwaTMyKF9fbTEyOGkgX19WKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cXUpX19WLCAoX192MTZxdSlfX1YsIDAsIDEsIDIsIDMpLCBfX3Y0c2kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwdThfZXBpNjQoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZxdSlfX1YsIChfX3YxNnF1KV9fViwgMCwgMSksIF9fdjJkaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXB1MTZfZXBpMzIoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGh1KV9fViwgKF9fdjhodSlfX1YsIDAsIDEsIDIsIDMpLCBfX3Y0c2kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwdTE2X2VwaTY0KF9fbTEyOGkgX19WKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhodSlfX1YsIChfX3Y4aHUpX19WLCAwLCAxKSwgX192MmRpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcHUzMl9lcGk2NChfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c3UpX19WLCAoX192NHN1KV9fViwgMCwgMSksIF9fdjJkaSk7Cit9CisKKy8qIFNTRTQgUGFjayB3aXRoIFVuc2lnbmVkIFNhdHVyYXRpb24uICAqLworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9wYWNrdXNfZXBpMzIoX19tMTI4aSBfX1YxLCBfX20xMjhpIF9fVjIpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFja3VzZHcxMjgoKF9fdjRzaSlfX1YxLCAoX192NHNpKV9fVjIpOworfQorCisvKiBTU0U0IE11bHRpcGxlIFBhY2tlZCBTdW1zIG9mIEFic29sdXRlIERpZmZlcmVuY2UuICAqLworI2RlZmluZSBfbW1fbXBzYWRid19lcHU4KFgsIFksIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfbXBzYWRidzEyOCgoX192MTZxaSkoX19tMTI4aSkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKFkpLCAoTSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21pbnBvc19lcHUxNihfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9waG1pbnBvc3V3MTI4KChfX3Y4aGkpX19WKTsKK30KKworLyogSGFuZGxlIHRoZSBzc2U0LjIgZGVmaW5pdGlvbnMgaGVyZS4gKi8KKworLyogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIG5vcm1hbGx5IGluIG5tbWludHJpbi5oLCBidXQgZ2NjIHB1dHMgdGhlbSBpbiBoZXJlCisgICBzbyB3ZSdsbCBkbyB0aGUgc2FtZS4gICovCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygic3NlNC4yIikpKQorCisvKiBUaGVzZSBzcGVjaWZ5IHRoZSB0eXBlIG9mIGRhdGEgdGhhdCB3ZSdyZSBjb21wYXJpbmcuICAqLworI2RlZmluZSBfU0lERF9VQllURV9PUFMgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgX1NJRERfVVdPUkRfT1BTICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIF9TSUREX1NCWVRFX09QUyAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBfU0lERF9TV09SRF9PUFMgICAgICAgICAgICAgICAgIDB4MDMKKworLyogVGhlc2Ugc3BlY2lmeSB0aGUgdHlwZSBvZiBjb21wYXJpc29uIG9wZXJhdGlvbi4gICovCisjZGVmaW5lIF9TSUREX0NNUF9FUVVBTF9BTlkgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBfU0lERF9DTVBfUkFOR0VTICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgX1NJRERfQ01QX0VRVUFMX0VBQ0ggICAgICAgICAgICAweDA4CisjZGVmaW5lIF9TSUREX0NNUF9FUVVBTF9PUkRFUkVEICAgICAgICAgMHgwYworCisvKiBUaGVzZSBtYWNyb3Mgc3BlY2lmeSB0aGUgcG9sYXJpdHkgb2YgdGhlIG9wZXJhdGlvbi4gICovCisjZGVmaW5lIF9TSUREX1BPU0lUSVZFX1BPTEFSSVRZICAgICAgICAgMHgwMAorI2RlZmluZSBfU0lERF9ORUdBVElWRV9QT0xBUklUWSAgICAgICAgIDB4MTAKKyNkZWZpbmUgX1NJRERfTUFTS0VEX1BPU0lUSVZFX1BPTEFSSVRZICAweDIwCisjZGVmaW5lIF9TSUREX01BU0tFRF9ORUdBVElWRV9QT0xBUklUWSAgMHgzMAorCisvKiBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgaW4gX21tX2NtcFhzdHJpKCkgdG8gc3BlY2lmeSB0aGUgcmV0dXJuLiAgKi8KKyNkZWZpbmUgX1NJRERfTEVBU1RfU0lHTklGSUNBTlQgICAgICAgICAweDAwCisjZGVmaW5lIF9TSUREX01PU1RfU0lHTklGSUNBTlQgICAgICAgICAgMHg0MAorCisvKiBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgaW4gX21tX2NtcFhzdHJpKCkgdG8gc3BlY2lmeSB0aGUgcmV0dXJuLiAgKi8KKyNkZWZpbmUgX1NJRERfQklUX01BU0sgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIF9TSUREX1VOSVRfTUFTSyAgICAgICAgICAgICAgICAgMHg0MAorCisvKiBTU0U0LjIgUGFja2VkIENvbXBhcmlzb24gSW50cmluc2ljcy4gICovCisjZGVmaW5lIF9tbV9jbXBpc3RybShBLCBCLCBNKSBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BjbXBpc3RybTEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTSkpCisjZGVmaW5lIF9tbV9jbXBpc3RyaShBLCBCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGlzdHJpMTI4KChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoQiksIChpbnQpKE0pKQorCisjZGVmaW5lIF9tbV9jbXBlc3RybShBLCBMQSwgQiwgTEIsIE0pIFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGNtcGVzdHJtMTI4KChfX3YxNnFpKShfX20xMjhpKShBKSwgKGludCkoTEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoQiksIChpbnQpKExCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoTSkpCisjZGVmaW5lIF9tbV9jbXBlc3RyaShBLCBMQSwgQiwgTEIsIE0pIFwKKyAgKGludClfX2J1aWx0aW5faWEzMl9wY21wZXN0cmkxMjgoKF9fdjE2cWkpKF9fbTEyOGkpKEEpLCAoaW50KShMQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShMQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoTSkpCisKKy8qIFNTRTQuMiBQYWNrZWQgQ29tcGFyaXNvbiBJbnRyaW5zaWNzIGFuZCBFRmxhZyBSZWFkaW5nLiAgKi8KKyNkZWZpbmUgX21tX2NtcGlzdHJhKEEsIEIsIE0pIFwKKyAgKGludClfX2J1aWx0aW5faWEzMl9wY21waXN0cmlhMTI4KChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShNKSkKKyNkZWZpbmUgX21tX2NtcGlzdHJjKEEsIEIsIE0pIFwKKyAgKGludClfX2J1aWx0aW5faWEzMl9wY21waXN0cmljMTI4KChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShNKSkKKyNkZWZpbmUgX21tX2NtcGlzdHJvKEEsIEIsIE0pIFwKKyAgKGludClfX2J1aWx0aW5faWEzMl9wY21waXN0cmlvMTI4KChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShNKSkKKyNkZWZpbmUgX21tX2NtcGlzdHJzKEEsIEIsIE0pIFwKKyAgKGludClfX2J1aWx0aW5faWEzMl9wY21waXN0cmlzMTI4KChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShNKSkKKyNkZWZpbmUgX21tX2NtcGlzdHJ6KEEsIEIsIE0pIFwKKyAgKGludClfX2J1aWx0aW5faWEzMl9wY21waXN0cml6MTI4KChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShNKSkKKworI2RlZmluZSBfbW1fY21wZXN0cmEoQSwgTEEsIEIsIExCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGVzdHJpYTEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIChpbnQpKExBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShMQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKE0pKQorI2RlZmluZSBfbW1fY21wZXN0cmMoQSwgTEEsIEIsIExCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGVzdHJpYzEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIChpbnQpKExBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShMQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKE0pKQorI2RlZmluZSBfbW1fY21wZXN0cm8oQSwgTEEsIEIsIExCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGVzdHJpbzEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIChpbnQpKExBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShMQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKE0pKQorI2RlZmluZSBfbW1fY21wZXN0cnMoQSwgTEEsIEIsIExCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGVzdHJpczEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIChpbnQpKExBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShMQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKE0pKQorI2RlZmluZSBfbW1fY21wZXN0cnooQSwgTEEsIEIsIExCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGVzdHJpejEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIChpbnQpKExBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShMQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKE0pKQorCisvKiBTU0U0LjIgQ29tcGFyZSBQYWNrZWQgRGF0YSAtLSBHcmVhdGVyIFRoYW4uICAqLworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9lcGk2NChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192MmRpKV9fVjEgPiAoX192MmRpKV9fVjIpOworfQorCisvKiBTU0U0LjIgQWNjdW11bGF0ZSBDUkMzMi4gICovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3JjMzJfdTgodW5zaWduZWQgaW50IF9fQywgdW5zaWduZWQgY2hhciBfX0QpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jcmMzMnFpKF9fQywgX19EKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NyYzMyX3UxNih1bnNpZ25lZCBpbnQgX19DLCB1bnNpZ25lZCBzaG9ydCBfX0QpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jcmMzMmhpKF9fQywgX19EKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NyYzMyX3UzMih1bnNpZ25lZCBpbnQgX19DLCB1bnNpZ25lZCBpbnQgX19EKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3JjMzJzaShfX0MsIF9fRCk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3JjMzJfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX0MsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0QpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jcmMzMmRpKF9fQywgX19EKTsKK30KKyNlbmRpZiAvKiBfX3g4Nl82NF9fICovCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2lmZGVmIF9fUE9QQ05UX18KKyNpbmNsdWRlIDxwb3BjbnRpbnRyaW4uaD4KKyNlbmRpZgorCisjZW5kaWYgLyogX1NNTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3N0ZGFsaWduLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3N0ZGFsaWduLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczOGQxMgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc3RkYWxpZ24uaApAQCAtMCwwICsxLDM1IEBACisvKj09PS0tLS0gc3RkYWxpZ24uaCAtIFN0YW5kYXJkIGhlYWRlciBmb3IgYWxpZ25tZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX1NUREFMSUdOX0gKKyNkZWZpbmUgX19TVERBTElHTl9ICisKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgYWxpZ25hcyBfQWxpZ25hcworI2RlZmluZSBhbGlnbm9mIF9BbGlnbm9mCisjZW5kaWYKKworI2RlZmluZSBfX2FsaWduYXNfaXNfZGVmaW5lZCAxCisjZGVmaW5lIF9fYWxpZ25vZl9pc19kZWZpbmVkIDEKKworI2VuZGlmIC8qIF9fU1REQUxJR05fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zdGRhcmcuaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc3RkYXJnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3ZTE4MwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc3RkYXJnLmgKQEAgLTAsMCArMSw1MiBAQAorLyo9PT0tLS0tIHN0ZGFyZy5oIC0gVmFyaWFibGUgYXJndW1lbnQgaGFuZGxpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBFbGkgRnJpZWRtYW4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19TVERBUkdfSAorI2RlZmluZSBfX1NUREFSR19ICisKKyNpZm5kZWYgX1ZBX0xJU1QKK3R5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgdmFfbGlzdDsKKyNkZWZpbmUgX1ZBX0xJU1QKKyNlbmRpZgorI2RlZmluZSB2YV9zdGFydChhcCwgcGFyYW0pIF9fYnVpbHRpbl92YV9zdGFydChhcCwgcGFyYW0pCisjZGVmaW5lIHZhX2VuZChhcCkgICAgICAgICAgX19idWlsdGluX3ZhX2VuZChhcCkKKyNkZWZpbmUgdmFfYXJnKGFwLCB0eXBlKSAgICBfX2J1aWx0aW5fdmFfYXJnKGFwLCB0eXBlKQorCisvKiBHQ0MgYWx3YXlzIGRlZmluZXMgX192YV9jb3B5LCBidXQgZG9lcyBub3QgZGVmaW5lIHZhX2NvcHkgdW5sZXNzIGluIGM5OSBtb2RlCisgKiBvciAtYW5zaSBpcyBub3Qgc3BlY2lmaWVkLCBzaW5jZSBpdCB3YXMgbm90IHBhcnQgb2YgQzkwLgorICovCisjZGVmaW5lIF9fdmFfY29weShkLHMpIF9fYnVpbHRpbl92YV9jb3B5KGQscykKKworI2lmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCB8fCBfX2NwbHVzcGx1cyA+PSAyMDExMDNMIHx8ICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKyNkZWZpbmUgdmFfY29weShkZXN0LCBzcmMpICBfX2J1aWx0aW5fdmFfY29weShkZXN0LCBzcmMpCisjZW5kaWYKKworLyogSGFjayByZXF1aXJlZCB0byBtYWtlIHN0YW5kYXJkIGhlYWRlcnMgd29yaywgYXQgbGVhc3Qgb24gVWJ1bnR1ICovCisjaWZuZGVmIF9fR05VQ19WQV9MSVNUCisjZGVmaW5lIF9fR05VQ19WQV9MSVNUIDEKKyNlbmRpZgordHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKKworI2VuZGlmIC8qIF9fU1REQVJHX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc3RkYXRvbWljLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3N0ZGF0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNTczYjIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3N0ZGF0b21pYy5oCkBAIC0wLDAgKzEsNTQ2IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBFZCBTY2hvdXRlbiA8ZWRARnJlZUJTRC5vcmc+CisgKiAgICAgICAgICAgICAgICAgICAgRGF2aWQgQ2hpc25hbGwgPHRoZXJhdmVuQEZyZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaWZuZGVmIF9TVERBVE9NSUNfSF8KKyNkZWZpbmUJX1NUREFUT01JQ19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMICYmIGRlZmluZWQoX1VTSU5HX0xJQkNYWCkKKyMgaWZkZWYgX19jbGFuZ19fCisjICBpZiBfX2hhc19mZWF0dXJlKGN4eF9hdG9taWMpCisjICAgZGVmaW5lIF9TVERBVE9NSUNfSEFWRV9BVE9NSUMKKyMgIGVuZGlmCisjIGVsc2UgLyogZ2NjICovCisjICBkZWZpbmUgX1NUREFUT01JQ19IQVZFX0FUT01JQworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfU1REQVRPTUlDX0hBVkVfQVRPTUlDCisKKy8qIFdlIGhhdmUgYSB1c2FibGUgQysrIDxhdG9taWM+OyB1c2UgaXQgaW5zdGVhZC4gICovCisKKyNpbmNsdWRlIDxhdG9taWM+CisKKyN1bmRlZiBfQXRvbWljCisgICAgICAgIC8qIEFsc28gZGVmaW5lZCBieSA8YXRvbWljPiBmb3IgZ2NjLiAgQnV0IG5vdCB1c2VkIGluIG1hY3Jvcy4gKi8KKyAgICAgICAgLyogQWxzbyBhIGNsYW5nIGludHJpbnNpYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiBTaG91bGQgbm90IGJlIHVzZWQgYnkgY2xpZW50IGNvZGUgYmVmb3JlIHRoaXMgZmlsZSBpcyAgICAgICovCisgICAgICAgIC8qIGluY2x1ZGVkLiAgVGhlIGRlZmluaXRpb25zIGluIDxhdG9taWM+IHRoZW1zZWx2ZXMgc2VlICAgICAgKi8KKyAgICAgICAgLyogdGhlIG9sZCBkZWZpbml0aW9uLCBhcyB0aGV5IHNob3VsZC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiBDbGllbnQgY29kZSBzZWVzIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbi4gICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgX0F0b21pYyh0KSBzdGQ6OmF0b21pYzx0PgorCit1c2luZyBzdGQ6OmF0b21pY19pc19sb2NrX2ZyZWU7Cit1c2luZyBzdGQ6OmF0b21pY19pbml0OwordXNpbmcgc3RkOjphdG9taWNfc3RvcmU7Cit1c2luZyBzdGQ6OmF0b21pY19zdG9yZV9leHBsaWNpdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2xvYWQ7Cit1c2luZyBzdGQ6OmF0b21pY19sb2FkX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfZXhjaGFuZ2U7Cit1c2luZyBzdGQ6OmF0b21pY19leGNoYW5nZV9leHBsaWNpdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nOwordXNpbmcgc3RkOjphdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWs7Cit1c2luZyBzdGQ6OmF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9hZGQ7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9zdWI7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9vcjsKK3VzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX29yX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfeG9yOwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfYW5kOwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfdGhyZWFkX2ZlbmNlOwordXNpbmcgc3RkOjphdG9taWNfc2lnbmFsX2ZlbmNlOworCit1c2luZyBzdGQ6Om1lbW9yeV9vcmRlcjsKK3VzaW5nIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQ7Cit1c2luZyBzdGQ6Om1lbW9yeV9vcmRlcl9jb25zdW1lOwordXNpbmcgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZTsKK3VzaW5nIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2U7Cit1c2luZyBzdGQ6Om1lbW9yeV9vcmRlcl9hY3FfcmVsOwordXNpbmcgc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdDsKKwordXNpbmcgc3RkOjphdG9taWNfYm9vbDsKK3VzaW5nIHN0ZDo6YXRvbWljX2NoYXI7Cit1c2luZyBzdGQ6OmF0b21pY19zY2hhcjsKK3VzaW5nIHN0ZDo6YXRvbWljX3VjaGFyOwordXNpbmcgc3RkOjphdG9taWNfc2hvcnQ7Cit1c2luZyBzdGQ6OmF0b21pY191c2hvcnQ7Cit1c2luZyBzdGQ6OmF0b21pY19pbnQ7Cit1c2luZyBzdGQ6OmF0b21pY191aW50OwordXNpbmcgc3RkOjphdG9taWNfbG9uZzsKK3VzaW5nIHN0ZDo6YXRvbWljX3Vsb25nOwordXNpbmcgc3RkOjphdG9taWNfbGxvbmc7Cit1c2luZyBzdGQ6OmF0b21pY191bGxvbmc7Cit1c2luZyBzdGQ6OmF0b21pY19jaGFyMTZfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2NoYXIzMl90OwordXNpbmcgc3RkOjphdG9taWNfd2NoYXJfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludF9sZWFzdDhfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VpbnRfbGVhc3Q4X3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfbGVhc3QxNl90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9sZWFzdDE2X3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfbGVhc3QzMl90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9sZWFzdDMyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfbGVhc3Q2NF90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9sZWFzdDY0X3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfZmFzdDhfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VpbnRfZmFzdDhfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludF9mYXN0MTZfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VpbnRfZmFzdDE2X3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfZmFzdDMyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY191aW50X2Zhc3QzMl90OwordXNpbmcgc3RkOjphdG9taWNfaW50X2Zhc3Q2NF90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9mYXN0NjRfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludHB0cl90OwordXNpbmcgc3RkOjphdG9taWNfdWludHB0cl90OwordXNpbmcgc3RkOjphdG9taWNfc2l6ZV90OwordXNpbmcgc3RkOjphdG9taWNfcHRyZGlmZl90OwordXNpbmcgc3RkOjphdG9taWNfaW50bWF4X3Q7Cit1c2luZyBzdGQ6OmF0b21pY191aW50bWF4X3Q7CisKKyNlbHNlIC8qIDxhdG9taWM+IHVuYXZhaWxhYmxlLCBwb3NzaWJseSBiZWNhdXNlIHRoaXMgaXMgQywgbm90IEMrKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCisvKgorICogQzogRG8gaXQgb3Vyc2VsdmVzLgorICogTm90ZSB0aGF0IHRoZSBydW50aW1lIHJlcHJlc2VudGF0aW9uIGRlZmluZWQgaGVyZSBzaG91bGQgYmUgY29tcGF0aWJsZQorICogd2l0aCB0aGUgQysrIG9uZSwgaS5lLiBhbiBfQXRvbWljKFQpIG5lZWRzIHRvIGNvbnRhaW4gdGhlIHNhbWUKKyAqIGJpdHMgYXMgYSBULgorICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4gIC8qIEZvciBwdHJkaWZmX3QuICovCisjaW5jbHVkZSA8c3RkaW50Lmg+ICAvKiBUT0RPOiBkb24ndCBkcmFnIGluIGFsbCB0aGUgbWFjcm9zLCBqdXN0IHRoZSB0eXBlcy4gKi8KKy8vIEluY2x1ZGUgdWNoYXIuaCBvbmx5IHdoZW4gbmVlZGVkLiAgQmlvbmljJ3Mgc3RkYXRvbWljLmggaXMgYWxzbyB1c2VkIGZvciB0aGUKKy8vIGhvc3QgKHZpYSBhIGNvcHkgaW4gcHJlYnVpbHRzL2NsYW5nKSBhbmQgdWNoYXIuaCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZQorLy8gZ2xpYmMgdXNlZCBmb3IgdGhlIGhvc3QuCisjaWYgX19TVERDX1ZFUlNJT05fXyA+PSAyMDExMTJMCisjIGluY2x1ZGUgPHVjaGFyLmg+ICAvKiBGb3IgY2hhcjE2X3QgYW5kIGNoYXIzMl90LiAgICAgICAgICAgICAgKi8KKyNlbmRpZgorCisKKyNpZmRlZiBfX2NsYW5nX18KKyMgaWYgX19oYXNfZXh0ZW5zaW9uKGNfYXRvbWljKSB8fCBfX2hhc19leHRlbnNpb24oY3h4X2F0b21pYykKKyMgIGRlZmluZSAgICAgICBfX0NMQU5HX0FUT01JQ1MKKyMgZWxzZQorIyAgZXJyb3IgInN0ZGF0b21pYy5oIGRvZXMgbm90IHN1cHBvcnQgeW91ciBjb21waWxlciIKKyMgZW5kaWYKKyMgaWYgX19oYXNfYnVpbHRpbihfX3N5bmNfc3dhcCkKKyMgIGRlZmluZSBfX0hBU19CVUlMVElOX1NZTkNfU1dBUAorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIF9fR05VQ19BVE9NSUNTCisjZW5kaWYKKworLyoKKyAqIDcuMTcuMSBBdG9taWMgbG9jay1mcmVlIG1hY3Jvcy4KKyAqLworCisjaWZkZWYgX19HQ0NfQVRPTUlDX0JPT0xfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19CT09MX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0JPT0xfTE9DS19GUkVFCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfQ0hBUl9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0NIQVJfTE9DS19GUkVFCQlfX0dDQ19BVE9NSUNfQ0hBUl9MT0NLX0ZSRUUKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19DSEFSMTZfVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0NIQVIxNl9UX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfQ0hBUjE2X1RfTE9DS19GUkVFCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfQ0hBUjMyX1RfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19DSEFSMzJfVF9MT0NLX0ZSRUUJX19HQ0NfQVRPTUlDX0NIQVIzMl9UX0xPQ0tfRlJFRQorI2VuZGlmCisjaWZkZWYgX19HQ0NfQVRPTUlDX1dDSEFSX1RfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19XQ0hBUl9UX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfV0NIQVJfVF9MT0NLX0ZSRUUKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19TSE9SVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRQorI2VuZGlmCisjaWZkZWYgX19HQ0NfQVRPTUlDX0lOVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0lOVF9MT0NLX0ZSRUUJCV9fR0NDX0FUT01JQ19JTlRfTE9DS19GUkVFCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfTE9OR19MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0xPTkdfTE9DS19GUkVFCQlfX0dDQ19BVE9NSUNfTE9OR19MT0NLX0ZSRUUKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19MTE9OR19MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0xMT05HX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0xMT05HX0xPQ0tfRlJFRQorI2VuZGlmCisjaWZkZWYgX19HQ0NfQVRPTUlDX1BPSU5URVJfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19QT0lOVEVSX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfUE9JTlRFUl9MT0NLX0ZSRUUKKyNlbmRpZgorCisvKgorICogNy4xNy4yIEluaXRpYWxpemF0aW9uLgorICovCisKKyNpZiBkZWZpbmVkKF9fQ0xBTkdfQVRPTUlDUykKKyNkZWZpbmUJQVRPTUlDX1ZBUl9JTklUKHZhbHVlKQkJKHZhbHVlKQorI2RlZmluZQlhdG9taWNfaW5pdChvYmosIHZhbHVlKQkJX19jMTFfYXRvbWljX2luaXQob2JqLCB2YWx1ZSkKKyNlbHNlCisjZGVmaW5lCUFUT01JQ19WQVJfSU5JVCh2YWx1ZSkJCXsgLl9fdmFsID0gKHZhbHVlKSB9CisjZGVmaW5lCWF0b21pY19pbml0KG9iaiwgdmFsdWUpCQkoKHZvaWQpKChvYmopLT5fX3ZhbCA9ICh2YWx1ZSkpKQorI2VuZGlmCisKKy8qCisgKiBDbGFuZyBhbmQgcmVjZW50IEdDQyBib3RoIHByb3ZpZGUgcHJlZGVmaW5lZCBtYWNyb3MgZm9yIHRoZSBtZW1vcnkKKyAqIG9yZGVyaW5ncy4gIElmIHdlIGFyZSB1c2luZyBhIGNvbXBpbGVyIHRoYXQgZG9lc24ndCBkZWZpbmUgdGhlbSwgdXNlIHRoZQorICogY2xhbmcgdmFsdWVzIC0gdGhlc2Ugd2lsbCBiZSBpZ25vcmVkIGluIHRoZSBmYWxsYmFjayBwYXRoLgorICovCisKKyNpZm5kZWYgX19BVE9NSUNfUkVMQVhFRAorI2RlZmluZSBfX0FUT01JQ19SRUxBWEVECQkwCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfQ09OU1VNRQorI2RlZmluZSBfX0FUT01JQ19DT05TVU1FCQkxCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfQUNRVUlSRQorI2RlZmluZSBfX0FUT01JQ19BQ1FVSVJFCQkyCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfUkVMRUFTRQorI2RlZmluZSBfX0FUT01JQ19SRUxFQVNFCQkzCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfQUNRX1JFTAorI2RlZmluZSBfX0FUT01JQ19BQ1FfUkVMCQk0CisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfU0VRX0NTVAorI2RlZmluZSBfX0FUT01JQ19TRVFfQ1NUCQk1CisjZW5kaWYKKworLyoKKyAqIDcuMTcuMyBPcmRlciBhbmQgY29uc2lzdGVuY3kuCisgKgorICogVGhlIG1lbW9yeV9vcmRlcl8qIGNvbnN0YW50cyB0aGF0IGRlbm90ZSB0aGUgYmFycmllciBiZWhhdmlvdXIgb2YgdGhlCisgKiBhdG9taWMgb3BlcmF0aW9ucy4KKyAqIFRoZSBlbnVtIHZhbHVlcyBtdXN0IGJlIGlkZW50aWNhbCB0byB0aG9zZSB1c2VkIGJ5IHRoZQorICogQysrIDxhdG9taWM+IGhlYWRlci4KKyAqLworCit0eXBlZGVmIGVudW0geworCW1lbW9yeV9vcmRlcl9yZWxheGVkID0gX19BVE9NSUNfUkVMQVhFRCwKKwltZW1vcnlfb3JkZXJfY29uc3VtZSA9IF9fQVRPTUlDX0NPTlNVTUUsCisJbWVtb3J5X29yZGVyX2FjcXVpcmUgPSBfX0FUT01JQ19BQ1FVSVJFLAorCW1lbW9yeV9vcmRlcl9yZWxlYXNlID0gX19BVE9NSUNfUkVMRUFTRSwKKwltZW1vcnlfb3JkZXJfYWNxX3JlbCA9IF9fQVRPTUlDX0FDUV9SRUwsCisJbWVtb3J5X29yZGVyX3NlcV9jc3QgPSBfX0FUT01JQ19TRVFfQ1NUCit9IG1lbW9yeV9vcmRlcjsKKworLyoKKyAqIDcuMTcuNCBGZW5jZXMuCisgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2F0b21pY190aHJlYWRfZmVuY2UobWVtb3J5X29yZGVyIF9fb3JkZXIgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCit7CisKKyNpZmRlZiBfX0NMQU5HX0FUT01JQ1MKKwlfX2MxMV9hdG9taWNfdGhyZWFkX2ZlbmNlKF9fb3JkZXIpOworI2VsaWYgZGVmaW5lZChfX0dOVUNfQVRPTUlDUykKKwlfX2F0b21pY190aHJlYWRfZmVuY2UoX19vcmRlcik7CisjZWxzZQorCV9fc3luY19zeW5jaHJvbml6ZSgpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCithdG9taWNfc2lnbmFsX2ZlbmNlKG1lbW9yeV9vcmRlciBfX29yZGVyIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQoreworCisjaWZkZWYgX19DTEFOR19BVE9NSUNTCisJX19jMTFfYXRvbWljX3NpZ25hbF9mZW5jZShfX29yZGVyKTsKKyNlbGlmIGRlZmluZWQoX19HTlVDX0FUT01JQ1MpCisJX19hdG9taWNfc2lnbmFsX2ZlbmNlKF9fb3JkZXIpOworI2Vsc2UKKwlfX2FzbSB2b2xhdGlsZSAoIiIgOjo6ICJtZW1vcnkiKTsKKyNlbmRpZgorfQorCisvKgorICogNy4xNy41IExvY2stZnJlZSBwcm9wZXJ0eS4KKyAqLworCisjaWYgZGVmaW5lZChfS0VSTkVMKQorLyogQXRvbWljcyBpbiBrZXJuZWxzcGFjZSBhcmUgYWx3YXlzIGxvY2stZnJlZS4gKi8KKyNkZWZpbmUJYXRvbWljX2lzX2xvY2tfZnJlZShvYmopIFwKKwkoKHZvaWQpKG9iaiksIChfQm9vbCkxKQorI2VsaWYgZGVmaW5lZChfX0NMQU5HX0FUT01JQ1MpCisjZGVmaW5lCWF0b21pY19pc19sb2NrX2ZyZWUob2JqKSBcCisJX19jMTFfYXRvbWljX2lzX2xvY2tfZnJlZShzaXplb2YoKihvYmopKSkKKyNlbGlmIGRlZmluZWQoX19HTlVDX0FUT01JQ1MpCisjZGVmaW5lCWF0b21pY19pc19sb2NrX2ZyZWUob2JqKSBcCisJX19hdG9taWNfaXNfbG9ja19mcmVlKHNpemVvZigob2JqKS0+X192YWwpLCAmKG9iaiktPl9fdmFsKQorI2Vsc2UKKyNkZWZpbmUJYXRvbWljX2lzX2xvY2tfZnJlZShvYmopIFwKKwkoKHZvaWQpKG9iaiksIHNpemVvZigob2JqKS0+X192YWwpIDw9IHNpemVvZih2b2lkICopKQorI2VuZGlmCisKKy8qCisgKiA3LjE3LjYgQXRvbWljIGludGVnZXIgdHlwZXMuCisgKi8KKworI2lmbmRlZiBfX0NMQU5HX0FUT01JQ1MKKy8qCisgKiBObyBuYXRpdmUgc3VwcG9ydCBmb3IgX0F0b21pYygpLiBQbGFjZSBvYmplY3QgaW4gc3RydWN0dXJlIHRvIHByZXZlbnQKKyAqIG1vc3QgZm9ybXMgb2YgZGlyZWN0IG5vbi1hdG9taWMgYWNjZXNzLgorICovCisjZGVmaW5lIF9BdG9taWMoVCkgICAgICAgICAgICAgIHN0cnVjdCB7IFQgdm9sYXRpbGUgX192YWw7IH0KKyNlbmRpZgorCit0eXBlZGVmIF9BdG9taWMoYm9vbCkJCQlhdG9taWNfYm9vbDsKK3R5cGVkZWYgX0F0b21pYyhjaGFyKQkJCWF0b21pY19jaGFyOwordHlwZWRlZiBfQXRvbWljKHNpZ25lZCBjaGFyKQkJYXRvbWljX3NjaGFyOwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIGNoYXIpCQlhdG9taWNfdWNoYXI7Cit0eXBlZGVmIF9BdG9taWMoc2hvcnQpCQkJYXRvbWljX3Nob3J0OwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIHNob3J0KQkJYXRvbWljX3VzaG9ydDsKK3R5cGVkZWYgX0F0b21pYyhpbnQpCQkJYXRvbWljX2ludDsKK3R5cGVkZWYgX0F0b21pYyh1bnNpZ25lZCBpbnQpCQlhdG9taWNfdWludDsKK3R5cGVkZWYgX0F0b21pYyhsb25nKQkJCWF0b21pY19sb25nOwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIGxvbmcpCQlhdG9taWNfdWxvbmc7Cit0eXBlZGVmIF9BdG9taWMobG9uZyBsb25nKQkJYXRvbWljX2xsb25nOwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIGxvbmcgbG9uZykJYXRvbWljX3VsbG9uZzsKKyNpZiBfX1NURENfVkVSU0lPTl9fID49IDIwMTExMkwgfHwgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0eXBlZGVmIF9BdG9taWMoY2hhcjE2X3QpCQlhdG9taWNfY2hhcjE2X3Q7CisgIHR5cGVkZWYgX0F0b21pYyhjaGFyMzJfdCkJCWF0b21pY19jaGFyMzJfdDsKKyNlbmRpZgordHlwZWRlZiBfQXRvbWljKHdjaGFyX3QpCQlhdG9taWNfd2NoYXJfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRfbGVhc3Q4X3QpCQlhdG9taWNfaW50X2xlYXN0OF90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfbGVhc3Q4X3QpCWF0b21pY191aW50X2xlYXN0OF90OwordHlwZWRlZiBfQXRvbWljKGludF9sZWFzdDE2X3QpCWF0b21pY19pbnRfbGVhc3QxNl90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfbGVhc3QxNl90KQlhdG9taWNfdWludF9sZWFzdDE2X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2xlYXN0MzJfdCkJYXRvbWljX2ludF9sZWFzdDMyX3Q7Cit0eXBlZGVmIF9BdG9taWModWludF9sZWFzdDMyX3QpCWF0b21pY191aW50X2xlYXN0MzJfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRfbGVhc3Q2NF90KQlhdG9taWNfaW50X2xlYXN0NjRfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50X2xlYXN0NjRfdCkJYXRvbWljX3VpbnRfbGVhc3Q2NF90OwordHlwZWRlZiBfQXRvbWljKGludF9mYXN0OF90KQkJYXRvbWljX2ludF9mYXN0OF90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfZmFzdDhfdCkJCWF0b21pY191aW50X2Zhc3Q4X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2Zhc3QxNl90KQkJYXRvbWljX2ludF9mYXN0MTZfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50X2Zhc3QxNl90KQlhdG9taWNfdWludF9mYXN0MTZfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRfZmFzdDMyX3QpCQlhdG9taWNfaW50X2Zhc3QzMl90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfZmFzdDMyX3QpCWF0b21pY191aW50X2Zhc3QzMl90OwordHlwZWRlZiBfQXRvbWljKGludF9mYXN0NjRfdCkJCWF0b21pY19pbnRfZmFzdDY0X3Q7Cit0eXBlZGVmIF9BdG9taWModWludF9mYXN0NjRfdCkJYXRvbWljX3VpbnRfZmFzdDY0X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50cHRyX3QpCQlhdG9taWNfaW50cHRyX3Q7Cit0eXBlZGVmIF9BdG9taWModWludHB0cl90KQkJYXRvbWljX3VpbnRwdHJfdDsKK3R5cGVkZWYgX0F0b21pYyhzaXplX3QpCQlhdG9taWNfc2l6ZV90OwordHlwZWRlZiBfQXRvbWljKHB0cmRpZmZfdCkJCWF0b21pY19wdHJkaWZmX3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50bWF4X3QpCQlhdG9taWNfaW50bWF4X3Q7Cit0eXBlZGVmIF9BdG9taWModWludG1heF90KQkJYXRvbWljX3VpbnRtYXhfdDsKKworLyoKKyAqIDcuMTcuNyBPcGVyYXRpb25zIG9uIGF0b21pYyB0eXBlcy4KKyAqLworCisvKgorICogQ29tcGlsZXItc3BlY2lmaWMgb3BlcmF0aW9ucy4KKyAqLworCisjaWYgZGVmaW5lZChfX0NMQU5HX0FUT01JQ1MpCisjZGVmaW5lCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAlcCisgICAgZGVzaXJlZCwgc3VjY2VzcywgZmFpbHVyZSkJCQkJCQlcCisJX19jMTFfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKG9iamVjdCwgZXhwZWN0ZWQsIGRlc2lyZWQsCVwKKwkgICAgc3VjY2VzcywgZmFpbHVyZSkKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAkJXAorICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCQkJCQkJXAorCV9fYzExX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWsob2JqZWN0LCBleHBlY3RlZCwgZGVzaXJlZCwJXAorCSAgICBzdWNjZXNzLCBmYWlsdXJlKQorI2RlZmluZQlhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCVwKKwlfX2MxMV9hdG9taWNfZXhjaGFuZ2Uob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYzExX2F0b21pY19mZXRjaF9hZGQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYzExX2F0b21pY19mZXRjaF9hbmQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19jMTFfYXRvbWljX2ZldGNoX29yKG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2MxMV9hdG9taWNfZmV0Y2hfc3ViKG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF94b3JfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2MxMV9hdG9taWNfZmV0Y2hfeG9yKG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19sb2FkX2V4cGxpY2l0KG9iamVjdCwgb3JkZXIpCQkJCVwKKwlfX2MxMV9hdG9taWNfbG9hZChvYmplY3QsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfc3RvcmVfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCQlcCisJX19jMTFfYXRvbWljX3N0b3JlKG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCisjZWxpZiBkZWZpbmVkKF9fR05VQ19BVE9NSUNTKQorI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJXAorICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCQkJCQkJXAorCV9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbigmKG9iamVjdCktPl9fdmFsLCBleHBlY3RlZCwJCVwKKwkgICAgZGVzaXJlZCwgMCwgc3VjY2VzcywgZmFpbHVyZSkKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAkJXAorICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCQkJCQkJXAorCV9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbigmKG9iamVjdCktPl9fdmFsLCBleHBlY3RlZCwJCVwKKwkgICAgZGVzaXJlZCwgMSwgc3VjY2VzcywgZmFpbHVyZSkKKyNkZWZpbmUJYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCQlcCisJX19hdG9taWNfZXhjaGFuZ2VfbigmKG9iamVjdCktPl9fdmFsLCBkZXNpcmVkLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYXRvbWljX2ZldGNoX2FkZCgmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYXRvbWljX2ZldGNoX2FuZCgmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19hdG9taWNfZmV0Y2hfb3IoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2F0b21pY19mZXRjaF9zdWIoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF94b3JfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2F0b21pY19mZXRjaF94b3IoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19sb2FkX2V4cGxpY2l0KG9iamVjdCwgb3JkZXIpCQkJCVwKKwlfX2F0b21pY19sb2FkX24oJihvYmplY3QpLT5fX3ZhbCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19zdG9yZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJCVwKKwlfX2F0b21pY19zdG9yZV9uKCYob2JqZWN0KS0+X192YWwsIGRlc2lyZWQsIG9yZGVyKQorI2Vsc2UKKyNkZWZpbmUJX19hdG9taWNfYXBwbHlfc3RyaWRlKG9iamVjdCwgb3BlcmFuZCkgXAorCSgoKF9fdHlwZW9mX18oKG9iamVjdCktPl9fdmFsKSkwKSArIChvcGVyYW5kKSkKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KG9iamVjdCwgZXhwZWN0ZWQsCVwKKyAgICBkZXNpcmVkLCBzdWNjZXNzLCBmYWlsdXJlKQlfX2V4dGVuc2lvbl9fICh7CQkJXAorCV9fdHlwZW9mX18oZXhwZWN0ZWQpIF9fZXAgPSAoZXhwZWN0ZWQpOwkJCQlcCisJX190eXBlb2ZfXygqX19lcCkgX19lID0gKl9fZXA7CQkJCQlcCisJKHZvaWQpKHN1Y2Nlc3MpOyAodm9pZCkoZmFpbHVyZSk7CQkJCVwKKwkoYm9vbCkoKCpfX2VwID0gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwKCYob2JqZWN0KS0+X192YWwsCVwKKwkgICAgX19lLCBkZXNpcmVkKSkgPT0gX19lKTsJCQkJCVwKK30pCisjZGVmaW5lCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJCVwKKyAgICBkZXNpcmVkLCBzdWNjZXNzLCBmYWlsdXJlKQkJCQkJCVwKKwlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJXAorCQlkZXNpcmVkLCBzdWNjZXNzLCBmYWlsdXJlKQorI2lmZGVmIF9fSEFTX0JVSUxUSU5fU1lOQ19TV0FQCisvKiBDbGFuZyBwcm92aWRlcyBhIGZ1bGwtYmFycmllciBhdG9taWMgZXhjaGFuZ2UgLSB1c2UgaXQgaWYgYXZhaWxhYmxlLiAqLworI2RlZmluZQlhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCVwKKwkoKHZvaWQpKG9yZGVyKSwgX19zeW5jX3N3YXAoJihvYmplY3QpLT5fX3ZhbCwgZGVzaXJlZCkpCisjZWxzZQorLyoKKyAqIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCgpIGlzIG9ubHkgYW4gYWNxdWlyZSBiYXJyaWVyIGluIHRoZW9yeSAoYWx0aG91Z2ggaW4KKyAqIHByYWN0aWNlIGl0IGlzIHVzdWFsbHkgYSBmdWxsIGJhcnJpZXIpIHNvIHdlIG5lZWQgYW4gZXhwbGljaXQgYmFycmllciBiZWZvcmUKKyAqIGl0LgorICovCisjZGVmaW5lCWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJXAorX19leHRlbnNpb25fXyAoewkJCQkJCQlcCisJX190eXBlb2ZfXyhvYmplY3QpIF9fbyA9IChvYmplY3QpOwkJCQlcCisJX190eXBlb2ZfXyhkZXNpcmVkKSBfX2QgPSAoZGVzaXJlZCk7CQkJCVwKKwkodm9pZCkob3JkZXIpOwkJCQkJCQlcCisJX19zeW5jX3N5bmNocm9uaXplKCk7CQkJCQkJXAorCV9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCgmKF9fbyktPl9fdmFsLCBfX2QpOwkJCVwKK30pCisjZW5kaWYKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmKG9iamVjdCktPl9fdmFsLAkJXAorCSAgICBfX2F0b21pY19hcHBseV9zdHJpZGUob2JqZWN0LCBvcGVyYW5kKSkpCisjZGVmaW5lCWF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwkoKHZvaWQpKG9yZGVyKSwgX19zeW5jX2ZldGNoX2FuZF9hbmQoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCkpCisjZGVmaW5lCWF0b21pY19mZXRjaF9vcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfZmV0Y2hfYW5kX29yKCYob2JqZWN0KS0+X192YWwsIG9wZXJhbmQpKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfc3ViKCYob2JqZWN0KS0+X192YWwsCQlcCisJICAgIF9fYXRvbWljX2FwcGx5X3N0cmlkZShvYmplY3QsIG9wZXJhbmQpKSkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfZmV0Y2hfYW5kX3hvcigmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kKSkKKyNkZWZpbmUJYXRvbWljX2xvYWRfZXhwbGljaXQob2JqZWN0LCBvcmRlcikJCQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmKG9iamVjdCktPl9fdmFsLCAwKSkKKyNkZWZpbmUJYXRvbWljX3N0b3JlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCQkJXAorCSgodm9pZClhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikpCisjZW5kaWYKKworLyoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9ucy4KKyAqCisgKiBEb24ndCBwcm92aWRlIHRoZXNlIGluIGtlcm5lbCBzcGFjZS4gSW4ga2VybmVsIHNwYWNlLCB3ZSBzaG91bGQgYmUKKyAqIGRpc2NpcGxpbmVkIGVub3VnaCB0byBhbHdheXMgcHJvdmlkZSBleHBsaWNpdCBiYXJyaWVycy4KKyAqLworCisjaWZuZGVmIF9LRVJORUwKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKG9iamVjdCwgZXhwZWN0ZWQsIGRlc2lyZWQpCVwKKwlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJXAorCSAgICBkZXNpcmVkLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWsob2JqZWN0LCBleHBlY3RlZCwgZGVzaXJlZCkJCVwKKwlhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KG9iamVjdCwgZXhwZWN0ZWQsCQlcCisJICAgIGRlc2lyZWQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0LCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2V4Y2hhbmdlKG9iamVjdCwgZGVzaXJlZCkJCQkJXAorCWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZQlhdG9taWNfZmV0Y2hfYWRkKG9iamVjdCwgb3BlcmFuZCkJCQkJXAorCWF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FuZChvYmplY3QsIG9wZXJhbmQpCQkJCVwKKwlhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19mZXRjaF9vcihvYmplY3QsIG9wZXJhbmQpCQkJCVwKKwlhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3N1YihvYmplY3QsIG9wZXJhbmQpCQkJCVwKKwlhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19mZXRjaF94b3Iob2JqZWN0LCBvcGVyYW5kKQkJCQlcCisJYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZQlhdG9taWNfbG9hZChvYmplY3QpCQkJCQkJXAorCWF0b21pY19sb2FkX2V4cGxpY2l0KG9iamVjdCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19zdG9yZShvYmplY3QsIGRlc2lyZWQpCQkJCQlcCisJYXRvbWljX3N0b3JlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZW5kaWYgLyogIV9LRVJORUwgKi8KKworLyoKKyAqIDcuMTcuOCBBdG9taWMgZmxhZyB0eXBlIGFuZCBvcGVyYXRpb25zLgorICoKKyAqIFhYWDogQXNzdW1lIGF0b21pY19ib29sIGNhbiBiZSB1c2VkIGFzIGFuIGF0b21pY19mbGFnLiBJcyB0aGVyZSBzb21lCisgKiBraW5kIG9mIGNvbXBpbGVyIGJ1aWx0LWluIHR5cGUgd2UgY291bGQgdXNlPworICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlhdG9taWNfYm9vbAlfX2ZsYWc7Cit9IGF0b21pY19mbGFnOworCisjZGVmaW5lCUFUT01JQ19GTEFHX0lOSVQJCXsgQVRPTUlDX1ZBUl9JTklUKGZhbHNlKSB9CisKK3N0YXRpYyBfX2lubGluZSBib29sCithdG9taWNfZmxhZ190ZXN0X2FuZF9zZXRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ZsYWcgKl9fb2JqZWN0LAorICAgIG1lbW9yeV9vcmRlciBfX29yZGVyKQoreworCXJldHVybiAoYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KCZfX29iamVjdC0+X19mbGFnLCAxLCBfX29yZGVyKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCithdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxhZyAqX19vYmplY3QsIG1lbW9yeV9vcmRlciBfX29yZGVyKQoreworCisJYXRvbWljX3N0b3JlX2V4cGxpY2l0KCZfX29iamVjdC0+X19mbGFnLCAwLCBfX29yZGVyKTsKK30KKworI2lmbmRlZiBfS0VSTkVMCitzdGF0aWMgX19pbmxpbmUgYm9vbAorYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0KHZvbGF0aWxlIGF0b21pY19mbGFnICpfX29iamVjdCkKK3sKKworCXJldHVybiAoYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0X2V4cGxpY2l0KF9fb2JqZWN0LAorCSAgICBtZW1vcnlfb3JkZXJfc2VxX2NzdCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYXRvbWljX2ZsYWdfY2xlYXIodm9sYXRpbGUgYXRvbWljX2ZsYWcgKl9fb2JqZWN0KQoreworCisJYXRvbWljX2ZsYWdfY2xlYXJfZXhwbGljaXQoX19vYmplY3QsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKK30KKyNlbmRpZiAvKiAhX0tFUk5FTCAqLworCisjZW5kaWYgLyogPGF0b21pYz4gdW5hdmFpbGFibGUgKi8KKworI2VuZGlmIC8qICFfU1REQVRPTUlDX0hfICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3N0ZGJvb2wuaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc3RkYm9vbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0Njc4OTMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3N0ZGJvb2wuaApAQCAtMCwwICsxLDQ0IEBACisvKj09PS0tLS0gc3RkYm9vbC5oIC0gU3RhbmRhcmQgaGVhZGVyIGZvciBib29sZWFucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEVsaSBGcmllZG1hbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX1NUREJPT0xfSAorI2RlZmluZSBfX1NUREJPT0xfSAorCisvKiBEb24ndCBkZWZpbmUgYm9vbCwgdHJ1ZSwgYW5kIGZhbHNlIGluIEMrKywgZXhjZXB0IGFzIGEgR05VIGV4dGVuc2lvbi4gKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgYm9vbCBfQm9vbAorI2RlZmluZSB0cnVlIDEKKyNkZWZpbmUgZmFsc2UgMAorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorLyogRGVmaW5lIF9Cb29sLCBib29sLCBmYWxzZSwgdHJ1ZSBhcyBhIEdOVSBleHRlbnNpb24uICovCisjZGVmaW5lIF9Cb29sIGJvb2wKKyNkZWZpbmUgYm9vbCAgYm9vbAorI2RlZmluZSBmYWxzZSBmYWxzZQorI2RlZmluZSB0cnVlICB0cnVlCisjZW5kaWYKKworI2RlZmluZSBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCAxCisKKyNlbmRpZiAvKiBfX1NUREJPT0xfSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS9zdGRkZWYuaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc3RkZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1NDk5NgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc3RkZGVmLmgKQEAgLTAsMCArMSwxMzcgQEAKKy8qPT09LS0tLSBzdGRkZWYuaCAtIEJhc2ljIHR5cGUgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRWxpIEZyaWVkbWFuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWYgIWRlZmluZWQoX19TVERERUZfSCkgfHwgZGVmaW5lZChfX25lZWRfcHRyZGlmZl90KSB8fCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoX19uZWVkX3NpemVfdCkgfHwgZGVmaW5lZChfX25lZWRfd2NoYXJfdCkgfHwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKF9fbmVlZF9OVUxMKSB8fCBkZWZpbmVkKF9fbmVlZF93aW50X3QpCisKKyNpZiAhZGVmaW5lZChfX25lZWRfcHRyZGlmZl90KSAmJiAhZGVmaW5lZChfX25lZWRfc2l6ZV90KSAmJiAgICAgICAgICAgICAgICAgICBcCisgICAgIWRlZmluZWQoX19uZWVkX3djaGFyX3QpICYmICFkZWZpbmVkKF9fbmVlZF9OVUxMKSAmJiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICFkZWZpbmVkKF9fbmVlZF93aW50X3QpCisvKiBBbHdheXMgZGVmaW5lIG1pc2NlbGxhbmVvdXMgcGllY2VzIHdoZW4gbW9kdWxlcyBhcmUgYXZhaWxhYmxlLiAqLworI2lmICFfX2hhc19mZWF0dXJlKG1vZHVsZXMpCisjZGVmaW5lIF9fU1REREVGX0gKKyNlbmRpZgorI2RlZmluZSBfX25lZWRfcHRyZGlmZl90CisjZGVmaW5lIF9fbmVlZF9zaXplX3QKKyNkZWZpbmUgX19uZWVkX3djaGFyX3QKKyNkZWZpbmUgX19uZWVkX05VTEwKKyNkZWZpbmUgX19uZWVkX1NURERFRl9IX21pc2MKKy8qIF9fbmVlZF93aW50X3QgaXMgaW50ZW50aW9uYWxseSBub3QgZGVmaW5lZCBoZXJlLiAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fbmVlZF9wdHJkaWZmX3QpCisjaWYgIWRlZmluZWQoX1BUUkRJRkZfVCkgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKQorLyogQWx3YXlzIGRlZmluZSBwdHJkaWZmX3Qgd2hlbiBtb2R1bGVzIGFyZSBhdmFpbGFibGUuICovCisjaWYgIV9faGFzX2ZlYXR1cmUobW9kdWxlcykKKyNkZWZpbmUgX1BUUkRJRkZfVAorI2VuZGlmCit0eXBlZGVmIF9fUFRSRElGRl9UWVBFX18gcHRyZGlmZl90OworI2VuZGlmCisjdW5kZWYgX19uZWVkX3B0cmRpZmZfdAorI2VuZGlmIC8qIGRlZmluZWQoX19uZWVkX3B0cmRpZmZfdCkgKi8KKworI2lmIGRlZmluZWQoX19uZWVkX3NpemVfdCkKKyNpZiAhZGVmaW5lZChfU0laRV9UKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpCisvKiBBbHdheXMgZGVmaW5lIHNpemVfdCB3aGVuIG1vZHVsZXMgYXJlIGF2YWlsYWJsZS4gKi8KKyNpZiAhX19oYXNfZmVhdHVyZShtb2R1bGVzKQorI2RlZmluZSBfU0laRV9UCisjZW5kaWYKK3R5cGVkZWYgX19TSVpFX1RZUEVfXyBzaXplX3Q7CisjZW5kaWYKKyN1bmRlZiBfX25lZWRfc2l6ZV90CisjZW5kaWYgLypkZWZpbmVkKF9fbmVlZF9zaXplX3QpICovCisKKyNpZiBkZWZpbmVkKF9fbmVlZF9TVERERUZfSF9taXNjKQorLyogSVNPOTg5OToyMDExIDcuMjAgKEMxMSBBbm5leCBLKTogRGVmaW5lIHJzaXplX3QgaWYgX19TVERDX1dBTlRfTElCX0VYVDFfXyBpcworICogZW5hYmxlZC4gKi8KKyNpZiAoZGVmaW5lZChfX1NURENfV0FOVF9MSUJfRVhUMV9fKSAmJiBfX1NURENfV0FOVF9MSUJfRVhUMV9fID49IDEgJiYgXAorICAgICAhZGVmaW5lZChfUlNJWkVfVCkpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykKKy8qIEFsd2F5cyBkZWZpbmUgcnNpemVfdCB3aGVuIG1vZHVsZXMgYXJlIGF2YWlsYWJsZS4gKi8KKyNpZiAhX19oYXNfZmVhdHVyZShtb2R1bGVzKQorI2RlZmluZSBfUlNJWkVfVAorI2VuZGlmCit0eXBlZGVmIF9fU0laRV9UWVBFX18gcnNpemVfdDsKKyNlbmRpZgorI2VuZGlmIC8qIGRlZmluZWQoX19uZWVkX1NURERFRl9IX21pc2MpICovCisKKyNpZiBkZWZpbmVkKF9fbmVlZF93Y2hhcl90KQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogQWx3YXlzIGRlZmluZSB3Y2hhcl90IHdoZW4gbW9kdWxlcyBhcmUgYXZhaWxhYmxlLiAqLworI2lmICFkZWZpbmVkKF9XQ0hBUl9UKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpCisjaWYgIV9faGFzX2ZlYXR1cmUobW9kdWxlcykKKyNkZWZpbmUgX1dDSEFSX1QKKyNpZiBkZWZpbmVkKF9NU0NfRVhURU5TSU9OUykKKyNkZWZpbmUgX1dDSEFSX1RfREVGSU5FRAorI2VuZGlmCisjZW5kaWYKK3R5cGVkZWYgX19XQ0hBUl9UWVBFX18gd2NoYXJfdDsKKyNlbmRpZgorI2VuZGlmCisjdW5kZWYgX19uZWVkX3djaGFyX3QKKyNlbmRpZiAvKiBkZWZpbmVkKF9fbmVlZF93Y2hhcl90KSAqLworCisjaWYgZGVmaW5lZChfX25lZWRfTlVMTCkKKyN1bmRlZiBOVUxMCisjaWZkZWYgX19jcGx1c3BsdXMKKyMgIGlmICFkZWZpbmVkKF9fTUlOR1czMl9fKSAmJiAhZGVmaW5lZChfTVNDX1ZFUikKKyMgICAgZGVmaW5lIE5VTEwgX19udWxsCisjICBlbHNlCisjICAgIGRlZmluZSBOVUxMIDAKKyMgIGVuZGlmCisjZWxzZQorIyAgZGVmaW5lIE5VTEwgKCh2b2lkKikwKQorI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKKyNpZiBkZWZpbmVkKF9NU0NfRVhURU5TSU9OUykgJiYgZGVmaW5lZChfTkFUSVZFX05VTExQVFJfU1VQUE9SVEVEKQorbmFtZXNwYWNlIHN0ZCB7IHR5cGVkZWYgZGVjbHR5cGUobnVsbHB0cikgbnVsbHB0cl90OyB9Cit1c2luZyA6OnN0ZDo6bnVsbHB0cl90OworI2VuZGlmCisjZW5kaWYKKyN1bmRlZiBfX25lZWRfTlVMTAorI2VuZGlmIC8qIGRlZmluZWQoX19uZWVkX05VTEwpICovCisKKyNpZiBkZWZpbmVkKF9fbmVlZF9TVERERUZfSF9taXNjKQorI2lmIF9fU1REQ19WRVJTSU9OX18gPj0gMjAxMTEyTCB8fCBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjaW5jbHVkZSAiX19zdGRkZWZfbWF4X2FsaWduX3QuaCIKKyNlbmRpZgorI2RlZmluZSBvZmZzZXRvZih0LCBkKSBfX2J1aWx0aW5fb2Zmc2V0b2YodCwgZCkKKyN1bmRlZiBfX25lZWRfU1REREVGX0hfbWlzYworI2VuZGlmICAvKiBkZWZpbmVkKF9fbmVlZF9TVERERUZfSF9taXNjKSAqLworCisvKiBTb21lIEMgbGlicmFyaWVzIGV4cGVjdCB0byBzZWUgYSB3aW50X3QgaGVyZS4gT3RoZXJzIChub3RhYmx5IE1pbkdXKSB3aWxsIHVzZQorX19XSU5UX1RZUEVfXyBkaXJlY3RseTsgYWNjb21tb2RhdGUgYm90aCBieSByZXF1aXJpbmcgX19uZWVkX3dpbnRfdCAqLworI2lmIGRlZmluZWQoX19uZWVkX3dpbnRfdCkKKy8qIEFsd2F5cyBkZWZpbmUgd2ludF90IHdoZW4gbW9kdWxlcyBhcmUgYXZhaWxhYmxlLiAqLworI2lmICFkZWZpbmVkKF9XSU5UX1QpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykKKyNpZiAhX19oYXNfZmVhdHVyZShtb2R1bGVzKQorI2RlZmluZSBfV0lOVF9UCisjZW5kaWYKK3R5cGVkZWYgX19XSU5UX1RZUEVfXyB3aW50X3Q7CisjZW5kaWYKKyN1bmRlZiBfX25lZWRfd2ludF90CisjZW5kaWYgLyogX19uZWVkX3dpbnRfdCAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc3RkaW50LmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3N0ZGludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMmZjYmMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3N0ZGludC5oCkBAIC0wLDAgKzEsNzA3IEBACisvKj09PS0tLS0gc3RkaW50LmggLSBTdGFuZGFyZCBoZWFkZXIgZm9yIHNpemVkIGludGVnZXIgdHlwZXMgLS0tLS0tLS0tLS0tLS09PT0qXAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDaHJpcyBMYXR0bmVyCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKK1wqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSovCisKKyNpZm5kZWYgX19DTEFOR19TVERJTlRfSAorI2RlZmluZSBfX0NMQU5HX1NURElOVF9ICisKKy8qIElmIHdlJ3JlIGhvc3RlZCwgZmFsbCBiYWNrIHRvIHRoZSBzeXN0ZW0ncyBzdGRpbnQuaCwgd2hpY2ggbWlnaHQgaGF2ZQorICogYWRkaXRpb25hbCBkZWZpbml0aW9ucy4KKyAqLworI2lmIF9fU1REQ19IT1NURURfXyAmJiBfX2hhc19pbmNsdWRlX25leHQoPHN0ZGludC5oPikKKworLy8gQzk5IDcuMTguMyBMaW1pdHMgb2Ygb3RoZXIgaW50ZWdlciB0eXBlcworLy8KKy8vICBGb290bm90ZSAyMTksIDIyMDogQysrIGltcGxlbWVudGF0aW9ucyBzaG91bGQgZGVmaW5lIHRoZXNlIG1hY3JvcyBvbmx5IHdoZW4KKy8vICBfX1NURENfTElNSVRfTUFDUk9TIGlzIGRlZmluZWQgYmVmb3JlIDxzdGRpbnQuaD4gaXMgaW5jbHVkZWQuCisvLworLy8gIEZvb3Rub3RlIDIyMjogQysrIGltcGxlbWVudGF0aW9ucyBzaG91bGQgZGVmaW5lIHRoZXNlIG1hY3JvcyBvbmx5IHdoZW4KKy8vICBfX1NURENfQ09OU1RBTlRfTUFDUk9TIGlzIGRlZmluZWQgYmVmb3JlIDxzdGRpbnQuaD4gaXMgaW5jbHVkZWQuCisvLworLy8gQysrMTEgW2NzdGRpbnQuc3luXXAyOgorLy8KKy8vICBUaGUgbWFjcm9zIGRlZmluZWQgYnkgPGNzdGRpbnQ+IGFyZSBwcm92aWRlZCB1bmNvbmRpdGlvbmFsbHkuIEluIHBhcnRpY3VsYXIsCisvLyAgdGhlIHN5bWJvbHMgX19TVERDX0xJTUlUX01BQ1JPUyBhbmQgX19TVERDX0NPTlNUQU5UX01BQ1JPUyAobWVudGlvbmVkIGluCisvLyAgZm9vdG5vdGVzIDIxOSwgMjIwLCBhbmQgMjIyIGluIHRoZSBDIHN0YW5kYXJkKSBwbGF5IG5vIHJvbGUgaW4gQysrLgorLy8KKy8vIEMxMSByZW1vdmVkIHRoZSBwcm9ibGVtYXRpYyBmb290bm90ZXMuCisvLworLy8gV29yayBhcm91bmQgdGhpcyBpbmNvbnNpc3RlbmN5IGJ5IGFsd2F5cyBkZWZpbmluZyB0aG9zZSBtYWNyb3MgaW4gQysrIG1vZGUsCisvLyBzbyB0aGF0IGEgQyBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIHdoaWNoIGZvbGxvd3MgdGhlIEM5OSBzdGFuZGFyZCBjYW4gYmUKKy8vIHVzZWQgaW4gQysrLgorIyBpZmRlZiBfX2NwbHVzcGx1cworIyAgaWYgIWRlZmluZWQoX19TVERDX0xJTUlUX01BQ1JPUykKKyMgICBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUworIyAgIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TX0RFRklORURfQllfQ0xBTkcKKyMgIGVuZGlmCisjICBpZiAhZGVmaW5lZChfX1NURENfQ09OU1RBTlRfTUFDUk9TKQorIyAgIGRlZmluZSBfX1NURENfQ09OU1RBTlRfTUFDUk9TCisjICAgZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1NfREVGSU5FRF9CWV9DTEFORworIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpbmNsdWRlX25leHQgPHN0ZGludC5oPgorCisjIGlmZGVmIF9fU1REQ19MSU1JVF9NQUNST1NfREVGSU5FRF9CWV9DTEFORworIyAgdW5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworIyAgdW5kZWYgX19TVERDX0xJTUlUX01BQ1JPU19ERUZJTkVEX0JZX0NMQU5HCisjIGVuZGlmCisjIGlmZGVmIF9fU1REQ19DT05TVEFOVF9NQUNST1NfREVGSU5FRF9CWV9DTEFORworIyAgdW5kZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPUworIyAgdW5kZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPU19ERUZJTkVEX0JZX0NMQU5HCisjIGVuZGlmCisKKyNlbHNlCisKKy8qIEM5OSA3LjE4LjEuMSBFeGFjdC13aWR0aCBpbnRlZ2VyIHR5cGVzLgorICogQzk5IDcuMTguMS4yIE1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcy4KKyAqIEM5OSA3LjE4LjEuMyBGYXN0ZXN0IG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcy4KKyAqCisgKiBUaGUgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCBleGFjdC13aWR0aCB0eXBlIGJlIGRlZmluZWQgZm9yIDgtLCAxNi0sIDMyLSwgYW5kCisgKiA2NC1iaXQgdHlwZXMgaWYgdGhleSBhcmUgaW1wbGVtZW50ZWQuIE90aGVyIGV4YWN0IHdpZHRoIHR5cGVzIGFyZSBvcHRpb25hbC4KKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lcyBhbiBleGFjdC13aWR0aCB0eXBlcyBmb3IgZXZlcnkgaW50ZWdlciB3aWR0aAorICogdGhhdCBpcyByZXByZXNlbnRlZCBpbiB0aGUgc3RhbmRhcmQgaW50ZWdlciB0eXBlcy4KKyAqCisgKiBUaGUgc3RhbmRhcmQgYWxzbyByZXF1aXJlcyBtaW5pbXVtLXdpZHRoIHR5cGVzIGJlIGRlZmluZWQgZm9yIDgtLCAxNi0sIDMyLSwKKyAqIGFuZCA2NC1iaXQgd2lkdGhzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVyZSBhcmUgY29ycmVzcG9uZGluZyBleGFjdC13aWR0aAorICogdHlwZXMuCisgKgorICogVG8gYWNjb21tb2RhdGUgdGFyZ2V0cyB0aGF0IGFyZSBtaXNzaW5nIHR5cGVzIHRoYXQgYXJlIGV4YWN0bHkgOCwgMTYsIDMyLCBvcgorICogNjQgYml0cyB3aWRlLCB0aGlzIGltcGxlbWVudGF0aW9uIHRha2VzIGFuIGFwcHJvYWNoIG9mIGNhc2NhZGluZworICogcmVkZWZpbnRpb25zLCByZWRlZmluaW5nIF9faW50X2xlYXN0Tl90IHRvIHN1Y2Nlc3NpdmVseSBzbWFsbGVyIGV4YWN0LXdpZHRoCisgKiB0eXBlcy4gSXQgaXMgdGhlcmVmb3JlIGltcG9ydGFudCB0aGF0IHRoZSB0eXBlcyBhcmUgZGVmaW5lZCBpbiBvcmRlciBvZgorICogZGVzY2VuZGluZyB3aWR0aHMuCisgKgorICogV2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHRoZSBtaW5pbXVtLXdpZHRoIHR5cGVzIGFuZCB0aGUgZmFzdGVzdAorICogbWluaW11bS13aWR0aCB0eXBlcyBhcmUgdGhlIHNhbWUuIFRoaXMgaXMgYWxsb3dlZCBieSB0aGUgc3RhbmRhcmQsIGJ1dCBpcworICogc3Vib3B0aW1hbC4KKyAqCisgKiBJbiB2aW9sYXRpb24gb2YgdGhlIHN0YW5kYXJkLCBzb21lIHRhcmdldHMgZG8gbm90IGltcGxlbWVudCBhIHR5cGUgdGhhdCBpcworICogd2lkZSBlbm91Z2ggdG8gcmVwcmVzZW50IGFsbCBvZiB0aGUgcmVxdWlyZWQgd2lkdGhzICg4LSwgMTYtLCAzMi0sIDY0LWJpdCkuCisgKiBUbyBhY2NvbW1vZGF0ZSB0aGVzZSB0YXJnZXRzLCBhIHJlcXVpcmVkIG1pbmltdW0td2lkdGggdHlwZSBpcyBvbmx5CisgKiBkZWZpbmVkIGlmIHRoZXJlIGV4aXN0cyBhbiBleGFjdC13aWR0aCB0eXBlIG9mIGVxdWFsIG9yIGdyZWF0ZXIgd2lkdGguCisgKi8KKworI2lmZGVmIF9fSU5UNjRfVFlQRV9fCisjIGlmbmRlZiBfX2ludDhfdF9kZWZpbmVkIC8qIGdsaWJjIHN5cy90eXBlcy5oIGFsc28gZGVmaW5lcyBpbnQ2NF90Ki8KK3R5cGVkZWYgX19JTlQ2NF9UWVBFX18gaW50NjRfdDsKKyMgZW5kaWYgLyogX19pbnQ4X3RfZGVmaW5lZCAqLwordHlwZWRlZiBfX1VJTlQ2NF9UWVBFX18gdWludDY0X3Q7CisjIGRlZmluZSBfX2ludF9sZWFzdDY0X3QgaW50NjRfdAorIyBkZWZpbmUgX191aW50X2xlYXN0NjRfdCB1aW50NjRfdAorIyBkZWZpbmUgX19pbnRfbGVhc3QzMl90IGludDY0X3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDMyX3QgdWludDY0X3QKKyMgZGVmaW5lIF9faW50X2xlYXN0MTZfdCBpbnQ2NF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3QxNl90IHVpbnQ2NF90CisjIGRlZmluZSBfX2ludF9sZWFzdDhfdCBpbnQ2NF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3Q4X3QgdWludDY0X3QKKyNlbmRpZiAvKiBfX0lOVDY0X1RZUEVfXyAqLworCisjaWZkZWYgX19pbnRfbGVhc3Q2NF90Cit0eXBlZGVmIF9faW50X2xlYXN0NjRfdCBpbnRfbGVhc3Q2NF90OwordHlwZWRlZiBfX3VpbnRfbGVhc3Q2NF90IHVpbnRfbGVhc3Q2NF90OwordHlwZWRlZiBfX2ludF9sZWFzdDY0X3QgaW50X2Zhc3Q2NF90OwordHlwZWRlZiBfX3VpbnRfbGVhc3Q2NF90IHVpbnRfZmFzdDY0X3Q7CisjZW5kaWYgLyogX19pbnRfbGVhc3Q2NF90ICovCisKKyNpZmRlZiBfX0lOVDU2X1RZUEVfXwordHlwZWRlZiBfX0lOVDU2X1RZUEVfXyBpbnQ1Nl90OwordHlwZWRlZiBfX1VJTlQ1Nl9UWVBFX18gdWludDU2X3Q7Cit0eXBlZGVmIGludDU2X3QgaW50X2xlYXN0NTZfdDsKK3R5cGVkZWYgdWludDU2X3QgdWludF9sZWFzdDU2X3Q7Cit0eXBlZGVmIGludDU2X3QgaW50X2Zhc3Q1Nl90OwordHlwZWRlZiB1aW50NTZfdCB1aW50X2Zhc3Q1Nl90OworIyBkZWZpbmUgX19pbnRfbGVhc3QzMl90IGludDU2X3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDMyX3QgdWludDU2X3QKKyMgZGVmaW5lIF9faW50X2xlYXN0MTZfdCBpbnQ1Nl90CisjIGRlZmluZSBfX3VpbnRfbGVhc3QxNl90IHVpbnQ1Nl90CisjIGRlZmluZSBfX2ludF9sZWFzdDhfdCBpbnQ1Nl90CisjIGRlZmluZSBfX3VpbnRfbGVhc3Q4X3QgdWludDU2X3QKKyNlbmRpZiAvKiBfX0lOVDU2X1RZUEVfXyAqLworCisKKyNpZmRlZiBfX0lOVDQ4X1RZUEVfXwordHlwZWRlZiBfX0lOVDQ4X1RZUEVfXyBpbnQ0OF90OwordHlwZWRlZiBfX1VJTlQ0OF9UWVBFX18gdWludDQ4X3Q7Cit0eXBlZGVmIGludDQ4X3QgaW50X2xlYXN0NDhfdDsKK3R5cGVkZWYgdWludDQ4X3QgdWludF9sZWFzdDQ4X3Q7Cit0eXBlZGVmIGludDQ4X3QgaW50X2Zhc3Q0OF90OwordHlwZWRlZiB1aW50NDhfdCB1aW50X2Zhc3Q0OF90OworIyBkZWZpbmUgX19pbnRfbGVhc3QzMl90IGludDQ4X3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDMyX3QgdWludDQ4X3QKKyMgZGVmaW5lIF9faW50X2xlYXN0MTZfdCBpbnQ0OF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3QxNl90IHVpbnQ0OF90CisjIGRlZmluZSBfX2ludF9sZWFzdDhfdCBpbnQ0OF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3Q4X3QgdWludDQ4X3QKKyNlbmRpZiAvKiBfX0lOVDQ4X1RZUEVfXyAqLworCisKKyNpZmRlZiBfX0lOVDQwX1RZUEVfXwordHlwZWRlZiBfX0lOVDQwX1RZUEVfXyBpbnQ0MF90OwordHlwZWRlZiBfX1VJTlQ0MF9UWVBFX18gdWludDQwX3Q7Cit0eXBlZGVmIGludDQwX3QgaW50X2xlYXN0NDBfdDsKK3R5cGVkZWYgdWludDQwX3QgdWludF9sZWFzdDQwX3Q7Cit0eXBlZGVmIGludDQwX3QgaW50X2Zhc3Q0MF90OwordHlwZWRlZiB1aW50NDBfdCB1aW50X2Zhc3Q0MF90OworIyBkZWZpbmUgX19pbnRfbGVhc3QzMl90IGludDQwX3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDMyX3QgdWludDQwX3QKKyMgZGVmaW5lIF9faW50X2xlYXN0MTZfdCBpbnQ0MF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3QxNl90IHVpbnQ0MF90CisjIGRlZmluZSBfX2ludF9sZWFzdDhfdCBpbnQ0MF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3Q4X3QgdWludDQwX3QKKyNlbmRpZiAvKiBfX0lOVDQwX1RZUEVfXyAqLworCisKKyNpZmRlZiBfX0lOVDMyX1RZUEVfXworCisjIGlmbmRlZiBfX2ludDhfdF9kZWZpbmVkIC8qIGdsaWJjIHN5cy90eXBlcy5oIGFsc28gZGVmaW5lcyBpbnQzMl90Ki8KK3R5cGVkZWYgX19JTlQzMl9UWVBFX18gaW50MzJfdDsKKyMgZW5kaWYgLyogX19pbnQ4X3RfZGVmaW5lZCAqLworCisjIGlmbmRlZiBfX3VpbnQzMl90X2RlZmluZWQgIC8qIG1vcmUgZ2xpYmMgY29tcGF0aWJpbGl0eSAqLworIyBkZWZpbmUgX191aW50MzJfdF9kZWZpbmVkCit0eXBlZGVmIF9fVUlOVDMyX1RZUEVfXyB1aW50MzJfdDsKKyMgZW5kaWYgLyogX191aW50MzJfdF9kZWZpbmVkICovCisKKyMgZGVmaW5lIF9faW50X2xlYXN0MzJfdCBpbnQzMl90CisjIGRlZmluZSBfX3VpbnRfbGVhc3QzMl90IHVpbnQzMl90CisjIGRlZmluZSBfX2ludF9sZWFzdDE2X3QgaW50MzJfdAorIyBkZWZpbmUgX191aW50X2xlYXN0MTZfdCB1aW50MzJfdAorIyBkZWZpbmUgX19pbnRfbGVhc3Q4X3QgaW50MzJfdAorIyBkZWZpbmUgX191aW50X2xlYXN0OF90IHVpbnQzMl90CisjZW5kaWYgLyogX19JTlQzMl9UWVBFX18gKi8KKworI2lmZGVmIF9faW50X2xlYXN0MzJfdAordHlwZWRlZiBfX2ludF9sZWFzdDMyX3QgaW50X2xlYXN0MzJfdDsKK3R5cGVkZWYgX191aW50X2xlYXN0MzJfdCB1aW50X2xlYXN0MzJfdDsKK3R5cGVkZWYgX19pbnRfbGVhc3QzMl90IGludF9mYXN0MzJfdDsKK3R5cGVkZWYgX191aW50X2xlYXN0MzJfdCB1aW50X2Zhc3QzMl90OworI2VuZGlmIC8qIF9faW50X2xlYXN0MzJfdCAqLworCisjaWZkZWYgX19JTlQyNF9UWVBFX18KK3R5cGVkZWYgX19JTlQyNF9UWVBFX18gaW50MjRfdDsKK3R5cGVkZWYgX19VSU5UMjRfVFlQRV9fIHVpbnQyNF90OwordHlwZWRlZiBpbnQyNF90IGludF9sZWFzdDI0X3Q7Cit0eXBlZGVmIHVpbnQyNF90IHVpbnRfbGVhc3QyNF90OwordHlwZWRlZiBpbnQyNF90IGludF9mYXN0MjRfdDsKK3R5cGVkZWYgdWludDI0X3QgdWludF9mYXN0MjRfdDsKKyMgZGVmaW5lIF9faW50X2xlYXN0MTZfdCBpbnQyNF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3QxNl90IHVpbnQyNF90CisjIGRlZmluZSBfX2ludF9sZWFzdDhfdCBpbnQyNF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3Q4X3QgdWludDI0X3QKKyNlbmRpZiAvKiBfX0lOVDI0X1RZUEVfXyAqLworCisjaWZkZWYgX19JTlQxNl9UWVBFX18KKyNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZCAvKiBnbGliYyBzeXMvdHlwZXMuaCBhbHNvIGRlZmluZXMgaW50MTZfdCovCit0eXBlZGVmIF9fSU5UMTZfVFlQRV9fIGludDE2X3Q7CisjZW5kaWYgLyogX19pbnQ4X3RfZGVmaW5lZCAqLwordHlwZWRlZiBfX1VJTlQxNl9UWVBFX18gdWludDE2X3Q7CisjIGRlZmluZSBfX2ludF9sZWFzdDE2X3QgaW50MTZfdAorIyBkZWZpbmUgX191aW50X2xlYXN0MTZfdCB1aW50MTZfdAorIyBkZWZpbmUgX19pbnRfbGVhc3Q4X3QgaW50MTZfdAorIyBkZWZpbmUgX191aW50X2xlYXN0OF90IHVpbnQxNl90CisjZW5kaWYgLyogX19JTlQxNl9UWVBFX18gKi8KKworI2lmZGVmIF9faW50X2xlYXN0MTZfdAordHlwZWRlZiBfX2ludF9sZWFzdDE2X3QgaW50X2xlYXN0MTZfdDsKK3R5cGVkZWYgX191aW50X2xlYXN0MTZfdCB1aW50X2xlYXN0MTZfdDsKK3R5cGVkZWYgX19pbnRfbGVhc3QxNl90IGludF9mYXN0MTZfdDsKK3R5cGVkZWYgX191aW50X2xlYXN0MTZfdCB1aW50X2Zhc3QxNl90OworI2VuZGlmIC8qIF9faW50X2xlYXN0MTZfdCAqLworCisKKyNpZmRlZiBfX0lOVDhfVFlQRV9fCisjaWZuZGVmIF9faW50OF90X2RlZmluZWQgIC8qIGdsaWJjIHN5cy90eXBlcy5oIGFsc28gZGVmaW5lcyBpbnQ4X3QqLwordHlwZWRlZiBfX0lOVDhfVFlQRV9fIGludDhfdDsKKyNlbmRpZiAvKiBfX2ludDhfdF9kZWZpbmVkICovCit0eXBlZGVmIF9fVUlOVDhfVFlQRV9fIHVpbnQ4X3Q7CisjIGRlZmluZSBfX2ludF9sZWFzdDhfdCBpbnQ4X3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDhfdCB1aW50OF90CisjZW5kaWYgLyogX19JTlQ4X1RZUEVfXyAqLworCisjaWZkZWYgX19pbnRfbGVhc3Q4X3QKK3R5cGVkZWYgX19pbnRfbGVhc3Q4X3QgaW50X2xlYXN0OF90OwordHlwZWRlZiBfX3VpbnRfbGVhc3Q4X3QgdWludF9sZWFzdDhfdDsKK3R5cGVkZWYgX19pbnRfbGVhc3Q4X3QgaW50X2Zhc3Q4X3Q7Cit0eXBlZGVmIF9fdWludF9sZWFzdDhfdCB1aW50X2Zhc3Q4X3Q7CisjZW5kaWYgLyogX19pbnRfbGVhc3Q4X3QgKi8KKworLyogcHJldmVudCBnbGliYyBzeXMvdHlwZXMuaCBmcm9tIGRlZmluaW5nIGNvbmZsaWN0aW5nIHR5cGVzICovCisjaWZuZGVmIF9faW50OF90X2RlZmluZWQKKyMgZGVmaW5lIF9faW50OF90X2RlZmluZWQKKyNlbmRpZiAvKiBfX2ludDhfdF9kZWZpbmVkICovCisKKy8qIEM5OSA3LjE4LjEuNCBJbnRlZ2VyIHR5cGVzIGNhcGFibGUgb2YgaG9sZGluZyBvYmplY3QgcG9pbnRlcnMuCisgKi8KKyNkZWZpbmUgX19zdGRpbnRfam9pbjMoYSxiLGMpIGEgIyMgYiAjIyBjCisKKyNkZWZpbmUgIF9faW50bl90KG4pIF9fc3RkaW50X2pvaW4zKCBpbnQsIG4sIF90KQorI2RlZmluZSBfX3VpbnRuX3QobikgX19zdGRpbnRfam9pbjModWludCwgbiwgX3QpCisKKyNpZm5kZWYgX0lOVFBUUl9UCisjaWZuZGVmIF9faW50cHRyX3RfZGVmaW5lZAordHlwZWRlZiAgX19pbnRuX3QoX19JTlRQVFJfV0lEVEhfXykgIGludHB0cl90OworI2RlZmluZSBfX2ludHB0cl90X2RlZmluZWQKKyNkZWZpbmUgX0lOVFBUUl9UCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9VSU5UUFRSX1QKK3R5cGVkZWYgX191aW50bl90KF9fSU5UUFRSX1dJRFRIX18pIHVpbnRwdHJfdDsKKyNkZWZpbmUgX1VJTlRQVFJfVAorI2VuZGlmCisKKy8qIEM5OSA3LjE4LjEuNSBHcmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzLgorICovCit0eXBlZGVmIF9fSU5UTUFYX1RZUEVfXyAgaW50bWF4X3Q7Cit0eXBlZGVmIF9fVUlOVE1BWF9UWVBFX18gdWludG1heF90OworCisvKiBDOTkgNy4xOC40IE1hY3JvcyBmb3IgbWluaW11bS13aWR0aCBpbnRlZ2VyIGNvbnN0YW50cy4KKyAqCisgKiBUaGUgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCBpbnRlZ2VyIGNvbnN0YW50IG1hY3JvcyBiZSBkZWZpbmVkIGZvciBhbGwgdGhlCisgKiBtaW5pbXVtLXdpZHRoIHR5cGVzIGRlZmluZWQgYWJvdmUuIEFzIDgtLCAxNi0sIDMyLSwgYW5kIDY0LWJpdCBtaW5pbXVtLXdpZHRoCisgKiB0eXBlcyBhcmUgcmVxdWlyZWQsIHRoZSBjb3JyZXNwb25kaW5nIGludGVnZXIgY29uc3RhbnQgbWFjcm9zIGFyZSBkZWZpbmVkCisgKiBoZXJlLiBUaGlzIGltcGxlbWVudGF0aW9uIGFsc28gZGVmaW5lcyBtaW5pbXVtLXdpZHRoIHR5cGVzIGZvciBldmVyeSBvdGhlcgorICogaW50ZWdlciB3aWR0aCB0aGF0IHRoZSB0YXJnZXQgaW1wbGVtZW50cywgc28gY29ycmVzcG9uZGluZyBtYWNyb3MgYXJlCisgKiBkZWZpbmVkIGJlbG93LCB0b28uCisgKgorICogVGhlc2UgbWFjcm9zIGFyZSBkZWZpbmVkIHVzaW5nIHRoZSBzYW1lIHN1Y2Nlc3NpdmUtc2hyaW5raW5nIGFwcHJvYWNoIGFzCisgKiB0aGUgdHlwZSBkZWZpbml0aW9ucyBhYm92ZS4gSXQgaXMgbGlrZXdpc2UgaW1wb3J0YW50IHRoYXQgbWFjcm9zIGFyZSBkZWZpbmVkCisgKiBpbiBvcmRlciBvZiBkZWNlbmRpbmcgd2lkdGguCisgKgorICogTm90ZSB0aGF0IEMrKyBzaG91bGQgbm90IGNoZWNrIF9fU1REQ19DT05TVEFOVF9NQUNST1MgaGVyZSwgY29udHJhcnkgdG8gdGhlCisgKiBjbGFpbXMgb2YgdGhlIEMgc3RhbmRhcmQgKHNlZSBDKysgMTguMy4xcDIsIFtjc3RkaW50LnN5bl0pLgorICovCisKKyNkZWZpbmUgX19pbnRfY19qb2luKGEsIGIpIGEgIyMgYgorI2RlZmluZSBfX2ludF9jKHYsIHN1ZmZpeCkgX19pbnRfY19qb2luKHYsIHN1ZmZpeCkKKyNkZWZpbmUgX191aW50X2Modiwgc3VmZml4KSBfX2ludF9jX2pvaW4odiMjVSwgc3VmZml4KQorCisKKyNpZmRlZiBfX0lOVDY0X1RZUEVfXworIyBpZmRlZiBfX0lOVDY0X0NfU1VGRklYX18KKyMgIGRlZmluZSBfX2ludDY0X2Nfc3VmZml4IF9fSU5UNjRfQ19TVUZGSVhfXworIyAgZGVmaW5lIF9faW50MzJfY19zdWZmaXggX19JTlQ2NF9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQxNl9jX3N1ZmZpeCBfX0lOVDY0X0NfU1VGRklYX18KKyMgIGRlZmluZSAgX19pbnQ4X2Nfc3VmZml4IF9fSU5UNjRfQ19TVUZGSVhfXworIyBlbHNlCisjICB1bmRlZiBfX2ludDY0X2Nfc3VmZml4CisjICB1bmRlZiBfX2ludDMyX2Nfc3VmZml4CisjICB1bmRlZiBfX2ludDE2X2Nfc3VmZml4CisjICB1bmRlZiAgX19pbnQ4X2Nfc3VmZml4CisjIGVuZGlmIC8qIF9fSU5UNjRfQ19TVUZGSVhfXyAqLworI2VuZGlmIC8qIF9fSU5UNjRfVFlQRV9fICovCisKKyNpZmRlZiBfX2ludF9sZWFzdDY0X3QKKyMgaWZkZWYgX19pbnQ2NF9jX3N1ZmZpeAorIyAgZGVmaW5lIElOVDY0X0ModikgX19pbnRfYyh2LCBfX2ludDY0X2Nfc3VmZml4KQorIyAgZGVmaW5lIFVJTlQ2NF9DKHYpIF9fdWludF9jKHYsIF9faW50NjRfY19zdWZmaXgpCisjIGVsc2UKKyMgIGRlZmluZSBJTlQ2NF9DKHYpIHYKKyMgIGRlZmluZSBVSU5UNjRfQyh2KSB2ICMjIFUKKyMgZW5kaWYgLyogX19pbnQ2NF9jX3N1ZmZpeCAqLworI2VuZGlmIC8qIF9faW50X2xlYXN0NjRfdCAqLworCisKKyNpZmRlZiBfX0lOVDU2X1RZUEVfXworIyBpZmRlZiBfX0lOVDU2X0NfU1VGRklYX18KKyMgIGRlZmluZSBJTlQ1Nl9DKHYpIF9faW50X2ModiwgX19JTlQ1Nl9DX1NVRkZJWF9fKQorIyAgZGVmaW5lIFVJTlQ1Nl9DKHYpIF9fdWludF9jKHYsIF9fSU5UNTZfQ19TVUZGSVhfXykKKyMgIGRlZmluZSBfX2ludDMyX2Nfc3VmZml4IF9fSU5UNTZfQ19TVUZGSVhfXworIyAgZGVmaW5lIF9faW50MTZfY19zdWZmaXggX19JTlQ1Nl9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQ4X2Nfc3VmZml4ICBfX0lOVDU2X0NfU1VGRklYX18KKyMgZWxzZQorIyAgZGVmaW5lIElOVDU2X0ModikgdgorIyAgZGVmaW5lIFVJTlQ1Nl9DKHYpIHYgIyMgVQorIyAgdW5kZWYgX19pbnQzMl9jX3N1ZmZpeAorIyAgdW5kZWYgX19pbnQxNl9jX3N1ZmZpeAorIyAgdW5kZWYgIF9faW50OF9jX3N1ZmZpeAorIyBlbmRpZiAvKiBfX0lOVDU2X0NfU1VGRklYX18gKi8KKyNlbmRpZiAvKiBfX0lOVDU2X1RZUEVfXyAqLworCisKKyNpZmRlZiBfX0lOVDQ4X1RZUEVfXworIyBpZmRlZiBfX0lOVDQ4X0NfU1VGRklYX18KKyMgIGRlZmluZSBJTlQ0OF9DKHYpIF9faW50X2ModiwgX19JTlQ0OF9DX1NVRkZJWF9fKQorIyAgZGVmaW5lIFVJTlQ0OF9DKHYpIF9fdWludF9jKHYsIF9fSU5UNDhfQ19TVUZGSVhfXykKKyMgIGRlZmluZSBfX2ludDMyX2Nfc3VmZml4IF9fSU5UNDhfQ19TVUZGSVhfXworIyAgZGVmaW5lIF9faW50MTZfY19zdWZmaXggX19JTlQ0OF9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQ4X2Nfc3VmZml4ICBfX0lOVDQ4X0NfU1VGRklYX18KKyMgZWxzZQorIyAgZGVmaW5lIElOVDQ4X0ModikgdgorIyAgZGVmaW5lIFVJTlQ0OF9DKHYpIHYgIyMgVQorIyAgdW5kZWYgX19pbnQzMl9jX3N1ZmZpeAorIyAgdW5kZWYgX19pbnQxNl9jX3N1ZmZpeAorIyAgdW5kZWYgIF9faW50OF9jX3N1ZmZpeAorIyBlbmRpZiAvKiBfX0lOVDQ4X0NfU1VGRklYX18gKi8KKyNlbmRpZiAvKiBfX0lOVDQ4X1RZUEVfXyAqLworCisKKyNpZmRlZiBfX0lOVDQwX1RZUEVfXworIyBpZmRlZiBfX0lOVDQwX0NfU1VGRklYX18KKyMgIGRlZmluZSBJTlQ0MF9DKHYpIF9faW50X2ModiwgX19JTlQ0MF9DX1NVRkZJWF9fKQorIyAgZGVmaW5lIFVJTlQ0MF9DKHYpIF9fdWludF9jKHYsIF9fSU5UNDBfQ19TVUZGSVhfXykKKyMgIGRlZmluZSBfX2ludDMyX2Nfc3VmZml4IF9fSU5UNDBfQ19TVUZGSVhfXworIyAgZGVmaW5lIF9faW50MTZfY19zdWZmaXggX19JTlQ0MF9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQ4X2Nfc3VmZml4ICBfX0lOVDQwX0NfU1VGRklYX18KKyMgZWxzZQorIyAgZGVmaW5lIElOVDQwX0ModikgdgorIyAgZGVmaW5lIFVJTlQ0MF9DKHYpIHYgIyMgVQorIyAgdW5kZWYgX19pbnQzMl9jX3N1ZmZpeAorIyAgdW5kZWYgX19pbnQxNl9jX3N1ZmZpeAorIyAgdW5kZWYgIF9faW50OF9jX3N1ZmZpeAorIyBlbmRpZiAvKiBfX0lOVDQwX0NfU1VGRklYX18gKi8KKyNlbmRpZiAvKiBfX0lOVDQwX1RZUEVfXyAqLworCisKKyNpZmRlZiBfX0lOVDMyX1RZUEVfXworIyBpZmRlZiBfX0lOVDMyX0NfU1VGRklYX18KKyMgIGRlZmluZSBfX2ludDMyX2Nfc3VmZml4IF9fSU5UMzJfQ19TVUZGSVhfXworIyAgZGVmaW5lIF9faW50MTZfY19zdWZmaXggX19JTlQzMl9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQ4X2Nfc3VmZml4ICBfX0lOVDMyX0NfU1VGRklYX18KKyNlbHNlCisjICB1bmRlZiBfX2ludDMyX2Nfc3VmZml4CisjICB1bmRlZiBfX2ludDE2X2Nfc3VmZml4CisjICB1bmRlZiAgX19pbnQ4X2Nfc3VmZml4CisjIGVuZGlmIC8qIF9fSU5UMzJfQ19TVUZGSVhfXyAqLworI2VuZGlmIC8qIF9fSU5UMzJfVFlQRV9fICovCisKKyNpZmRlZiBfX2ludF9sZWFzdDMyX3QKKyMgaWZkZWYgX19pbnQzMl9jX3N1ZmZpeAorIyAgZGVmaW5lIElOVDMyX0ModikgX19pbnRfYyh2LCBfX2ludDMyX2Nfc3VmZml4KQorIyAgZGVmaW5lIFVJTlQzMl9DKHYpIF9fdWludF9jKHYsIF9faW50MzJfY19zdWZmaXgpCisjIGVsc2UKKyMgIGRlZmluZSBJTlQzMl9DKHYpIHYKKyMgIGRlZmluZSBVSU5UMzJfQyh2KSB2ICMjIFUKKyMgZW5kaWYgLyogX19pbnQzMl9jX3N1ZmZpeCAqLworI2VuZGlmIC8qIF9faW50X2xlYXN0MzJfdCAqLworCisKKyNpZmRlZiBfX0lOVDI0X1RZUEVfXworIyBpZmRlZiBfX0lOVDI0X0NfU1VGRklYX18KKyMgIGRlZmluZSBJTlQyNF9DKHYpIF9faW50X2ModiwgX19JTlQyNF9DX1NVRkZJWF9fKQorIyAgZGVmaW5lIFVJTlQyNF9DKHYpIF9fdWludF9jKHYsIF9fSU5UMjRfQ19TVUZGSVhfXykKKyMgIGRlZmluZSBfX2ludDE2X2Nfc3VmZml4IF9fSU5UMjRfQ19TVUZGSVhfXworIyAgZGVmaW5lIF9faW50OF9jX3N1ZmZpeCAgX19JTlQyNF9DX1NVRkZJWF9fCisjIGVsc2UKKyMgIGRlZmluZSBJTlQyNF9DKHYpIHYKKyMgIGRlZmluZSBVSU5UMjRfQyh2KSB2ICMjIFUKKyMgIHVuZGVmIF9faW50MTZfY19zdWZmaXgKKyMgIHVuZGVmICBfX2ludDhfY19zdWZmaXgKKyMgZW5kaWYgLyogX19JTlQyNF9DX1NVRkZJWF9fICovCisjZW5kaWYgLyogX19JTlQyNF9UWVBFX18gKi8KKworCisjaWZkZWYgX19JTlQxNl9UWVBFX18KKyMgaWZkZWYgX19JTlQxNl9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQxNl9jX3N1ZmZpeCBfX0lOVDE2X0NfU1VGRklYX18KKyMgIGRlZmluZSBfX2ludDhfY19zdWZmaXggIF9fSU5UMTZfQ19TVUZGSVhfXworI2Vsc2UKKyMgIHVuZGVmIF9faW50MTZfY19zdWZmaXgKKyMgIHVuZGVmICBfX2ludDhfY19zdWZmaXgKKyMgZW5kaWYgLyogX19JTlQxNl9DX1NVRkZJWF9fICovCisjZW5kaWYgLyogX19JTlQxNl9UWVBFX18gKi8KKworI2lmZGVmIF9faW50X2xlYXN0MTZfdAorIyBpZmRlZiBfX2ludDE2X2Nfc3VmZml4CisjICBkZWZpbmUgSU5UMTZfQyh2KSBfX2ludF9jKHYsIF9faW50MTZfY19zdWZmaXgpCisjICBkZWZpbmUgVUlOVDE2X0ModikgX191aW50X2ModiwgX19pbnQxNl9jX3N1ZmZpeCkKKyMgZWxzZQorIyAgZGVmaW5lIElOVDE2X0ModikgdgorIyAgZGVmaW5lIFVJTlQxNl9DKHYpIHYgIyMgVQorIyBlbmRpZiAvKiBfX2ludDE2X2Nfc3VmZml4ICovCisjZW5kaWYgLyogX19pbnRfbGVhc3QxNl90ICovCisKKworI2lmZGVmIF9fSU5UOF9UWVBFX18KKyMgaWZkZWYgX19JTlQ4X0NfU1VGRklYX18KKyMgIGRlZmluZSBfX2ludDhfY19zdWZmaXggX19JTlQ4X0NfU1VGRklYX18KKyNlbHNlCisjICB1bmRlZiAgX19pbnQ4X2Nfc3VmZml4CisjIGVuZGlmIC8qIF9fSU5UOF9DX1NVRkZJWF9fICovCisjZW5kaWYgLyogX19JTlQ4X1RZUEVfXyAqLworCisjaWZkZWYgX19pbnRfbGVhc3Q4X3QKKyMgaWZkZWYgX19pbnQ4X2Nfc3VmZml4CisjICBkZWZpbmUgSU5UOF9DKHYpIF9faW50X2ModiwgX19pbnQ4X2Nfc3VmZml4KQorIyAgZGVmaW5lIFVJTlQ4X0ModikgX191aW50X2ModiwgX19pbnQ4X2Nfc3VmZml4KQorIyBlbHNlCisjICBkZWZpbmUgSU5UOF9DKHYpIHYKKyMgIGRlZmluZSBVSU5UOF9DKHYpIHYgIyMgVQorIyBlbmRpZiAvKiBfX2ludDhfY19zdWZmaXggKi8KKyNlbmRpZiAvKiBfX2ludF9sZWFzdDhfdCAqLworCisKKy8qIEM5OSA3LjE4LjIuMSBMaW1pdHMgb2YgZXhhY3Qtd2lkdGggaW50ZWdlciB0eXBlcy4KKyAqIEM5OSA3LjE4LjIuMiBMaW1pdHMgb2YgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzLgorICogQzk5IDcuMTguMi4zIExpbWl0cyBvZiBmYXN0ZXN0IG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcy4KKyAqCisgKiBUaGUgcHJlc2VuY2Ugb2YgbGltaXQgbWFjcm9zIGFyZSBjb21wbGV0ZWx5IG9wdGlvbmFsIGluIEM5OS4gIFRoaXMKKyAqIGltcGxlbWVudGF0aW9uIGRlZmluZXMgbGltaXRzIGZvciBhbGwgb2YgdGhlIHR5cGVzIChleGFjdC0gYW5kCisgKiBtaW5pbXVtLXdpZHRoKSB0aGF0IGl0IGRlZmluZXMgYWJvdmUsIHVzaW5nIHRoZSBsaW1pdHMgb2YgdGhlIG1pbmltdW0td2lkdGgKKyAqIHR5cGUgZm9yIGFueSB0eXBlcyB0aGF0IGRvIG5vdCBoYXZlIGV4YWN0LXdpZHRoIHJlcHJlc2VudGF0aW9ucy4KKyAqCisgKiBBcyBpbiB0aGUgdHlwZSBkZWZpbml0aW9ucywgdGhpcyBzZWN0aW9uIHRha2VzIGFuIGFwcHJvYWNoIG9mCisgKiBzdWNjZXNzaXZlLXNocmlua2luZyB0byBkZXRlcm1pbmUgd2hpY2ggbGltaXRzIHRvIHVzZSBmb3IgdGhlIHN0YW5kYXJkICg4LAorICogMTYsIDMyLCA2NCkgYml0IHdpZHRocyB3aGVuIHRoZXkgZG9uJ3QgaGF2ZSBleGFjdCByZXByZXNlbnRhdGlvbnMuIEl0IGlzCisgKiB0aGVyZWZvcmUgaW1wb3J0YW50IHRoYXQgdGhlIGRlZmludGlvbnMgYmUga2VwdCBpbiBvcmRlciBvZiBkZWNlbmRpbmcKKyAqIHdpZHRocy4KKyAqCisgKiBOb3RlIHRoYXQgQysrIHNob3VsZCBub3QgY2hlY2sgX19TVERDX0xJTUlUX01BQ1JPUyBoZXJlLCBjb250cmFyeSB0byB0aGUKKyAqIGNsYWltcyBvZiB0aGUgQyBzdGFuZGFyZCAoc2VlIEMrKyAxOC4zLjFwMiwgW2NzdGRpbnQuc3luXSkuCisgKi8KKworI2lmZGVmIF9fSU5UNjRfVFlQRV9fCisjIGRlZmluZSBJTlQ2NF9NQVggICAgICAgICAgIElOVDY0X0MoIDkyMjMzNzIwMzY4NTQ3NzU4MDcpCisjIGRlZmluZSBJTlQ2NF9NSU4gICAgICAgICAoLUlOVDY0X0MoIDkyMjMzNzIwMzY4NTQ3NzU4MDcpLTEpCisjIGRlZmluZSBVSU5UNjRfTUFYICAgICAgICAgVUlOVDY0X0MoMTg0NDY3NDQwNzM3MDk1NTE2MTUpCisjIGRlZmluZSBfX0lOVF9MRUFTVDY0X01JTiAgIElOVDY0X01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1Q2NF9NQVggICBJTlQ2NF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDY0X01BWCBVSU5UNjRfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDMyX01JTiAgIElOVDY0X01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1QzMl9NQVggICBJTlQ2NF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDMyX01BWCBVSU5UNjRfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDE2X01JTiAgIElOVDY0X01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NQVggICBJTlQ2NF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDE2X01BWCBVSU5UNjRfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUlOICAgIElOVDY0X01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01BWCAgICBJTlQ2NF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDhfTUFYICBVSU5UNjRfTUFYCisjZW5kaWYgLyogX19JTlQ2NF9UWVBFX18gKi8KKworI2lmZGVmIF9fSU5UX0xFQVNUNjRfTUlOCisjIGRlZmluZSBJTlRfTEVBU1Q2NF9NSU4gICBfX0lOVF9MRUFTVDY0X01JTgorIyBkZWZpbmUgSU5UX0xFQVNUNjRfTUFYICAgX19JTlRfTEVBU1Q2NF9NQVgKKyMgZGVmaW5lIFVJTlRfTEVBU1Q2NF9NQVggX19VSU5UX0xFQVNUNjRfTUFYCisjIGRlZmluZSBJTlRfRkFTVDY0X01JTiAgICBfX0lOVF9MRUFTVDY0X01JTgorIyBkZWZpbmUgSU5UX0ZBU1Q2NF9NQVggICAgX19JTlRfTEVBU1Q2NF9NQVgKKyMgZGVmaW5lIFVJTlRfRkFTVDY0X01BWCAgX19VSU5UX0xFQVNUNjRfTUFYCisjZW5kaWYgLyogX19JTlRfTEVBU1Q2NF9NSU4gKi8KKworCisjaWZkZWYgX19JTlQ1Nl9UWVBFX18KKyMgZGVmaW5lIElOVDU2X01BWCAgICAgICAgICAgSU5UNTZfQygzNjAyODc5NzAxODk2Mzk2NykKKyMgZGVmaW5lIElOVDU2X01JTiAgICAgICAgICgtSU5UNTZfQygzNjAyODc5NzAxODk2Mzk2NyktMSkKKyMgZGVmaW5lIFVJTlQ1Nl9NQVggICAgICAgICBVSU5UNTZfQyg3MjA1NzU5NDAzNzkyNzkzNSkKKyMgZGVmaW5lIElOVF9MRUFTVDU2X01JTiAgICAgSU5UNTZfTUlOCisjIGRlZmluZSBJTlRfTEVBU1Q1Nl9NQVggICAgIElOVDU2X01BWAorIyBkZWZpbmUgVUlOVF9MRUFTVDU2X01BWCAgIFVJTlQ1Nl9NQVgKKyMgZGVmaW5lIElOVF9GQVNUNTZfTUlOICAgICAgSU5UNTZfTUlOCisjIGRlZmluZSBJTlRfRkFTVDU2X01BWCAgICAgIElOVDU2X01BWAorIyBkZWZpbmUgVUlOVF9GQVNUNTZfTUFYICAgIFVJTlQ1Nl9NQVgKKyMgZGVmaW5lIF9fSU5UX0xFQVNUMzJfTUlOICAgSU5UNTZfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDMyX01BWCAgIElOVDU2X01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUMzJfTUFYIFVJTlQ1Nl9NQVgKKyMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUlOICAgSU5UNTZfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDE2X01BWCAgIElOVDU2X01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUMTZfTUFYIFVJTlQ1Nl9NQVgKKyMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NSU4gICAgSU5UNTZfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUFYICAgIElOVDU2X01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUOF9NQVggIFVJTlQ1Nl9NQVgKKyNlbmRpZiAvKiBfX0lOVDU2X1RZUEVfXyAqLworCisKKyNpZmRlZiBfX0lOVDQ4X1RZUEVfXworIyBkZWZpbmUgSU5UNDhfTUFYICAgICAgICAgICBJTlQ0OF9DKDE0MDczNzQ4ODM1NTMyNykKKyMgZGVmaW5lIElOVDQ4X01JTiAgICAgICAgICgtSU5UNDhfQygxNDA3Mzc0ODgzNTUzMjcpLTEpCisjIGRlZmluZSBVSU5UNDhfTUFYICAgICAgICAgVUlOVDQ4X0MoMjgxNDc0OTc2NzEwNjU1KQorIyBkZWZpbmUgSU5UX0xFQVNUNDhfTUlOICAgICBJTlQ0OF9NSU4KKyMgZGVmaW5lIElOVF9MRUFTVDQ4X01BWCAgICAgSU5UNDhfTUFYCisjIGRlZmluZSBVSU5UX0xFQVNUNDhfTUFYICAgVUlOVDQ4X01BWAorIyBkZWZpbmUgSU5UX0ZBU1Q0OF9NSU4gICAgICBJTlQ0OF9NSU4KKyMgZGVmaW5lIElOVF9GQVNUNDhfTUFYICAgICAgSU5UNDhfTUFYCisjIGRlZmluZSBVSU5UX0ZBU1Q0OF9NQVggICAgVUlOVDQ4X01BWAorIyBkZWZpbmUgX19JTlRfTEVBU1QzMl9NSU4gICBJTlQ0OF9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUMzJfTUFYICAgSU5UNDhfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1QzMl9NQVggVUlOVDQ4X01BWAorIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NSU4gICBJTlQ0OF9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUFYICAgSU5UNDhfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1QxNl9NQVggVUlOVDQ4X01BWAorIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01JTiAgICBJTlQ0OF9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NQVggICAgSU5UNDhfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1Q4X01BWCAgVUlOVDQ4X01BWAorI2VuZGlmIC8qIF9fSU5UNDhfVFlQRV9fICovCisKKworI2lmZGVmIF9fSU5UNDBfVFlQRV9fCisjIGRlZmluZSBJTlQ0MF9NQVggICAgICAgICAgIElOVDQwX0MoNTQ5NzU1ODEzODg3KQorIyBkZWZpbmUgSU5UNDBfTUlOICAgICAgICAgKC1JTlQ0MF9DKDU0OTc1NTgxMzg4NyktMSkKKyMgZGVmaW5lIFVJTlQ0MF9NQVggICAgICAgICBVSU5UNDBfQygxMDk5NTExNjI3Nzc1KQorIyBkZWZpbmUgSU5UX0xFQVNUNDBfTUlOICAgICBJTlQ0MF9NSU4KKyMgZGVmaW5lIElOVF9MRUFTVDQwX01BWCAgICAgSU5UNDBfTUFYCisjIGRlZmluZSBVSU5UX0xFQVNUNDBfTUFYICAgVUlOVDQwX01BWAorIyBkZWZpbmUgSU5UX0ZBU1Q0MF9NSU4gICAgICBJTlQ0MF9NSU4KKyMgZGVmaW5lIElOVF9GQVNUNDBfTUFYICAgICAgSU5UNDBfTUFYCisjIGRlZmluZSBVSU5UX0ZBU1Q0MF9NQVggICAgVUlOVDQwX01BWAorIyBkZWZpbmUgX19JTlRfTEVBU1QzMl9NSU4gICBJTlQ0MF9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUMzJfTUFYICAgSU5UNDBfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1QzMl9NQVggVUlOVDQwX01BWAorIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NSU4gICBJTlQ0MF9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUFYICAgSU5UNDBfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1QxNl9NQVggVUlOVDQwX01BWAorIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01JTiAgICBJTlQ0MF9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NQVggICAgSU5UNDBfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1Q4X01BWCAgVUlOVDQwX01BWAorI2VuZGlmIC8qIF9fSU5UNDBfVFlQRV9fICovCisKKworI2lmZGVmIF9fSU5UMzJfVFlQRV9fCisjIGRlZmluZSBJTlQzMl9NQVggICAgICAgICAgIElOVDMyX0MoMjE0NzQ4MzY0NykKKyMgZGVmaW5lIElOVDMyX01JTiAgICAgICAgICgtSU5UMzJfQygyMTQ3NDgzNjQ3KS0xKQorIyBkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgIFVJTlQzMl9DKDQyOTQ5NjcyOTUpCisjIGRlZmluZSBfX0lOVF9MRUFTVDMyX01JTiAgIElOVDMyX01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1QzMl9NQVggICBJTlQzMl9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDMyX01BWCBVSU5UMzJfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDE2X01JTiAgIElOVDMyX01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NQVggICBJTlQzMl9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDE2X01BWCBVSU5UMzJfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUlOICAgIElOVDMyX01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01BWCAgICBJTlQzMl9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDhfTUFYICBVSU5UMzJfTUFYCisjZW5kaWYgLyogX19JTlQzMl9UWVBFX18gKi8KKworI2lmZGVmIF9fSU5UX0xFQVNUMzJfTUlOCisjIGRlZmluZSBJTlRfTEVBU1QzMl9NSU4gICBfX0lOVF9MRUFTVDMyX01JTgorIyBkZWZpbmUgSU5UX0xFQVNUMzJfTUFYICAgX19JTlRfTEVBU1QzMl9NQVgKKyMgZGVmaW5lIFVJTlRfTEVBU1QzMl9NQVggX19VSU5UX0xFQVNUMzJfTUFYCisjIGRlZmluZSBJTlRfRkFTVDMyX01JTiAgICBfX0lOVF9MRUFTVDMyX01JTgorIyBkZWZpbmUgSU5UX0ZBU1QzMl9NQVggICAgX19JTlRfTEVBU1QzMl9NQVgKKyMgZGVmaW5lIFVJTlRfRkFTVDMyX01BWCAgX19VSU5UX0xFQVNUMzJfTUFYCisjZW5kaWYgLyogX19JTlRfTEVBU1QzMl9NSU4gKi8KKworCisjaWZkZWYgX19JTlQyNF9UWVBFX18KKyMgZGVmaW5lIElOVDI0X01BWCAgICAgICAgICAgSU5UMjRfQyg4Mzg4NjA3KQorIyBkZWZpbmUgSU5UMjRfTUlOICAgICAgICAgKC1JTlQyNF9DKDgzODg2MDcpLTEpCisjIGRlZmluZSBVSU5UMjRfTUFYICAgICAgICAgVUlOVDI0X0MoMTY3NzcyMTUpCisjIGRlZmluZSBJTlRfTEVBU1QyNF9NSU4gICAgIElOVDI0X01JTgorIyBkZWZpbmUgSU5UX0xFQVNUMjRfTUFYICAgICBJTlQyNF9NQVgKKyMgZGVmaW5lIFVJTlRfTEVBU1QyNF9NQVggICBVSU5UMjRfTUFYCisjIGRlZmluZSBJTlRfRkFTVDI0X01JTiAgICAgIElOVDI0X01JTgorIyBkZWZpbmUgSU5UX0ZBU1QyNF9NQVggICAgICBJTlQyNF9NQVgKKyMgZGVmaW5lIFVJTlRfRkFTVDI0X01BWCAgICBVSU5UMjRfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDE2X01JTiAgIElOVDI0X01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NQVggICBJTlQyNF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDE2X01BWCBVSU5UMjRfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUlOICAgIElOVDI0X01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01BWCAgICBJTlQyNF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDhfTUFYICBVSU5UMjRfTUFYCisjZW5kaWYgLyogX19JTlQyNF9UWVBFX18gKi8KKworCisjaWZkZWYgX19JTlQxNl9UWVBFX18KKyNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgSU5UMTZfQygzMjc2NykKKyNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICgtSU5UMTZfQygzMjc2NyktMSkKKyNkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICBVSU5UMTZfQyg2NTUzNSkKKyMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUlOICAgSU5UMTZfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDE2X01BWCAgIElOVDE2X01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUMTZfTUFYIFVJTlQxNl9NQVgKKyMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NSU4gICAgSU5UMTZfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUFYICAgIElOVDE2X01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUOF9NQVggIFVJTlQxNl9NQVgKKyNlbmRpZiAvKiBfX0lOVDE2X1RZUEVfXyAqLworCisjaWZkZWYgX19JTlRfTEVBU1QxNl9NSU4KKyMgZGVmaW5lIElOVF9MRUFTVDE2X01JTiAgIF9fSU5UX0xFQVNUMTZfTUlOCisjIGRlZmluZSBJTlRfTEVBU1QxNl9NQVggICBfX0lOVF9MRUFTVDE2X01BWAorIyBkZWZpbmUgVUlOVF9MRUFTVDE2X01BWCBfX1VJTlRfTEVBU1QxNl9NQVgKKyMgZGVmaW5lIElOVF9GQVNUMTZfTUlOICAgIF9fSU5UX0xFQVNUMTZfTUlOCisjIGRlZmluZSBJTlRfRkFTVDE2X01BWCAgICBfX0lOVF9MRUFTVDE2X01BWAorIyBkZWZpbmUgVUlOVF9GQVNUMTZfTUFYICBfX1VJTlRfTEVBU1QxNl9NQVgKKyNlbmRpZiAvKiBfX0lOVF9MRUFTVDE2X01JTiAqLworCisKKyNpZmRlZiBfX0lOVDhfVFlQRV9fCisjIGRlZmluZSBJTlQ4X01BWCAgICAgICAgICAgIElOVDhfQygxMjcpCisjIGRlZmluZSBJTlQ4X01JTiAgICAgICAgICAoLUlOVDhfQygxMjcpLTEpCisjIGRlZmluZSBVSU5UOF9NQVggICAgICAgICAgVUlOVDhfQygyNTUpCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUlOICAgIElOVDhfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUFYICAgIElOVDhfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1Q4X01BWCAgVUlOVDhfTUFYCisjZW5kaWYgLyogX19JTlQ4X1RZUEVfXyAqLworCisjaWZkZWYgX19JTlRfTEVBU1Q4X01JTgorIyBkZWZpbmUgSU5UX0xFQVNUOF9NSU4gICBfX0lOVF9MRUFTVDhfTUlOCisjIGRlZmluZSBJTlRfTEVBU1Q4X01BWCAgIF9fSU5UX0xFQVNUOF9NQVgKKyMgZGVmaW5lIFVJTlRfTEVBU1Q4X01BWCBfX1VJTlRfTEVBU1Q4X01BWAorIyBkZWZpbmUgSU5UX0ZBU1Q4X01JTiAgICBfX0lOVF9MRUFTVDhfTUlOCisjIGRlZmluZSBJTlRfRkFTVDhfTUFYICAgIF9fSU5UX0xFQVNUOF9NQVgKKyMgZGVmaW5lIFVJTlRfRkFTVDhfTUFYICBfX1VJTlRfTEVBU1Q4X01BWAorI2VuZGlmIC8qIF9fSU5UX0xFQVNUOF9NSU4gKi8KKworLyogU29tZSB1dGlsaXR5IG1hY3JvcyAqLworI2RlZmluZSAgX19JTlROX01JTihuKSAgX19zdGRpbnRfam9pbjMoIElOVCwgbiwgX01JTikKKyNkZWZpbmUgIF9fSU5UTl9NQVgobikgIF9fc3RkaW50X2pvaW4zKCBJTlQsIG4sIF9NQVgpCisjZGVmaW5lIF9fVUlOVE5fTUFYKG4pICBfX3N0ZGludF9qb2luMyhVSU5ULCBuLCBfTUFYKQorI2RlZmluZSAgX19JTlROX0MobiwgdikgX19zdGRpbnRfam9pbjMoIElOVCwgbiwgX0ModikpCisjZGVmaW5lIF9fVUlOVE5fQyhuLCB2KSBfX3N0ZGludF9qb2luMyhVSU5ULCBuLCBfQyh2KSkKKworLyogQzk5IDcuMTguMi40IExpbWl0cyBvZiBpbnRlZ2VyIHR5cGVzIGNhcGFibGUgb2YgaG9sZGluZyBvYmplY3QgcG9pbnRlcnMuICovCisvKiBDOTkgNy4xOC4zIExpbWl0cyBvZiBvdGhlciBpbnRlZ2VyIHR5cGVzLiAqLworCisjZGVmaW5lICBJTlRQVFJfTUlOICBfX0lOVE5fTUlOKF9fSU5UUFRSX1dJRFRIX18pCisjZGVmaW5lICBJTlRQVFJfTUFYICBfX0lOVE5fTUFYKF9fSU5UUFRSX1dJRFRIX18pCisjZGVmaW5lIFVJTlRQVFJfTUFYIF9fVUlOVE5fTUFYKF9fSU5UUFRSX1dJRFRIX18pCisjZGVmaW5lIFBUUkRJRkZfTUlOICBfX0lOVE5fTUlOKF9fUFRSRElGRl9XSURUSF9fKQorI2RlZmluZSBQVFJESUZGX01BWCAgX19JTlROX01BWChfX1BUUkRJRkZfV0lEVEhfXykKKyNkZWZpbmUgICAgU0laRV9NQVggX19VSU5UTl9NQVgoX19TSVpFX1dJRFRIX18pCisKKy8qIElTTzk4OTk6MjAxMSA3LjIwIChDMTEgQW5uZXggSyk6IERlZmluZSBSU0laRV9NQVggaWYgX19TVERDX1dBTlRfTElCX0VYVDFfXworICogaXMgZW5hYmxlZC4gKi8KKyNpZiBkZWZpbmVkKF9fU1REQ19XQU5UX0xJQl9FWFQxX18pICYmIF9fU1REQ19XQU5UX0xJQl9FWFQxX18gPj0gMQorI2RlZmluZSAgIFJTSVpFX01BWCAgICAgICAgICAgIChTSVpFX01BWCA+PiAxKQorI2VuZGlmCisKKy8qIEM5OSA3LjE4LjIuNSBMaW1pdHMgb2YgZ3JlYXRlc3Qtd2lkdGggaW50ZWdlciB0eXBlcy4gKi8KKyNkZWZpbmUgSU5UTUFYX01JTiAgIF9fSU5UTl9NSU4oX19JTlRNQVhfV0lEVEhfXykKKyNkZWZpbmUgSU5UTUFYX01BWCAgIF9fSU5UTl9NQVgoX19JTlRNQVhfV0lEVEhfXykKKyNkZWZpbmUgVUlOVE1BWF9NQVggX19VSU5UTl9NQVgoX19JTlRNQVhfV0lEVEhfXykKKworLyogQzk5IDcuMTguMyBMaW1pdHMgb2Ygb3RoZXIgaW50ZWdlciB0eXBlcy4gKi8KKyNkZWZpbmUgU0lHX0FUT01JQ19NSU4gX19JTlROX01JTihfX1NJR19BVE9NSUNfV0lEVEhfXykKKyNkZWZpbmUgU0lHX0FUT01JQ19NQVggX19JTlROX01BWChfX1NJR19BVE9NSUNfV0lEVEhfXykKKyNpZmRlZiBfX1dJTlRfVU5TSUdORURfXworIyBkZWZpbmUgV0lOVF9NSU4gICAgICAgX19VSU5UTl9DKF9fV0lOVF9XSURUSF9fLCAwKQorIyBkZWZpbmUgV0lOVF9NQVggICAgICAgX19VSU5UTl9NQVgoX19XSU5UX1dJRFRIX18pCisjZWxzZQorIyBkZWZpbmUgV0lOVF9NSU4gICAgICAgX19JTlROX01JTihfX1dJTlRfV0lEVEhfXykKKyMgZGVmaW5lIFdJTlRfTUFYICAgICAgIF9fSU5UTl9NQVgoX19XSU5UX1dJRFRIX18pCisjZW5kaWYKKworI2lmbmRlZiBXQ0hBUl9NQVgKKyMgZGVmaW5lIFdDSEFSX01BWCBfX1dDSEFSX01BWF9fCisjZW5kaWYKKyNpZm5kZWYgV0NIQVJfTUlOCisjIGlmIF9fV0NIQVJfTUFYX18gPT0gX19JTlROX01BWChfX1dDSEFSX1dJRFRIX18pCisjICBkZWZpbmUgV0NIQVJfTUlOIF9fSU5UTl9NSU4oX19XQ0hBUl9XSURUSF9fKQorIyBlbHNlCisjICBkZWZpbmUgV0NIQVJfTUlOIF9fVUlOVE5fQyhfX1dDSEFSX1dJRFRIX18sIDApCisjIGVuZGlmCisjZW5kaWYKKworLyogNy4xOC40LjIgTWFjcm9zIGZvciBncmVhdGVzdC13aWR0aCBpbnRlZ2VyIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgSU5UTUFYX0ModikgICBfX0lOVE5fQyhfX0lOVE1BWF9XSURUSF9fLCB2KQorI2RlZmluZSBVSU5UTUFYX0ModikgX19VSU5UTl9DKF9fSU5UTUFYX1dJRFRIX18sIHYpCisKKyNlbmRpZiAvKiBfX1NURENfSE9TVEVEX18gKi8KKyNlbmRpZiAvKiBfX0NMQU5HX1NURElOVF9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3N0ZG5vcmV0dXJuLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3N0ZG5vcmV0dXJuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdhMzAxZAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvc3Rkbm9yZXR1cm4uaApAQCAtMCwwICsxLDMwIEBACisvKj09PS0tLS0gc3Rkbm9yZXR1cm4uaCAtIFN0YW5kYXJkIGhlYWRlciBmb3Igbm9yZXR1cm4gbWFjcm8gLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fU1RETk9SRVRVUk5fSAorI2RlZmluZSBfX1NURE5PUkVUVVJOX0gKKworI2RlZmluZSBub3JldHVybiBfTm9yZXR1cm4KKyNkZWZpbmUgX19ub3JldHVybl9pc19kZWZpbmVkIDEKKworI2VuZGlmIC8qIF9fU1RETk9SRVRVUk5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS90Ym1pbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvdGJtaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwZDc0NgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvdGJtaW50cmluLmgKQEAgLTAsMCArMSwxNTQgQEAKKy8qPT09LS0tLSB0Ym1pbnRyaW4uaCAtIFRCTSBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19YODZJTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPHRibWludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8eDg2aW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19UQk1JTlRSSU5fSAorI2RlZmluZSBfX1RCTUlOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygidGJtIikpKQorCisjZGVmaW5lIF9fYmV4dHJpX3UzMihhLCBiKSBcCisgICgodW5zaWduZWQgaW50KV9fYnVpbHRpbl9pYTMyX2JleHRyaV91MzIoKHVuc2lnbmVkIGludCkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KShiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxjZmlsbF91MzIodW5zaWduZWQgaW50IF9fYSkKK3sKKyAgcmV0dXJuIF9fYSAmIChfX2EgKyAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19ibGNpX3UzMih1bnNpZ25lZCBpbnQgX19hKQoreworICByZXR1cm4gX19hIHwgfihfX2EgKyAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19ibGNpY191MzIodW5zaWduZWQgaW50IF9fYSkKK3sKKyAgcmV0dXJuIH5fX2EgJiAoX19hICsgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxjbXNrX3UzMih1bnNpZ25lZCBpbnQgX19hKQoreworICByZXR1cm4gX19hIF4gKF9fYSArIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2JsY3NfdTMyKHVuc2lnbmVkIGludCBfX2EpCit7CisgIHJldHVybiBfX2EgfCAoX19hICsgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxzZmlsbF91MzIodW5zaWduZWQgaW50IF9fYSkKK3sKKyAgcmV0dXJuIF9fYSB8IChfX2EgLSAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19ibHNpY191MzIodW5zaWduZWQgaW50IF9fYSkKK3sKKyAgcmV0dXJuIH5fX2EgfCAoX19hIC0gMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fdDFtc2tjX3UzMih1bnNpZ25lZCBpbnQgX19hKQoreworICByZXR1cm4gfl9fYSB8IChfX2EgKyAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX190em1za191MzIodW5zaWduZWQgaW50IF9fYSkKK3sKKyAgcmV0dXJuIH5fX2EgJiAoX19hIC0gMSk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCisjZGVmaW5lIF9fYmV4dHJpX3U2NChhLCBiKSBcCisgICgodW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9pYTMyX2JleHRyaV91NjQoKHVuc2lnbmVkIGxvbmcgbG9uZykoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxjZmlsbF91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fYSkKK3sKKyAgcmV0dXJuIF9fYSAmIChfX2EgKyAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19ibGNpX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19hKQoreworICByZXR1cm4gX19hIHwgfihfX2EgKyAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19ibGNpY191NjQodW5zaWduZWQgbG9uZyBsb25nIF9fYSkKK3sKKyAgcmV0dXJuIH5fX2EgJiAoX19hICsgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxjbXNrX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19hKQoreworICByZXR1cm4gX19hIF4gKF9fYSArIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2JsY3NfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EpCit7CisgIHJldHVybiBfX2EgfCAoX19hICsgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxzZmlsbF91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fYSkKK3sKKyAgcmV0dXJuIF9fYSB8IChfX2EgLSAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19ibHNpY191NjQodW5zaWduZWQgbG9uZyBsb25nIF9fYSkKK3sKKyAgcmV0dXJuIH5fX2EgfCAoX19hIC0gMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fdDFtc2tjX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19hKQoreworICByZXR1cm4gfl9fYSB8IChfX2EgKyAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX190em1za191NjQodW5zaWduZWQgbG9uZyBsb25nIF9fYSkKK3sKKyAgcmV0dXJuIH5fX2EgJiAoX19hIC0gMSk7Cit9CisjZW5kaWYKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19UQk1JTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS90Z21hdGguaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvdGdtYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE4ZTExOAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvdGdtYXRoLmgKQEAgLTAsMCArMSwxMzc0IEBACisvKj09PS0tLS0gdGdtYXRoLmggLSBTdGFuZGFyZCBoZWFkZXIgZm9yIHR5cGUgZ2VuZXJpYyBtYXRoIC0tLS0tLS0tLS0tLS0tLS09PT0qXAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBIb3dhcmQgSGlubmFudAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCitcKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0qLworCisjaWZuZGVmIF9fVEdNQVRIX0gKKyNkZWZpbmUgX19UR01BVEhfSAorCisvKiBDOTkgNy4yMiBUeXBlLWdlbmVyaWMgbWF0aCA8dGdtYXRoLmg+LiAqLworI2luY2x1ZGUgPG1hdGguaD4KKworLyogQysrIGhhbmRsZXMgdHlwZSBnZW5lcmljaXR5IHdpdGggb3ZlcmxvYWRpbmcgaW4gbWF0aC5oLiAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworI2luY2x1ZGUgPGNvbXBsZXguaD4KKworI2RlZmluZSBfVEdfQVRUUlNwIF9fYXR0cmlidXRlX18oKF9fb3ZlcmxvYWRhYmxlX18pKQorI2RlZmluZSBfVEdfQVRUUlMgX19hdHRyaWJ1dGVfXygoX19vdmVybG9hZGFibGVfXywgX19hbHdheXNfaW5saW5lX18pKQorCisvLyBwcm9tb3Rpb24KKwordHlwZWRlZiB2b2lkIF9Bcmd1bWVudF90eXBlX2lzX25vdF9hcml0aG1ldGljOworc3RhdGljIF9Bcmd1bWVudF90eXBlX2lzX25vdF9hcml0aG1ldGljIF9fdGdfcHJvbW90ZSguLi4pCisgIF9fYXR0cmlidXRlX18oKF9fdW5hdmFpbGFibGVfXyxfX292ZXJsb2FkYWJsZV9fKSk7CitzdGF0aWMgZG91YmxlICAgICAgICAgICAgICAgX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUoaW50KTsKK3N0YXRpYyBkb3VibGUgICAgICAgICAgICAgICBfVEdfQVRUUlNwIF9fdGdfcHJvbW90ZSh1bnNpZ25lZCBpbnQpOworc3RhdGljIGRvdWJsZSAgICAgICAgICAgICAgIF9UR19BVFRSU3AgX190Z19wcm9tb3RlKGxvbmcpOworc3RhdGljIGRvdWJsZSAgICAgICAgICAgICAgIF9UR19BVFRSU3AgX190Z19wcm9tb3RlKHVuc2lnbmVkIGxvbmcpOworc3RhdGljIGRvdWJsZSAgICAgICAgICAgICAgIF9UR19BVFRSU3AgX190Z19wcm9tb3RlKGxvbmcgbG9uZyk7CitzdGF0aWMgZG91YmxlICAgICAgICAgICAgICAgX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUodW5zaWduZWQgbG9uZyBsb25nKTsKK3N0YXRpYyBmbG9hdCAgICAgICAgICAgICAgICBfVEdfQVRUUlNwIF9fdGdfcHJvbW90ZShmbG9hdCk7CitzdGF0aWMgZG91YmxlICAgICAgICAgICAgICAgX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUoZG91YmxlKTsKK3N0YXRpYyBsb25nIGRvdWJsZSAgICAgICAgICBfVEdfQVRUUlNwIF9fdGdfcHJvbW90ZShsb25nIGRvdWJsZSk7CitzdGF0aWMgZmxvYXQgX0NvbXBsZXggICAgICAgX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUoZmxvYXQgX0NvbXBsZXgpOworc3RhdGljIGRvdWJsZSBfQ29tcGxleCAgICAgIF9UR19BVFRSU3AgX190Z19wcm9tb3RlKGRvdWJsZSBfQ29tcGxleCk7CitzdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXggX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUobG9uZyBkb3VibGUgX0NvbXBsZXgpOworCisjZGVmaW5lIF9fdGdfcHJvbW90ZTEoX194KSAgICAgICAgICAgKF9fdHlwZW9mX18oX190Z19wcm9tb3RlKF9feCkpKQorI2RlZmluZSBfX3RnX3Byb21vdGUyKF9feCwgX195KSAgICAgIChfX3R5cGVvZl9fKF9fdGdfcHJvbW90ZShfX3gpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZShfX3kpKSkKKyNkZWZpbmUgX190Z19wcm9tb3RlMyhfX3gsIF9feSwgX196KSAoX190eXBlb2ZfXyhfX3RnX3Byb21vdGUoX194KSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUoX195KSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUoX196KSkpCisKKy8vIGFjb3MKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hY29zKGZsb2F0IF9feCkge3JldHVybiBhY29zZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYWNvcyhkb3VibGUgX194KSB7cmV0dXJuIGFjb3MoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYWNvcyhsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gYWNvc2woX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYWNvcyhmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Fjb3NmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hY29zKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Fjb3MoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYWNvcyhsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Fjb3NsKF9feCk7fQorCisjdW5kZWYgYWNvcworI2RlZmluZSBhY29zKF9feCkgX190Z19hY29zKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGFzaW4KKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hc2luKGZsb2F0IF9feCkge3JldHVybiBhc2luZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXNpbihkb3VibGUgX194KSB7cmV0dXJuIGFzaW4oX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXNpbihsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gYXNpbmwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXNpbihmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2FzaW5mKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hc2luKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2FzaW4oX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXNpbihsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2FzaW5sKF9feCk7fQorCisjdW5kZWYgYXNpbgorI2RlZmluZSBhc2luKF9feCkgX190Z19hc2luKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGF0YW4KKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hdGFuKGZsb2F0IF9feCkge3JldHVybiBhdGFuZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXRhbihkb3VibGUgX194KSB7cmV0dXJuIGF0YW4oX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXRhbihsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gYXRhbmwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXRhbihmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2F0YW5mKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hdGFuKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2F0YW4oX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXRhbihsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2F0YW5sKF9feCk7fQorCisjdW5kZWYgYXRhbgorI2RlZmluZSBhdGFuKF9feCkgX190Z19hdGFuKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGFjb3NoCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYWNvc2goZmxvYXQgX194KSB7cmV0dXJuIGFjb3NoZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYWNvc2goZG91YmxlIF9feCkge3JldHVybiBhY29zaChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19hY29zaChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gYWNvc2hsKF9feCk7fQorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Fjb3NoKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjYWNvc2hmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hY29zaChkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhY29zaChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hY29zaChsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Fjb3NobChfX3gpO30KKworI3VuZGVmIGFjb3NoCisjZGVmaW5lIGFjb3NoKF9feCkgX190Z19hY29zaChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBhc2luaAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2FzaW5oKGZsb2F0IF9feCkge3JldHVybiBhc2luaGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2FzaW5oKGRvdWJsZSBfX3gpIHtyZXR1cm4gYXNpbmgoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXNpbmgobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGFzaW5obChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hc2luaChmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2FzaW5oZihfX3gpO30KKworc3RhdGljIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXNpbmgoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXNpbmgoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXNpbmgobG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhc2luaGwoX194KTt9CisKKyN1bmRlZiBhc2luaAorI2RlZmluZSBhc2luaChfX3gpIF9fdGdfYXNpbmgoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gYXRhbmgKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hdGFuaChmbG9hdCBfX3gpIHtyZXR1cm4gYXRhbmhmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19hdGFuaChkb3VibGUgX194KSB7cmV0dXJuIGF0YW5oKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2F0YW5oKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBhdGFuaGwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXRhbmgoZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhdGFuaGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2F0YW5oKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2F0YW5oKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2F0YW5oKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXRhbmhsKF9feCk7fQorCisjdW5kZWYgYXRhbmgKKyNkZWZpbmUgYXRhbmgoX194KSBfX3RnX2F0YW5oKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGNvcworCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NvcyhmbG9hdCBfX3gpIHtyZXR1cm4gY29zZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29zKGRvdWJsZSBfX3gpIHtyZXR1cm4gY29zKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Nvcyhsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gY29zbChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb3MoZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGNjb3NmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb3MoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjY29zKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Nvcyhsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Nvc2woX194KTt9CisKKyN1bmRlZiBjb3MKKyNkZWZpbmUgY29zKF9feCkgX190Z19jb3MoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gc2luCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2luKGZsb2F0IF9feCkge3JldHVybiBzaW5mKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19zaW4oZG91YmxlIF9feCkge3JldHVybiBzaW4oX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2luKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBzaW5sKF9feCk7fQorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3NpbihmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3NpbmYoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3Npbihkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNzaW4oX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2luKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjc2lubChfX3gpO30KKworI3VuZGVmIHNpbgorI2RlZmluZSBzaW4oX194KSBfX3RnX3NpbihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyB0YW4KKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z190YW4oZmxvYXQgX194KSB7cmV0dXJuIHRhbmYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3Rhbihkb3VibGUgX194KSB7cmV0dXJuIHRhbihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z190YW4obG9uZyBkb3VibGUgX194KSB7cmV0dXJuIHRhbmwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfdGFuKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjdGFuZihfX3gpO30KKworc3RhdGljIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfdGFuKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3RhbihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z190YW4obG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGN0YW5sKF9feCk7fQorCisjdW5kZWYgdGFuCisjZGVmaW5lIHRhbihfX3gpIF9fdGdfdGFuKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGNvc2gKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb3NoKGZsb2F0IF9feCkge3JldHVybiBjb3NoZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29zaChkb3VibGUgX194KSB7cmV0dXJuIGNvc2goX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29zaChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gY29zaGwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29zaChmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Nvc2hmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb3NoKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Nvc2goX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29zaChsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Nvc2hsKF9feCk7fQorCisjdW5kZWYgY29zaAorI2RlZmluZSBjb3NoKF9feCkgX190Z19jb3NoKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIHNpbmgKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19zaW5oKGZsb2F0IF9feCkge3JldHVybiBzaW5oZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2luaChkb3VibGUgX194KSB7cmV0dXJuIHNpbmgoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2luaChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gc2luaGwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2luaChmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3NpbmhmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19zaW5oKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3NpbmgoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2luaChsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3NpbmhsKF9feCk7fQorCisjdW5kZWYgc2luaAorI2RlZmluZSBzaW5oKF9feCkgX190Z19zaW5oKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIHRhbmgKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z190YW5oKGZsb2F0IF9feCkge3JldHVybiB0YW5oZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfdGFuaChkb3VibGUgX194KSB7cmV0dXJuIHRhbmgoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfdGFuaChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gdGFuaGwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfdGFuaChmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3RhbmhmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z190YW5oKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3RhbmgoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfdGFuaChsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3RhbmhsKF9feCk7fQorCisjdW5kZWYgdGFuaAorI2RlZmluZSB0YW5oKF9feCkgX190Z190YW5oKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGV4cAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2V4cChmbG9hdCBfX3gpIHtyZXR1cm4gZXhwZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXhwKGRvdWJsZSBfX3gpIHtyZXR1cm4gZXhwKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2V4cChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gZXhwbChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19leHAoZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGNleHBmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19leHAoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjZXhwKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2V4cChsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2V4cGwoX194KTt9CisKKyN1bmRlZiBleHAKKyNkZWZpbmUgZXhwKF9feCkgX190Z19leHAoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gbG9nCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfbG9nKGZsb2F0IF9feCkge3JldHVybiBsb2dmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2coZG91YmxlIF9feCkge3JldHVybiBsb2coX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfbG9nKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBsb2dsKF9feCk7fQorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZyhmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2xvZ2YoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZyhkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNsb2coX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfbG9nKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjbG9nbChfX3gpO30KKworI3VuZGVmIGxvZworI2RlZmluZSBsb2coX194KSBfX3RnX2xvZyhfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBwb3cKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19wb3coZmxvYXQgX194LCBmbG9hdCBfX3kpIHtyZXR1cm4gcG93ZihfX3gsIF9feSk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19wb3coZG91YmxlIF9feCwgZG91YmxlIF9feSkge3JldHVybiBwb3coX194LCBfX3kpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19wb3cobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHtyZXR1cm4gcG93bChfX3gsIF9feSk7fQorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3BvdyhmbG9hdCBfQ29tcGxleCBfX3gsIGZsb2F0IF9Db21wbGV4IF9feSkge3JldHVybiBjcG93ZihfX3gsIF9feSk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19wb3coZG91YmxlIF9Db21wbGV4IF9feCwgZG91YmxlIF9Db21wbGV4IF9feSkge3JldHVybiBjcG93KF9feCwgX195KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfcG93KGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCwgbG9uZyBkb3VibGUgX0NvbXBsZXggX195KQorICAgIHtyZXR1cm4gY3Bvd2woX194LCBfX3kpO30KKworI3VuZGVmIHBvdworI2RlZmluZSBwb3coX194LCBfX3kpIF9fdGdfcG93KF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3gpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCisKKy8vIHNxcnQKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19zcXJ0KGZsb2F0IF9feCkge3JldHVybiBzcXJ0ZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfc3FydChkb3VibGUgX194KSB7cmV0dXJuIHNxcnQoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfc3FydChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gc3FydGwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc3FydChmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3NxcnRmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19zcXJ0KGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3NxcnQoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc3FydChsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3NxcnRsKF9feCk7fQorCisjdW5kZWYgc3FydAorI2RlZmluZSBzcXJ0KF9feCkgX190Z19zcXJ0KF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGZhYnMKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19mYWJzKGZsb2F0IF9feCkge3JldHVybiBmYWJzZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZmFicyhkb3VibGUgX194KSB7cmV0dXJuIGZhYnMoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZmFicyhsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gZmFic2woX194KTt9CisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfZmFicyhmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Fic2YoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZhYnMoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYWJzKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZhYnMobG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhYnNsKF9feCk7fQorCisjdW5kZWYgZmFicworI2RlZmluZSBmYWJzKF9feCkgX190Z19mYWJzKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGF0YW4yCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXRhbjIoZmxvYXQgX194LCBmbG9hdCBfX3kpIHtyZXR1cm4gYXRhbjJmKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2F0YW4yKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHtyZXR1cm4gYXRhbjIoX194LCBfX3kpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19hdGFuMihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiBhdGFuMmwoX194LCBfX3kpO30KKworI3VuZGVmIGF0YW4yCisjZGVmaW5lIGF0YW4yKF9feCwgX195KSBfX3RnX2F0YW4yKF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3gpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3kpKQorCisvLyBjYnJ0CisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2JydChmbG9hdCBfX3gpIHtyZXR1cm4gY2JydGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NicnQoZG91YmxlIF9feCkge3JldHVybiBjYnJ0KF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NicnQobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGNicnRsKF9feCk7fQorCisjdW5kZWYgY2JydAorI2RlZmluZSBjYnJ0KF9feCkgX190Z19jYnJ0KF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGNlaWwKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jZWlsKGZsb2F0IF9feCkge3JldHVybiBjZWlsZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2VpbChkb3VibGUgX194KSB7cmV0dXJuIGNlaWwoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2VpbChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gY2VpbGwoX194KTt9CisKKyN1bmRlZiBjZWlsCisjZGVmaW5lIGNlaWwoX194KSBfX3RnX2NlaWwoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gY29weXNpZ24KKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb3B5c2lnbihmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiBjb3B5c2lnbmYoX194LCBfX3kpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29weXNpZ24oZG91YmxlIF9feCwgZG91YmxlIF9feSkge3JldHVybiBjb3B5c2lnbihfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NvcHlzaWduKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIGNvcHlzaWdubChfX3gsIF9feSk7fQorCisjdW5kZWYgY29weXNpZ24KKyNkZWZpbmUgY29weXNpZ24oX194LCBfX3kpIF9fdGdfY29weXNpZ24oX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCisKKy8vIGVyZgorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2VyZihmbG9hdCBfX3gpIHtyZXR1cm4gZXJmZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXJmKGRvdWJsZSBfX3gpIHtyZXR1cm4gZXJmKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2VyZihsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gZXJmbChfX3gpO30KKworI3VuZGVmIGVyZgorI2RlZmluZSBlcmYoX194KSBfX3RnX2VyZihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBlcmZjCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXJmYyhmbG9hdCBfX3gpIHtyZXR1cm4gZXJmY2YoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2VyZmMoZG91YmxlIF9feCkge3JldHVybiBlcmZjKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2VyZmMobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGVyZmNsKF9feCk7fQorCisjdW5kZWYgZXJmYworI2RlZmluZSBlcmZjKF9feCkgX190Z19lcmZjKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGV4cDIKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19leHAyKGZsb2F0IF9feCkge3JldHVybiBleHAyZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXhwMihkb3VibGUgX194KSB7cmV0dXJuIGV4cDIoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXhwMihsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gZXhwMmwoX194KTt9CisKKyN1bmRlZiBleHAyCisjZGVmaW5lIGV4cDIoX194KSBfX3RnX2V4cDIoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gZXhwbTEKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19leHBtMShmbG9hdCBfX3gpIHtyZXR1cm4gZXhwbTFmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19leHBtMShkb3VibGUgX194KSB7cmV0dXJuIGV4cG0xKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2V4cG0xKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBleHBtMWwoX194KTt9CisKKyN1bmRlZiBleHBtMQorI2RlZmluZSBleHBtMShfX3gpIF9fdGdfZXhwbTEoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gZmRpbQorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZkaW0oZmxvYXQgX194LCBmbG9hdCBfX3kpIHtyZXR1cm4gZmRpbWYoX194LCBfX3kpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZmRpbShkb3VibGUgX194LCBkb3VibGUgX195KSB7cmV0dXJuIGZkaW0oX194LCBfX3kpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mZGltKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIGZkaW1sKF9feCwgX195KTt9CisKKyN1bmRlZiBmZGltCisjZGVmaW5lIGZkaW0oX194LCBfX3kpIF9fdGdfZmRpbShfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX194KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCisKKy8vIGZsb29yCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfZmxvb3IoZmxvYXQgX194KSB7cmV0dXJuIGZsb29yZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZmxvb3IoZG91YmxlIF9feCkge3JldHVybiBmbG9vcihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mbG9vcihsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gZmxvb3JsKF9feCk7fQorCisjdW5kZWYgZmxvb3IKKyNkZWZpbmUgZmxvb3IoX194KSBfX3RnX2Zsb29yKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGZtYQorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZtYShmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KQorICAgIHtyZXR1cm4gZm1hZihfX3gsIF9feSwgX196KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZtYShkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KQorICAgIHtyZXR1cm4gZm1hKF9feCwgX195LCBfX3opO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mbWEobG9uZyBkb3VibGUgX194LGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KQorICAgIHtyZXR1cm4gZm1hbChfX3gsIF9feSwgX196KTt9CisKKyN1bmRlZiBmbWEKKyNkZWZpbmUgZm1hKF9feCwgX195LCBfX3opICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fdGdfZm1hKF9fdGdfcHJvbW90ZTMoKF9feCksIChfX3kpLCAoX196KSkoX194KSwgXAorICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUzKChfX3gpLCAoX195KSwgKF9feikpKF9feSksIFwKKyAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMygoX194KSwgKF9feSksIChfX3opKShfX3opKQorCisvLyBmbWF4CisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfZm1heChmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiBmbWF4ZihfX3gsIF9feSk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mbWF4KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHtyZXR1cm4gZm1heChfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZtYXgobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHtyZXR1cm4gZm1heGwoX194LCBfX3kpO30KKworI3VuZGVmIGZtYXgKKyNkZWZpbmUgZm1heChfX3gsIF9feSkgX190Z19mbWF4KF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3gpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX195KSkKKworLy8gZm1pbgorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZtaW4oZmxvYXQgX194LCBmbG9hdCBfX3kpIHtyZXR1cm4gZm1pbmYoX194LCBfX3kpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZm1pbihkb3VibGUgX194LCBkb3VibGUgX195KSB7cmV0dXJuIGZtaW4oX194LCBfX3kpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mbWluKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIGZtaW5sKF9feCwgX195KTt9CisKKyN1bmRlZiBmbWluCisjZGVmaW5lIGZtaW4oX194LCBfX3kpIF9fdGdfZm1pbihfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX194KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCisKKy8vIGZtb2QKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19mbW9kKGZsb2F0IF9feCwgZmxvYXQgX195KSB7cmV0dXJuIGZtb2RmKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Ztb2QoZG91YmxlIF9feCwgZG91YmxlIF9feSkge3JldHVybiBmbW9kKF9feCwgX195KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZm1vZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiBmbW9kbChfX3gsIF9feSk7fQorCisjdW5kZWYgZm1vZAorI2RlZmluZSBmbW9kKF9feCwgX195KSBfX3RnX2Ztb2QoX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3kpKQorCisvLyBmcmV4cAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZyZXhwKGZsb2F0IF9feCwgaW50KiBfX3kpIHtyZXR1cm4gZnJleHBmKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZyZXhwKGRvdWJsZSBfX3gsIGludCogX195KSB7cmV0dXJuIGZyZXhwKF9feCwgX195KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZnJleHAobG9uZyBkb3VibGUgX194LCBpbnQqIF9feSkge3JldHVybiBmcmV4cGwoX194LCBfX3kpO30KKworI3VuZGVmIGZyZXhwCisjZGVmaW5lIGZyZXhwKF9feCwgX195KSBfX3RnX2ZyZXhwKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCksIF9feSkKKworLy8gaHlwb3QKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19oeXBvdChmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiBoeXBvdGYoX194LCBfX3kpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfaHlwb3QoZG91YmxlIF9feCwgZG91YmxlIF9feSkge3JldHVybiBoeXBvdChfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2h5cG90KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIGh5cG90bChfX3gsIF9feSk7fQorCisjdW5kZWYgaHlwb3QKKyNkZWZpbmUgaHlwb3QoX194LCBfX3kpIF9fdGdfaHlwb3QoX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCisKKy8vIGlsb2diCisKK3N0YXRpYyBpbnQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2lsb2diKGZsb2F0IF9feCkge3JldHVybiBpbG9nYmYoX194KTt9CisKK3N0YXRpYyBpbnQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2lsb2diKGRvdWJsZSBfX3gpIHtyZXR1cm4gaWxvZ2IoX194KTt9CisKK3N0YXRpYyBpbnQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2lsb2diKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBpbG9nYmwoX194KTt9CisKKyN1bmRlZiBpbG9nYgorI2RlZmluZSBpbG9nYihfX3gpIF9fdGdfaWxvZ2IoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gbGRleHAKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19sZGV4cChmbG9hdCBfX3gsIGludCBfX3kpIHtyZXR1cm4gbGRleHBmKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xkZXhwKGRvdWJsZSBfX3gsIGludCBfX3kpIHtyZXR1cm4gbGRleHAoX194LCBfX3kpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sZGV4cChsb25nIGRvdWJsZSBfX3gsIGludCBfX3kpIHtyZXR1cm4gbGRleHBsKF9feCwgX195KTt9CisKKyN1bmRlZiBsZGV4cAorI2RlZmluZSBsZGV4cChfX3gsIF9feSkgX190Z19sZGV4cChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpLCBfX3kpCisKKy8vIGxnYW1tYQorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xnYW1tYShmbG9hdCBfX3gpIHtyZXR1cm4gbGdhbW1hZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfbGdhbW1hKGRvdWJsZSBfX3gpIHtyZXR1cm4gbGdhbW1hKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xnYW1tYShsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gbGdhbW1hbChfX3gpO30KKworI3VuZGVmIGxnYW1tYQorI2RlZmluZSBsZ2FtbWEoX194KSBfX3RnX2xnYW1tYShfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBsbHJpbnQKKworc3RhdGljIGxvbmcgbG9uZworICAgIF9UR19BVFRSUworICAgIF9fdGdfbGxyaW50KGZsb2F0IF9feCkge3JldHVybiBsbHJpbnRmKF9feCk7fQorCitzdGF0aWMgbG9uZyBsb25nCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sbHJpbnQoZG91YmxlIF9feCkge3JldHVybiBsbHJpbnQoX194KTt9CisKK3N0YXRpYyBsb25nIGxvbmcKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xscmludChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gbGxyaW50bChfX3gpO30KKworI3VuZGVmIGxscmludAorI2RlZmluZSBsbHJpbnQoX194KSBfX3RnX2xscmludChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBsbHJvdW5kCisKK3N0YXRpYyBsb25nIGxvbmcKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xscm91bmQoZmxvYXQgX194KSB7cmV0dXJuIGxscm91bmRmKF9feCk7fQorCitzdGF0aWMgbG9uZyBsb25nCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sbHJvdW5kKGRvdWJsZSBfX3gpIHtyZXR1cm4gbGxyb3VuZChfX3gpO30KKworc3RhdGljIGxvbmcgbG9uZworICAgIF9UR19BVFRSUworICAgIF9fdGdfbGxyb3VuZChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gbGxyb3VuZGwoX194KTt9CisKKyN1bmRlZiBsbHJvdW5kCisjZGVmaW5lIGxscm91bmQoX194KSBfX3RnX2xscm91bmQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gbG9nMTAKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2cxMChmbG9hdCBfX3gpIHtyZXR1cm4gbG9nMTBmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2cxMChkb3VibGUgX194KSB7cmV0dXJuIGxvZzEwKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZzEwKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBsb2cxMGwoX194KTt9CisKKyN1bmRlZiBsb2cxMAorI2RlZmluZSBsb2cxMChfX3gpIF9fdGdfbG9nMTAoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gbG9nMXAKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2cxcChmbG9hdCBfX3gpIHtyZXR1cm4gbG9nMXBmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2cxcChkb3VibGUgX194KSB7cmV0dXJuIGxvZzFwKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZzFwKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBsb2cxcGwoX194KTt9CisKKyN1bmRlZiBsb2cxcAorI2RlZmluZSBsb2cxcChfX3gpIF9fdGdfbG9nMXAoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gbG9nMgorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZzIoZmxvYXQgX194KSB7cmV0dXJuIGxvZzJmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2cyKGRvdWJsZSBfX3gpIHtyZXR1cm4gbG9nMihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2cyKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBsb2cybChfX3gpO30KKworI3VuZGVmIGxvZzIKKyNkZWZpbmUgbG9nMihfX3gpIF9fdGdfbG9nMihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBsb2diCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfbG9nYihmbG9hdCBfX3gpIHtyZXR1cm4gbG9nYmYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZ2IoZG91YmxlIF9feCkge3JldHVybiBsb2diKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZ2IobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGxvZ2JsKF9feCk7fQorCisjdW5kZWYgbG9nYgorI2RlZmluZSBsb2diKF9feCkgX190Z19sb2diKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGxyaW50CisKK3N0YXRpYyBsb25nCisgICAgX1RHX0FUVFJTCisgICAgX190Z19scmludChmbG9hdCBfX3gpIHtyZXR1cm4gbHJpbnRmKF9feCk7fQorCitzdGF0aWMgbG9uZworICAgIF9UR19BVFRSUworICAgIF9fdGdfbHJpbnQoZG91YmxlIF9feCkge3JldHVybiBscmludChfX3gpO30KKworc3RhdGljIGxvbmcKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xyaW50KGxvbmcgZG91YmxlIF9feCkge3JldHVybiBscmludGwoX194KTt9CisKKyN1bmRlZiBscmludAorI2RlZmluZSBscmludChfX3gpIF9fdGdfbHJpbnQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gbHJvdW5kCisKK3N0YXRpYyBsb25nCisgICAgX1RHX0FUVFJTCisgICAgX190Z19scm91bmQoZmxvYXQgX194KSB7cmV0dXJuIGxyb3VuZGYoX194KTt9CisKK3N0YXRpYyBsb25nCisgICAgX1RHX0FUVFJTCisgICAgX190Z19scm91bmQoZG91YmxlIF9feCkge3JldHVybiBscm91bmQoX194KTt9CisKK3N0YXRpYyBsb25nCisgICAgX1RHX0FUVFJTCisgICAgX190Z19scm91bmQobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGxyb3VuZGwoX194KTt9CisKKyN1bmRlZiBscm91bmQKKyNkZWZpbmUgbHJvdW5kKF9feCkgX190Z19scm91bmQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gbmVhcmJ5aW50CisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfbmVhcmJ5aW50KGZsb2F0IF9feCkge3JldHVybiBuZWFyYnlpbnRmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19uZWFyYnlpbnQoZG91YmxlIF9feCkge3JldHVybiBuZWFyYnlpbnQoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfbmVhcmJ5aW50KGxvbmcgZG91YmxlIF9feCkge3JldHVybiBuZWFyYnlpbnRsKF9feCk7fQorCisjdW5kZWYgbmVhcmJ5aW50CisjZGVmaW5lIG5lYXJieWludChfX3gpIF9fdGdfbmVhcmJ5aW50KF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIG5leHRhZnRlcgorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX25leHRhZnRlcihmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiBuZXh0YWZ0ZXJmKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX25leHRhZnRlcihkb3VibGUgX194LCBkb3VibGUgX195KSB7cmV0dXJuIG5leHRhZnRlcihfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX25leHRhZnRlcihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiBuZXh0YWZ0ZXJsKF9feCwgX195KTt9CisKKyN1bmRlZiBuZXh0YWZ0ZXIKKyNkZWZpbmUgbmV4dGFmdGVyKF9feCwgX195KSBfX3RnX25leHRhZnRlcihfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX194KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3kpKQorCisvLyBuZXh0dG93YXJkCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfbmV4dHRvd2FyZChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiBuZXh0dG93YXJkZihfX3gsIF9feSk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19uZXh0dG93YXJkKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiBuZXh0dG93YXJkKF9feCwgX195KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfbmV4dHRvd2FyZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiBuZXh0dG93YXJkbChfX3gsIF9feSk7fQorCisjdW5kZWYgbmV4dHRvd2FyZAorI2RlZmluZSBuZXh0dG93YXJkKF9feCwgX195KSBfX3RnX25leHR0b3dhcmQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSwgKF9feSkpCisKKy8vIHJlbWFpbmRlcgorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3JlbWFpbmRlcihmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiByZW1haW5kZXJmKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3JlbWFpbmRlcihkb3VibGUgX194LCBkb3VibGUgX195KSB7cmV0dXJuIHJlbWFpbmRlcihfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3JlbWFpbmRlcihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiByZW1haW5kZXJsKF9feCwgX195KTt9CisKKyN1bmRlZiByZW1haW5kZXIKKyNkZWZpbmUgcmVtYWluZGVyKF9feCwgX195KSBfX3RnX3JlbWFpbmRlcihfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX194KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3kpKQorCisvLyByZW1xdW8KKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19yZW1xdW8oZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCogX196KQorICAgIHtyZXR1cm4gcmVtcXVvZihfX3gsIF9feSwgX196KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3JlbXF1byhkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQqIF9feikKKyAgICB7cmV0dXJuIHJlbXF1byhfX3gsIF9feSwgX196KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfcmVtcXVvKGxvbmcgZG91YmxlIF9feCxsb25nIGRvdWJsZSBfX3ksIGludCogX196KQorICAgIHtyZXR1cm4gcmVtcXVvbChfX3gsIF9feSwgX196KTt9CisKKyN1bmRlZiByZW1xdW8KKyNkZWZpbmUgcmVtcXVvKF9feCwgX195LCBfX3opICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX190Z19yZW1xdW8oX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feCksIFwKKyAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSksIFwKKyAgICAgICAgICAgICAgICAgICAgKF9feikpCisKKy8vIHJpbnQKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19yaW50KGZsb2F0IF9feCkge3JldHVybiByaW50ZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfcmludChkb3VibGUgX194KSB7cmV0dXJuIHJpbnQoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfcmludChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gcmludGwoX194KTt9CisKKyN1bmRlZiByaW50CisjZGVmaW5lIHJpbnQoX194KSBfX3RnX3JpbnQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gcm91bmQKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19yb3VuZChmbG9hdCBfX3gpIHtyZXR1cm4gcm91bmRmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19yb3VuZChkb3VibGUgX194KSB7cmV0dXJuIHJvdW5kKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3JvdW5kKGxvbmcgZG91YmxlIF9feCkge3JldHVybiByb3VuZGwoX194KTt9CisKKyN1bmRlZiByb3VuZAorI2RlZmluZSByb3VuZChfX3gpIF9fdGdfcm91bmQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gc2NhbGJuCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2NhbGJuKGZsb2F0IF9feCwgaW50IF9feSkge3JldHVybiBzY2FsYm5mKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3NjYWxibihkb3VibGUgX194LCBpbnQgX195KSB7cmV0dXJuIHNjYWxibihfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3NjYWxibihsb25nIGRvdWJsZSBfX3gsIGludCBfX3kpIHtyZXR1cm4gc2NhbGJubChfX3gsIF9feSk7fQorCisjdW5kZWYgc2NhbGJuCisjZGVmaW5lIHNjYWxibihfX3gsIF9feSkgX190Z19zY2FsYm4oX190Z19wcm9tb3RlMSgoX194KSkoX194KSwgX195KQorCisvLyBzY2FsYmxuCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2NhbGJsbihmbG9hdCBfX3gsIGxvbmcgX195KSB7cmV0dXJuIHNjYWxibG5mKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3NjYWxibG4oZG91YmxlIF9feCwgbG9uZyBfX3kpIHtyZXR1cm4gc2NhbGJsbihfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3NjYWxibG4obG9uZyBkb3VibGUgX194LCBsb25nIF9feSkge3JldHVybiBzY2FsYmxubChfX3gsIF9feSk7fQorCisjdW5kZWYgc2NhbGJsbgorI2RlZmluZSBzY2FsYmxuKF9feCwgX195KSBfX3RnX3NjYWxibG4oX190Z19wcm9tb3RlMSgoX194KSkoX194KSwgX195KQorCisvLyB0Z2FtbWEKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z190Z2FtbWEoZmxvYXQgX194KSB7cmV0dXJuIHRnYW1tYWYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3RnYW1tYShkb3VibGUgX194KSB7cmV0dXJuIHRnYW1tYShfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z190Z2FtbWEobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIHRnYW1tYWwoX194KTt9CisKKyN1bmRlZiB0Z2FtbWEKKyNkZWZpbmUgdGdhbW1hKF9feCkgX190Z190Z2FtbWEoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gdHJ1bmMKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z190cnVuYyhmbG9hdCBfX3gpIHtyZXR1cm4gdHJ1bmNmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z190cnVuYyhkb3VibGUgX194KSB7cmV0dXJuIHRydW5jKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3RydW5jKGxvbmcgZG91YmxlIF9feCkge3JldHVybiB0cnVuY2woX194KTt9CisKKyN1bmRlZiB0cnVuYworI2RlZmluZSB0cnVuYyhfX3gpIF9fdGdfdHJ1bmMoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gY2FyZworCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NhcmcoZmxvYXQgX194KSB7cmV0dXJuIGF0YW4yZigwLkYsIF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jYXJnKGRvdWJsZSBfX3gpIHtyZXR1cm4gYXRhbjIoMC4sIF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NhcmcobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGF0YW4ybCgwLkwsIF9feCk7fQorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NhcmcoZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhcmdmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jYXJnKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2FyZyhfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jYXJnKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXJnbChfX3gpO30KKworI3VuZGVmIGNhcmcKKyNkZWZpbmUgY2FyZyhfX3gpIF9fdGdfY2FyZyhfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBjaW1hZworCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NpbWFnKGZsb2F0IF9feCkge3JldHVybiAwO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2ltYWcoZG91YmxlIF9feCkge3JldHVybiAwO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jaW1hZyhsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gMDt9CisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2ltYWcoZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGNpbWFnZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2ltYWcoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjaW1hZyhfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jaW1hZyhsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2ltYWdsKF9feCk7fQorCisjdW5kZWYgY2ltYWcKKyNkZWZpbmUgY2ltYWcoX194KSBfX3RnX2NpbWFnKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGNvbmoKKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb25qKGZsb2F0IF9feCkge3JldHVybiBfX3g7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb25qKGRvdWJsZSBfX3gpIHtyZXR1cm4gX194O30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb25qKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBfX3g7fQorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NvbmooZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGNvbmpmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb25qKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY29uaihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb25qKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjb25qbChfX3gpO30KKworI3VuZGVmIGNvbmoKKyNkZWZpbmUgY29uaihfX3gpIF9fdGdfY29uaihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBjcHJvagorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Nwcm9qKGZsb2F0IF9feCkge3JldHVybiBjcHJvamYoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Nwcm9qKGRvdWJsZSBfX3gpIHtyZXR1cm4gY3Byb2ooX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY3Byb2oobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGNwcm9qbChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jcHJvaihmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3Byb2pmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jcHJvaihkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNwcm9qKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Nwcm9qKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjcHJvamwoX194KTt9CisKKyN1bmRlZiBjcHJvagorI2RlZmluZSBjcHJvaihfX3gpIF9fdGdfY3Byb2ooX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gY3JlYWwKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jcmVhbChmbG9hdCBfX3gpIHtyZXR1cm4gX194O30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY3JlYWwoZG91YmxlIF9feCkge3JldHVybiBfX3g7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NyZWFsKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBfX3g7fQorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NyZWFsKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjcmVhbGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NyZWFsKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3JlYWwoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY3JlYWwobG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNyZWFsbChfX3gpO30KKworI3VuZGVmIGNyZWFsCisjZGVmaW5lIGNyZWFsKF9feCkgX190Z19jcmVhbChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisjdW5kZWYgX1RHX0FUVFJTcAorI3VuZGVmIF9UR19BVFRSUworCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKyNlbmRpZiAvKiBfX1RHTUFUSF9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3RtbWludHJpbi5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS90bW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzI3OTZiCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS90bW1pbnRyaW4uaApAQCAtMCwwICsxLDc3MyBAQAorLyo9PT0tLS0tIHRtbWludHJpbi5oIC0gU1NTRTMgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX1RNTUlOVFJJTl9ICisjZGVmaW5lIF9fVE1NSU5UUklOX0gKKworI2luY2x1ZGUgPHBtbWludHJpbi5oPgorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInNzc2UzIikpKQorCisvLy8gXGJyaWVmIENvbXB1dGVzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBlYWNoIG9mIHRoZSBwYWNrZWQgOC1iaXQgc2lnbmVkCisvLy8gICAgaW50ZWdlcnMgaW4gdGhlIHNvdXJjZSBvcGVyYW5kIGFuZCBzdG9yZXMgdGhlIDgtYml0IHVuc2lnbmVkIGludGVnZXIKKy8vLyAgICByZXN1bHRzIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQUJTQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzggeCBpOF0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgYWJzb2x1dGUgdmFsdWVzIG9mIHRoZQorLy8vICAgIGVsZW1lbnRzIGluIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWJzX3BpOChfX202NCBfX2EpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWJzYigoX192OHFpKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcHV0ZXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIGVhY2ggb2YgdGhlIHBhY2tlZCA4LWJpdCBzaWduZWQKKy8vLyAgICBpbnRlZ2VycyBpbiB0aGUgc291cmNlIG9wZXJhbmQgYW5kIHN0b3JlcyB0aGUgOC1iaXQgdW5zaWduZWQgaW50ZWdlcgorLy8vICAgIHJlc3VsdHMgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQQUJTQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFsxNiB4IGk4XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgYWJzb2x1dGUgdmFsdWVzIG9mIHRoZQorLy8vICAgIGVsZW1lbnRzIGluIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hYnNfZXBpOChfX20xMjhpIF9fYSkKK3sKKyAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFic2IxMjgoKF9fdjE2cWkpX19hKTsKK30KKworLy8vIFxicmllZiBDb21wdXRlcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgZWFjaCBvZiB0aGUgcGFja2VkIDE2LWJpdCBzaWduZWQKKy8vLyAgICBpbnRlZ2VycyBpbiB0aGUgc291cmNlIG9wZXJhbmQgYW5kIHN0b3JlcyB0aGUgMTYtYml0IHVuc2lnbmVkIGludGVnZXIKKy8vLyAgICByZXN1bHRzIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQUJTVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGFic29sdXRlIHZhbHVlcyBvZiB0aGUKKy8vLyAgICBlbGVtZW50cyBpbiB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Fic19waTE2KF9fbTY0IF9fYSkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhYnN3KChfX3Y0aGkpX19hKTsKK30KKworLy8vIFxicmllZiBDb21wdXRlcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgZWFjaCBvZiB0aGUgcGFja2VkIDE2LWJpdCBzaWduZWQKKy8vLyAgICBpbnRlZ2VycyBpbiB0aGUgc291cmNlIG9wZXJhbmQgYW5kIHN0b3JlcyB0aGUgMTYtYml0IHVuc2lnbmVkIGludGVnZXIKKy8vLyAgICByZXN1bHRzIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEFCU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGFic29sdXRlIHZhbHVlcyBvZiB0aGUKKy8vLyAgICBlbGVtZW50cyBpbiB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWJzX2VwaTE2KF9fbTEyOGkgX19hKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWJzdzEyOCgoX192OGhpKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcHV0ZXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIGVhY2ggb2YgdGhlIHBhY2tlZCAzMi1iaXQgc2lnbmVkCisvLy8gICAgaW50ZWdlcnMgaW4gdGhlIHNvdXJjZSBvcGVyYW5kIGFuZCBzdG9yZXMgdGhlIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyCisvLy8gICAgcmVzdWx0cyBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEFCU0QgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZXMgb2YgdGhlCisvLy8gICAgZWxlbWVudHMgaW4gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hYnNfcGkzMihfX202NCBfX2EpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWJzZCgoX192MnNpKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcHV0ZXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIGVhY2ggb2YgdGhlIHBhY2tlZCAzMi1iaXQgc2lnbmVkCisvLy8gICAgaW50ZWdlcnMgaW4gdGhlIHNvdXJjZSBvcGVyYW5kIGFuZCBzdG9yZXMgdGhlIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyCisvLy8gICAgcmVzdWx0cyBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBBQlNEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMzJdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZXMgb2YgdGhlCisvLy8gICAgZWxlbWVudHMgaW4gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Fic19lcGkzMihfX20xMjhpIF9fYSkKK3sKKyAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFic2QxMjgoKF9fdjRzaSlfX2EpOworfQorCisvLy8gXGJyaWVmIENvbmNhdGVuYXRlcyB0aGUgdHdvIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3Igb3BlcmFuZHMsIGFuZAorLy8vICAgIHJpZ2h0LXNoaWZ0cyB0aGUgcmVzdWx0IGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgc3BlY2lmaWVkIGluIHRoZSBpbW1lZGlhdGUKKy8vLyAgICBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBfX20xMjhpIF9tbV9hbGlnbnJfZXBpOChfX20xMjhpIGEsIF9fbTEyOGkgYiwgY29uc3QgaW50IG4pOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEFMSUdOUiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbMTYgeCBpOF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzE2IHggaThdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIG4KKy8vLyAgICBBbiBpbW1lZGlhdGUgb3BlcmFuZCBzcGVjaWZ5aW5nIGhvdyBtYW55IGJ5dGVzIHRvIHJpZ2h0LXNoaWZ0IHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbmNhdGVuYXRlZCByaWdodC1zaGlmdGVkCisvLy8gICAgdmFsdWUuCisjZGVmaW5lIF9tbV9hbGlnbnJfZXBpOChhLCBiLCBuKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFsaWducjEyOCgoX192MTZxaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoYiksIChuKSk7IH0pCisKKy8vLyBcYnJpZWYgQ29uY2F0ZW5hdGVzIHRoZSB0d28gNjQtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmRzLCBhbmQgcmlnaHQtc2hpZnRzCisvLy8gICAgdGhlIHJlc3VsdCBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNwZWNpZmllZCBpbiB0aGUgaW1tZWRpYXRlIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTY0IF9tbV9hbGlnbnJfcGk4KF9fbTY0IGEsIF9fbTY0IGIsIGNvbnN0IGludCBuKTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBBTElHTlIgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gYQorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiBbOCB4IGk4XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBiCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFs4IHggaThdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIG4KKy8vLyAgICBBbiBpbW1lZGlhdGUgb3BlcmFuZCBzcGVjaWZ5aW5nIGhvdyBtYW55IGJ5dGVzIHRvIHJpZ2h0LXNoaWZ0IHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29uY2F0ZW5hdGVkIHJpZ2h0LXNoaWZ0ZWQKKy8vLyAgICB2YWx1ZS4KKyNkZWZpbmUgX21tX2FsaWducl9waTgoYSwgYiwgbikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX202NClfX2J1aWx0aW5faWEzMl9wYWxpZ25yKChfX3Y4cWkpKF9fbTY0KShhKSwgKF9fdjhxaSkoX19tNjQpKGIpLCAobikpOyB9KQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBhZGRzIHRoZSBhZGphY2VudCBwYWlycyBvZiB2YWx1ZXMgY29udGFpbmVkIGluIDIgcGFja2VkCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFs4IHggaTE2XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEhBRERXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzggeCBpMTZdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuIFRoZQorLy8vICAgIGhvcml6b250YWwgc3VtcyBvZiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGxvd2VyIGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzggeCBpMTZdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuIFRoZQorLy8vICAgIGhvcml6b250YWwgc3VtcyBvZiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIHVwcGVyIGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbCBzdW1zIG9mCisvLy8gICAgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZF9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BoYWRkdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBhZGRzIHRoZSBhZGphY2VudCBwYWlycyBvZiB2YWx1ZXMgY29udGFpbmVkIGluIDIgcGFja2VkCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggaTMyXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEhBREREIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMzJdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuIFRoZQorLy8vICAgIGhvcml6b250YWwgc3VtcyBvZiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGxvd2VyIGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMzJdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuIFRoZQorLy8vICAgIGhvcml6b250YWwgc3VtcyBvZiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIHVwcGVyIGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGkzMl0gY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbCBzdW1zIG9mCisvLy8gICAgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZF9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BoYWRkZDEyOCgoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBhZGRzIHRoZSBhZGphY2VudCBwYWlycyBvZiB2YWx1ZXMgY29udGFpbmVkIGluIDIgcGFja2VkCisvLy8gICAgNjQtYml0IHZlY3RvcnMgb2YgWzQgeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBIQUREVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuIFRoZQorLy8vICAgIGhvcml6b250YWwgc3VtcyBvZiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGxvd2VyIGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBzdW1zIG9mIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIgYml0cyBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIGhvcml6b250YWwgc3VtcyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oYWRkX3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9waGFkZHcoKF9fdjRoaSlfX2EsIChfX3Y0aGkpX19iKTsKK30KKworLy8vIFxicmllZiBIb3Jpem9udGFsbHkgYWRkcyB0aGUgYWRqYWNlbnQgcGFpcnMgb2YgdmFsdWVzIGNvbnRhaW5lZCBpbiAyIHBhY2tlZAorLy8vICAgIDY0LWJpdCB2ZWN0b3JzIG9mIFsyIHggaTMyXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQSEFEREQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFsyIHggaTMyXSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLiBUaGUKKy8vLyAgICBob3Jpem9udGFsIHN1bXMgb2YgdGhlIHZhbHVlcyBhcmUgc3RvcmVkIGluIHRoZSBsb3dlciBiaXRzIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuIFRoZQorLy8vICAgIGhvcml6b250YWwgc3VtcyBvZiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIHVwcGVyIGJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgdmVjdG9yIG9mIFsyIHggaTMyXSBjb250YWluaW5nIHRoZSBob3Jpem9udGFsIHN1bXMgb2YgYm90aAorLy8vICAgIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZF9waTMyKF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGhhZGRkKChfX3Yyc2kpX19hLCAoX192MnNpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgSG9yaXpvbnRhbGx5IGFkZHMgdGhlIGFkamFjZW50IHBhaXJzIG9mIHZhbHVlcyBjb250YWluZWQgaW4gMiBwYWNrZWQKKy8vLyAgICAxMjgtYml0IHZlY3RvcnMgb2YgWzggeCBpMTZdLiBQb3NpdGl2ZSBzdW1zIGdyZWF0ZXIgdGhhbiA3RkZGaCBhcmUKKy8vLyAgICBzYXR1cmF0ZWQgdG8gN0ZGRmguIE5lZ2F0aXZlIHN1bXMgbGVzcyB0aGFuIDgwMDBoIGFyZSBzYXR1cmF0ZWQgdG8gODAwMGguCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBIQUREU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBzdW1zIG9mIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgbG93ZXIgYml0cyBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBzdW1zIG9mIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIgYml0cyBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs4IHggaTE2XSBjb250YWluaW5nIHRoZSBob3Jpem9udGFsIHNhdHVyYXRlZAorLy8vICAgIHN1bXMgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZHNfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9waGFkZHN3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgSG9yaXpvbnRhbGx5IGFkZHMgdGhlIGFkamFjZW50IHBhaXJzIG9mIHZhbHVlcyBjb250YWluZWQgaW4gMiBwYWNrZWQKKy8vLyAgICA2NC1iaXQgdmVjdG9ycyBvZiBbNCB4IGkxNl0uIFBvc2l0aXZlIHN1bXMgZ3JlYXRlciB0aGFuIDdGRkZoIGFyZQorLy8vICAgIHNhdHVyYXRlZCB0byA3RkZGaC4gTmVnYXRpdmUgc3VtcyBsZXNzIHRoYW4gODAwMGggYXJlIHNhdHVyYXRlZCB0byA4MDAwaC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQSEFERFNXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBzdW1zIG9mIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgbG93ZXIgYml0cyBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLiBUaGUKKy8vLyAgICBob3Jpem9udGFsIHN1bXMgb2YgdGhlIHZhbHVlcyBhcmUgc3RvcmVkIGluIHRoZSB1cHBlciBiaXRzIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbCBzYXR1cmF0ZWQKKy8vLyAgICBzdW1zIG9mIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oYWRkc19waTE2KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGhhZGRzdygoX192NGhpKV9fYSwgKF9fdjRoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBzdWJ0cmFjdHMgdGhlIGFkamFjZW50IHBhaXJzIG9mIHZhbHVlcyBjb250YWluZWQgaW4gMgorLy8vICAgIHBhY2tlZCAxMjgtYml0IHZlY3RvcnMgb2YgWzggeCBpMTZdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQSFNVQlcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgbG93ZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs4IHggaTE2XSBjb250YWluaW5nIHRoZSBob3Jpem9udGFsIGRpZmZlcmVuY2VzCisvLy8gICAgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1Yl9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Boc3VidzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBzdWJ0cmFjdHMgdGhlIGFkamFjZW50IHBhaXJzIG9mIHZhbHVlcyBjb250YWluZWQgaW4gMgorLy8vICAgIHBhY2tlZCAxMjgtYml0IHZlY3RvcnMgb2YgWzQgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQSFNVQkQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGkzMl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgbG93ZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGkzMl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggaTMyXSBjb250YWluaW5nIHRoZSBob3Jpem9udGFsIGRpZmZlcmVuY2VzCisvLy8gICAgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1Yl9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Boc3ViZDEyOCgoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBzdWJ0cmFjdHMgdGhlIGFkamFjZW50IHBhaXJzIG9mIHZhbHVlcyBjb250YWluZWQgaW4gMgorLy8vICAgIHBhY2tlZCA2NC1iaXQgdmVjdG9ycyBvZiBbNCB4IGkxNl0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEhTVUJXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgbG93ZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLiBUaGUKKy8vLyAgICBob3Jpem9udGFsIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHZhbHVlcyBhcmUgc3RvcmVkIGluIHRoZSB1cHBlciBiaXRzIG9mCisvLy8gICAgdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcworLy8vICAgIG9mIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oc3ViX3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9waHN1YncoKF9fdjRoaSlfX2EsIChfX3Y0aGkpX19iKTsKK30KKworLy8vIFxicmllZiBIb3Jpem9udGFsbHkgc3VidHJhY3RzIHRoZSBhZGphY2VudCBwYWlycyBvZiB2YWx1ZXMgY29udGFpbmVkIGluIDIKKy8vLyAgICBwYWNrZWQgNjQtYml0IHZlY3RvcnMgb2YgWzIgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBIU1VCRCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuIFRoZQorLy8vICAgIGhvcml6b250YWwgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGxvd2VyIGJpdHMgb2YKKy8vLyAgICB0aGUgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiBbMiB4IGkzMl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCB2ZWN0b3Igb2YgWzIgeCBpMzJdIGNvbnRhaW5pbmcgdGhlIGhvcml6b250YWwgZGlmZmVyZW5jZXMKKy8vLyAgICBvZiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1Yl9waTMyKF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGhzdWJkKChfX3Yyc2kpX19hLCAoX192MnNpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgSG9yaXpvbnRhbGx5IHN1YnRyYWN0cyB0aGUgYWRqYWNlbnQgcGFpcnMgb2YgdmFsdWVzIGNvbnRhaW5lZCBpbiAyCisvLy8gICAgcGFja2VkIDEyOC1iaXQgdmVjdG9ycyBvZiBbOCB4IGkxNl0uIFBvc2l0aXZlIGRpZmZlcmVuY2VzIGdyZWF0ZXIgdGhhbgorLy8vICAgIDdGRkZoIGFyZSBzYXR1cmF0ZWQgdG8gN0ZGRmguIE5lZ2F0aXZlIGRpZmZlcmVuY2VzIGxlc3MgdGhhbiA4MDAwaCBhcmUKKy8vLyAgICBzYXR1cmF0ZWQgdG8gODAwMGguCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBIU1VCU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgbG93ZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs4IHggaTE2XSBjb250YWluaW5nIHRoZSBob3Jpem9udGFsIHNhdHVyYXRlZAorLy8vICAgIGRpZmZlcmVuY2VzIG9mIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hzdWJzX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGhzdWJzdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEhvcml6b250YWxseSBzdWJ0cmFjdHMgdGhlIGFkamFjZW50IHBhaXJzIG9mIHZhbHVlcyBjb250YWluZWQgaW4gMgorLy8vICAgIHBhY2tlZCA2NC1iaXQgdmVjdG9ycyBvZiBbNCB4IGkxNl0uIFBvc2l0aXZlIGRpZmZlcmVuY2VzIGdyZWF0ZXIgdGhhbgorLy8vICAgIDdGRkZoIGFyZSBzYXR1cmF0ZWQgdG8gN0ZGRmguIE5lZ2F0aXZlIGRpZmZlcmVuY2VzIGxlc3MgdGhhbiA4MDAwaCBhcmUKKy8vLyAgICBzYXR1cmF0ZWQgdG8gODAwMGguCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUEhTVUJTVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuIFRoZQorLy8vICAgIGhvcml6b250YWwgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGxvd2VyIGJpdHMgb2YKKy8vLyAgICB0aGUgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IHZlY3RvciBvZiBbNCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4gVGhlCisvLy8gICAgaG9yaXpvbnRhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIgYml0cyBvZgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIGhvcml6b250YWwgc2F0dXJhdGVkCisvLy8gICAgZGlmZmVyZW5jZXMgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hzdWJzX3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9waHN1YnN3KChfX3Y0aGkpX19hLCAoX192NGhpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgTXVsdGlwbGllcyBjb3JyZXNwb25kaW5nIHBhaXJzIG9mIHBhY2tlZCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyCisvLy8gICAgdmFsdWVzIGNvbnRhaW5lZCBpbiB0aGUgZmlyc3Qgc291cmNlIG9wZXJhbmQgYW5kIHBhY2tlZCA4LWJpdCBzaWduZWQKKy8vLyAgICBpbnRlZ2VyIHZhbHVlcyBjb250YWluZWQgaW4gdGhlIHNlY29uZCBzb3VyY2Ugb3BlcmFuZCwgYWRkcyBwYWlycyBvZgorLy8vICAgIGNvbnRpZ3VvdXMgcHJvZHVjdHMgd2l0aCBzaWduZWQgc2F0dXJhdGlvbiwgYW5kIHdyaXRlcyB0aGUgMTYtYml0IHN1bXMgdG8KKy8vLyAgICB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGluIHRoZSBkZXN0aW5hdGlvbi4gRm9yIGV4YW1wbGUsIGJpdHMgWzc6MF0gb2YKKy8vLyAgICBib3RoIG9wZXJhbmRzIGFyZSBtdWx0aXBsaWVkLCBiaXRzIFsxNTo4XSBvZiBib3RoIG9wZXJhbmRzIGFyZQorLy8vICAgIG11bHRpcGxpZWQsIGFuZCB0aGUgc3VtIG9mIGJvdGggcmVzdWx0cyBpcyB3cml0dGVuIHRvIGJpdHMgWzE1OjBdIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQTUFERFVCU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc2Vjb25kIHNvdXJjZSBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzdW1zIG9mIHByb2R1Y3RzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kczoKKy8vLyAgICBSMCA6PSAoX19hMCAqIF9fYjApICsgKF9fYTEgKiBfX2IxKQorLy8vICAgIFIxIDo9IChfX2EyICogX19iMikgKyAoX19hMyAqIF9fYjMpCisvLy8gICAgUjIgOj0gKF9fYTQgKiBfX2I0KSArIChfX2E1ICogX19iNSkKKy8vLyAgICBSMyA6PSAoX19hNiAqIF9fYjYpICsgKF9fYTcgKiBfX2I3KQorLy8vICAgIFI0IDo9IChfX2E4ICogX19iOCkgKyAoX19hOSAqIF9fYjkpCisvLy8gICAgUjUgOj0gKF9fYTEwICogX19iMTApICsgKF9fYTExICogX19iMTEpCisvLy8gICAgUjYgOj0gKF9fYTEyICogX19iMTIpICsgKF9fYTEzICogX19iMTMpCisvLy8gICAgUjcgOj0gKF9fYTE0ICogX19iMTQpICsgKF9fYTE1ICogX19iMTUpCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hZGR1YnNfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wbWFkZHVic3cxMjgoKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IpOworfQorCisvLy8gXGJyaWVmIE11bHRpcGxpZXMgY29ycmVzcG9uZGluZyBwYWlycyBvZiBwYWNrZWQgOC1iaXQgdW5zaWduZWQgaW50ZWdlcgorLy8vICAgIHZhbHVlcyBjb250YWluZWQgaW4gdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kIGFuZCBwYWNrZWQgOC1iaXQgc2lnbmVkCisvLy8gICAgaW50ZWdlciB2YWx1ZXMgY29udGFpbmVkIGluIHRoZSBzZWNvbmQgc291cmNlIG9wZXJhbmQsIGFkZHMgcGFpcnMgb2YKKy8vLyAgICBjb250aWd1b3VzIHByb2R1Y3RzIHdpdGggc2lnbmVkIHNhdHVyYXRpb24sIGFuZCB3cml0ZXMgdGhlIDE2LWJpdCBzdW1zIHRvCisvLy8gICAgdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUgZGVzdGluYXRpb24uIEZvciBleGFtcGxlLCBiaXRzIFs3OjBdIG9mCisvLy8gICAgYm90aCBvcGVyYW5kcyBhcmUgbXVsdGlwbGllZCwgYml0cyBbMTU6OF0gb2YgYm90aCBvcGVyYW5kcyBhcmUKKy8vLyAgICBtdWx0aXBsaWVkLCBhbmQgdGhlIHN1bSBvZiBib3RoIHJlc3VsdHMgaXMgd3JpdHRlbiB0byBiaXRzIFsxNTowXSBvZiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQTUFERFVCU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgZmlyc3Qgc291cmNlIG9wZXJhbmQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHNlY29uZCBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBzdW1zIG9mIHByb2R1Y3RzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kczoKKy8vLyAgICBSMCA6PSAoX19hMCAqIF9fYjApICsgKF9fYTEgKiBfX2IxKQorLy8vICAgIFIxIDo9IChfX2EyICogX19iMikgKyAoX19hMyAqIF9fYjMpCisvLy8gICAgUjIgOj0gKF9fYTQgKiBfX2I0KSArIChfX2E1ICogX19iNSkKKy8vLyAgICBSMyA6PSAoX19hNiAqIF9fYjYpICsgKF9fYTcgKiBfX2I3KQorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFkZHVic19waTE2KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG1hZGR1YnN3KChfX3Y4cWkpX19hLCAoX192OHFpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgTXVsdGlwbGllcyBwYWNrZWQgMTYtYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlcywgdHJ1bmNhdGVzIHRoZSAzMi1iaXQKKy8vLyAgICBwcm9kdWN0cyB0byB0aGUgMTggbW9zdCBzaWduaWZpY2FudCBiaXRzIGJ5IHJpZ2h0LXNoaWZ0aW5nLCByb3VuZHMgdGhlCisvLy8gICAgdHJ1bmNhdGVkIHZhbHVlIGJ5IGFkZGluZyAxLCBhbmQgd3JpdGVzIGJpdHMgWzE2OjFdIHRvIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUE1VTEhSU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbOCB4IGkxNl0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs4IHggaTE2XSBjb250YWluaW5nIHRoZSByb3VuZGVkIGFuZCBzY2FsZWQKKy8vLyAgICBwcm9kdWN0cyBvZiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWxocnNfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wbXVsaHJzdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIE11bHRpcGxpZXMgcGFja2VkIDE2LWJpdCBzaWduZWQgaW50ZWdlciB2YWx1ZXMsIHRydW5jYXRlcyB0aGUgMzItYml0CisvLy8gICAgcHJvZHVjdHMgdG8gdGhlIDE4IG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBieSByaWdodC1zaGlmdGluZywgcm91bmRzIHRoZQorLy8vICAgIHRydW5jYXRlZCB2YWx1ZSBieSBhZGRpbmcgMSwgYW5kIHdyaXRlcyBiaXRzIFsxNjoxXSB0byB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUE1VTEhSU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgdmVjdG9yIG9mIFs0IHggaTE2XSBjb250YWluaW5nIHRoZSByb3VuZGVkIGFuZCBzY2FsZWQKKy8vLyAgICBwcm9kdWN0cyBvZiBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsaHJzX3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbXVsaHJzdygoX192NGhpKV9fYSwgKF9fdjRoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIENvcGllcyB0aGUgOC1iaXQgaW50ZWdlcnMgZnJvbSBhIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgdG8gdGhlCisvLy8gICAgZGVzdGluYXRpb24gb3IgY2xlYXJzIDgtYml0IHZhbHVlcyBpbiB0aGUgZGVzdGluYXRpb24sIGFzIHNwZWNpZmllZCBieQorLy8vICAgIHRoZSBzZWNvbmQgc291cmNlIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTSFVGQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIGNvcGllZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgY29udHJvbCBieXRlcyBjb3JyZXNwb25kaW5nIHRvCisvLy8gICAgcG9zaXRpb25zIGluIHRoZSBkZXN0aW5hdGlvbjoKKy8vLyAgICBCaXQgNzoKKy8vLyAgICAxOiBDbGVhciB0aGUgY29ycmVzcG9uZGluZyBieXRlIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICAwOiBDb3B5IHRoZSBzZWxlY3RlZCBzb3VyY2UgYnl0ZSB0byB0aGUgY29ycmVzcG9uZGluZyBieXRlIGluIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vICAgIEJpdHMgWzY6NF0gUmVzZXJ2ZWQuCisvLy8gICAgQml0cyBbMzowXSBzZWxlY3QgdGhlIHNvdXJjZSBieXRlIHRvIGJlIGNvcGllZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29waWVkIG9yIGNsZWFyZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaHVmZmxlX2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2h1ZmIxMjgoKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IpOworfQorCisvLy8gXGJyaWVmIENvcGllcyB0aGUgOC1iaXQgaW50ZWdlcnMgZnJvbSBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciB0byB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbiBvciBjbGVhcnMgOC1iaXQgdmFsdWVzIGluIHRoZSBkZXN0aW5hdGlvbiwgYXMgc3BlY2lmaWVkIGJ5CisvLy8gICAgdGhlIHNlY29uZCBzb3VyY2Ugb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU0hVRkIgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIGNvcGllZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBjb250cm9sIGJ5dGVzIGNvcnJlc3BvbmRpbmcgdG8KKy8vLyAgICBwb3NpdGlvbnMgaW4gdGhlIGRlc3RpbmF0aW9uOgorLy8vICAgIEJpdCA3OgorLy8vICAgIDE6IENsZWFyIHRoZSBjb3JyZXNwb25kaW5nIGJ5dGUgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIDA6IENvcHkgdGhlIHNlbGVjdGVkIHNvdXJjZSBieXRlIHRvIHRoZSBjb3JyZXNwb25kaW5nIGJ5dGUgaW4gdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbMzowXSBzZWxlY3QgdGhlIHNvdXJjZSBieXRlIHRvIGJlIGNvcGllZC4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb3BpZWQgb3IgY2xlYXJlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaHVmZmxlX3BpOChfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzaHVmYigoX192OHFpKV9fYSwgKF9fdjhxaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEZvciBlYWNoIDgtYml0IGludGVnZXIgaW4gdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLCBwZXJmb3JtIG9uZSBvZgorLy8vICAgIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBhcyBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCBzb3VyY2Ugb3BlcmFuZDogSWYgdGhlCisvLy8gICAgYnl0ZSBpbiB0aGUgc2Vjb25kIHNvdXJjZSBpcyBuZWdhdGl2ZSwgY2FsY3VsYXRlIHRoZSB0d28ncyBjb21wbGVtZW50IG9mCisvLy8gICAgdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZSBpbiB0aGUgZmlyc3Qgc291cmNlLCBhbmQgd3JpdGUgdGhhdCB2YWx1ZSB0byB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4gSWYgdGhlIGJ5dGUgaW4gdGhlIHNlY29uZCBzb3VyY2UgaXMgcG9zaXRpdmUsIGNvcHkgdGhlCisvLy8gICAgY29ycmVzcG9uZGluZyBieXRlIGZyb20gdGhlIGZpcnN0IHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24uIElmIHRoZSBieXRlCisvLy8gICAgaW4gdGhlIHNlY29uZCBzb3VyY2UgaXMgemVybywgY2xlYXIgdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZSBpbiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUFNJR05CIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gYmUgY29waWVkLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBjb250cm9sIGJ5dGVzIGNvcnJlc3BvbmRpbmcgdG8KKy8vLyAgICBwb3NpdGlvbnMgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSByZXN1bHRhbnQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaWduX2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2lnbmIxMjgoKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEZvciBlYWNoIDE2LWJpdCBpbnRlZ2VyIGluIHRoZSBmaXJzdCBzb3VyY2Ugb3BlcmFuZCwgcGVyZm9ybSBvbmUgb2YKKy8vLyAgICB0aGUgZm9sbG93aW5nIGFjdGlvbnMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgc291cmNlIG9wZXJhbmQ6IElmIHRoZQorLy8vICAgIHdvcmQgaW4gdGhlIHNlY29uZCBzb3VyY2UgaXMgbmVnYXRpdmUsIGNhbGN1bGF0ZSB0aGUgdHdvJ3MgY29tcGxlbWVudCBvZgorLy8vICAgIHRoZSBjb3JyZXNwb25kaW5nIHdvcmQgaW4gdGhlIGZpcnN0IHNvdXJjZSwgYW5kIHdyaXRlIHRoYXQgdmFsdWUgdG8gdGhlCisvLy8gICAgZGVzdGluYXRpb24uIElmIHRoZSB3b3JkIGluIHRoZSBzZWNvbmQgc291cmNlIGlzIHBvc2l0aXZlLCBjb3B5IHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgd29yZCBmcm9tIHRoZSBmaXJzdCBzb3VyY2UgdG8gdGhlIGRlc3RpbmF0aW9uLiBJZiB0aGUgd29yZAorLy8vICAgIGluIHRoZSBzZWNvbmQgc291cmNlIGlzIHplcm8sIGNsZWFyIHRoZSBjb3JyZXNwb25kaW5nIHdvcmQgaW4gdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTSUdOVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIGNvcGllZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgY29udHJvbCB3b3JkcyBjb3JyZXNwb25kaW5nIHRvCisvLy8gICAgcG9zaXRpb25zIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcmVzdWx0YW50IHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2lnbl9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzaWdudzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEZvciBlYWNoIDMyLWJpdCBpbnRlZ2VyIGluIHRoZSBmaXJzdCBzb3VyY2Ugb3BlcmFuZCwgcGVyZm9ybSBvbmUgb2YKKy8vLyAgICB0aGUgZm9sbG93aW5nIGFjdGlvbnMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgc291cmNlIG9wZXJhbmQ6IElmIHRoZQorLy8vICAgIGRvdWJsZXdvcmQgaW4gdGhlIHNlY29uZCBzb3VyY2UgaXMgbmVnYXRpdmUsIGNhbGN1bGF0ZSB0aGUgdHdvJ3MKKy8vLyAgICBjb21wbGVtZW50IG9mIHRoZSBjb3JyZXNwb25kaW5nIHdvcmQgaW4gdGhlIGZpcnN0IHNvdXJjZSwgYW5kIHdyaXRlIHRoYXQKKy8vLyAgICB2YWx1ZSB0byB0aGUgZGVzdGluYXRpb24uIElmIHRoZSBkb3VibGV3b3JkIGluIHRoZSBzZWNvbmQgc291cmNlIGlzCisvLy8gICAgcG9zaXRpdmUsIGNvcHkgdGhlIGNvcnJlc3BvbmRpbmcgd29yZCBmcm9tIHRoZSBmaXJzdCBzb3VyY2UgdG8gdGhlCisvLy8gICAgZGVzdGluYXRpb24uIElmIHRoZSBkb3VibGV3b3JkIGluIHRoZSBzZWNvbmQgc291cmNlIGlzIHplcm8sIGNsZWFyIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgd29yZCBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBTSUdORCBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIGNvcGllZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgY29udHJvbCBkb3VibGV3b3JkcyBjb3JyZXNwb25kaW5nIHRvCisvLy8gICAgcG9zaXRpb25zIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcmVzdWx0YW50IHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2lnbl9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzaWduZDEyOCgoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEZvciBlYWNoIDgtYml0IGludGVnZXIgaW4gdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLCBwZXJmb3JtIG9uZSBvZgorLy8vICAgIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBhcyBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCBzb3VyY2Ugb3BlcmFuZDogSWYgdGhlCisvLy8gICAgYnl0ZSBpbiB0aGUgc2Vjb25kIHNvdXJjZSBpcyBuZWdhdGl2ZSwgY2FsY3VsYXRlIHRoZSB0d28ncyBjb21wbGVtZW50IG9mCisvLy8gICAgdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZSBpbiB0aGUgZmlyc3Qgc291cmNlLCBhbmQgd3JpdGUgdGhhdCB2YWx1ZSB0byB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4gSWYgdGhlIGJ5dGUgaW4gdGhlIHNlY29uZCBzb3VyY2UgaXMgcG9zaXRpdmUsIGNvcHkgdGhlCisvLy8gICAgY29ycmVzcG9uZGluZyBieXRlIGZyb20gdGhlIGZpcnN0IHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24uIElmIHRoZSBieXRlCisvLy8gICAgaW4gdGhlIHNlY29uZCBzb3VyY2UgaXMgemVybywgY2xlYXIgdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZSBpbiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU0lHTkIgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIGNvcGllZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBjb250cm9sIGJ5dGVzIGNvcnJlc3BvbmRpbmcgdG8KKy8vLyAgICBwb3NpdGlvbnMgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJlc3VsdGFudCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaWduX3BpOChfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzaWduYigoX192OHFpKV9fYSwgKF9fdjhxaSlfX2IpOworfQorCisvLy8gXGJyaWVmIEZvciBlYWNoIDE2LWJpdCBpbnRlZ2VyIGluIHRoZSBmaXJzdCBzb3VyY2Ugb3BlcmFuZCwgcGVyZm9ybSBvbmUgb2YKKy8vLyAgICB0aGUgZm9sbG93aW5nIGFjdGlvbnMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgc291cmNlIG9wZXJhbmQ6IElmIHRoZQorLy8vICAgIHdvcmQgaW4gdGhlIHNlY29uZCBzb3VyY2UgaXMgbmVnYXRpdmUsIGNhbGN1bGF0ZSB0aGUgdHdvJ3MgY29tcGxlbWVudCBvZgorLy8vICAgIHRoZSBjb3JyZXNwb25kaW5nIHdvcmQgaW4gdGhlIGZpcnN0IHNvdXJjZSwgYW5kIHdyaXRlIHRoYXQgdmFsdWUgdG8gdGhlCisvLy8gICAgZGVzdGluYXRpb24uIElmIHRoZSB3b3JkIGluIHRoZSBzZWNvbmQgc291cmNlIGlzIHBvc2l0aXZlLCBjb3B5IHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgd29yZCBmcm9tIHRoZSBmaXJzdCBzb3VyY2UgdG8gdGhlIGRlc3RpbmF0aW9uLiBJZiB0aGUgd29yZAorLy8vICAgIGluIHRoZSBzZWNvbmQgc291cmNlIGlzIHplcm8sIGNsZWFyIHRoZSBjb3JyZXNwb25kaW5nIHdvcmQgaW4gdGhlCisvLy8gICAgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUFNJR05XIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byBiZSBjb3BpZWQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgY29udHJvbCB3b3JkcyBjb3JyZXNwb25kaW5nIHRvCisvLy8gICAgcG9zaXRpb25zIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSByZXN1bHRhbnQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2lnbl9waTE2KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNpZ253KChfX3Y0aGkpX19hLCAoX192NGhpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgRm9yIGVhY2ggMzItYml0IGludGVnZXIgaW4gdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLCBwZXJmb3JtIG9uZSBvZgorLy8vICAgIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBhcyBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCBzb3VyY2Ugb3BlcmFuZDogSWYgdGhlCisvLy8gICAgZG91Ymxld29yZCBpbiB0aGUgc2Vjb25kIHNvdXJjZSBpcyBuZWdhdGl2ZSwgY2FsY3VsYXRlIHRoZSB0d28ncworLy8vICAgIGNvbXBsZW1lbnQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZG91Ymxld29yZCBpbiB0aGUgZmlyc3Qgc291cmNlLCBhbmQKKy8vLyAgICB3cml0ZSB0aGF0IHZhbHVlIHRvIHRoZSBkZXN0aW5hdGlvbi4gSWYgdGhlIGRvdWJsZXdvcmQgaW4gdGhlIHNlY29uZAorLy8vICAgIHNvdXJjZSBpcyBwb3NpdGl2ZSwgY29weSB0aGUgY29ycmVzcG9uZGluZyBkb3VibGV3b3JkIGZyb20gdGhlIGZpcnN0CisvLy8gICAgc291cmNlIHRvIHRoZSBkZXN0aW5hdGlvbi4gSWYgdGhlIGRvdWJsZXdvcmQgaW4gdGhlIHNlY29uZCBzb3VyY2UgaXMKKy8vLyAgICB6ZXJvLCBjbGVhciB0aGUgY29ycmVzcG9uZGluZyBkb3VibGV3b3JkIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQU0lHTkQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIGNvcGllZC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0d28gY29udHJvbCBkb3VibGV3b3JkcyBjb3JyZXNwb25kaW5nCisvLy8gICAgdG8gcG9zaXRpb25zIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSByZXN1bHRhbnQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2lnbl9waTMyKF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNpZ25kKChfX3Yyc2kpX19hLCAoX192MnNpKV9fYik7Cit9CisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fVE1NSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvdW53aW5kLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3Vud2luZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNzRhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3Vud2luZC5oCkBAIC0wLDAgKzEsMjk5IEBACisvKj09PS0tLS0gdW53aW5kLmggLSBTdGFjayB1bndpbmRpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworLyogU2VlICJEYXRhIERlZmluaXRpb25zIGZvciBsaWJnY2NfcyIgaW4gdGhlIExpbnV4IFN0YW5kYXJkIEJhc2UuKi8KKworI2lmbmRlZiBfX0NMQU5HX1VOV0lORF9ICisjZGVmaW5lIF9fQ0xBTkdfVU5XSU5EX0gKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBfX2hhc19pbmNsdWRlX25leHQoPHVud2luZC5oPikKKy8qIERhcndpbiAoZnJvbSAxMS54IG9uKSBwcm92aWRlIGFuIHVud2luZC5oLiBJZiB0aGF0J3MgYXZhaWxhYmxlLAorICogdXNlIGl0LiBsaWJ1bndpbmQgd3JhcHMgc29tZSBvZiBpdHMgZGVmaW5pdGlvbnMgaW4gI2lmZGVmIF9HTlVfU09VUkNFLAorICogc28gZGVmaW5lIHRoYXQgYXJvdW5kIHRoZSBpbmNsdWRlLiovCisjIGlmbmRlZiBfR05VX1NPVVJDRQorIyAgZGVmaW5lIF9TSE9VTERfVU5ERUZJTkVfR05VX1NPVVJDRQorIyAgZGVmaW5lIF9HTlVfU09VUkNFCisjIGVuZGlmCisvLyBsaWJ1bndpbmQncyB1bndpbmQuaCByZWZsZWN0cyB0aGUgY3VycmVudCB2aXNpYmlsaXR5LiAgSG93ZXZlciwgTW96aWxsYQorLy8gYnVpbGRzIHdpdGggLWZ2aXNpYmlsaXR5PWhpZGRlbiBhbmQgcmVsaWVzIG9uIGdjYydzIHVud2luZC5oIHRvIHJlc2V0IHRoZQorLy8gdmlzaWJpbGl0eSB0byBkZWZhdWx0IGFuZCBleHBvcnQgaXRzIGNvbnRlbnRzLiAgZ2NjIGFsc28gYWxsb3dzIHVzZXJzIHRvCisvLyBvdmVycmlkZSBpdHMgb3ZlcnJpZGUgYnkgI2RlZmluaW5nIEhJREVfRVhQT1JUUyAoYnV0IG5vdGUsIHRoaXMgb25seSBvYmV5cworLy8gdGhlIHVzZXIncyAtZnZpc2liaWxpdHkgc2V0dGluZzsgaXQgZG9lc24ndCBoaWRlIGFueSBleHBvcnRzIG9uIGl0cyBvd24pLiAgV2UKKy8vIGltaXRhdGUgZ2NjJ3MgaGVhZGVyIGhlcmU6CisjIGlmZGVmIEhJREVfRVhQT1JUUworIyAgaW5jbHVkZV9uZXh0IDx1bndpbmQuaD4KKyMgZWxzZQorIyAgcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goZGVmYXVsdCkKKyMgIGluY2x1ZGVfbmV4dCA8dW53aW5kLmg+CisjICBwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCisjIGVuZGlmCisjIGlmZGVmIF9TSE9VTERfVU5ERUZJTkVfR05VX1NPVVJDRQorIyAgdW5kZWYgX0dOVV9TT1VSQ0UKKyMgIHVuZGVmIF9TSE9VTERfVU5ERUZJTkVfR05VX1NPVVJDRQorIyBlbmRpZgorI2Vsc2UKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEl0IGlzIGEgYml0IHN0cmFuZ2UgZm9yIGEgaGVhZGVyIHRvIHBsYXkgd2l0aCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUKKyAgIHN5bWJvbHMgaXQgZGVjbGFyZXMsIGJ1dCB0aGlzIG1hdGNoZXMgZ2NjJ3MgYmVoYXZpb3IgYW5kIHNvbWUgcHJvZ3JhbXMKKyAgIGRlcGVuZCBvbiBpdCAqLworI2lmbmRlZiBISURFX0VYUE9SVFMKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcHVzaChkZWZhdWx0KQorI2VuZGlmCisKK3R5cGVkZWYgdWludHB0cl90IF9VbndpbmRfV29yZDsKK3R5cGVkZWYgaW50cHRyX3QgX1Vud2luZF9Td29yZDsKK3R5cGVkZWYgdWludHB0cl90IF9VbndpbmRfUHRyOwordHlwZWRlZiB1aW50cHRyX3QgX1Vud2luZF9JbnRlcm5hbF9QdHI7Cit0eXBlZGVmIHVpbnQ2NF90IF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzOworCit0eXBlZGVmIGludHB0cl90IF9zbGViMTI4X3Q7Cit0eXBlZGVmIHVpbnRwdHJfdCBfdWxlYjEyOF90OworCitzdHJ1Y3QgX1Vud2luZF9Db250ZXh0Oworc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uOwordHlwZWRlZiBlbnVtIHsKKyAgX1VSQ19OT19SRUFTT04gPSAwLAorI2lmIGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX19VU0lOR19TSkxKX0VYQ0VQVElPTlNfXykgJiYgXAorICAgICFkZWZpbmVkKF9fQVJNX0RXQVJGX0VIX18pCisgIF9VUkNfT0sgPSAwLCAvKiB1c2VkIGJ5IEFSTSBFSEFCSSAqLworI2VuZGlmCisgIF9VUkNfRk9SRUlHTl9FWENFUFRJT05fQ0FVR0hUID0gMSwKKworICBfVVJDX0ZBVEFMX1BIQVNFMl9FUlJPUiA9IDIsCisgIF9VUkNfRkFUQUxfUEhBU0UxX0VSUk9SID0gMywKKyAgX1VSQ19OT1JNQUxfU1RPUCA9IDQsCisKKyAgX1VSQ19FTkRfT0ZfU1RBQ0sgPSA1LAorICBfVVJDX0hBTkRMRVJfRk9VTkQgPSA2LAorICBfVVJDX0lOU1RBTExfQ09OVEVYVCA9IDcsCisgIF9VUkNfQ09OVElOVUVfVU5XSU5EID0gOCwKKyNpZiBkZWZpbmVkKF9fYXJtX18pICYmICFkZWZpbmVkKF9fVVNJTkdfU0pMSl9FWENFUFRJT05TX18pICYmIFwKKyAgICAhZGVmaW5lZChfX0FSTV9EV0FSRl9FSF9fKQorICBfVVJDX0ZBSUxVUkUgPSA5IC8qIHVzZWQgYnkgQVJNIEVIQUJJICovCisjZW5kaWYKK30gX1Vud2luZF9SZWFzb25fQ29kZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgX1VBX1NFQVJDSF9QSEFTRSA9IDEsCisgIF9VQV9DTEVBTlVQX1BIQVNFID0gMiwKKworICBfVUFfSEFORExFUl9GUkFNRSA9IDQsCisgIF9VQV9GT1JDRV9VTldJTkQgPSA4LAorICBfVUFfRU5EX09GX1NUQUNLID0gMTYgLyogZ2NjIGV4dGVuc2lvbiB0byBDKysgQUJJICovCit9IF9VbndpbmRfQWN0aW9uOworCit0eXBlZGVmIHZvaWQgKCpfVW53aW5kX0V4Y2VwdGlvbl9DbGVhbnVwX0ZuKShfVW53aW5kX1JlYXNvbl9Db2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICopOworCitzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24geworICBfVW53aW5kX0V4Y2VwdGlvbl9DbGFzcyBleGNlcHRpb25fY2xhc3M7CisgIF9VbndpbmRfRXhjZXB0aW9uX0NsZWFudXBfRm4gZXhjZXB0aW9uX2NsZWFudXA7CisgIF9VbndpbmRfV29yZCBwcml2YXRlXzE7CisgIF9VbndpbmRfV29yZCBwcml2YXRlXzI7CisgIC8qIFRoZSBJdGFuaXVtIEFCSSByZXF1aXJlcyB0aGF0IF9VbndpbmRfRXhjZXB0aW9uIG9iamVjdHMgYXJlICJkb3VibGUtd29yZAorICAgKiBhbGlnbmVkIi4gIEdDQyBoYXMgaW50ZXJwcmV0ZWQgdGhpcyB0byBtZWFuICJ1c2UgdGhlIG1heGltdW0gdXNlZnVsCisgICAqIGFsaWdubWVudCBmb3IgdGhlIHRhcmdldCI7IHNvIGRvIHdlLiAqLworfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXykpOworCit0eXBlZGVmIF9VbndpbmRfUmVhc29uX0NvZGUgKCpfVW53aW5kX1N0b3BfRm4pKGludCwgX1Vud2luZF9BY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9VbndpbmRfQ29udGV4dCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICopOworCit0eXBlZGVmIF9VbndpbmRfUmVhc29uX0NvZGUgKCpfVW53aW5kX1BlcnNvbmFsaXR5X0ZuKSgKKyAgICBpbnQsIF9VbndpbmRfQWN0aW9uLCBfVW53aW5kX0V4Y2VwdGlvbl9DbGFzcywgc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICosCisgICAgc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKK3R5cGVkZWYgX1Vud2luZF9QZXJzb25hbGl0eV9GbiBfX3BlcnNvbmFsaXR5X3JvdXRpbmU7CisKK3R5cGVkZWYgX1Vud2luZF9SZWFzb25fQ29kZSAoKl9VbndpbmRfVHJhY2VfRm4pKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKik7CisKKyNpZiBkZWZpbmVkKF9fYXJtX18pICYmICFkZWZpbmVkKF9fQVBQTEVfXykKKwordHlwZWRlZiBlbnVtIHsKKyAgX1VWUlNDX0NPUkUgPSAwLCAgICAgICAgLyogaW50ZWdlciByZWdpc3RlciAqLworICBfVVZSU0NfVkZQID0gMSwgICAgICAgICAvKiB2ZnAgKi8KKyAgX1VWUlNDX1dNTVhEID0gMywgICAgICAgLyogSW50ZWwgV01NWCBkYXRhIHJlZ2lzdGVyICovCisgIF9VVlJTQ19XTU1YQyA9IDQgICAgICAgIC8qIEludGVsIFdNTVggY29udHJvbCByZWdpc3RlciAqLworfSBfVW53aW5kX1ZSU19SZWdDbGFzczsKKwordHlwZWRlZiBlbnVtIHsKKyAgX1VWUlNEX1VJTlQzMiA9IDAsCisgIF9VVlJTRF9WRlBYID0gMSwKKyAgX1VWUlNEX1VJTlQ2NCA9IDMsCisgIF9VVlJTRF9GTE9BVCA9IDQsCisgIF9VVlJTRF9ET1VCTEUgPSA1Cit9IF9VbndpbmRfVlJTX0RhdGFSZXByZXNlbnRhdGlvbjsKKwordHlwZWRlZiBlbnVtIHsKKyAgX1VWUlNSX09LID0gMCwKKyAgX1VWUlNSX05PVF9JTVBMRU1FTlRFRCA9IDEsCisgIF9VVlJTUl9GQUlMRUQgPSAyCit9IF9VbndpbmRfVlJTX1Jlc3VsdDsKKworI2lmICFkZWZpbmVkKF9fVVNJTkdfU0pMSl9FWENFUFRJT05TX18pICYmICFkZWZpbmVkKF9fQVJNX0RXQVJGX0VIX18pCit0eXBlZGVmIHVpbnQzMl90IF9VbndpbmRfU3RhdGU7CisjZGVmaW5lIF9VU19WSVJUVUFMX1VOV0lORF9GUkFNRSAgKChfVW53aW5kX1N0YXRlKTApCisjZGVmaW5lIF9VU19VTldJTkRfRlJBTUVfU1RBUlRJTkcgKChfVW53aW5kX1N0YXRlKTEpCisjZGVmaW5lIF9VU19VTldJTkRfRlJBTUVfUkVTVU1FICAgKChfVW53aW5kX1N0YXRlKTIpCisjZGVmaW5lIF9VU19BQ1RJT05fTUFTSyAgICAgICAgICAgKChfVW53aW5kX1N0YXRlKTMpCisjZGVmaW5lIF9VU19GT1JDRV9VTldJTkQgICAgICAgICAgKChfVW53aW5kX1N0YXRlKTgpCisjZW5kaWYKKworX1Vud2luZF9WUlNfUmVzdWx0IF9VbndpbmRfVlJTX0dldChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpfX2NvbnRleHQsCisgIF9VbndpbmRfVlJTX1JlZ0NsYXNzIF9fcmVnY2xhc3MsCisgIHVpbnQzMl90IF9fcmVnbm8sCisgIF9VbndpbmRfVlJTX0RhdGFSZXByZXNlbnRhdGlvbiBfX3JlcHJlc2VudGF0aW9uLAorICB2b2lkICpfX3ZhbHVlcCk7CisKK19VbndpbmRfVlJTX1Jlc3VsdCBfVW53aW5kX1ZSU19TZXQoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqX19jb250ZXh0LAorICBfVW53aW5kX1ZSU19SZWdDbGFzcyBfX3JlZ2NsYXNzLAorICB1aW50MzJfdCBfX3JlZ25vLAorICBfVW53aW5kX1ZSU19EYXRhUmVwcmVzZW50YXRpb24gX19yZXByZXNlbnRhdGlvbiwKKyAgdm9pZCAqX192YWx1ZXApOworCitzdGF0aWMgX19pbmxpbmVfXworX1Vud2luZF9Xb3JkIF9VbndpbmRfR2V0R1Ioc3RydWN0IF9VbndpbmRfQ29udGV4dCAqX19jb250ZXh0LCBpbnQgX19pbmRleCkgeworICBfVW53aW5kX1dvcmQgX192YWx1ZTsKKyAgX1Vud2luZF9WUlNfR2V0KF9fY29udGV4dCwgX1VWUlNDX0NPUkUsIF9faW5kZXgsIF9VVlJTRF9VSU5UMzIsICZfX3ZhbHVlKTsKKyAgcmV0dXJuIF9fdmFsdWU7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fCit2b2lkIF9VbndpbmRfU2V0R1Ioc3RydWN0IF9VbndpbmRfQ29udGV4dCAqX19jb250ZXh0LCBpbnQgX19pbmRleCwKKyAgICAgICAgICAgICAgICAgICBfVW53aW5kX1dvcmQgX192YWx1ZSkgeworICBfVW53aW5kX1ZSU19TZXQoX19jb250ZXh0LCBfVVZSU0NfQ09SRSwgX19pbmRleCwgX1VWUlNEX1VJTlQzMiwgJl9fdmFsdWUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXworX1Vud2luZF9Xb3JkIF9VbndpbmRfR2V0SVAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqX19jb250ZXh0KSB7CisgIF9VbndpbmRfV29yZCBfX2lwID0gX1Vud2luZF9HZXRHUihfX2NvbnRleHQsIDE1KTsKKyAgcmV0dXJuIF9faXAgJiB+KF9VbndpbmRfV29yZCkoMHgxKTsgLyogUmVtb3ZlIHRodW1iIG1vZGUgYml0LiAqLworfQorCitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfVW53aW5kX1NldElQKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKl9fY29udGV4dCwgX1Vud2luZF9Xb3JkIF9fdmFsdWUpIHsKKyAgX1Vud2luZF9Xb3JkIF9fdGh1bWJfbW9kZV9iaXQgPSBfVW53aW5kX0dldEdSKF9fY29udGV4dCwgMTUpICYgMHgxOworICBfVW53aW5kX1NldEdSKF9fY29udGV4dCwgMTUsIF9fdmFsdWUgfCBfX3RodW1iX21vZGVfYml0KTsKK30KKyNlbHNlCitfVW53aW5kX1dvcmQgX1Vud2luZF9HZXRHUihzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICosIGludCk7Cit2b2lkIF9VbndpbmRfU2V0R1Ioc3RydWN0IF9VbndpbmRfQ29udGV4dCAqLCBpbnQsIF9VbndpbmRfV29yZCk7CisKK19VbndpbmRfV29yZCBfVW53aW5kX0dldElQKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7Cit2b2lkIF9VbndpbmRfU2V0SVAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqLCBfVW53aW5kX1dvcmQpOworI2VuZGlmCisKKworX1Vud2luZF9Xb3JkIF9VbndpbmRfR2V0SVBJbmZvKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwgaW50ICopOworCitfVW53aW5kX1dvcmQgX1Vud2luZF9HZXRDRkEoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKKworX1Vud2luZF9Xb3JkIF9VbndpbmRfR2V0QlNQKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7CisKK3ZvaWQgKl9VbndpbmRfR2V0TGFuZ3VhZ2VTcGVjaWZpY0RhdGEoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKKworX1Vud2luZF9QdHIgX1Vud2luZF9HZXRSZWdpb25TdGFydChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopOworCisvKiBEV0FSRiBFSCBmdW5jdGlvbnM7IGN1cnJlbnRseSBub3QgYXZhaWxhYmxlIG9uIERhcndpbi9BUk0gKi8KKyNpZiAhZGVmaW5lZChfX0FQUExFX18pIHx8ICFkZWZpbmVkKF9fYXJtX18pCisKK19VbndpbmRfUmVhc29uX0NvZGUgX1Vud2luZF9SYWlzZUV4Y2VwdGlvbihzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKik7CitfVW53aW5kX1JlYXNvbl9Db2RlIF9VbndpbmRfRm9yY2VkVW53aW5kKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVW53aW5kX1N0b3BfRm4sIHZvaWQgKik7Cit2b2lkIF9VbndpbmRfRGVsZXRlRXhjZXB0aW9uKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKK3ZvaWQgX1Vud2luZF9SZXN1bWUoc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICopOworX1Vud2luZF9SZWFzb25fQ29kZSBfVW53aW5kX1Jlc3VtZV9vcl9SZXRocm93KHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKKworI2VuZGlmCisKK19VbndpbmRfUmVhc29uX0NvZGUgX1Vud2luZF9CYWNrdHJhY2UoX1Vud2luZF9UcmFjZV9Gbiwgdm9pZCAqKTsKKworLyogc2V0am1wKDMpL2xvbmdqbXAoMykgc3R1ZmYgKi8KK3R5cGVkZWYgc3RydWN0IFNqTGpfRnVuY3Rpb25fQ29udGV4dCAqX1Vud2luZF9GdW5jdGlvbkNvbnRleHRfdDsKKwordm9pZCBfVW53aW5kX1NqTGpfUmVnaXN0ZXIoX1Vud2luZF9GdW5jdGlvbkNvbnRleHRfdCk7Cit2b2lkIF9VbndpbmRfU2pMal9VbnJlZ2lzdGVyKF9VbndpbmRfRnVuY3Rpb25Db250ZXh0X3QpOworX1Vud2luZF9SZWFzb25fQ29kZSBfVW53aW5kX1NqTGpfUmFpc2VFeGNlcHRpb24oc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICopOworX1Vud2luZF9SZWFzb25fQ29kZSBfVW53aW5kX1NqTGpfRm9yY2VkVW53aW5kKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9VbndpbmRfU3RvcF9Gbiwgdm9pZCAqKTsKK3ZvaWQgX1Vud2luZF9TakxqX1Jlc3VtZShzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKik7CitfVW53aW5kX1JlYXNvbl9Db2RlIF9VbndpbmRfU2pMal9SZXN1bWVfb3JfUmV0aHJvdyhzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKik7CisKK3ZvaWQgKl9VbndpbmRfRmluZEVuY2xvc2luZ0Z1bmN0aW9uKHZvaWQgKik7CisKKyNpZmRlZiBfX0FQUExFX18KKworX1Vud2luZF9QdHIgX1Vud2luZF9HZXREYXRhUmVsQmFzZShzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopCisgICAgX19hdHRyaWJ1dGVfXygoX191bmF2YWlsYWJsZV9fKSk7CitfVW53aW5kX1B0ciBfVW53aW5kX0dldFRleHRSZWxCYXNlKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKikKKyAgICBfX2F0dHJpYnV0ZV9fKChfX3VuYXZhaWxhYmxlX18pKTsKKworLyogRGFyd2luLXNwZWNpZmljIGZ1bmN0aW9ucyAqLwordm9pZCBfX3JlZ2lzdGVyX2ZyYW1lKGNvbnN0IHZvaWQgKik7Cit2b2lkIF9fZGVyZWdpc3Rlcl9mcmFtZShjb25zdCB2b2lkICopOworCitzdHJ1Y3QgZHdhcmZfZWhfYmFzZXMgeworICB1aW50cHRyX3QgdGJhc2U7CisgIHVpbnRwdHJfdCBkYmFzZTsKKyAgdWludHB0cl90IGZ1bmM7Cit9Owordm9pZCAqX1Vud2luZF9GaW5kX0ZERShjb25zdCB2b2lkICosIHN0cnVjdCBkd2FyZl9laF9iYXNlcyAqKTsKKwordm9pZCBfX3JlZ2lzdGVyX2ZyYW1lX2luZm9fYmFzZXMoY29uc3Qgdm9pZCAqLCB2b2lkICosIHZvaWQgKiwgdm9pZCAqKQorICBfX2F0dHJpYnV0ZV9fKChfX3VuYXZhaWxhYmxlX18pKTsKK3ZvaWQgX19yZWdpc3Rlcl9mcmFtZV9pbmZvKGNvbnN0IHZvaWQgKiwgdm9pZCAqKSBfX2F0dHJpYnV0ZV9fKChfX3VuYXZhaWxhYmxlX18pKTsKK3ZvaWQgX19yZWdpc3Rlcl9mcmFtZV9pbmZvX3RhYmxlX2Jhc2VzKGNvbnN0IHZvaWQgKiwgdm9pZCosIHZvaWQgKiwgdm9pZCAqKQorICBfX2F0dHJpYnV0ZV9fKChfX3VuYXZhaWxhYmxlX18pKTsKK3ZvaWQgX19yZWdpc3Rlcl9mcmFtZV9pbmZvX3RhYmxlKGNvbnN0IHZvaWQgKiwgdm9pZCAqKQorICBfX2F0dHJpYnV0ZV9fKChfX3VuYXZhaWxhYmxlX18pKTsKK3ZvaWQgX19yZWdpc3Rlcl9mcmFtZV90YWJsZShjb25zdCB2b2lkICopIF9fYXR0cmlidXRlX18oKF9fdW5hdmFpbGFibGVfXykpOwordm9pZCBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbyhjb25zdCB2b2lkICopIF9fYXR0cmlidXRlX18oKF9fdW5hdmFpbGFibGVfXykpOwordm9pZCBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlcyhjb25zdCB2b2lkICopX19hdHRyaWJ1dGVfXygoX191bmF2YWlsYWJsZV9fKSk7CisKKyNlbHNlCisKK19VbndpbmRfUHRyIF9VbndpbmRfR2V0RGF0YVJlbEJhc2Uoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKK19VbndpbmRfUHRyIF9VbndpbmRfR2V0VGV4dFJlbEJhc2Uoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKKworI2VuZGlmCisKKworI2lmbmRlZiBISURFX0VYUE9SVFMKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NMQU5HX1VOV0lORF9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3ZhZGVmcy5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS92YWRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmU5YTc0Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS92YWRlZnMuaApAQCAtMCwwICsxLDY1IEBACisvKiA9PT0tLS0tLS0tLSB2YWRlZnMuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKy8qIE9ubHkgaW5jbHVkZSB0aGlzIGlmIHdlIGFyZSBhaW1pbmcgZm9yIE1TVkMgY29tcGF0aWJpbGl0eS4gKi8KKyNpZm5kZWYgX01TQ19WRVIKKyNpbmNsdWRlX25leHQgPHZhZGVmcy5oPgorI2Vsc2UKKworI2lmbmRlZiBfX2NsYW5nX3ZhZGVmc19oCisjZGVmaW5lIF9fY2xhbmdfdmFkZWZzX2gKKworI2luY2x1ZGVfbmV4dCA8dmFkZWZzLmg+CisKKy8qIE92ZXJyaWRlIG1hY3JvcyBmcm9tIHZhZGVmcy5oIHdpdGggZGVmaW5pdGlvbnMgdGhhdCB3b3JrIHdpdGggQ2xhbmcuICovCisjaWZkZWYgX2NydF92YV9zdGFydAorI3VuZGVmIF9jcnRfdmFfc3RhcnQKKyNkZWZpbmUgX2NydF92YV9zdGFydChhcCwgcGFyYW0pIF9fYnVpbHRpbl92YV9zdGFydChhcCwgcGFyYW0pCisjZW5kaWYKKyNpZmRlZiBfY3J0X3ZhX2VuZAorI3VuZGVmIF9jcnRfdmFfZW5kCisjZGVmaW5lIF9jcnRfdmFfZW5kKGFwKSAgICAgICAgICBfX2J1aWx0aW5fdmFfZW5kKGFwKQorI2VuZGlmCisjaWZkZWYgX2NydF92YV9hcmcKKyN1bmRlZiBfY3J0X3ZhX2FyZworI2RlZmluZSBfY3J0X3ZhX2FyZyhhcCwgdHlwZSkgICAgX19idWlsdGluX3ZhX2FyZyhhcCwgdHlwZSkKKyNlbmRpZgorCisvKiBWUyAyMDE1IHN3aXRjaGVkIHRvIGRvdWJsZSB1bmRlcnNjb3JlIG5hbWVzLCB3aGljaCBpcyBhbiBpbXByb3ZlbWVudCwgYnV0IG5vdworICogd2UgaGF2ZSB0byBpbnRlcmNlcHQgdGhvc2UgbmFtZXMgdG9vLgorICovCisjaWZkZWYgX19jcnRfdmFfc3RhcnQKKyN1bmRlZiBfX2NydF92YV9zdGFydAorI2RlZmluZSBfX2NydF92YV9zdGFydChhcCwgcGFyYW0pIF9fYnVpbHRpbl92YV9zdGFydChhcCwgcGFyYW0pCisjZW5kaWYKKyNpZmRlZiBfX2NydF92YV9lbmQKKyN1bmRlZiBfX2NydF92YV9lbmQKKyNkZWZpbmUgX19jcnRfdmFfZW5kKGFwKSAgICAgICAgICBfX2J1aWx0aW5fdmFfZW5kKGFwKQorI2VuZGlmCisjaWZkZWYgX19jcnRfdmFfYXJnCisjdW5kZWYgX19jcnRfdmFfYXJnCisjZGVmaW5lIF9fY3J0X3ZhX2FyZyhhcCwgdHlwZSkgICAgX19idWlsdGluX3ZhX2FyZyhhcCwgdHlwZSkKKyNlbmRpZgorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS92YXJhcmdzLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3ZhcmFyZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTQ3N2QwCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS92YXJhcmdzLmgKQEAgLTAsMCArMSwyNiBAQAorLyo9PT0tLS0tIHZhcmFyZ3MuaCAtIFZhcmlhYmxlIGFyZ3VtZW50IGhhbmRsaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyoKKyogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisqCisqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKgorKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorKiBUSEUgU09GVFdBUkUuCisqCisqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyovCisjaWZuZGVmIF9fVkFSQVJHU19ICisjZGVmaW5lIF9fVkFSQVJHU19ICisgICNlcnJvciAiUGxlYXNlIHVzZSA8c3RkYXJnLmg+IGluc3RlYWQgb2YgPHZhcmFyZ3MuaD4iCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvdmVjaW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3ZlY2ludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhN2FjYjQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3ZlY2ludHJpbi5oCkBAIC0wLDAgKzEsODk0NiBAQAorLyo9PT0tLS0tIHZlY2ludHJpbi5oIC0gVmVjdG9yIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmIGRlZmluZWQoX19zMzkweF9fKSAmJiBkZWZpbmVkKF9fVkVDX18pCisKKyNkZWZpbmUgX19BVFRSU19haSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisjZGVmaW5lIF9fQVRUUlNfbyBfX2F0dHJpYnV0ZV9fKChfX292ZXJsb2FkYWJsZV9fKSkKKyNkZWZpbmUgX19BVFRSU19vX2FpIF9fYXR0cmlidXRlX18oKF9fb3ZlcmxvYWRhYmxlX18sIF9fYWx3YXlzX2lubGluZV9fKSkKKworI2RlZmluZSBfX2NvbnN0YW50KFBBUk0pIFwKKyAgX19hdHRyaWJ1dGVfXygoX19lbmFibGVfaWZfXyAoKFBBUk0pID09IChQQVJNKSwgXAorICAgICAiYXJndW1lbnQgbXVzdCBiZSBhIGNvbnN0YW50IGludGVnZXIiKSkpCisjZGVmaW5lIF9fY29uc3RhbnRfcmFuZ2UoUEFSTSwgTE9XLCBISUdIKSBcCisgIF9fYXR0cmlidXRlX18oKF9fZW5hYmxlX2lmX18gKChQQVJNKSA+PSAoTE9XKSAmJiAoUEFSTSkgPD0gKEhJR0gpLCBcCisgICAgICJhcmd1bWVudCBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBmcm9tICIgI0xPVyAiIHRvICIgI0hJR0gpKSkKKyNkZWZpbmUgX19jb25zdGFudF9wb3cyX3JhbmdlKFBBUk0sIExPVywgSElHSCkgXAorICBfX2F0dHJpYnV0ZV9fKChfX2VuYWJsZV9pZl9fICgoUEFSTSkgPj0gKExPVykgJiYgKFBBUk0pIDw9IChISUdIKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEFSTSkgJiAoKFBBUk0pIC0gMSkpID09IDAsIFwKKyAgICAgImFyZ3VtZW50IG11c3QgYmUgYSBjb25zdGFudCBwb3dlciBvZiAyIGZyb20gIiAjTE9XICIgdG8gIiAjSElHSCkpKQorCisvKi0tIF9fbGNiYiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2V4dGVybiBfX0FUVFJTX28gdW5zaWduZWQgaW50CitfX2xjYmIoY29uc3Qgdm9pZCAqX19wdHIsIHVuc2lnbmVkIHNob3J0IF9fbGVuKQorICBfX2NvbnN0YW50X3BvdzJfcmFuZ2UoX19sZW4sIDY0LCA0MDk2KTsKKworI2RlZmluZSBfX2xjYmIoWCwgWSkgKChfX3R5cGVvZl9fKChfX2xjYmIpKChYKSwgKFkpKSkpIFwKKyAgX19idWlsdGluX3MzOTBfbGNiYigoWCksIF9fYnVpbHRpbl9jb25zdGFudF9wKChZKSk/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoWSkgPT0gNjQgPyAwIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSAxMjggPyAxIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSAyNTYgPyAyIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSA1MTIgPyAzIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSAxMDI0ID8gNCA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWSkgPT0gMjA0OCA/IDUgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFkpID09IDQwOTYgPyA2IDogMCkgOiAwKSkKKworLyotLSB2ZWNfZXh0cmFjdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBzaWduZWQgY2hhcgordmVjX2V4dHJhY3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fdmVjLCBpbnQgX19pbmRleCkgeworICByZXR1cm4gX192ZWNbX19pbmRleCAmIDE1XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdW5zaWduZWQgY2hhcgordmVjX2V4dHJhY3QodmVjdG9yIGJvb2wgY2hhciBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgcmV0dXJuIF9fdmVjW19faW5kZXggJiAxNV07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHVuc2lnbmVkIGNoYXIKK3ZlY19leHRyYWN0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fdmVjLCBpbnQgX19pbmRleCkgeworICByZXR1cm4gX192ZWNbX19pbmRleCAmIDE1XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgc2lnbmVkIHNob3J0Cit2ZWNfZXh0cmFjdCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fdmVjLCBpbnQgX19pbmRleCkgeworICByZXR1cm4gX192ZWNbX19pbmRleCAmIDddOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB1bnNpZ25lZCBzaG9ydAordmVjX2V4dHJhY3QodmVjdG9yIGJvb2wgc2hvcnQgX192ZWMsIGludCBfX2luZGV4KSB7CisgIHJldHVybiBfX3ZlY1tfX2luZGV4ICYgN107Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHVuc2lnbmVkIHNob3J0Cit2ZWNfZXh0cmFjdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX192ZWMsIGludCBfX2luZGV4KSB7CisgIHJldHVybiBfX3ZlY1tfX2luZGV4ICYgN107Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHNpZ25lZCBpbnQKK3ZlY19leHRyYWN0KHZlY3RvciBzaWduZWQgaW50IF9fdmVjLCBpbnQgX19pbmRleCkgeworICByZXR1cm4gX192ZWNbX19pbmRleCAmIDNdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB1bnNpZ25lZCBpbnQKK3ZlY19leHRyYWN0KHZlY3RvciBib29sIGludCBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgcmV0dXJuIF9fdmVjW19faW5kZXggJiAzXTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdW5zaWduZWQgaW50Cit2ZWNfZXh0cmFjdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fdmVjLCBpbnQgX19pbmRleCkgeworICByZXR1cm4gX192ZWNbX19pbmRleCAmIDNdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBzaWduZWQgbG9uZyBsb25nCit2ZWNfZXh0cmFjdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgcmV0dXJuIF9fdmVjW19faW5kZXggJiAxXTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfZXh0cmFjdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX192ZWMsIGludCBfX2luZGV4KSB7CisgIHJldHVybiBfX3ZlY1tfX2luZGV4ICYgMV07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2V4dHJhY3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgcmV0dXJuIF9fdmVjW19faW5kZXggJiAxXTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgZG91YmxlCit2ZWNfZXh0cmFjdCh2ZWN0b3IgZG91YmxlIF9fdmVjLCBpbnQgX19pbmRleCkgeworICByZXR1cm4gX192ZWNbX19pbmRleCAmIDFdOworfQorCisvKi0tIHZlY19pbnNlcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2luc2VydChzaWduZWQgY2hhciBfX3NjYWxhciwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fdmVjLCBpbnQgX19pbmRleCkgeworICBfX3ZlY1tfX2luZGV4ICYgMTVdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19pbnNlcnQodW5zaWduZWQgY2hhciBfX3NjYWxhciwgdmVjdG9yIGJvb2wgY2hhciBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19uZXd2ZWMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX192ZWM7CisgIF9fbmV3dmVjW19faW5kZXggJiAxNV0gPSAodW5zaWduZWQgY2hhcilfX3NjYWxhcjsKKyAgcmV0dXJuIF9fbmV3dmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2luc2VydCh1bnNpZ25lZCBjaGFyIF9fc2NhbGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgX192ZWNbX19pbmRleCAmIDE1XSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19pbnNlcnQoc2lnbmVkIHNob3J0IF9fc2NhbGFyLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fdmVjLCBpbnQgX19pbmRleCkgeworICBfX3ZlY1tfX2luZGV4ICYgN10gPSBfX3NjYWxhcjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19pbnNlcnQodW5zaWduZWQgc2hvcnQgX19zY2FsYXIsIHZlY3RvciBib29sIHNob3J0IF9fdmVjLCBpbnQgX19pbmRleCkgeworICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19uZXd2ZWMgPSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fdmVjOworICBfX25ld3ZlY1tfX2luZGV4ICYgN10gPSAodW5zaWduZWQgc2hvcnQpX19zY2FsYXI7CisgIHJldHVybiBfX25ld3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfaW5zZXJ0KHVuc2lnbmVkIHNob3J0IF9fc2NhbGFyLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX192ZWMsIGludCBfX2luZGV4KSB7CisgIF9fdmVjW19faW5kZXggJiA3XSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfaW5zZXJ0KHNpZ25lZCBpbnQgX19zY2FsYXIsIHZlY3RvciBzaWduZWQgaW50IF9fdmVjLCBpbnQgX19pbmRleCkgeworICBfX3ZlY1tfX2luZGV4ICYgM10gPSBfX3NjYWxhcjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfaW5zZXJ0KHVuc2lnbmVkIGludCBfX3NjYWxhciwgdmVjdG9yIGJvb2wgaW50IF9fdmVjLCBpbnQgX19pbmRleCkgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fbmV3dmVjID0gKHZlY3RvciB1bnNpZ25lZCBpbnQpX192ZWM7CisgIF9fbmV3dmVjW19faW5kZXggJiAzXSA9IF9fc2NhbGFyOworICByZXR1cm4gX19uZXd2ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19pbnNlcnQodW5zaWduZWQgaW50IF9fc2NhbGFyLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fdmVjLCBpbnQgX19pbmRleCkgeworICBfX3ZlY1tfX2luZGV4ICYgM10gPSBfX3NjYWxhcjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2luc2VydChzaWduZWQgbG9uZyBsb25nIF9fc2NhbGFyLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywKKyAgICAgICAgICAgaW50IF9faW5kZXgpIHsKKyAgX192ZWNbX19pbmRleCAmIDFdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2luc2VydCh1bnNpZ25lZCBsb25nIGxvbmcgX19zY2FsYXIsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX3ZlYywKKyAgICAgICAgICAgaW50IF9faW5kZXgpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX25ld3ZlYyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fdmVjOworICBfX25ld3ZlY1tfX2luZGV4ICYgMV0gPSBfX3NjYWxhcjsKKyAgcmV0dXJuIF9fbmV3dmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfaW5zZXJ0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX3NjYWxhciwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywKKyAgICAgICAgICAgaW50IF9faW5kZXgpIHsKKyAgX192ZWNbX19pbmRleCAmIDFdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX2luc2VydChkb3VibGUgX19zY2FsYXIsIHZlY3RvciBkb3VibGUgX192ZWMsIGludCBfX2luZGV4KSB7CisgIF9fdmVjW19faW5kZXggJiAxXSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKKy8qLS0gdmVjX3Byb21vdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfcHJvbW90ZShzaWduZWQgY2hhciBfX3NjYWxhciwgaW50IF9faW5kZXgpIHsKKyAgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyIF9femVybyA9ICh2ZWN0b3Igc2lnbmVkIGNoYXIpMDsKKyAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fdmVjID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX196ZXJvLCBfX3plcm8sCisgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpOworICBfX3ZlY1tfX2luZGV4ICYgMTVdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19wcm9tb3RlKHVuc2lnbmVkIGNoYXIgX19zY2FsYXIsIGludCBfX2luZGV4KSB7CisgIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyIF9femVybyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcikwOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3ZlYyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9femVybywgX196ZXJvLAorICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKTsKKyAgX192ZWNbX19pbmRleCAmIDE1XSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19wcm9tb3RlKHNpZ25lZCBzaG9ydCBfX3NjYWxhciwgaW50IF9faW5kZXgpIHsKKyAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX3plcm8gPSAodmVjdG9yIHNpZ25lZCBzaG9ydCkwOworICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fdmVjID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX196ZXJvLCBfX3plcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSk7CisgIF9fdmVjW19faW5kZXggJiA3XSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3Byb21vdGUodW5zaWduZWQgc2hvcnQgX19zY2FsYXIsIGludCBfX2luZGV4KSB7CisgIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX3plcm8gPSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KTA7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX3ZlYyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9femVybywgX196ZXJvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSk7CisgIF9fdmVjW19faW5kZXggJiA3XSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfcHJvbW90ZShzaWduZWQgaW50IF9fc2NhbGFyLCBpbnQgX19pbmRleCkgeworICBjb25zdCB2ZWN0b3Igc2lnbmVkIGludCBfX3plcm8gPSAodmVjdG9yIHNpZ25lZCBpbnQpMDsKKyAgdmVjdG9yIHNpZ25lZCBpbnQgX192ZWMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3plcm8sIF9femVybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSk7CisgIF9fdmVjW19faW5kZXggJiAzXSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19wcm9tb3RlKHVuc2lnbmVkIGludCBfX3NjYWxhciwgaW50IF9faW5kZXgpIHsKKyAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCBfX3plcm8gPSAodmVjdG9yIHVuc2lnbmVkIGludCkwOworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fdmVjID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX196ZXJvLCBfX3plcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSk7CisgIF9fdmVjW19faW5kZXggJiAzXSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfcHJvbW90ZShzaWduZWQgbG9uZyBsb25nIF9fc2NhbGFyLCBpbnQgX19pbmRleCkgeworICBjb25zdCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX3plcm8gPSAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpMDsKKyAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX192ZWMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3plcm8sIF9femVybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEpOworICBfX3ZlY1tfX2luZGV4ICYgMV0gPSBfX3NjYWxhcjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfcHJvbW90ZSh1bnNpZ25lZCBsb25nIGxvbmcgX19zY2FsYXIsIGludCBfX2luZGV4KSB7CisgIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX196ZXJvID0gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpMDsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9femVybywgX196ZXJvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xKTsKKyAgX192ZWNbX19pbmRleCAmIDFdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX3Byb21vdGUoZG91YmxlIF9fc2NhbGFyLCBpbnQgX19pbmRleCkgeworICBjb25zdCB2ZWN0b3IgZG91YmxlIF9femVybyA9ICh2ZWN0b3IgZG91YmxlKTA7CisgIHZlY3RvciBkb3VibGUgX192ZWMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3plcm8sIF9femVybywgLTEsIC0xKTsKKyAgX192ZWNbX19pbmRleCAmIDFdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworLyotLSB2ZWNfaW5zZXJ0X2FuZF96ZXJvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19pbnNlcnRfYW5kX3plcm8oY29uc3Qgc2lnbmVkIGNoYXIgKl9fcHRyKSB7CisgIHZlY3RvciBzaWduZWQgY2hhciBfX3ZlYyA9ICh2ZWN0b3Igc2lnbmVkIGNoYXIpMDsKKyAgX192ZWNbN10gPSAqX19wdHI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19pbnNlcnRfYW5kX3plcm8oY29uc3QgdW5zaWduZWQgY2hhciAqX19wdHIpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX192ZWMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpMDsKKyAgX192ZWNbN10gPSAqX19wdHI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2luc2VydF9hbmRfemVybyhjb25zdCBzaWduZWQgc2hvcnQgKl9fcHRyKSB7CisgIHZlY3RvciBzaWduZWQgc2hvcnQgX192ZWMgPSAodmVjdG9yIHNpZ25lZCBzaG9ydCkwOworICBfX3ZlY1szXSA9ICpfX3B0cjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19pbnNlcnRfYW5kX3plcm8oY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fcHRyKSB7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX3ZlYyA9ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpMDsKKyAgX192ZWNbM10gPSAqX19wdHI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19pbnNlcnRfYW5kX3plcm8oY29uc3Qgc2lnbmVkIGludCAqX19wdHIpIHsKKyAgdmVjdG9yIHNpZ25lZCBpbnQgX192ZWMgPSAodmVjdG9yIHNpZ25lZCBpbnQpMDsKKyAgX192ZWNbMV0gPSAqX19wdHI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2luc2VydF9hbmRfemVybyhjb25zdCB1bnNpZ25lZCBpbnQgKl9fcHRyKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX192ZWMgPSAodmVjdG9yIHVuc2lnbmVkIGludCkwOworICBfX3ZlY1sxXSA9ICpfX3B0cjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2luc2VydF9hbmRfemVybyhjb25zdCBzaWduZWQgbG9uZyBsb25nICpfX3B0cikgeworICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYyA9ICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZykwOworICBfX3ZlY1swXSA9ICpfX3B0cjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfaW5zZXJ0X2FuZF96ZXJvKGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKTA7CisgIF9fdmVjWzBdID0gKl9fcHRyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19pbnNlcnRfYW5kX3plcm8oY29uc3QgZG91YmxlICpfX3B0cikgeworICB2ZWN0b3IgZG91YmxlIF9fdmVjID0gKHZlY3RvciBkb3VibGUpMDsKKyAgX192ZWNbMF0gPSAqX19wdHI7CisgIHJldHVybiBfX3ZlYzsKK30KKworLyotLSB2ZWNfcGVybSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19wZXJtKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnBlcm0oCisgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfcGVybSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfcGVybSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfcGVybSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19wZXJtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnBlcm0oCisgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfcGVybSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3Blcm0odmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92cGVybSgKKyAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92cGVybSgKKyAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfcGVybSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3Blcm0odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92cGVybSgKKyAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92cGVybSgKKyAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfcGVybSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfcGVybSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCisvKi0tIHZlY19wZXJtaSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19wZXJtaSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYiwgaW50IF9fYykKKyAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDMpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19wZXJtaSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAzKTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19wZXJtaSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIGRvdWJsZQordmVjX3Blcm1pKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwgaW50IF9fYykKKyAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDMpOworCisjZGVmaW5lIHZlY19wZXJtaShYLCBZLCBaKSAoKF9fdHlwZW9mX18oKHZlY19wZXJtaSkoKFgpLCAoWSksIChaKSkpKSBcCisgIF9fYnVpbHRpbl9zMzkwX3ZwZGkoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKFkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgKCgoWikgJiAyKSA8PCAxKSB8ICgoWikgJiAxKSkpCisKKy8qLS0gdmVjX3NlbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc2VsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19jICYgX19iKSB8ICh+KHZlY3RvciBzaWduZWQgY2hhcilfX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zZWwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwgdmVjdG9yIGJvb2wgY2hhciBfX2MpIHsKKyAgcmV0dXJuICgodmVjdG9yIHNpZ25lZCBjaGFyKV9fYyAmIF9fYikgfCAofih2ZWN0b3Igc2lnbmVkIGNoYXIpX19jICYgX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX3NlbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKCh2ZWN0b3IgYm9vbCBjaGFyKV9fYyAmIF9fYikgfCAofih2ZWN0b3IgYm9vbCBjaGFyKV9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19zZWwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYykgeworICByZXR1cm4gKF9fYyAmIF9fYikgfCAofl9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc2VsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIChfX2MgJiBfX2IpIHwgKH5fX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NlbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2MpIHsKKyAgcmV0dXJuICgodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jICYgX19iKSB8ICh+KHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zZWwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiAoKHZlY3RvciBzaWduZWQgc2hvcnQpX19jICYgX19iKSB8ICh+KHZlY3RvciBzaWduZWQgc2hvcnQpX19jICYgX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NlbCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYykgeworICByZXR1cm4gKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYyAmIF9fYikgfCAofih2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfc2VsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLAorICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiAoKHZlY3RvciBib29sIHNob3J0KV9fYyAmIF9fYikgfCAofih2ZWN0b3IgYm9vbCBzaG9ydClfX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX3NlbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgdmVjdG9yIGJvb2wgc2hvcnQgX19jKSB7CisgIHJldHVybiAoX19jICYgX19iKSB8ICh+X19jICYgX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc2VsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIChfX2MgJiBfX2IpIHwgKH5fX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zZWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19jKSB7CisgIHJldHVybiAoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19jICYgX19iKSB8CisgICAgICAgICAgKH4odmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYyAmIF9fYSkpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NlbCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwKKyAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuICgodmVjdG9yIHNpZ25lZCBpbnQpX19jICYgX19iKSB8ICh+KHZlY3RvciBzaWduZWQgaW50KV9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc2VsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLCB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7CisgIHJldHVybiAoKHZlY3RvciBzaWduZWQgaW50KV9fYyAmIF9fYikgfCAofih2ZWN0b3Igc2lnbmVkIGludClfX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19zZWwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuICgodmVjdG9yIGJvb2wgaW50KV9fYyAmIF9fYikgfCAofih2ZWN0b3IgYm9vbCBpbnQpX19jICYgX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfc2VsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsIHZlY3RvciBib29sIGludCBfX2MpIHsKKyAgcmV0dXJuIChfX2MgJiBfX2IpIHwgKH5fX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc2VsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIChfX2MgJiBfX2IpIHwgKH5fX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc2VsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgdmVjdG9yIGJvb2wgaW50IF9fYykgeworICByZXR1cm4gKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYyAmIF9fYikgfCAofih2ZWN0b3IgdW5zaWduZWQgaW50KV9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc2VsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYykgeworICByZXR1cm4gKCgodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19jICYgX19iKSB8CisgICAgICAgICAgKH4odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19jICYgX19hKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc2VsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19jKSB7CisgIHJldHVybiAoKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2MgJiBfX2IpIHwKKyAgICAgICAgICAofih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2MgJiBfX2EpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfc2VsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IsCisgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19jKSB7CisgIHJldHVybiAoKCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19jICYgX19iKSB8CisgICAgICAgICAgKH4odmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYyAmIF9fYSkpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19zZWwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYykgeworICByZXR1cm4gKF9fYyAmIF9fYikgfCAofl9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zZWwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYykgeworICByZXR1cm4gKF9fYyAmIF9fYikgfCAofl9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zZWwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19jKSB7CisgIHJldHVybiAoKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYyAmIF9fYikgfAorICAgICAgICAgICh+KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19jICYgX19hKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zZWwodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYykgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpKChfX2MgJiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAofl9fYyAmICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSkpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfc2VsKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYykgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYWMgPSAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2E7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iYyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2NjID0gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19jOworICByZXR1cm4gKHZlY3RvciBkb3VibGUpKChfX2NjICYgX19iYykgfCAofl9fY2MgJiBfX2FjKSk7Cit9CisKKy8qLS0gdmVjX2dhdGhlcl9lbGVtZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19nYXRoZXJfZWxlbWVudCh2ZWN0b3Igc2lnbmVkIGludCBfX3ZlYywgdmVjdG9yIHVuc2lnbmVkIGludCBfX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgaW50ICpfX3B0ciwgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMykgeworICBfX3ZlY1tfX2luZGV4XSA9ICooY29uc3Qgc2lnbmVkIGludCAqKSgKKyAgICAoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgKF9fSU5UUFRSX1RZUEVfXylfX29mZnNldFtfX2luZGV4XSk7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfZ2F0aGVyX2VsZW1lbnQodmVjdG9yIGJvb2wgaW50IF9fdmVjLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqX19wdHIsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDMpIHsKKyAgX192ZWNbX19pbmRleF0gPSAqKGNvbnN0IHVuc2lnbmVkIGludCAqKSgKKyAgICAoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgKF9fSU5UUFRSX1RZUEVfXylfX29mZnNldFtfX2luZGV4XSk7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2dhdGhlcl9lbGVtZW50KHZlY3RvciB1bnNpZ25lZCBpbnQgX192ZWMsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpfX3B0ciwgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMykgeworICBfX3ZlY1tfX2luZGV4XSA9ICooY29uc3QgdW5zaWduZWQgaW50ICopKAorICAgIChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyAoX19JTlRQVFJfVFlQRV9fKV9fb2Zmc2V0W19faW5kZXhdKTsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2dhdGhlcl9lbGVtZW50KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fdmVjLAorICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKKyAgX192ZWNbX19pbmRleF0gPSAqKGNvbnN0IHNpZ25lZCBsb25nIGxvbmcgKikoCisgICAgKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIChfX0lOVFBUUl9UWVBFX18pX19vZmZzZXRbX19pbmRleF0pOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2dhdGhlcl9lbGVtZW50KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX3ZlYywKKyAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKKyAgX192ZWNbX19pbmRleF0gPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyAqKSgKKyAgICAoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgKF9fSU5UUFRSX1RZUEVfXylfX29mZnNldFtfX2luZGV4XSk7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2dhdGhlcl9lbGVtZW50KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX192ZWMsCisgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7CisgIF9fdmVjW19faW5kZXhdID0gKihjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgKikoCisgICAgKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIChfX0lOVFBUUl9UWVBFX18pX19vZmZzZXRbX19pbmRleF0pOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19nYXRoZXJfZWxlbWVudCh2ZWN0b3IgZG91YmxlIF9fdmVjLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSAqX19wdHIsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKKyAgX192ZWNbX19pbmRleF0gPSAqKGNvbnN0IGRvdWJsZSAqKSgKKyAgICAoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgKF9fSU5UUFRSX1RZUEVfXylfX29mZnNldFtfX2luZGV4XSk7CisgIHJldHVybiBfX3ZlYzsKK30KKworLyotLSB2ZWNfc2NhdHRlcl9lbGVtZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfc2NhdHRlcl9lbGVtZW50KHZlY3RvciBzaWduZWQgaW50IF9fdmVjLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBzaWduZWQgaW50ICpfX3B0ciwgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMykgeworICAqKHNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0W19faW5kZXhdKSA9CisgICAgX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zY2F0dGVyX2VsZW1lbnQodmVjdG9yIGJvb2wgaW50IF9fdmVjLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fcHRyLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAzKSB7CisgICoodW5zaWduZWQgaW50ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldFtfX2luZGV4XSkgPQorICAgIF9fdmVjW19faW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfc2NhdHRlcl9lbGVtZW50KHZlY3RvciB1bnNpZ25lZCBpbnQgX192ZWMsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19wdHIsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDMpIHsKKyAgKih1bnNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0W19faW5kZXhdKSA9CisgICAgX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zY2F0dGVyX2VsZW1lbnQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX192ZWMsCisgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7CisgICooc2lnbmVkIGxvbmcgbG9uZyAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXRbX19pbmRleF0pID0KKyAgICBfX3ZlY1tfX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3NjYXR0ZXJfZWxlbWVudCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX192ZWMsCisgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKKyAgKih1bnNpZ25lZCBsb25nIGxvbmcgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0W19faW5kZXhdKSA9CisgICAgX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zY2F0dGVyX2VsZW1lbnQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICpfX3B0ciwgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMSkgeworICAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXRbX19pbmRleF0pID0KKyAgICBfX3ZlY1tfX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3NjYXR0ZXJfZWxlbWVudCh2ZWN0b3IgZG91YmxlIF9fdmVjLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcHRyLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7CisgICooZG91YmxlICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldFtfX2luZGV4XSkgPQorICAgIF9fdmVjW19faW5kZXhdOworfQorCisvKi0tIHZlY194bGQyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3hsZDIobG9uZyBfX29mZnNldCwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fcHRyKSB7CisgIHJldHVybiAqKGNvbnN0IHZlY3RvciBzaWduZWQgY2hhciAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3hsZDIobG9uZyBfX29mZnNldCwgY29uc3QgdW5zaWduZWQgY2hhciAqX19wdHIpIHsKKyAgcmV0dXJuICooY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3hsZDIobG9uZyBfX29mZnNldCwgY29uc3Qgc2lnbmVkIHNob3J0ICpfX3B0cikgeworICByZXR1cm4gKihjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3hsZDIobG9uZyBfX29mZnNldCwgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fcHRyKSB7CisgIHJldHVybiAqKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3hsZDIobG9uZyBfX29mZnNldCwgY29uc3Qgc2lnbmVkIGludCAqX19wdHIpIHsKKyAgcmV0dXJuICooY29uc3QgdmVjdG9yIHNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3hsZDIobG9uZyBfX29mZnNldCwgY29uc3QgdW5zaWduZWQgaW50ICpfX3B0cikgeworICByZXR1cm4gKihjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfeGxkMihsb25nIF9fb2Zmc2V0LCBjb25zdCBzaWduZWQgbG9uZyBsb25nICpfX3B0cikgeworICByZXR1cm4gKihjb25zdCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfeGxkMihsb25nIF9fb2Zmc2V0LCBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgKl9fcHRyKSB7CisgIHJldHVybiAqKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX3hsZDIobG9uZyBfX29mZnNldCwgY29uc3QgZG91YmxlICpfX3B0cikgeworICByZXR1cm4gKihjb25zdCB2ZWN0b3IgZG91YmxlICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Cit9CisKKy8qLS0gdmVjX3hsdzQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfeGx3NChsb25nIF9fb2Zmc2V0LCBjb25zdCBzaWduZWQgY2hhciAqX19wdHIpIHsKKyAgcmV0dXJuICooY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfeGx3NChsb25nIF9fb2Zmc2V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpfX3B0cikgeworICByZXR1cm4gKihjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfeGx3NChsb25nIF9fb2Zmc2V0LCBjb25zdCBzaWduZWQgc2hvcnQgKl9fcHRyKSB7CisgIHJldHVybiAqKGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfeGx3NChsb25nIF9fb2Zmc2V0LCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19wdHIpIHsKKyAgcmV0dXJuICooY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfeGx3NChsb25nIF9fb2Zmc2V0LCBjb25zdCBzaWduZWQgaW50ICpfX3B0cikgeworICByZXR1cm4gKihjb25zdCB2ZWN0b3Igc2lnbmVkIGludCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfeGx3NChsb25nIF9fb2Zmc2V0LCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fcHRyKSB7CisgIHJldHVybiAqKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKK30KKworLyotLSB2ZWNfeHN0ZDIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfeHN0ZDIodmVjdG9yIHNpZ25lZCBjaGFyIF9fdmVjLCBsb25nIF9fb2Zmc2V0LCBzaWduZWQgY2hhciAqX19wdHIpIHsKKyAgKih2ZWN0b3Igc2lnbmVkIGNoYXIgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfeHN0ZDIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX192ZWMsIGxvbmcgX19vZmZzZXQsIHVuc2lnbmVkIGNoYXIgKl9fcHRyKSB7CisgICoodmVjdG9yIHVuc2lnbmVkIGNoYXIgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfeHN0ZDIodmVjdG9yIHNpZ25lZCBzaG9ydCBfX3ZlYywgbG9uZyBfX29mZnNldCwgc2lnbmVkIHNob3J0ICpfX3B0cikgeworICAqKHZlY3RvciBzaWduZWQgc2hvcnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfeHN0ZDIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fdmVjLCBsb25nIF9fb2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCAqX19wdHIpIHsKKyAgKih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfeHN0ZDIodmVjdG9yIHNpZ25lZCBpbnQgX192ZWMsIGxvbmcgX19vZmZzZXQsIHNpZ25lZCBpbnQgKl9fcHRyKSB7CisgICoodmVjdG9yIHNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfeHN0ZDIodmVjdG9yIHVuc2lnbmVkIGludCBfX3ZlYywgbG9uZyBfX29mZnNldCwgdW5zaWduZWQgaW50ICpfX3B0cikgeworICAqKHZlY3RvciB1bnNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfeHN0ZDIodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX192ZWMsIGxvbmcgX19vZmZzZXQsCisgICAgICAgICAgc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIpIHsKKyAgKih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3RkMih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fdmVjLCBsb25nIF9fb2Zmc2V0LAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIpIHsKKyAgKih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCkgPQorICAgIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfeHN0ZDIodmVjdG9yIGRvdWJsZSBfX3ZlYywgbG9uZyBfX29mZnNldCwgZG91YmxlICpfX3B0cikgeworICAqKHZlY3RvciBkb3VibGUgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9IF9fdmVjOworfQorCisvKi0tIHZlY194c3R3NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3R3NCh2ZWN0b3Igc2lnbmVkIGNoYXIgX192ZWMsIGxvbmcgX19vZmZzZXQsIHNpZ25lZCBjaGFyICpfX3B0cikgeworICAqKHZlY3RvciBzaWduZWQgY2hhciAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3R3NCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3ZlYywgbG9uZyBfX29mZnNldCwgdW5zaWduZWQgY2hhciAqX19wdHIpIHsKKyAgKih2ZWN0b3IgdW5zaWduZWQgY2hhciAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3R3NCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fdmVjLCBsb25nIF9fb2Zmc2V0LCBzaWduZWQgc2hvcnQgKl9fcHRyKSB7CisgICoodmVjdG9yIHNpZ25lZCBzaG9ydCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3R3NCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX192ZWMsIGxvbmcgX19vZmZzZXQsIHVuc2lnbmVkIHNob3J0ICpfX3B0cikgeworICAqKHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3R3NCh2ZWN0b3Igc2lnbmVkIGludCBfX3ZlYywgbG9uZyBfX29mZnNldCwgc2lnbmVkIGludCAqX19wdHIpIHsKKyAgKih2ZWN0b3Igc2lnbmVkIGludCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3R3NCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fdmVjLCBsb25nIF9fb2Zmc2V0LCB1bnNpZ25lZCBpbnQgKl9fcHRyKSB7CisgICoodmVjdG9yIHVuc2lnbmVkIGludCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKKy8qLS0gdmVjX2xvYWRfYm5kcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19sb2FkX2JuZHJ5KGNvbnN0IHNpZ25lZCBjaGFyICpfX3B0ciwgdW5zaWduZWQgc2hvcnQgX19sZW4pCisgIF9fY29uc3RhbnRfcG93Ml9yYW5nZShfX2xlbiwgNjQsIDQwOTYpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfbG9hZF9ibmRyeShjb25zdCB1bnNpZ25lZCBjaGFyICpfX3B0ciwgdW5zaWduZWQgc2hvcnQgX19sZW4pCisgIF9fY29uc3RhbnRfcG93Ml9yYW5nZShfX2xlbiwgNjQsIDQwOTYpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19sb2FkX2JuZHJ5KGNvbnN0IHNpZ25lZCBzaG9ydCAqX19wdHIsIHVuc2lnbmVkIHNob3J0IF9fbGVuKQorICBfX2NvbnN0YW50X3BvdzJfcmFuZ2UoX19sZW4sIDY0LCA0MDk2KTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19sb2FkX2JuZHJ5KGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX3B0ciwgdW5zaWduZWQgc2hvcnQgX19sZW4pCisgIF9fY29uc3RhbnRfcG93Ml9yYW5nZShfX2xlbiwgNjQsIDQwOTYpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbG9hZF9ibmRyeShjb25zdCBzaWduZWQgaW50ICpfX3B0ciwgdW5zaWduZWQgc2hvcnQgX19sZW4pCisgIF9fY29uc3RhbnRfcG93Ml9yYW5nZShfX2xlbiwgNjQsIDQwOTYpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19sb2FkX2JuZHJ5KGNvbnN0IHVuc2lnbmVkIGludCAqX19wdHIsIHVuc2lnbmVkIHNob3J0IF9fbGVuKQorICBfX2NvbnN0YW50X3BvdzJfcmFuZ2UoX19sZW4sIDY0LCA0MDk2KTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2xvYWRfYm5kcnkoY29uc3Qgc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsIHVuc2lnbmVkIHNob3J0IF9fbGVuKQorICBfX2NvbnN0YW50X3BvdzJfcmFuZ2UoX19sZW4sIDY0LCA0MDk2KTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfbG9hZF9ibmRyeShjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLCB1bnNpZ25lZCBzaG9ydCBfX2xlbikKKyAgX19jb25zdGFudF9wb3cyX3JhbmdlKF9fbGVuLCA2NCwgNDA5Nik7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIGRvdWJsZQordmVjX2xvYWRfYm5kcnkoY29uc3QgZG91YmxlICpfX3B0ciwgdW5zaWduZWQgc2hvcnQgX19sZW4pCisgIF9fY29uc3RhbnRfcG93Ml9yYW5nZShfX2xlbiwgNjQsIDQwOTYpOworCisjZGVmaW5lIHZlY19sb2FkX2JuZHJ5KFgsIFkpICgoX190eXBlb2ZfXygodmVjX2xvYWRfYm5kcnkpKChYKSwgKFkpKSkpIFwKKyAgX19idWlsdGluX3MzOTBfdmxiYigoWCksICgoWSkgPT0gNjQgPyAwIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSAxMjggPyAxIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSAyNTYgPyAyIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSA1MTIgPyAzIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSAxMDI0ID8gNCA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWSkgPT0gMjA0OCA/IDUgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFkpID09IDQwOTYgPyA2IDogLTEpKSkKKworLyotLSB2ZWNfbG9hZF9sZW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19sb2FkX2xlbihjb25zdCBzaWduZWQgY2hhciAqX19wdHIsIHVuc2lnbmVkIGludCBfX2xlbikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92bGwoX19sZW4sIF9fcHRyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19sb2FkX2xlbihjb25zdCB1bnNpZ25lZCBjaGFyICpfX3B0ciwgdW5zaWduZWQgaW50IF9fbGVuKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdmxsKF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19sb2FkX2xlbihjb25zdCBzaWduZWQgc2hvcnQgKl9fcHRyLCB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZsbChfX2xlbiwgX19wdHIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19sb2FkX2xlbihjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19wdHIsIHVuc2lnbmVkIGludCBfX2xlbikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92bGwoX19sZW4sIF9fcHRyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19sb2FkX2xlbihjb25zdCBzaWduZWQgaW50ICpfX3B0ciwgdW5zaWduZWQgaW50IF9fbGVuKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdmxsKF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19sb2FkX2xlbihjb25zdCB1bnNpZ25lZCBpbnQgKl9fcHRyLCB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZsbChfX2xlbiwgX19wdHIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2xvYWRfbGVuKGNvbnN0IHNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLCB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92bGwoX19sZW4sIF9fcHRyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2xvYWRfbGVuKGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsIHVuc2lnbmVkIGludCBfX2xlbikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdmxsKF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19sb2FkX2xlbihjb25zdCBkb3VibGUgKl9fcHRyLCB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl9zMzkwX3ZsbChfX2xlbiwgX19wdHIpOworfQorCisvKi0tIHZlY19zdG9yZV9sZW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zdG9yZV9sZW4odmVjdG9yIHNpZ25lZCBjaGFyIF9fdmVjLCBzaWduZWQgY2hhciAqX19wdHIsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xlbikgeworICBfX2J1aWx0aW5fczM5MF92c3RsKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX192ZWMsIF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zdG9yZV9sZW4odmVjdG9yIHVuc2lnbmVkIGNoYXIgX192ZWMsIHVuc2lnbmVkIGNoYXIgKl9fcHRyLAorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgX19idWlsdGluX3MzOTBfdnN0bCgodmVjdG9yIHNpZ25lZCBjaGFyKV9fdmVjLCBfX2xlbiwgX19wdHIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfc3RvcmVfbGVuKHZlY3RvciBzaWduZWQgc2hvcnQgX192ZWMsIHNpZ25lZCBzaG9ydCAqX19wdHIsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xlbikgeworICBfX2J1aWx0aW5fczM5MF92c3RsKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX192ZWMsIF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zdG9yZV9sZW4odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fdmVjLCB1bnNpZ25lZCBzaG9ydCAqX19wdHIsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xlbikgeworICBfX2J1aWx0aW5fczM5MF92c3RsKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX192ZWMsIF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zdG9yZV9sZW4odmVjdG9yIHNpZ25lZCBpbnQgX192ZWMsIHNpZ25lZCBpbnQgKl9fcHRyLAorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgX19idWlsdGluX3MzOTBfdnN0bCgodmVjdG9yIHNpZ25lZCBjaGFyKV9fdmVjLCBfX2xlbiwgX19wdHIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfc3RvcmVfbGVuKHZlY3RvciB1bnNpZ25lZCBpbnQgX192ZWMsIHVuc2lnbmVkIGludCAqX19wdHIsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xlbikgeworICBfX2J1aWx0aW5fczM5MF92c3RsKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX192ZWMsIF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zdG9yZV9sZW4odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX192ZWMsIHNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLAorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgX19idWlsdGluX3MzOTBfdnN0bCgodmVjdG9yIHNpZ25lZCBjaGFyKV9fdmVjLCBfX2xlbiwgX19wdHIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfc3RvcmVfbGVuKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX192ZWMsIHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xlbikgeworICBfX2J1aWx0aW5fczM5MF92c3RsKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX192ZWMsIF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zdG9yZV9sZW4odmVjdG9yIGRvdWJsZSBfX3ZlYywgZG91YmxlICpfX3B0ciwKKyAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGVuKSB7CisgIF9fYnVpbHRpbl9zMzkwX3ZzdGwoKHZlY3RvciBzaWduZWQgY2hhcilfX3ZlYywgX19sZW4sIF9fcHRyKTsKK30KKworLyotLSB2ZWNfbG9hZF9wYWlyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2xvYWRfcGFpcihzaWduZWQgbG9uZyBsb25nIF9fYSwgc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZykoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfbG9hZF9wYWlyKHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKShfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX2dlbm1hc2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19nZW5tYXNrKHVuc2lnbmVkIHNob3J0IF9fbWFzaykKKyAgX19jb25zdGFudChfX21hc2spIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoCisgICAgX19tYXNrICYgMHg4MDAwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHg0MDAwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgyMDAwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgxMDAwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwODAwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwNDAwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMjAwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMTAwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMDgwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMDQwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMDIwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMDEwID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMDA4ID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMDA0ID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMDAyID8gMHhmZiA6IDAsCisgICAgX19tYXNrICYgMHgwMDAxID8gMHhmZiA6IDApOworfQorCisvKi0tIHZlY19nZW5tYXNrc18qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZ2VubWFza3NfOCh1bnNpZ25lZCBjaGFyIF9fZmlyc3QsIHVuc2lnbmVkIGNoYXIgX19sYXN0KQorICBfX2NvbnN0YW50KF9fZmlyc3QpIF9fY29uc3RhbnQoX19sYXN0KSB7CisgIHVuc2lnbmVkIGNoYXIgX19iaXQxID0gX19maXJzdCAmIDc7CisgIHVuc2lnbmVkIGNoYXIgX19iaXQyID0gX19sYXN0ICYgNzsKKyAgdW5zaWduZWQgY2hhciBfX21hc2sxID0gKHVuc2lnbmVkIGNoYXIpKDFVIDw8ICg3IC0gX19iaXQxKSA8PCAxKSAtIDE7CisgIHVuc2lnbmVkIGNoYXIgX19tYXNrMiA9ICh1bnNpZ25lZCBjaGFyKSgxVSA8PCAoNyAtIF9fYml0MikpIC0gMTsKKyAgdW5zaWduZWQgY2hhciBfX3ZhbHVlID0gKF9fYml0MSA8PSBfX2JpdDIgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXNrMSAmIH5fX21hc2syIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWFzazEgfCB+X19tYXNrMik7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX192YWx1ZTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZ2VubWFza3NfMTYodW5zaWduZWQgY2hhciBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFyIF9fbGFzdCkKKyAgX19jb25zdGFudChfX2ZpcnN0KSBfX2NvbnN0YW50KF9fbGFzdCkgeworICB1bnNpZ25lZCBjaGFyIF9fYml0MSA9IF9fZmlyc3QgJiAxNTsKKyAgdW5zaWduZWQgY2hhciBfX2JpdDIgPSBfX2xhc3QgJiAxNTsKKyAgdW5zaWduZWQgc2hvcnQgX19tYXNrMSA9ICh1bnNpZ25lZCBzaG9ydCkoMVUgPDwgKDE1IC0gX19iaXQxKSA8PCAxKSAtIDE7CisgIHVuc2lnbmVkIHNob3J0IF9fbWFzazIgPSAodW5zaWduZWQgc2hvcnQpKDFVIDw8ICgxNSAtIF9fYml0MikpIC0gMTsKKyAgdW5zaWduZWQgc2hvcnQgX192YWx1ZSA9IChfX2JpdDEgPD0gX19iaXQyID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21hc2sxICYgfl9fbWFzazIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWFzazEgfCB+X19tYXNrMik7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fdmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19nZW5tYXNrc18zMih1bnNpZ25lZCBjaGFyIF9fZmlyc3QsIHVuc2lnbmVkIGNoYXIgX19sYXN0KQorICBfX2NvbnN0YW50KF9fZmlyc3QpIF9fY29uc3RhbnQoX19sYXN0KSB7CisgIHVuc2lnbmVkIGNoYXIgX19iaXQxID0gX19maXJzdCAmIDMxOworICB1bnNpZ25lZCBjaGFyIF9fYml0MiA9IF9fbGFzdCAmIDMxOworICB1bnNpZ25lZCBpbnQgX19tYXNrMSA9ICgxVSA8PCAoMzEgLSBfX2JpdDEpIDw8IDEpIC0gMTsKKyAgdW5zaWduZWQgaW50IF9fbWFzazIgPSAoMVUgPDwgKDMxIC0gX19iaXQyKSkgLSAxOworICB1bnNpZ25lZCBpbnQgX192YWx1ZSA9IChfX2JpdDEgPD0gX19iaXQyID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXNrMSAmIH5fX21hc2syIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXNrMSB8IH5fX21hc2syKTsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fdmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19nZW5tYXNrc182NCh1bnNpZ25lZCBjaGFyIF9fZmlyc3QsIHVuc2lnbmVkIGNoYXIgX19sYXN0KQorICBfX2NvbnN0YW50KF9fZmlyc3QpIF9fY29uc3RhbnQoX19sYXN0KSB7CisgIHVuc2lnbmVkIGNoYXIgX19iaXQxID0gX19maXJzdCAmIDYzOworICB1bnNpZ25lZCBjaGFyIF9fYml0MiA9IF9fbGFzdCAmIDYzOworICB1bnNpZ25lZCBsb25nIGxvbmcgX19tYXNrMSA9ICgxVUxMIDw8ICg2MyAtIF9fYml0MSkgPDwgMSkgLSAxOworICB1bnNpZ25lZCBsb25nIGxvbmcgX19tYXNrMiA9ICgxVUxMIDw8ICg2MyAtIF9fYml0MikpIC0gMTsKKyAgdW5zaWduZWQgbG9uZyBsb25nIF9fdmFsdWUgPSAoX19iaXQxIDw9IF9fYml0MiA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWFzazEgJiB+X19tYXNrMiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWFzazEgfCB+X19tYXNrMik7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX3ZhbHVlOworfQorCisvKi0tIHZlY19zcGxhdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NwbGF0KHZlY3RvciBzaWduZWQgY2hhciBfX3ZlYywgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMTUpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19zcGxhdCh2ZWN0b3IgYm9vbCBjaGFyIF9fdmVjLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxNSkgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fdmVjW19faW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NwbGF0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fdmVjLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxNSkgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fdmVjW19faW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3BsYXQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX3ZlYywgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgNykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfc3BsYXQodmVjdG9yIGJvb2wgc2hvcnQgX192ZWMsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDcpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fdmVjW19faW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zcGxhdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX192ZWMsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDcpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc3BsYXQodmVjdG9yIHNpZ25lZCBpbnQgX192ZWMsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDMpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX3ZlY1tfX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfc3BsYXQodmVjdG9yIGJvb2wgaW50IF9fdmVjLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAzKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KSh2ZWN0b3IgdW5zaWduZWQgaW50KV9fdmVjW19faW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3BsYXQodmVjdG9yIHVuc2lnbmVkIGludCBfX3ZlYywgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMykgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc3BsYXQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX192ZWMsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX3ZlY1tfX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfc3BsYXQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fdmVjLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fdmVjW19faW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3BsYXQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMSkgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zcGxhdCh2ZWN0b3IgZG91YmxlIF9fdmVjLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3ZlY1tfX2luZGV4XTsKK30KKworLyotLSB2ZWNfc3BsYXRfcyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc3BsYXRfczgoc2lnbmVkIGNoYXIgX19zY2FsYXIpCisgIF9fY29uc3RhbnQoX19zY2FsYXIpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3BsYXRfczE2KHNpZ25lZCBzaG9ydCBfX3NjYWxhcikKKyAgX19jb25zdGFudChfX3NjYWxhcikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NwbGF0X3MzMihzaWduZWQgc2hvcnQgX19zY2FsYXIpCisgIF9fY29uc3RhbnQoX19zY2FsYXIpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkoc2lnbmVkIGludClfX3NjYWxhcjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc3BsYXRfczY0KHNpZ25lZCBzaG9ydCBfX3NjYWxhcikKKyAgX19jb25zdGFudChfX3NjYWxhcikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKShzaWduZWQgbG9uZylfX3NjYWxhcjsKK30KKworLyotLSB2ZWNfc3BsYXRfdSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zcGxhdF91OCh1bnNpZ25lZCBjaGFyIF9fc2NhbGFyKQorICBfX2NvbnN0YW50KF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zcGxhdF91MTYodW5zaWduZWQgc2hvcnQgX19zY2FsYXIpCisgIF9fY29uc3RhbnQoX19zY2FsYXIpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3BsYXRfdTMyKHNpZ25lZCBzaG9ydCBfX3NjYWxhcikKKyAgX19jb25zdGFudChfX3NjYWxhcikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpKHNpZ25lZCBpbnQpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3BsYXRfdTY0KHNpZ25lZCBzaG9ydCBfX3NjYWxhcikKKyAgX19jb25zdGFudChfX3NjYWxhcikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKHNpZ25lZCBsb25nIGxvbmcpX19zY2FsYXI7Cit9CisKKy8qLS0gdmVjX3NwbGF0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc3BsYXRzKHNpZ25lZCBjaGFyIF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fc2NhbGFyOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NwbGF0cyh1bnNpZ25lZCBjaGFyIF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zcGxhdHMoc2lnbmVkIHNob3J0IF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX3NjYWxhcjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc3BsYXRzKHVuc2lnbmVkIHNob3J0IF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fc2NhbGFyOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NwbGF0cyhzaWduZWQgaW50IF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zcGxhdHModW5zaWduZWQgaW50IF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX3NjYWxhcjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcGxhdHMoc2lnbmVkIGxvbmcgbG9uZyBfX3NjYWxhcikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fc2NhbGFyOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3BsYXRzKHVuc2lnbmVkIGxvbmcgbG9uZyBfX3NjYWxhcikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zcGxhdHMoZG91YmxlIF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3NjYWxhcjsKK30KKworLyotLSB2ZWNfZXh0ZW5kX3M2NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2V4dGVuZF9zNjQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKShfX2FbN10sIF9fYVsxNV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2V4dGVuZF9zNjQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZykoX19hWzNdLCBfX2FbN10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2V4dGVuZF9zNjQodmVjdG9yIHNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpKF9fYVsxXSwgX19hWzNdKTsKK30KKworLyotLSB2ZWNfbWVyZ2VoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19tZXJnZWgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikoCisgICAgX19hWzBdLCBfX2JbMF0sIF9fYVsxXSwgX19iWzFdLCBfX2FbMl0sIF9fYlsyXSwgX19hWzNdLCBfX2JbM10sCisgICAgX19hWzRdLCBfX2JbNF0sIF9fYVs1XSwgX19iWzVdLCBfX2FbNl0sIF9fYls2XSwgX19hWzddLCBfX2JbN10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfbWVyZ2VoKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKAorICAgIF9fYVswXSwgX19iWzBdLCBfX2FbMV0sIF9fYlsxXSwgX19hWzJdLCBfX2JbMl0sIF9fYVszXSwgX19iWzNdLAorICAgIF9fYVs0XSwgX19iWzRdLCBfX2FbNV0sIF9fYls1XSwgX19hWzZdLCBfX2JbNl0sIF9fYVs3XSwgX19iWzddKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19tZXJnZWgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoCisgICAgX19hWzBdLCBfX2JbMF0sIF9fYVsxXSwgX19iWzFdLCBfX2FbMl0sIF9fYlsyXSwgX19hWzNdLCBfX2JbM10sCisgICAgX19hWzRdLCBfX2JbNF0sIF9fYVs1XSwgX19iWzVdLCBfX2FbNl0sIF9fYls2XSwgX19hWzddLCBfX2JbN10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWVyZ2VoKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpKAorICAgIF9fYVswXSwgX19iWzBdLCBfX2FbMV0sIF9fYlsxXSwgX19hWzJdLCBfX2JbMl0sIF9fYVszXSwgX19iWzNdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19tZXJnZWgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoCisgICAgX19hWzBdLCBfX2JbMF0sIF9fYVsxXSwgX19iWzFdLCBfX2FbMl0sIF9fYlsyXSwgX19hWzNdLCBfX2JbM10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tZXJnZWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoCisgICAgX19hWzBdLCBfX2JbMF0sIF9fYVsxXSwgX19iWzFdLCBfX2FbMl0sIF9fYlsyXSwgX19hWzNdLCBfX2JbM10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX21lcmdlaCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KShfX2FbMF0sIF9fYlswXSwgX19hWzFdLCBfX2JbMV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19tZXJnZWgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hWzBdLCBfX2JbMF0sIF9fYVsxXSwgX19iWzFdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX21lcmdlaCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KShfX2FbMF0sIF9fYlswXSwgX19hWzFdLCBfX2JbMV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX21lcmdlaCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKShfX2FbMF0sIF9fYlswXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX21lcmdlaCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2FbMF0sIF9fYlswXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19tZXJnZWgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoX19hWzBdLCBfX2JbMF0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfbWVyZ2VoKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpKF9fYVswXSwgX19iWzBdKTsKK30KKworLyotLSB2ZWNfbWVyZ2VsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19tZXJnZWwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikoCisgICAgX19hWzhdLCBfX2JbOF0sIF9fYVs5XSwgX19iWzldLCBfX2FbMTBdLCBfX2JbMTBdLCBfX2FbMTFdLCBfX2JbMTFdLAorICAgIF9fYVsxMl0sIF9fYlsxMl0sIF9fYVsxM10sIF9fYlsxM10sIF9fYVsxNF0sIF9fYlsxNF0sIF9fYVsxNV0sIF9fYlsxNV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfbWVyZ2VsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKAorICAgIF9fYVs4XSwgX19iWzhdLCBfX2FbOV0sIF9fYls5XSwgX19hWzEwXSwgX19iWzEwXSwgX19hWzExXSwgX19iWzExXSwKKyAgICBfX2FbMTJdLCBfX2JbMTJdLCBfX2FbMTNdLCBfX2JbMTNdLCBfX2FbMTRdLCBfX2JbMTRdLCBfX2FbMTVdLCBfX2JbMTVdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19tZXJnZWwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoCisgICAgX19hWzhdLCBfX2JbOF0sIF9fYVs5XSwgX19iWzldLCBfX2FbMTBdLCBfX2JbMTBdLCBfX2FbMTFdLCBfX2JbMTFdLAorICAgIF9fYVsxMl0sIF9fYlsxMl0sIF9fYVsxM10sIF9fYlsxM10sIF9fYVsxNF0sIF9fYlsxNF0sIF9fYVsxNV0sIF9fYlsxNV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWVyZ2VsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpKAorICAgIF9fYVs0XSwgX19iWzRdLCBfX2FbNV0sIF9fYls1XSwgX19hWzZdLCBfX2JbNl0sIF9fYVs3XSwgX19iWzddKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19tZXJnZWwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoCisgICAgX19hWzRdLCBfX2JbNF0sIF9fYVs1XSwgX19iWzVdLCBfX2FbNl0sIF9fYls2XSwgX19hWzddLCBfX2JbN10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tZXJnZWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoCisgICAgX19hWzRdLCBfX2JbNF0sIF9fYVs1XSwgX19iWzVdLCBfX2FbNl0sIF9fYls2XSwgX19hWzddLCBfX2JbN10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX21lcmdlbCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KShfX2FbMl0sIF9fYlsyXSwgX19hWzNdLCBfX2JbM10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19tZXJnZWwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hWzJdLCBfX2JbMl0sIF9fYVszXSwgX19iWzNdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX21lcmdlbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KShfX2FbMl0sIF9fYlsyXSwgX19hWzNdLCBfX2JbM10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX21lcmdlbCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKShfX2FbMV0sIF9fYlsxXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX21lcmdlbCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2FbMV0sIF9fYlsxXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19tZXJnZWwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoX19hWzFdLCBfX2JbMV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfbWVyZ2VsKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpKF9fYVsxXSwgX19iWzFdKTsKK30KKworLyotLSB2ZWNfcGFjayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19wYWNrKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19hYyA9ICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hOworICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iYyA9ICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikoCisgICAgX19hY1sxXSwgX19hY1szXSwgX19hY1s1XSwgX19hY1s3XSwgX19hY1s5XSwgX19hY1sxMV0sIF9fYWNbMTNdLCBfX2FjWzE1XSwKKyAgICBfX2JjWzFdLCBfX2JjWzNdLCBfX2JjWzVdLCBfX2JjWzddLCBfX2JjWzldLCBfX2JjWzExXSwgX19iY1sxM10sIF9fYmNbMTVdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX3BhY2sodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgdmVjdG9yIGJvb2wgY2hhciBfX2FjID0gKHZlY3RvciBib29sIGNoYXIpX19hOworICB2ZWN0b3IgYm9vbCBjaGFyIF9fYmMgPSAodmVjdG9yIGJvb2wgY2hhcilfX2I7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoCisgICAgX19hY1sxXSwgX19hY1szXSwgX19hY1s1XSwgX19hY1s3XSwgX19hY1s5XSwgX19hY1sxMV0sIF9fYWNbMTNdLCBfX2FjWzE1XSwKKyAgICBfX2JjWzFdLCBfX2JjWzNdLCBfX2JjWzVdLCBfX2JjWzddLCBfX2JjWzldLCBfX2JjWzExXSwgX19iY1sxM10sIF9fYmNbMTVdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19wYWNrKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2E7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYmMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgKKyAgICBfX2FjWzFdLCBfX2FjWzNdLCBfX2FjWzVdLCBfX2FjWzddLCBfX2FjWzldLCBfX2FjWzExXSwgX19hY1sxM10sIF9fYWNbMTVdLAorICAgIF9fYmNbMV0sIF9fYmNbM10sIF9fYmNbNV0sIF9fYmNbN10sIF9fYmNbOV0sIF9fYmNbMTFdLCBfX2JjWzEzXSwgX19iY1sxNV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfcGFjayh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYWMgPSAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2E7CisgIHZlY3RvciBzaWduZWQgc2hvcnQgX19iYyA9ICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KSgKKyAgICBfX2FjWzFdLCBfX2FjWzNdLCBfX2FjWzVdLCBfX2FjWzddLAorICAgIF9fYmNbMV0sIF9fYmNbM10sIF9fYmNbNV0sIF9fYmNbN10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX3BhY2sodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2FjID0gKHZlY3RvciBib29sIHNob3J0KV9fYTsKKyAgdmVjdG9yIGJvb2wgc2hvcnQgX19iYyA9ICh2ZWN0b3IgYm9vbCBzaG9ydClfX2I7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKAorICAgIF9fYWNbMV0sIF9fYWNbM10sIF9fYWNbNV0sIF9fYWNbN10sCisgICAgX19iY1sxXSwgX19iY1szXSwgX19iY1s1XSwgX19iY1s3XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3BhY2sodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2E7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgKKyAgICBfX2FjWzFdLCBfX2FjWzNdLCBfX2FjWzVdLCBfX2FjWzddLAorICAgIF9fYmNbMV0sIF9fYmNbM10sIF9fYmNbNV0sIF9fYmNbN10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3BhY2sodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBpbnQgX19hYyA9ICh2ZWN0b3Igc2lnbmVkIGludClfX2E7CisgIHZlY3RvciBzaWduZWQgaW50IF9fYmMgPSAodmVjdG9yIHNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KShfX2FjWzFdLCBfX2FjWzNdLCBfX2JjWzFdLCBfX2JjWzNdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfcGFjayh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciBib29sIGludCBfX2FjID0gKHZlY3RvciBib29sIGludClfX2E7CisgIHZlY3RvciBib29sIGludCBfX2JjID0gKHZlY3RvciBib29sIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2FjWzFdLCBfX2FjWzNdLCBfX2JjWzFdLCBfX2JjWzNdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3BhY2sodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYTsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpKF9fYWNbMV0sIF9fYWNbM10sIF9fYmNbMV0sIF9fYmNbM10pOworfQorCisvKi0tIHZlY19wYWNrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3BhY2tzKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrc2goX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3BhY2tzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19wYWNrcyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrc2YoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19wYWNrcyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfcGFja3ModmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa3NnKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3BhY2tzKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNnKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfcGFja3NfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19wYWNrc19jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrc2hzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19wYWNrc19jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzaHMoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfcGFja3NfY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrc2ZzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfcGFja3NfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzZnMoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3BhY2tzX2NjKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrc2dzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3BhY2tzX2NjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzZ3MoX19hLCBfX2IsIF9fY2MpOworfQorCisvKi0tIHZlY19wYWNrc3UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfcGFja3N1KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9femVybyA9ICh2ZWN0b3Igc2lnbmVkIHNob3J0KTA7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2goCisgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoX19hID49IF9femVybykgJiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KShfX2IgPj0gX196ZXJvKSAmICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19wYWNrc3UodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNoKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfcGFja3N1KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGNvbnN0IHZlY3RvciBzaWduZWQgaW50IF9femVybyA9ICh2ZWN0b3Igc2lnbmVkIGludCkwOworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNmKAorICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KShfX2EgPj0gX196ZXJvKSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAodmVjdG9yIHVuc2lnbmVkIGludCkoX19iID49IF9femVybykgJiAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19wYWNrc3UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2YoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfcGFja3N1KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGNvbnN0IHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9femVybyA9ICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZykwOworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNnKAorICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKShfX2EgPj0gX196ZXJvKSAmCisgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKShfX2IgPj0gX196ZXJvKSAmCisgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3BhY2tzdSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzZyhfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX3BhY2tzdV9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19wYWNrc3VfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2hzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfcGFja3N1X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2ZzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3BhY2tzdV9jYyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNncyhfX2EsIF9fYiwgX19jYyk7Cit9CisKKy8qLS0gdmVjX3VucGFja2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3VucGFja2godmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwaGIoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY191bnBhY2toKHZlY3RvciBib29sIGNoYXIgX19hKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnVwaGIoKHZlY3RvciBzaWduZWQgY2hhcilfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY191bnBhY2toKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwbGhiKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfdW5wYWNraCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwaGgoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfdW5wYWNraCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnVwaGgoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3VucGFja2godmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwbGhoKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfdW5wYWNraCh2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGhmKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX3VucGFja2godmVjdG9yIGJvb2wgaW50IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92dXBoZigodmVjdG9yIHNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3VucGFja2godmVjdG9yIHVuc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGxoZihfX2EpOworfQorCisvKi0tIHZlY191bnBhY2tsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY191bnBhY2tsKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGxiKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfdW5wYWNrbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3Z1cGxiKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfdW5wYWNrbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGxsYihfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3VucGFja2wodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGxodyhfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY191bnBhY2tsKHZlY3RvciBib29sIHNob3J0IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92dXBsaHcoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3VucGFja2wodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwbGxoKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfdW5wYWNrbCh2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGxmKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX3VucGFja2wodmVjdG9yIGJvb2wgaW50IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92dXBsZigodmVjdG9yIHNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3VucGFja2wodmVjdG9yIHVuc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z1cGxsZihfX2EpOworfQorCisvKi0tIHZlY19jbXBlcSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19jbXBlcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPT0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcGVxKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPT0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcGVxKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfY21wZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfY21wZXEodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKF9fYSA9PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcGVxKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcGVxKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYSA9PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19jbXBlcSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcGVxKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGVxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA9PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19jbXBlcSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGVxKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGVxKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hID09IF9fYik7Cit9CisKKy8qLS0gdmVjX2NtcGdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcGdlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPj0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcGdlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoX19hID49IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfY21wZ2UodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKF9fYSA+PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcGdlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hID49IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcGdlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2EgPj0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wZ2UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2EgPj0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfY21wZ2UodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA+PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19jbXBnZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA+PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19jbXBnZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA+PSBfX2IpOworfQorCisvKi0tIHZlY19jbXBndCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19jbXBndCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoX19hID4gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcGd0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoX19hID4gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19jbXBndCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hID4gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19jbXBndCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKF9fYSA+IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcGd0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2EgPiBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19jbXBndCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYSA+IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGd0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPiBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19jbXBndCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA+IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGd0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hID4gX19iKTsKK30KKworLyotLSB2ZWNfY21wbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfY21wbGUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKF9fYSA8PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfY21wbGUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPD0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19jbXBsZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hIDw9IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfY21wbGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KShfX2EgPD0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wbGUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYSA8PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19jbXBsZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYSA8PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19jbXBsZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hIDw9IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGxlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hIDw9IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGxlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hIDw9IF9fYik7Cit9CisKKy8qLS0gdmVjX2NtcGx0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcGx0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfY21wbHQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcGx0KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KShfX2EgPCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcGx0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hIDwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wbHQodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYSA8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcGx0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hIDwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfY21wbHQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGx0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hIDwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfY21wbHQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPCBfX2IpOworfQorCisvKi0tIHZlY19hbGxfZXEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocyhfX2EsICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKF9fYSwgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncyhfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNlZGJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKKy8qLS0gdmVjX2FsbF9uZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKF9fYSwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoX19hLCAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2VkYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworLyotLSB2ZWNfYWxsX2dlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoX19iLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2IsICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcygodmVjdG9yIHNpZ25lZCBpbnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoX19iLCAodmVjdG9yIHNpZ25lZCBpbnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2IsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hlZGJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKKy8qLS0gdmVjX2FsbF9ndCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2EsICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoX19hLCAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNoZGJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKKy8qLS0gdmVjX2FsbF9sZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2EsICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoX19hLCAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNoZWRicyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCisvKi0tIHZlY19hbGxfbHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2IsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYiwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2IsICh2ZWN0b3Igc2lnbmVkIGludClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYiwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19iLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjaGRicyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCisvKi0tIHZlY19hbGxfbmdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSBpbnQKK3ZlY19hbGxfbmdlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjaGVkYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworLyotLSB2ZWNfYWxsX25ndCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgaW50Cit2ZWNfYWxsX25ndCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hkYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworLyotLSB2ZWNfYWxsX25sZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgaW50Cit2ZWNfYWxsX25sZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hlZGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKKy8qLS0gdmVjX2FsbF9ubHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIGludAordmVjX2FsbF9ubHQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNoZGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKKy8qLS0gdmVjX2FsbF9uYW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIGludAordmVjX2FsbF9uYW4odmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmdGNpZGIoX19hLCAxNSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCisvKi0tIHZlY19hbGxfbnVtZXJpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSBpbnQKK3ZlY19hbGxfbnVtZXJpYyh2ZWN0b3IgZG91YmxlIF9fYSkgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZ0Y2lkYihfX2EsIDE1LCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKKy8qLS0gdmVjX2FueV9lcSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKF9fYSwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoX19hLCAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2VkYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworLyotLSB2ZWNfYW55X25lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoX19hLCAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcyhfX2EsICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjZWRicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCisvKi0tIHZlY19hbnlfZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2IsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYiwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2IsICh2ZWN0b3Igc2lnbmVkIGludClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYiwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19iLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjaGVkYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworLyotLSB2ZWNfYW55X2d0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYSwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2EsICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hkYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworLyotLSB2ZWNfYW55X2xlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYSwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2EsICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hlZGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKKy8qLS0gdmVjX2FueV9sdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYiwgKHZlY3RvciBzaWduZWQgY2hhcilfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoX19iLCAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19iLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYiwgKHZlY3RvciBzaWduZWQgaW50KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19iLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19iLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNoZGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKKy8qLS0gdmVjX2FueV9uZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIGludAordmVjX2FueV9uZ2UodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNoZWRicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCisvKi0tIHZlY19hbnlfbmd0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSBpbnQKK3ZlY19hbnlfbmd0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjaGRicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCisvKi0tIHZlY19hbnlfbmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSBpbnQKK3ZlY19hbnlfbmxlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjaGVkYnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworLyotLSB2ZWNfYW55X25sdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgaW50Cit2ZWNfYW55X25sdCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hkYnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworLyotLSB2ZWNfYW55X25hbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgaW50Cit2ZWNfYW55X25hbih2ZWN0b3IgZG91YmxlIF9fYSkgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZ0Y2lkYihfX2EsIDE1LCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDM7Cit9CisKKy8qLS0gdmVjX2FueV9udW1lcmljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIGludAordmVjX2FueV9udW1lcmljKHZlY3RvciBkb3VibGUgX19hKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZnRjaWRiKF9fYSwgMTUsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworLyotLSB2ZWNfYW5kYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2FuZGModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2FuZGModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2FuZGModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2FuZGModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2FuZGModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2FuZGModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19hbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19hbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19hbmRjKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19hbmRjKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgfih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19hbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSkoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hICYKKyAgICAgICAgICAgICAgICAgICAgICAgICB+KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX2FuZGModmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKSgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJgorICAgICAgICAgICAgICAgICAgICAgICAgIH4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCisvKi0tIHZlY19ub3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19ub3IodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX25vcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX25vcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19ub3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19ub3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19ub3IodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX25vcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfbm9yKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19ub3IodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19ub3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbm9yKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfbm9yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfbm9yKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19ub3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX25vcih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbm9yKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbm9yKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX25vcih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX25vcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX25vcih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbm9yKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX25vcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbm9yKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbm9yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX25vcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX25vcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX25vcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfbm9yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19ub3IodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSl+KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19ub3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKX4oKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX25vcih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpfigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCisvKi0tIHZlY19jbnRseiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY250bHoodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmNsemIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY250bHoodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y2x6YihfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbnRseih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmNsemgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbnRseih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y2x6aChfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY250bHoodmVjdG9yIHNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y2x6ZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY250bHoodmVjdG9yIHVuc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjbHpmKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19jbnRseih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjbHpnKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19jbnRseih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmNsemcoX19hKTsKK30KKworLyotLSB2ZWNfY250dHogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NudHR6KHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjdHpiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NudHR6KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmN0emIoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY250dHoodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjdHpoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY250dHoodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmN0emgoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NudHR6KHZlY3RvciBzaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmN0emYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NudHR6KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y3R6ZihfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfY250dHoodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y3R6ZygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfY250dHoodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjdHpnKF9fYSk7Cit9CisKKy8qLS0gdmVjX3BvcGNudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19wb3BjbnQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBvcGN0YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19wb3BjbnQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cG9wY3RiKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3BvcGNudCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBvcGN0aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3BvcGNudCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cG9wY3RoKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19wb3BjbnQodmVjdG9yIHNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cG9wY3RmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19wb3BjbnQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwb3BjdGYoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3BvcGNudCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwb3BjdGcoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3BvcGNudCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBvcGN0ZyhfX2EpOworfQorCisvKi0tIHZlY19ybCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3JsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92ZXJsbHZiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfcmwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZlcmxsdmIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfcmwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZlcmxsdmgoCisgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3JsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZlcmxsdmgoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3JsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92ZXJsbHZmKAorICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3JsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmVybGx2ZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfcmwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZlcmxsdmcoCisgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfcmwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZXJsbHZnKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfcmxpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19ybGkodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdW5zaWduZWQgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdmVybGxiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIChpbnQpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19ybGkodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB1bnNpZ25lZCBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmVybGxiKF9fYSwgKGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfcmxpKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB1bnNpZ25lZCBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdmVybGxoKAorICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCAoaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3JsaSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB1bnNpZ25lZCBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmVybGxoKF9fYSwgKGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3JsaSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHVuc2lnbmVkIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdmVybGxmKAorICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgKGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfcmxpKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB1bnNpZ25lZCBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmVybGxmKF9fYSwgKGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3JsaSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHVuc2lnbmVkIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdmVybGxnKAorICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgKGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfcmxpKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB1bnNpZ25lZCBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmVybGxnKF9fYSwgKGludClfX2IpOworfQorCisvKi0tIHZlY19ybF9tYXNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfcmxfbWFzayh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgX19jb25zdGFudChfX2MpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfcmxfbWFzayh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSBfX2NvbnN0YW50KF9fYyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3JsX21hc2sodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgX19jb25zdGFudChfX2MpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3JsX21hc2sodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSBfX2NvbnN0YW50KF9fYyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19ybF9tYXNrKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgX19jb25zdGFudChfX2MpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19ybF9tYXNrKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSBfX2NvbnN0YW50KF9fYyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19ybF9tYXNrKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgX19jb25zdGFudChfX2MpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19ybF9tYXNrKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSBfX2NvbnN0YW50KF9fYyk7CisKKyNkZWZpbmUgdmVjX3JsX21hc2soWCwgWSwgWikgKChfX3R5cGVvZl9fKCh2ZWNfcmxfbWFzaykoKFgpLCAoWSksIChaKSkpKSBcCisgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fcmVzOyBcCisgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX194ID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKShYKTsgXAorICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9feSA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoWSk7IFwKKyAgICBzd2l0Y2ggKHNpemVvZiAoKFgpWzBdKSkgeyBcCisgICAgY2FzZSAxOiBfX3JlcyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcikgX19idWlsdGluX3MzOTBfdmVyaW1iKCBcCisgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9feCwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9feCwgXAorICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX3ksIChaKSk7IGJyZWFrOyBcCisgICAgY2FzZSAyOiBfX3JlcyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcikgX19idWlsdGluX3MzOTBfdmVyaW1oKCBcCisgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX3gsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX194LCBcCisgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX3ksIChaKSk7IGJyZWFrOyBcCisgICAgY2FzZSA0OiBfX3JlcyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcikgX19idWlsdGluX3MzOTBfdmVyaW1mKCBcCisgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX194LCAodmVjdG9yIHVuc2lnbmVkIGludClfX3gsIFwKKyAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX3ksIChaKSk7IGJyZWFrOyBcCisgICAgZGVmYXVsdDogX19yZXMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpIF9fYnVpbHRpbl9zMzkwX3ZlcmltZyggXAorICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9feCwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX194LCBcCisgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX195LCAoWikpOyBicmVhazsgXAorICAgIH0gX19yZXM7IH0pKQorCisvKi0tIHZlY19zbGwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NsbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NsbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc2xsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX3NsbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX3NsbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfc2xsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNsKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c2woX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNsKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NsbCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19zbGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19zbGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX3NsbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc2xsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc2xsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfc2xsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfc2xsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19zbGwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc2xsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc2xsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfc2xsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfc2xsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19zbGwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKKy8qLS0gdmVjX3NsYiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc2xiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc2xiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc2xiKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNsYihfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NsYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNsYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zbGIodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc2xiKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zbGIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc2xiKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zbGIodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NsYih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NsYih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc2xiKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zbGIodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NsYih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NsYih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc2xiKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX3NsYih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfc2xiKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19idWlsdGluX3MzOTBfdnNsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyotLSB2ZWNfc2xkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NsZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc2xkKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zbGQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NsZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc2xkKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zbGQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc2xkKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zbGQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBkb3VibGUKK3ZlY19zbGQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMTUpOworCisjZGVmaW5lIHZlY19zbGQoWCwgWSwgWikgKChfX3R5cGVvZl9fKCh2ZWNfc2xkKSgoWCksIChZKSwgKFopKSkpIFwKKyAgX19idWlsdGluX3MzOTBfdnNsZGIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKFkpLCAoWikpKQorCisvKi0tIHZlY19zbGR3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc2xkdyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zbGR3KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NsZHcodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc2xkdyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zbGR3KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NsZHcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zbGR3KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NsZHcodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIGRvdWJsZQordmVjX3NsZHcodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKKyNkZWZpbmUgdmVjX3NsZHcoWCwgWSwgWikgKChfX3R5cGVvZl9fKCh2ZWNfc2xkdykoKFgpLCAoWSksIChaKSkpKSBcCisgIF9fYnVpbHRpbl9zMzkwX3ZzbGRiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcikoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShZKSwgKFopICogNCkpCisKKy8qLS0gdmVjX3NyYWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc3JhbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zcmFsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc3JhbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfc3JhbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19zcmFsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfc3JhbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3JhbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNyYShfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3JhbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzcmEoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzcmEoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NyYWwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3JhbCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NyYWwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX3NyYWwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfc3JhbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX3NyYWwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NyYWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc3JhbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NyYWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zcmFsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NyYWwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zcmFsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19zcmFsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX3NyYWwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19zcmFsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NyYWwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmFsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NyYWwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmFsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19zcmFsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX3NyYWwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19zcmFsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NyYWwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyotLSB2ZWNfc3JhYiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zcmFiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NyYWIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3JhYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzcmFiKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3JhYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNyYWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3JhYih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3JhYih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NyYWIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NyYWIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zcmFiKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc3JhYih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zcmFiKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3JhYih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NyYWIodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmFiKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NyYWIodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmFiKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zcmFiKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfc3JhYih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCisvKi0tIHZlY19zcmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NybCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zcmwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zcmwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX3NybCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19zcmwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19zcmwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNybChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNybChfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3JsKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zcmwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3JsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3JsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19zcmwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfc3JsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfc3JsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zcmwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc3JsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NybCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NybCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfc3JsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX3NybCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX3NybCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc3JsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NybCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NybCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfc3JsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX3NybCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX3NybCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKKy8qLS0gdmVjX3NyYiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc3JiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NyYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zcmIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3JsYihfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NyYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNybGIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3JiKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zcmIodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zcmIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NyYih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NyYih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NyYih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zcmIodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zcmIodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmIodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmIodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3JiKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3JiKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zcmIodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zcmIodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX2J1aWx0aW5fczM5MF92c3JsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyotLSB2ZWNfYWJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19hYnModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gdmVjX3NlbChfX2EsIC1fX2EsIHZlY19jbXBsdChfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpMCkpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfYWJzKHZlY3RvciBzaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgLV9fYSwgdmVjX2NtcGx0KF9fYSwgKHZlY3RvciBzaWduZWQgc2hvcnQpMCkpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2Ficyh2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCAtX19hLCB2ZWNfY21wbHQoX19hLCAodmVjdG9yIHNpZ25lZCBpbnQpMCkpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2Ficyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCAtX19hLCB2ZWNfY21wbHQoX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpMCkpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfYWJzKHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmxwZGIoX19hKTsKK30KKworLyotLSB2ZWNfbmFicyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX25hYnModmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmbG5kYihfX2EpOworfQorCisvKi0tIHZlY19tYXggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX21heCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfbWF4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHZlY3RvciBzaWduZWQgY2hhciBfX2JjID0gKHZlY3RvciBzaWduZWQgY2hhcilfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYmMsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19tYXgodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYWMgPSAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYTsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2FjLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19iYywgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfbWF4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2E7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hYywgdmVjX2NtcGd0KF9fYWMsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWF4KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19tYXgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYmMgPSAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYmMsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWF4KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2FjID0gKHZlY3RvciBzaWduZWQgc2hvcnQpX19hOworICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYWMsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tYXgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYmMsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tYXgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2E7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hYywgdmVjX2NtcGd0KF9fYWMsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX21heCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbWF4KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIGludCBfX2JjID0gKHZlY3RvciBzaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19iYywgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbWF4KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIGludCBfX2FjID0gKHZlY3RvciBzaWduZWQgaW50KV9fYTsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2FjLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX21heCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYmMgPSAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYmMsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbWF4KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYTsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2FjLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbWF4KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19tYXgodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYmMgPSAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iOworICByZXR1cm4gdmVjX3NlbChfX2JjLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19tYXgodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYWMgPSAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hOworICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYWMsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX21heCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iYyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19iYywgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19tYXgodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hOworICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYWMsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX21heCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCisvKi0tIHZlY19taW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX21pbih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfbWluKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHZlY3RvciBzaWduZWQgY2hhciBfX2JjID0gKHZlY3RvciBzaWduZWQgY2hhcilfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iYywgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19taW4odmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYWMgPSAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYTsKKyAgcmV0dXJuIHZlY19zZWwoX19hYywgX19iLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19taW4odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2JjLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfbWluKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2E7CisgIHJldHVybiB2ZWNfc2VsKF9fYWMsIF9fYiwgdmVjX2NtcGd0KF9fYWMsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWluKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYiwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19taW4odmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYmMgPSAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iYywgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWluKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2FjID0gKHZlY3RvciBzaWduZWQgc2hvcnQpX19hOworICByZXR1cm4gdmVjX3NlbChfX2FjLCBfX2IsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2IsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19taW4odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iYywgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19taW4odmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2E7CisgIHJldHVybiB2ZWNfc2VsKF9fYWMsIF9fYiwgdmVjX2NtcGd0KF9fYWMsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX21pbih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYiwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbWluKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIGludCBfX2JjID0gKHZlY3RvciBzaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2JjLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbWluKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIGludCBfX2FjID0gKHZlY3RvciBzaWduZWQgaW50KV9fYTsKKyAgcmV0dXJuIHZlY19zZWwoX19hYywgX19iLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19taW4odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX21pbih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYmMgPSAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iYywgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbWluKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYTsKKyAgcmV0dXJuIHZlY19zZWwoX19hYywgX19iLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbWluKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19taW4odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYmMgPSAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iOworICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYmMsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19taW4odmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYWMgPSAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hOworICByZXR1cm4gdmVjX3NlbChfX2FjLCBfX2IsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX21pbih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2IsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iYyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2JjLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19taW4odmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hOworICByZXR1cm4gdmVjX3NlbChfX2FjLCBfX2IsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX21pbih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2IsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCisvKi0tIHZlY19hZGRfdTEyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2FkZF91MTI4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YXEoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19hZGRjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfYWRkYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmFjY2IoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19hZGRjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhY2NoKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2FkZGModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YWNjZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19hZGRjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmFjY2coX19hLCBfX2IpOworfQorCisvKi0tIHZlY19hZGRjX3UxMjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2FkZGNfdTEyOCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmFjY3EoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19hZGRlX3UxMjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2FkZGVfdTEyOCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YWNxKF9fYSwgX19iLCBfX2MpOworfQorCisvKi0tIHZlY19hZGRlY191MTI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2FkZGVjX3UxMjgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhY2NjcShfX2EsIF9fYiwgX19jKTsKK30KKworLyotLSB2ZWNfYXZnIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19hdmcodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmF2Z2IoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfYXZnKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmF2Z2goX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2F2Zyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmF2Z2YoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2F2Zyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmF2Z2coX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2F2Zyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmF2Z2xiKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfYXZnKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhdmdsaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19hdmcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YXZnbGYoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfYXZnKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmF2Z2xnKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfY2hlY2tzdW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NoZWNrc3VtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmNrc20oX19hLCBfX2IpOworfQorCisvKi0tIHZlY19nZm1zdW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2dmbXN1bSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmdmbWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZ2Ztc3VtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZnZm1oKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2dmbXN1bSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZnZm1mKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfZ2Ztc3VtXzEyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2dmbXN1bV8xMjgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Z2ZtZyhfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX2dmbXN1bV9hY2N1bSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZ2Ztc3VtX2FjY3VtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Z2ZtYWIoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19nZm1zdW1fYWNjdW0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZnZm1haChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2dmbXN1bV9hY2N1bSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Z2ZtYWYoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qLS0gdmVjX2dmbXN1bV9hY2N1bV8xMjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19nZm1zdW1fYWNjdW1fMTI4KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZnZm1hZyhfX2EsIF9fYiwgX19jKTsKK30KKworLyotLSB2ZWNfbWxhZGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19tbGFkZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYiArIF9fYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfbWxhZGQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19tbGFkZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiBfX2EgKiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiArICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19jOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX21sYWRkKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWxhZGQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2EgKiBfX2IgKyBfX2M7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19tbGFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWxhZGQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19hICogKHZlY3RvciBzaWduZWQgc2hvcnQpX19iICsgKHZlY3RvciBzaWduZWQgc2hvcnQpX19jOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tbGFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYiArIF9fYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19tbGFkZCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwKKyAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYiArIF9fYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19tbGFkZCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYSAqIF9fYiArIF9fYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19tbGFkZCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2EgKiAodmVjdG9yIHNpZ25lZCBpbnQpX19iICsgKHZlY3RvciBzaWduZWQgaW50KV9fYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX21sYWRkKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19hICogX19iICsgX19jOworfQorCisvKi0tIHZlY19taGFkZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX21oYWRkKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1haGIoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfbWhhZGQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFsaGIoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19taGFkZCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWhoKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19taGFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWxoaChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19taGFkZCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwKKyAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWhmKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbWhhZGQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFsaGYoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qLS0gdmVjX21lYWRkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX21lYWRkKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWViKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tZWFkZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFsZWIoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbWVhZGQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hZWgoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19tZWFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFsZWgoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbWVhZGQodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFlZihfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX21lYWRkKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hbGVmKF9fYSwgX19iLCBfX2MpOworfQorCisvKi0tIHZlY19tb2FkZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19tb2FkZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFvYihfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfbW9hZGQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hbG9iKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX21vYWRkKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYW9oKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbW9hZGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hbG9oKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX21vYWRkKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hb2YoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19tb2FkZCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWxvZihfX2EsIF9fYiwgX19jKTsKK30KKworLyotLSB2ZWNfbXVsaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19tdWxoKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtaGIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX211bGgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtbGhiKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX211bGgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWhoKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfbXVsaCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWxoaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbXVsaCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1oZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19tdWxoKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1saGYoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19tdWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19tdWxlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtZWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tdWxlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWxlYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbXVsZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtZWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbXVsZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWxlaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbXVsZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1lZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19tdWxlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1sZWYoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19tdWxvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19tdWxvKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Ztb2IoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tdWxvKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWxvYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbXVsbyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Ztb2goX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbXVsbyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWxvaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbXVsbyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1vZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19tdWxvKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1sb2YoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19zdWJfdTEyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3N1Yl91MTI4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3EoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19zdWJjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3ViYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNjYmliKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc3ViYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c2NiaWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3ViYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzY2JpZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zdWJjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNjYmlnKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfc3ViY191MTI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zdWJjX3UxMjgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzY2JpcShfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX3N1YmVfdTEyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3ViZV91MTI4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzYmlxKF9fYSwgX19iLCBfX2MpOworfQorCisvKi0tIHZlY19zdWJlY191MTI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3N1YmVjX3UxMjgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzYmNiaXEoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qLS0gdmVjX3N1bTIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3N1bTIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN1bWdoKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3N1bTIodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3VtZ2YoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19zdW1fdTEyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3VtX3UxMjgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3VtcWYoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3N1bV91MTI4KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN1bXFnKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfc3VtNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3VtNCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN1bWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3VtNCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3VtaChfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX3Rlc3RfbWFzayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfdGVzdF9tYXNrKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnRtKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX3Rlc3RfbWFzayh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnRtKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfdGVzdF9tYXNrKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92dG0oKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfdGVzdF9tYXNrKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z0bSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY190ZXN0X21hc2sodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnRtKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX3Rlc3RfbWFzayh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z0bSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY190ZXN0X21hc2sodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnRtKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX3Rlc3RfbWFzayh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z0bSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY190ZXN0X21hc2sodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92dG0oKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyotLSB2ZWNfbWFkZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX21hZGQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCB2ZWN0b3IgZG91YmxlIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZtYWRiKF9fYSwgX19iLCBfX2MpOworfQorCisvKi0tIHZlY19tc3ViIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgZG91YmxlCit2ZWNfbXN1Yih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsIHZlY3RvciBkb3VibGUgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Zm1zZGIoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qLS0gdmVjX3NxcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zcXJ0KHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZnNxZGIoX19hKTsKK30KKworLyotLSB2ZWNfbGQyZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX2xkMmYoY29uc3QgZmxvYXQgKl9fcHRyKSB7CisgIHR5cGVkZWYgZmxvYXQgX192MmYzMiBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oOCkpKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKCooY29uc3QgX192MmYzMiAqKV9fcHRyLCB2ZWN0b3IgZG91YmxlKTsKK30KKworLyotLSB2ZWNfc3QyZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdm9pZAordmVjX3N0MmYodmVjdG9yIGRvdWJsZSBfX2EsIGZsb2F0ICpfX3B0cikgeworICB0eXBlZGVmIGZsb2F0IF9fdjJmMzIgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDgpKSk7CisgICooX192MmYzMiAqKV9fcHRyID0gX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19hLCBfX3YyZjMyKTsKK30KKworLyotLSB2ZWNfY3RkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfY3RkKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgaW50IF9fYikKKyAgX19jb25zdGFudF9yYW5nZShfX2IsIDAsIDMxKSB7CisgIHZlY3RvciBkb3VibGUgX19jb252ID0gX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19hLCB2ZWN0b3IgZG91YmxlKTsKKyAgX19jb252ICo9ICh2ZWN0b3IgZG91YmxlKSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKSgoMHgzZmZVTEwgLSBfX2IpIDw8IDUyKTsKKyAgcmV0dXJuIF9fY29udjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX2N0ZCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgaW50IF9fYikKKyAgX19jb25zdGFudF9yYW5nZShfX2IsIDAsIDMxKSB7CisgIHZlY3RvciBkb3VibGUgX19jb252ID0gX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19hLCB2ZWN0b3IgZG91YmxlKTsKKyAgX19jb252ICo9ICh2ZWN0b3IgZG91YmxlKSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKSgoMHgzZmZVTEwgLSBfX2IpIDw8IDUyKTsKKyAgcmV0dXJuIF9fY29udjsKK30KKworLyotLSB2ZWNfY3RzbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2N0c2wodmVjdG9yIGRvdWJsZSBfX2EsIGludCBfX2IpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19iLCAwLCAzMSkgeworICBfX2EgKj0gKHZlY3RvciBkb3VibGUpKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKCgweDNmZlVMTCArIF9fYikgPDwgNTIpOworICByZXR1cm4gX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyk7Cit9CisKKy8qLS0gdmVjX2N0dWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2N0dWwodmVjdG9yIGRvdWJsZSBfX2EsIGludCBfX2IpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19iLCAwLCAzMSkgeworICBfX2EgKj0gKHZlY3RvciBkb3VibGUpKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKCgweDNmZlVMTCArIF9fYikgPDwgNTIpOworICByZXR1cm4gX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKTsKK30KKworLyotLSB2ZWNfcm91bmRwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX3JvdW5kcCh2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZpZGIoX19hLCA0LCA2KTsKK30KKworLyotLSB2ZWNfY2VpbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX2NlaWwodmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgLy8gT24gdGhpcyBwbGF0Zm9ybSwgdmVjX2NlaWwgbmV2ZXIgdHJpZ2dlcnMgdGhlIElFRUUtaW5leGFjdCBleGNlcHRpb24uCisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmlkYihfX2EsIDQsIDYpOworfQorCisvKi0tIHZlY19yb3VuZG0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgZG91YmxlCit2ZWNfcm91bmRtKHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmlkYihfX2EsIDQsIDcpOworfQorCisvKi0tIHZlY19mbG9vciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgZG91YmxlCit2ZWNfZmxvb3IodmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgLy8gT24gdGhpcyBwbGF0Zm9ybSwgdmVjX2Zsb29yIG5ldmVyIHRyaWdnZXJzIHRoZSBJRUVFLWluZXhhY3QgZXhjZXB0aW9uLgorICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZpZGIoX19hLCA0LCA3KTsKK30KKworLyotLSB2ZWNfcm91bmR6IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX3JvdW5keih2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZpZGIoX19hLCA0LCA1KTsKK30KKworLyotLSB2ZWNfdHJ1bmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX3RydW5jKHZlY3RvciBkb3VibGUgX19hKSB7CisgIC8vIE9uIHRoaXMgcGxhdGZvcm0sIHZlY190cnVuYyBuZXZlciB0cmlnZ2VycyB0aGUgSUVFRS1pbmV4YWN0IGV4Y2VwdGlvbi4KKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmaWRiKF9fYSwgNCwgNSk7Cit9CisKKy8qLS0gdmVjX3JvdW5kYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBkb3VibGUKK3ZlY19yb3VuZGModmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmaWRiKF9fYSwgNCwgMCk7Cit9CisKKy8qLS0gdmVjX3JvdW5kIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBkb3VibGUKK3ZlY19yb3VuZCh2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZpZGIoX19hLCA0LCA0KTsKK30KKworLyotLSB2ZWNfZnBfdGVzdF9kYXRhX2NsYXNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIHZlY19mcF90ZXN0X2RhdGFfY2xhc3MoWCwgWSwgWikgXAorICAoKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92ZnRjaWRiKChYKSwgKFkpLCAoWikpKQorCisvKi0tIHZlY19jcF91bnRpbF96ZXJvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2NwX3VudGlsX3plcm8odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92aXN0cmIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19jcF91bnRpbF96ZXJvKHZlY3RvciBib29sIGNoYXIgX19hKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92aXN0cmIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY3BfdW50aWxfemVybyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zpc3RyYihfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfY3BfdW50aWxfemVybyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdmlzdHJoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19jcF91bnRpbF96ZXJvKHZlY3RvciBib29sIHNob3J0IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3Zpc3RyaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NwX3VudGlsX3plcm8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmlzdHJoKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfY3BfdW50aWxfemVybyh2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92aXN0cmYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY3BfdW50aWxfemVybyh2ZWN0b3IgYm9vbCBpbnQgX19hKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3Zpc3RyZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY3BfdW50aWxfemVybyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmlzdHJmKF9fYSk7Cit9CisKKy8qLS0gdmVjX2NwX3VudGlsX3plcm9fY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfY3BfdW50aWxfemVyb19jYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmlzdHJicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NwX3VudGlsX3plcm9fY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmlzdHJicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jcF91bnRpbF96ZXJvX2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92aXN0cmJzKF9fYSwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19jcF91bnRpbF96ZXJvX2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3Zpc3RyaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NwX3VudGlsX3plcm9fY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92aXN0cmhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY3BfdW50aWxfemVyb19jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zpc3RyaHMoX19hLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19jcF91bnRpbF96ZXJvX2NjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmlzdHJmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19jcF91bnRpbF96ZXJvX2NjKHZlY3RvciBib29sIGludCBfX2EsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92aXN0cmZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NwX3VudGlsX3plcm9fY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmlzdHJmcyhfX2EsIF9fY2MpOworfQorCisvKi0tIHZlY19jbXBlcV9pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2NtcGVxX2lkeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZWViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wZXFfaWR4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcGVxX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfY21wZXFfaWR4KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZlZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBlcV9pZHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBlcV9pZHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2NtcGVxX2lkeCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZWVmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wZXFfaWR4KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWVmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBlcV9pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlZihfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX2NtcGVxX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfY21wZXFfaWR4X2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVlYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wZXFfaWR4X2NjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBlcV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWJzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2NtcGVxX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZlZWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcGVxX2lkeF9jYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBlcV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlaHMoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2NtcGVxX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZlZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcGVxX2lkeF9jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWVmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcGVxX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWZzKF9fYSwgX19iLCBfX2NjKTsKK30KKworLyotLSB2ZWNfY21wZXFfb3JfMF9pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19jbXBlcV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZWV6YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBlcV9vcl8wX2lkeCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWV6YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcGVxX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfY21wZXFfb3JfMF9pZHgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVlemgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wZXFfb3JfMF9pZHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWV6aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcGVxX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWV6aChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfY21wZXFfb3JfMF9pZHgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVlemYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wZXFfb3JfMF9pZHgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZXpmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wZXFfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemYoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19jbXBlcV9vcl8wX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2NtcGVxX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZWV6YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcGVxX29yXzBfaWR4X2NjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcGVxX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZXpicyhfX2EsIF9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19jbXBlcV9vcl8wX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVlemhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBlcV9vcl8wX2lkeF9jYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcGVxX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemhzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19jbXBlcV9vcl8wX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZlZXpmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wZXFfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcGVxX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWV6ZnMoX19hLCBfX2IsIF9fY2MpOworfQorCisvKi0tIHZlY19jbXBuZV9pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2NtcG5lX2lkeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBuZV9pZHgodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBuZV9pZHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19jbXBuZV9pZHgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVuZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wbmVfaWR4KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBuZV9pZHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmVoKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19jbXBuZV9pZHgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVuZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wbmVfaWR4KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcG5lX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lZihfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX2NtcG5lX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfY21wbmVfaWR4X2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVuZWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBuZV9pZHhfY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wbmVfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lYnMoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfY21wbmVfaWR4X2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVuZWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBuZV9pZHhfY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBuZV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZWhzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19jbXBuZV9pZHhfY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcG5lX2lkeF9jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wbmVfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZWZzKF9fYSwgX19iLCBfX2NjKTsKK30KKworLyotLSB2ZWNfY21wbmVfb3JfMF9pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19jbXBuZV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcG5lX29yXzBfaWR4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBuZV9vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6YihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19jbXBuZV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcG5lX29yXzBfaWR4KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZXpoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcG5lX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemgoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2NtcG5lX29yXzBfaWR4KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZlbmV6ZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wbmVfb3JfMF9pZHgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6ZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBuZV9vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemYoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19jbXBuZV9vcl8wX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2NtcG5lX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wbmVfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBuZV9vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemJzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2NtcG5lX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wbmVfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6aHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcG5lX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZXpocyhfX2EsIF9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfY21wbmVfb3JfMF9pZHhfY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wbmVfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZXpmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wbmVfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6ZnMoX19hLCBfX2IsIF9fY2MpOworfQorCisvKi0tIHZlY19jbXByZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19jbXByZyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzdHJjYihfX2EsIF9fYiwgX19jLCA0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19jbXByZyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3RyY2goX19hLCBfX2IsIF9fYywgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcHJnKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c3RyY2YoX19hLCBfX2IsIF9fYywgNCk7Cit9CisKKy8qLS0gdmVjX2NtcHJnX2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcHJnX2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYywgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c3RyY2JzKF9fYSwgX19iLCBfX2MsIDQsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcHJnX2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYywgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnN0cmNocyhfX2EsIF9fYiwgX19jLCA0LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wcmdfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnN0cmNmcyhfX2EsIF9fYiwgX19jLCA0LCBfX2NjKTsKK30KKworLyotLSB2ZWNfY21wcmdfaWR4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcHJnX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY2IoX19hLCBfX2IsIF9fYywgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcHJnX2lkeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY2goX19hLCBfX2IsIF9fYywgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXByZ19pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNmKF9fYSwgX19iLCBfX2MsIDApOworfQorCisvKi0tIHZlY19jbXByZ19pZHhfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wcmdfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNicyhfX2EsIF9fYiwgX19jLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wcmdfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNocyhfX2EsIF9fYiwgX19jLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcHJnX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjZnMoX19hLCBfX2IsIF9fYywgMCwgX19jYyk7Cit9CisKKy8qLS0gdmVjX2NtcHJnX29yXzBfaWR4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXByZ19vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemIoX19hLCBfX2IsIF9fYywgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcHJnX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmN6aChfX2EsIF9fYiwgX19jLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcHJnX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmN6ZihfX2EsIF9fYiwgX19jLCAwKTsKK30KKworLyotLSB2ZWNfY21wcmdfb3JfMF9pZHhfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcHJnX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYywgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY3picyhfX2EsIF9fYiwgX19jLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wcmdfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemhzKF9fYSwgX19iLCBfX2MsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wcmdfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemZzKF9fYSwgX19iLCBfX2MsIDAsIF9fY2MpOworfQorCisvKi0tIHZlY19jbXBucmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19jbXBucmcodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnN0cmNiKF9fYSwgX19iLCBfX2MsIDEyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19jbXBucmcodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzdHJjaChfX2EsIF9fYiwgX19jLCAxMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcG5yZyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZzdHJjZihfX2EsIF9fYiwgX19jLCAxMik7Cit9CisKKy8qLS0gdmVjX2NtcG5yZ19jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcG5yZ19jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzdHJjYnMoX19hLCBfX2IsIF9fYywgMTIsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcG5yZ19jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3RyY2hzKF9fYSwgX19iLCBfX2MsIDEyLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wbnJnX2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c3RyY2ZzKF9fYSwgX19iLCBfX2MsIDEyLCBfX2NjKTsKK30KKworLyotLSB2ZWNfY21wbnJnX2lkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcG5yZ19pZHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjYihfX2EsIF9fYiwgX19jLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wbnJnX2lkeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNoKF9fYSwgX19iLCBfX2MsIDgpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wbnJnX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNmKF9fYSwgX19iLCBfX2MsIDgpOworfQorCisvKi0tIHZlY19jbXBucmdfaWR4X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wbnJnX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYywgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY2JzKF9fYSwgX19iLCBfX2MsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBucmdfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjaHMoX19hLCBfX2IsIF9fYywgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBucmdfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjZnMoX19hLCBfX2IsIF9fYywgOCwgX19jYyk7Cit9CisKKy8qLS0gdmVjX2NtcG5yZ19vcl8wX2lkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBucmdfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmN6YihfX2EsIF9fYiwgX19jLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wbnJnX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemgoX19hLCBfX2IsIF9fYywgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBucmdfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmN6ZihfX2EsIF9fYiwgX19jLCA4KTsKK30KKworLyotLSB2ZWNfY21wbnJnX29yXzBfaWR4X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcG5yZ19vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemJzKF9fYSwgX19iLCBfX2MsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBucmdfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYywgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY3pocyhfX2EsIF9fYiwgX19jLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcG5yZ19vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemZzKF9fYSwgX19iLCBfX2MsIDgsIF9fY2MpOworfQorCisvKi0tIHZlY19maW5kX2FueV9lcSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19maW5kX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfZmluZF9hbnlfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfZmluZF9hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZmYWViKF9fYSwgX19iLCA0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19maW5kX2FueV9lcSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfZmluZF9hbnlfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfZmluZF9hbnlfZXEodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZmYWVoKF9fYSwgX19iLCA0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfZmluZF9hbnlfZXEodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2ZpbmRfYW55X2VxKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2ZpbmRfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92ZmFlZihfX2EsIF9fYiwgNCk7Cit9CisKKy8qLS0gdmVjX2ZpbmRfYW55X2VxX2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2ZpbmRfYW55X2VxX2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDQsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCA0LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2ZpbmRfYW55X2VxX2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdmZhZWJzKF9fYSwgX19iLCA0LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19maW5kX2FueV9lcV9jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgNCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfZmluZF9hbnlfZXFfY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDQsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdmZhZWhzKF9fYSwgX19iLCA0LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfZmluZF9hbnlfZXFfY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDQsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19maW5kX2FueV9lcV9jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCA0LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfZmluZF9hbnlfZXFfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92ZmFlZnMoX19hLCBfX2IsIDQsIF9fY2MpOworfQorCisvKi0tIHZlY19maW5kX2FueV9lcV9pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X2VxX2lkeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfaWR4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X2VxX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWIoX19hLCBfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfZXFfaWR4KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9lcV9pZHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9lcV9pZHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWgoX19hLCBfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2ZpbmRfYW55X2VxX2lkeCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfaWR4KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9lcV9pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlZihfX2EsIF9fYiwgMCk7Cit9CisKKy8qLS0gdmVjX2ZpbmRfYW55X2VxX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfaWR4X2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfaWR4X2NjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9lcV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWJzKF9fYSwgX19iLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX2lkeF9jYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9lcV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlaHMoX19hLCBfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2ZpbmRfYW55X2VxX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2ZpbmRfYW55X2VxX2lkeF9jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2ZpbmRfYW55X2VxX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWZzKF9fYSwgX19iLCAwLCBfX2NjKTsKK30KKworLyotLSB2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9lcV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9lcV9vcl8wX2lkeCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemIoX19hLCBfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlemgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6aChfX2EsIF9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlemYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemYoX19hLCBfX2IsIDApOworfQorCisvKi0tIHZlY19maW5kX2FueV9lcV9vcl8wX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4X2NjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemJzKF9fYSwgX19iLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6aHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4X2NjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9lcV9vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpocyhfX2EsIF9fYiwgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHhfY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZXpmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6ZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpmcyhfX2EsIF9fYiwgMCwgX19jYyk7Cit9CisKKy8qLS0gdmVjX2ZpbmRfYW55X25lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2ZpbmRfYW55X25lKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMTIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfZmluZF9hbnlfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDEyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2ZpbmRfYW55X25lKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92ZmFlYihfX2EsIF9fYiwgMTIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2ZpbmRfYW55X25lKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAxMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfZmluZF9hbnlfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgMTIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2ZpbmRfYW55X25lKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92ZmFlaChfX2EsIF9fYiwgMTIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19maW5kX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAxMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2ZpbmRfYW55X25lKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgMTIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19maW5kX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdmZhZWYoX19hLCBfX2IsIDEyKTsKK30KKworLyotLSB2ZWNfZmluZF9hbnlfbmVfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfY2ModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMTIsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAxMiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19maW5kX2FueV9uZV9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZmYWVicyhfX2EsIF9fYiwgMTIsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2ZpbmRfYW55X25lX2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAxMiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDEyLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19maW5kX2FueV9uZV9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZmYWVocyhfX2EsIF9fYiwgMTIsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19maW5kX2FueV9uZV9jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgMTIsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19maW5kX2FueV9uZV9jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAxMiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2ZpbmRfYW55X25lX2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdmZhZWZzKF9fYSwgX19iLCAxMiwgX19jYyk7Cit9CisKKy8qLS0gdmVjX2ZpbmRfYW55X25lX2lkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfaWR4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9uZV9pZHgodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfaWR4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlYihfX2EsIF9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9uZV9pZHgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X25lX2lkeCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X25lX2lkeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlaChfX2EsIF9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfbmVfaWR4KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9pZHgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2ZpbmRfYW55X25lX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVmKF9fYSwgX19iLCA4KTsKK30KKworLyotLSB2ZWNfZmluZF9hbnlfbmVfaWR4X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9uZV9pZHhfY2ModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9uZV9pZHhfY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X25lX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlYnMoX19hLCBfX2IsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfaWR4X2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfaWR4X2NjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X25lX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVocyhfX2EsIF9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfbmVfaWR4X2NjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfbmVfaWR4X2NjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfbmVfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlZnMoX19hLCBfX2IsIDgsIF9fY2MpOworfQorCisvKi0tIHZlY19maW5kX2FueV9uZV9vcl8wX2lkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X25lX29yXzBfaWR4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZhZXpiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDgpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X25lX29yXzBfaWR4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YihfX2EsIF9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDgpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpoKF9fYSwgX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6ZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6ZihfX2EsIF9fYiwgOCk7Cit9CisKKy8qLS0gdmVjX2ZpbmRfYW55X25lX29yXzBfaWR4X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHhfY2ModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZhZXpicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YnMoX19hLCBfX2IsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHhfY2ModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZXpocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X25lX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemhzKF9fYSwgX19iLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlemZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeF9jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemZzKF9fYSwgX19iLCA4LCBfX2NjKTsKK30KKworI3VuZGVmIF9fY29uc3RhbnRfcG93Ml9yYW5nZQorI3VuZGVmIF9fY29uc3RhbnRfcmFuZ2UKKyN1bmRlZiBfX2NvbnN0YW50CisjdW5kZWYgX19BVFRSU19vCisjdW5kZWYgX19BVFRSU19vX2FpCisjdW5kZWYgX19BVFRSU19haQorCisjZWxzZQorCisjZXJyb3IgIlVzZSAtZnp2ZWN0b3IgdG8gZW5hYmxlIHZlY3RvciBleHRlbnNpb25zIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUvd21taW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3dtbWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDkzMTAKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3dtbWludHJpbi5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qPT09LS0tLSB3bW1pbnRyaW4uaCAtIEFFUyBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfV01NSU5UUklOX0gKKyNkZWZpbmUgX1dNTUlOVFJJTl9ICisKKyNpbmNsdWRlIDxlbW1pbnRyaW4uaD4KKworI2luY2x1ZGUgPF9fd21taW50cmluX2Flcy5oPgorCisjaW5jbHVkZSA8X193bW1pbnRyaW5fcGNsbXVsLmg+CisKKyNlbmRpZiAvKiBfV01NSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUveDg2aW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3g4NmludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYTQwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3g4NmludHJpbi5oCkBAIC0wLDAgKzEsODUgQEAKKy8qPT09LS0tLSB4ODZpbnRyaW4uaCAtIFg4NiBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19YODZJTlRSSU5fSAorI2RlZmluZSBfX1g4NklOVFJJTl9ICisKKyNpbmNsdWRlIDxpYTMyaW50cmluLmg+CisKKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX18zZE5PV19fKQorI2luY2x1ZGUgPG1tM2Rub3cuaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0JNSV9fKQorI2luY2x1ZGUgPGJtaWludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fQk1JMl9fKQorI2luY2x1ZGUgPGJtaTJpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0xaQ05UX18pCisjaW5jbHVkZSA8bHpjbnRpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX1BPUENOVF9fKQorI2luY2x1ZGUgPHBvcGNudGludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fUkRTRUVEX18pCisjaW5jbHVkZSA8cmRzZWVkaW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19QUkZDSFdfXykKKyNpbmNsdWRlIDxwcmZjaHdpbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX1NTRTRBX18pCisjaW5jbHVkZSA8YW1taW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19GTUE0X18pCisjaW5jbHVkZSA8Zm1hNGludHJpbi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKSB8fCBkZWZpbmVkKF9fWE9QX18pCisjaW5jbHVkZSA8eG9waW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19UQk1fXykKKyNpbmNsdWRlIDx0Ym1pbnRyaW4uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykgfHwgZGVmaW5lZChfX0YxNkNfXykKKyNpbmNsdWRlIDxmMTZjaW50cmluLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpIHx8IGRlZmluZWQoX19NV0FJVFhfXykKKyNpbmNsdWRlIDxtd2FpdHhpbnRyaW4uaD4KKyNlbmRpZgorCisvKiBGSVhNRTogTFdQICovCisKKyNlbmRpZiAvKiBfX1g4NklOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3htbWludHJpbi5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS94bW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWY5NWIxCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS94bW1pbnRyaW4uaApAQCAtMCwwICsxLDI4OTMgQEAKKy8qPT09LS0tLSB4bW1pbnRyaW4uaCAtIFNTRSBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19YTU1JTlRSSU5fSAorI2RlZmluZSBfX1hNTUlOVFJJTl9ICisKKyNpbmNsdWRlIDxtbWludHJpbi5oPgorCit0eXBlZGVmIGludCBfX3Y0c2kgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOwordHlwZWRlZiBmbG9hdCBfX3Y0c2YgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOwordHlwZWRlZiBmbG9hdCBfX20xMjggX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOworCisvKiBVbnNpZ25lZCB0eXBlcyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX192NHN1IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNikpKTsKKworLyogVGhpcyBoZWFkZXIgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgaW4gYSBob3N0ZWQgZW52aXJvbm1lbnQgYXMgaXQgZGVwZW5kcyBvbgorICogYSBzdGFuZGFyZCBsaWJyYXJ5IHRvIHByb3ZpZGUgYWxsb2NhdGlvbiByb3V0aW5lcy4gKi8KKyNpZiBfX1NURENfSE9TVEVEX18KKyNpbmNsdWRlIDxtbV9tYWxsb2MuaD4KKyNlbmRpZgorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInNzZSIpKSkKKworLy8vIFxicmllZiBBZGRzIHRoZSAzMi1iaXQgZmxvYXQgdmFsdWVzIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiB0aGUgb3BlcmFuZHMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkFERFNTIC8gQUREU1MgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNhbGN1bGF0aW9uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gICAgVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjYWxjdWxhdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIHdob3NlIGxvd2VyIDMyIGJpdHMgY29udGFpbiB0aGUgc3VtCisvLy8gICAgb2YgdGhlIGxvd2VyIDMyIGJpdHMgb2YgYm90aCBvcGVyYW5kcy4gVGhlIHVwcGVyIDk2IGJpdHMgYXJlIGNvcGllZCBmcm9tCisvLy8gICAgdGhlIHVwcGVyIDk2IGJpdHMgb2YgdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICBfX2FbMF0gKz0gX19iWzBdOworICByZXR1cm4gX19hOworfQorCisvLy8gXGJyaWVmIEFkZHMgdHdvIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XSwgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMgb2YKKy8vLyAgICB0aGUgYWRkaXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkFERFBTIC8gQUREUFMgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgc3VtcyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KSgoX192NHNmKV9fYSArIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBTdWJ0cmFjdHMgdGhlIDMyLWJpdCBmbG9hdCB2YWx1ZSBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgdGhlIHNlY29uZAorLy8vICAgIG9wZXJhbmQgZnJvbSB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgZmlyc3Qgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWU1VCU1MgLyBTVUJTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBtaW51ZW5kLiBUaGUgbG93ZXIgMzIgYml0cworLy8vICAgIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY2FsY3VsYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgc3VidHJhaGVuZC4gVGhlIGxvd2VyIDMyCisvLy8gICAgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNhbGN1bGF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gd2hvc2UgbG93ZXIgMzIgYml0cyBjb250YWluIHRoZQorLy8vICAgIGRpZmZlcmVuY2Ugb2YgdGhlIGxvd2VyIDMyIGJpdHMgb2YgYm90aCBvcGVyYW5kcy4gVGhlIHVwcGVyIDk2IGJpdHMgYXJlCisvLy8gICAgY29waWVkIGZyb20gdGhlIHVwcGVyIDk2IGJpdHMgb2YgdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1Yl9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICBfX2FbMF0gLT0gX19iWzBdOworICByZXR1cm4gX19hOworfQorCisvLy8gXGJyaWVmIFN1YnRyYWN0cyBlYWNoIG9mIHRoZSB2YWx1ZXMgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGZpcnN0CisvLy8gICAgb3BlcmFuZCwgYm90aCBvZiB3aGljaCBhcmUgMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdIGFuZCByZXR1cm5zCisvLy8gICAgdGhlIHJlc3VsdHMgb2YgdGhlIHN1YnRyYWN0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZTVUJQUyAvIFNVQlBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIG1pbnVlbmQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgc3VidHJhaGVuZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4KKy8vLyAgICBib3RoIG9wZXJhbmRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1Yl9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOCkoKF9fdjRzZilfX2EgLSAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgTXVsdGlwbGllcyB0d28gMzItYml0IGZsb2F0IHZhbHVlcyBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgdGhlCisvLy8gICAgb3BlcmFuZHMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1VTFNTIC8gTVVMU1MgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyAgICBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNhbGN1bGF0aW9uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gICAgVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjYWxjdWxhdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHByb2R1Y3Qgb2YgdGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiBib3RoIG9wZXJhbmRzLiBUaGUgdXBwZXIgOTYgYml0cyBhcmUgY29waWVkIGZyb20gdGhlIHVwcGVyIDk2CisvLy8gICAgYml0cyBvZiB0aGUgZmlyc3Qgc291cmNlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIF9fYVswXSAqPSBfX2JbMF07CisgIHJldHVybiBfX2E7Cit9CisKKy8vLyBcYnJpZWYgTXVsdGlwbGllcyB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdIGFuZCByZXR1cm5zIHRoZQorLy8vICAgIHJlc3VsdHMgb2YgdGhlIG11bHRpcGxpY2F0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNVUxQUyAvIE1VTFBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHByb2R1Y3RzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWxfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpKChfX3Y0c2YpX19hICogKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIERpdmlkZXMgdGhlIHZhbHVlIGluIHRoZSBsb3ctb3JkZXIgMzIgYml0cyBvZiB0aGUgZmlyc3Qgb3BlcmFuZCBieQorLy8vICAgIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWRElWU1MgLyBESVZTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBkaXZpZGVuZC4gVGhlIGxvd2VyIDMyCisvLy8gICAgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNhbGN1bGF0aW9uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGRpdmlzb3IuIFRoZSBsb3dlciAzMiBiaXRzCisvLy8gICAgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjYWxjdWxhdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHF1b3RpZW50cyBvZiB0aGUKKy8vLyAgICBsb3dlciAzMiBiaXRzIG9mIGJvdGggb3BlcmFuZHMuIFRoZSB1cHBlciA5NiBiaXRzIGFyZSBjb3BpZWQgZnJvbSB0aGUKKy8vLyAgICB1cHBlciA5NiBiaXRzIG9mIHRoZSBmaXJzdCBzb3VyY2Ugb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9kaXZfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgX19hWzBdIC89IF9fYlswXTsKKyAgcmV0dXJuIF9fYTsKK30KKworLy8vIFxicmllZiBEaXZpZGVzIHR3byAxMjgtYml0IHZlY3RvcnMgb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkRJVlBTIC8gRElWUFMgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgZGl2aWRlbmQuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgZGl2aXNvci4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHF1b3RpZW50cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZGl2X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KSgoX192NHNmKV9fYSAvIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBDYWxjdWxhdGVzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSBsb3ctb3JkZXIgYml0cworLy8vICAgIG9mIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlNRUlRTUyAvIFNRUlRTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNhbGN1bGF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlCisvLy8gICAgdmFsdWUgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NxcnRfc3MoX19tMTI4IF9fYSkKK3sKKyAgX19tMTI4IF9fYyA9IF9fYnVpbHRpbl9pYTMyX3NxcnRzcygoX192NHNmKV9fYSk7CisgIHJldHVybiAoX19tMTI4KSB7IF9fY1swXSwgX19hWzFdLCBfX2FbMl0sIF9fYVszXSB9OworfQorCisvLy8gXGJyaWVmIENhbGN1bGF0ZXMgdGhlIHNxdWFyZSByb290cyBvZiB0aGUgdmFsdWVzIHN0b3JlZCBpbiBhIDEyOC1iaXQgdmVjdG9yCisvLy8gICAgb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlNRUlRQUyAvIFNRUlRQUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHNxdWFyZSByb290cyBvZiB0aGUKKy8vLyAgICB2YWx1ZXMgaW4gdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3FydF9wcyhfX20xMjggX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfc3FydHBzKChfX3Y0c2YpX19hKTsKK30KKworLy8vIFxicmllZiBDYWxjdWxhdGVzIHRoZSBhcHByb3hpbWF0ZSByZWNpcHJvY2FsIG9mIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlCisvLy8gICAgbG93LW9yZGVyIGJpdHMgb2YgYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUkNQU1MgLyBSQ1BTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNhbGN1bGF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgYXBwcm94aW1hdGUKKy8vLyAgICByZWNpcHJvY2FsIG9mIHRoZSB2YWx1ZSBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgdGhlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcmNwX3NzKF9fbTEyOCBfX2EpCit7CisgIF9fbTEyOCBfX2MgPSBfX2J1aWx0aW5faWEzMl9yY3BzcygoX192NHNmKV9fYSk7CisgIHJldHVybiAoX19tMTI4KSB7IF9fY1swXSwgX19hWzFdLCBfX2FbMl0sIF9fYVszXSB9OworfQorCisvLy8gXGJyaWVmIENhbGN1bGF0ZXMgdGhlIGFwcHJveGltYXRlIHJlY2lwcm9jYWxzIG9mIHRoZSB2YWx1ZXMgc3RvcmVkIGluIGEKKy8vLyAgICAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUkNQUFMgLyBSQ1BQUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGFwcHJveGltYXRlCisvLy8gICAgcmVjaXByb2NhbHMgb2YgdGhlIHZhbHVlcyBpbiB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9yY3BfcHMoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JjcHBzKChfX3Y0c2YpX19hKTsKK30KKworLy8vIFxicmllZiBDYWxjdWxhdGVzIHRoZSBhcHByb3hpbWF0ZSByZWNpcHJvY2FsIG9mIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgdmFsdWUKKy8vLyAgICBzdG9yZWQgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlJTUVJUU1MgLyBSU1FSVFNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlCisvLy8gICAgdXNlZCBpbiB0aGUgY2FsY3VsYXRpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBhcHByb3hpbWF0ZQorLy8vICAgIHJlY2lwcm9jYWwgb2YgdGhlIHNxdWFyZSByb290IG9mIHRoZSB2YWx1ZSBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgdGhlCisvLy8gICAgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9yc3FydF9zcyhfX20xMjggX19hKQoreworICBfX20xMjggX19jID0gX19idWlsdGluX2lhMzJfcnNxcnRzcygoX192NHNmKV9fYSk7CisgIHJldHVybiAoX19tMTI4KSB7IF9fY1swXSwgX19hWzFdLCBfX2FbMl0sIF9fYVszXSB9OworfQorCisvLy8gXGJyaWVmIENhbGN1bGF0ZXMgdGhlIGFwcHJveGltYXRlIHJlY2lwcm9jYWxzIG9mIHRoZSBzcXVhcmUgcm9vdHMgb2YgdGhlCisvLy8gICAgdmFsdWVzIHN0b3JlZCBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZSU1FSVFBTIC8gUlNRUlRQUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGFwcHJveGltYXRlCisvLy8gICAgcmVjaXByb2NhbHMgb2YgdGhlIHNxdWFyZSByb290cyBvZiB0aGUgdmFsdWVzIGluIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3JzcXJ0X3BzKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yc3FydHBzKChfX3Y0c2YpX19hKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0d28gMzItYml0IGZsb2F0IHZhbHVlcyBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYm90aAorLy8vICAgIG9wZXJhbmRzIGFuZCByZXR1cm5zIHRoZSBsZXNzZXIgdmFsdWUgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIHRoZQorLy8vICAgIHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTUlOU1MgLyBNSU5TUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuIFRoZSBsb3dlcgorLy8vICAgIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSB3aG9zZSBsb3dlciAzMiBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgbWluaW11bSB2YWx1ZSBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuIFRoZSB1cHBlciA5NiBiaXRzIGFyZSBjb3BpZWQgZnJvbQorLy8vICAgIHRoZSB1cHBlciA5NiBiaXRzIG9mIHRoZSBmaXJzdCBzb3VyY2Ugb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9taW5fc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21pbnNzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XSBhbmQgcmV0dXJucyB0aGUKKy8vLyAgICBsZXNzZXIgb2YgZWFjaCBwYWlyIG9mIHZhbHVlcy4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTUlOUFMgLyBNSU5QUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgbWluaW11bSB2YWx1ZXMKKy8vLyAgICBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9taW5wcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHR3byAzMi1iaXQgZmxvYXQgdmFsdWVzIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMgYW5kIHJldHVybnMgdGhlIGdyZWF0ZXIgdmFsdWUgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mCisvLy8gICAgYSB2ZWN0b3IgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1BWFNTIC8gTUFYU1MgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuIFRoZSBsb3dlcgorLy8vICAgIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gd2hvc2UgbG93ZXIgMzIgYml0cyBjb250YWluIHRoZQorLy8vICAgIG1heGltdW0gdmFsdWUgYmV0d2VlbiBib3RoIG9wZXJhbmRzLiBUaGUgdXBwZXIgOTYgYml0cyBhcmUgY29waWVkIGZyb20KKy8vLyAgICB0aGUgdXBwZXIgOTYgYml0cyBvZiB0aGUgZmlyc3Qgc291cmNlIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWF4X3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9tYXhzcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHR3byAxMjgtYml0IHZlY3RvcnMgb2YgWzQgeCBmbG9hdF0gYW5kIHJldHVybnMgdGhlIGdyZWF0ZXIKKy8vLyAgICBvZiBlYWNoIHBhaXIgb2YgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNQVhQUyAvIE1BWFBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBtYXhpbXVtIHZhbHVlcworLy8vICAgIGJldHdlZW4gYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXhfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21heHBzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZBTkRQUyAvIEFORFBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3IgY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgQU5EIG9mIHRoZQorLy8vICAgIHZhbHVlcyBiZXR3ZWVuIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYW5kX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KSgoX192NHN1KV9fYSAmIChfX3Y0c3UpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhIGJpdHdpc2UgQU5EIG9mIHR3byAxMjgtYml0IHZlY3RvcnMgb2YgWzQgeCBmbG9hdF0sIHVzaW5nCisvLy8gICAgdGhlIG9uZSdzIGNvbXBsZW1lbnQgb2YgdGhlIHZhbHVlcyBjb250YWluZWQgaW4gdGhlIGZpcnN0IHNvdXJjZQorLy8vICAgIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkFORE5QUyAvIEFORE5QUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBmaXJzdCBzb3VyY2Ugb3BlcmFuZC4gVGhlCisvLy8gICAgb25lJ3MgY29tcGxlbWVudCBvZiB0aGlzIHZhbHVlIGlzIHVzZWQgaW4gdGhlIGJpdHdpc2UgQU5ELgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHNlY29uZCBzb3VyY2Ugb3BlcmFuZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgQU5EIG9mIHRoZQorLy8vICAgIG9uZSdzIGNvbXBsZW1lbnQgb2YgdGhlIGZpcnN0IG9wZXJhbmQgYW5kIHRoZSB2YWx1ZXMgaW4gdGhlIHNlY29uZAorLy8vICAgIG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYW5kbm90X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KSh+KF9fdjRzdSlfX2EgJiAoX192NHN1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIE9SIG9mIHR3byAxMjgtYml0IHZlY3RvcnMgb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk9SUFMgLyBPUlBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGJpdHdpc2UgT1Igb2YgdGhlCisvLy8gICAgdmFsdWVzIGJldHdlZW4gYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9vcl9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOCkoKF9fdjRzdSlfX2EgfCAoX192NHN1KV9fYik7Cit9CisKKy8vLyBcYnJpZWYgUGVyZm9ybXMgYSBiaXR3aXNlIGV4Y2x1c2l2ZSBPUiBvZiB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mCisvLy8gICAgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlhPUlBTIC8gWE9SUFMgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgYml0d2lzZSBleGNsdXNpdmUgT1IKKy8vLyAgICBvZiB0aGUgdmFsdWVzIGJldHdlZW4gYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV94b3JfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpKChfX3Y0c3UpX19hIF4gKF9fdjRzdSlfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHR3byAzMi1iaXQgZmxvYXQgdmFsdWVzIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMgZm9yIGVxdWFsaXR5IGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaW4gdGhlCisvLy8gICAgbG93LW9yZGVyIGJpdHMgb2YgYSB2ZWN0b3IgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUEVRU1MgLyBDTVBFUVNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cworLy8vICAgIGluIHRoZSBsb3ctb3JkZXIgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBlcXNzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyAzMi1iaXQgZmxvYXQgdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XSBmb3IgZXF1YWxpdHkuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUEVRUFMgLyBDTVBFUVBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGVxX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcGVxcHMoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0d28gMzItYml0IGZsb2F0IHZhbHVlcyBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYm90aAorLy8vICAgIG9wZXJhbmRzIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IG9wZXJhbmQgaXMgbGVzcyB0aGFuIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlCisvLy8gICAgY29tcGFyaXNvbiBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYSB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUExUU1MgLyBDTVBMVFNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cworLy8vICAgIGluIHRoZSBsb3ctb3JkZXIgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBsdHNzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyAzMi1iaXQgZmxvYXQgdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XSB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3QKKy8vLyAgICBvcGVyYW5kIGFyZSBsZXNzIHRoYW4gdGhvc2UgaW4gdGhlIHNlY29uZCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBMVFBTIC8gQ01QTFRQUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBsdHBzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBvcGVyYW5kIGlzIGxlc3MgdGhhbiBvcgorLy8vICAgIGVxdWFsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBhbmQgcmV0dXJucyB0aGUKKy8vLyAgICByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGEgdmVjdG9yIG9mCisvLy8gICAgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUExFU1MgLyBDTVBMRVNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cworLy8vICAgIGluIHRoZSBsb3ctb3JkZXIgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsZV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBsZXNzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyAzMi1iaXQgZmxvYXQgdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XSB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3QKKy8vLyAgICBvcGVyYW5kIGFyZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIHNlY29uZCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBMRVBTIC8gQ01QTEVQUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsZV9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBsZXBzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBvcGVyYW5kIGlzIGdyZWF0ZXIgdGhhbgorLy8vICAgIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9mCisvLy8gICAgdGhlIGNvbXBhcmlzb24gaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGEgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBMVFNTIC8gQ01QTFRTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuIFRoZSBsb3dlcgorLy8vICAgIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMKKy8vLyAgICBpbiB0aGUgbG93LW9yZGVyIGJpdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3Rfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX19idWlsdGluX2lhMzJfY21wbHRzcygoX192NHNmKV9fYiwgKF9fdjRzZilfX2EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCAxLCAyLCAzKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdCBmbG9hdCB2YWx1ZXMgb2YgdGhlCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBmaXJzdAorLy8vICAgIG9wZXJhbmQgYXJlIGdyZWF0ZXIgdGhhbiB0aG9zZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUExUUFMgLyBDTVBMVFBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGd0X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcGx0cHMoKF9fdjRzZilfX2IsIChfX3Y0c2YpX19hKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0d28gMzItYml0IGZsb2F0IHZhbHVlcyBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYm90aAorLy8vICAgIG9wZXJhbmRzIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IG9wZXJhbmQgaXMgZ3JlYXRlciB0aGFuCisvLy8gICAgb3IgZXF1YWwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGFuZCByZXR1cm5zCisvLy8gICAgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYSB2ZWN0b3Igb2YKKy8vLyAgICBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QTEVTUyAvIENNUExFU1MgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuIFRoZSBsb3dlcgorLy8vICAgIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzCisvLy8gICAgaW4gdGhlIGxvdy1vcmRlciBiaXRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGdlX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2YpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9fYnVpbHRpbl9pYTMyX2NtcGxlc3MoKF9fdjRzZilfX2IsIChfX3Y0c2YpX19hKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgMSwgMiwgMyk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyAzMi1iaXQgZmxvYXQgdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XSB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3QKKy8vLyAgICBvcGVyYW5kIGFyZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIHNlY29uZCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBMRVBTIC8gQ01QTEVQUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBnZV9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBsZXBzKChfX3Y0c2YpX19iLCAoX192NHNmKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyBmb3IgaW5lcXVhbGl0eSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGluIHRoZQorLy8vICAgIGxvdy1vcmRlciBiaXRzIG9mIGEgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBORVFTUyAvIENNUE5FUVNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cworLy8vICAgIGluIHRoZSBsb3ctb3JkZXIgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZXFfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wbmVxc3MoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdCBmbG9hdCB2YWx1ZXMgb2YgdGhlCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdIGZvciBpbmVxdWFsaXR5LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBORVFQUyAvIENNUE5FUVBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5lcV9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBuZXFwcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHR3byAzMi1iaXQgZmxvYXQgdmFsdWVzIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMgdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpbiB0aGUgZmlyc3Qgb3BlcmFuZCBpcyBub3QgbGVzcyB0aGFuCisvLy8gICAgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YKKy8vLyAgICB0aGUgY29tcGFyaXNvbiBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYSB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUE5MVFNTIC8gQ01QTkxUU1MgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuIFRoZSBsb3dlcgorLy8vICAgIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzCisvLy8gICAgaW4gdGhlIGxvdy1vcmRlciBiaXRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5sdF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBubHRzcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgMzItYml0IGZsb2F0IHZhbHVlcyBvZiB0aGUKKy8vLyAgICAxMjgtYml0IHZlY3RvcnMgb2YgWzQgeCBmbG9hdF0gdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZXMgaW4gdGhlIGZpcnN0CisvLy8gICAgb3BlcmFuZCBhcmUgbm90IGxlc3MgdGhhbiB0aG9zZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUE5MVFBTIC8gQ01QTkxUUFMgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmx0X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcG5sdHBzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBvcGVyYW5kIGlzIG5vdCBsZXNzIHRoYW4KKy8vLyAgICBvciBlcXVhbCB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgYW5kIHJldHVybnMKKy8vLyAgICB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBhIHZlY3RvciBvZgorLy8vICAgIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBOTEVTUyAvIENNUE5MRVNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cworLy8vICAgIGluIHRoZSBsb3ctb3JkZXIgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBubGVfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wbmxlc3MoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdCBmbG9hdCB2YWx1ZXMgb2YgdGhlCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBmaXJzdAorLy8vICAgIG9wZXJhbmQgYXJlIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIHNlY29uZCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBOTEVQUyAvIENNUE5MRVBTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5sZV9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBubGVwcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHR3byAzMi1iaXQgZmxvYXQgdmFsdWVzIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMgdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBpbiB0aGUgZmlyc3Qgb3BlcmFuZCBpcyBub3QgZ3JlYXRlcgorLy8vICAgIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIHNlY29uZCBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZQorLy8vICAgIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYSB2ZWN0b3Igb2YKKy8vLyAgICBbNCB4IGZsb2F0XS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QTkxUU1MgLyBDTVBOTFRTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIG9uZSBvZiB0aGUgb3BlcmFuZHMuIFRoZSBsb3dlcgorLy8vICAgIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZSB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMKKy8vLyAgICBpbiB0aGUgbG93LW9yZGVyIGJpdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmd0X3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2YpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9fYnVpbHRpbl9pYTMyX2NtcG5sdHNzKChfX3Y0c2YpX19iLCAoX192NHNmKV9fYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDEsIDIsIDMpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgMzItYml0IGZsb2F0IHZhbHVlcyBvZiB0aGUKKy8vLyAgICAxMjgtYml0IHZlY3RvcnMgb2YgWzQgeCBmbG9hdF0gdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZXMgaW4gdGhlIGZpcnN0CisvLy8gICAgb3BlcmFuZCBhcmUgbm90IGdyZWF0ZXIgdGhhbiB0aG9zZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUE5MVFBTIC8gQ01QTkxUUFMgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmd0X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcG5sdHBzKChfX3Y0c2YpX19iLCAoX192NHNmKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBvcGVyYW5kIGlzIG5vdCBncmVhdGVyCisvLy8gICAgdGhhbiBvciBlcXVhbCB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgYW5kCisvLy8gICAgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBhIHZlY3RvcgorLy8vICAgIG9mIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBOTEVTUyAvIENNUE5MRVNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cworLy8vICAgIGluIHRoZSBsb3ctb3JkZXIgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZ2Vfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX19idWlsdGluX2lhMzJfY21wbmxlc3MoKF9fdjRzZilfX2IsIChfX3Y0c2YpX19hKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgMSwgMiwgMyk7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyAzMi1iaXQgZmxvYXQgdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XSB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3QKKy8vLyAgICBvcGVyYW5kIGFyZSBub3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRob3NlIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QTkxFUFMgLyBDTVBOTEVQUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZ2VfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wbmxlcHMoKF9fdjRzZilfX2IsIChfX3Y0c2YpX19hKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0d28gMzItYml0IGZsb2F0IHZhbHVlcyBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYm90aAorLy8vICAgIG9wZXJhbmRzIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IG9wZXJhbmQgaXMgb3JkZXJlZCB3aXRoCisvLy8gICAgcmVzcGVjdCB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgc2Vjb25kIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlCisvLy8gICAgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBhIHZlY3RvciBvZgorLy8vICAgIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDTVBPUkRTUyAvIENNUE9SRFNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cworLy8vICAgIGluIHRoZSBsb3ctb3JkZXIgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBvcmRfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wb3Jkc3MoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIDMyLWJpdCBmbG9hdCB2YWx1ZXMgb2YgdGhlCisvLy8gICAgMTI4LWJpdCB2ZWN0b3JzIG9mIFs0IHggZmxvYXRdIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBmaXJzdAorLy8vICAgIG9wZXJhbmQgYXJlIG9yZGVyZWQgd2l0aCByZXNwZWN0IHRvIHRob3NlIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QT1JEUFMgLyBDTVBPUkRQUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBvcmRfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wb3JkcHMoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyB0d28gMzItYml0IGZsb2F0IHZhbHVlcyBpbiB0aGUgbG93LW9yZGVyIGJpdHMgb2YgYm90aAorLy8vICAgIG9wZXJhbmRzIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IG9wZXJhbmQgaXMgdW5vcmRlcmVkCisvLy8gICAgd2l0aCByZXNwZWN0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBzZWNvbmQgb3BlcmFuZCBhbmQKKy8vLyAgICByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGEgdmVjdG9yCisvLy8gICAgb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNNUFVOT1JEU1MgLyBDTVBVTk9SRFNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBvcGVyYW5kcy4gVGhlIGxvd2VyCisvLy8gICAgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyBvbmUgb2YgdGhlIG9wZXJhbmRzLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cworLy8vICAgIGluIHRoZSBsb3ctb3JkZXIgYml0cy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXB1bm9yZF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXB1bm9yZHNzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyAzMi1iaXQgZmxvYXQgdmFsdWVzIG9mIHRoZQorLy8vICAgIDEyOC1iaXQgdmVjdG9ycyBvZiBbNCB4IGZsb2F0XSB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgZmlyc3QKKy8vLyAgICBvcGVyYW5kIGFyZSB1bm9yZGVyZWQgd2l0aCByZXNwZWN0IHRvIHRob3NlIGluIHRoZSBzZWNvbmQgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ01QVU5PUkRQUyAvIENNUFVOT1JEUFMgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wdW5vcmRfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wdW5vcmRwcygoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIENvbXBhcmVzIHR3byAzMi1iaXQgZmxvYXQgdmFsdWVzIGluIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoCisvLy8gICAgb3BlcmFuZHMgZm9yIGVxdWFsaXR5IGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNPTUlTUyAvIENPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWllcV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taWVxKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIGZpcnN0IG9wZXJhbmQgaXMgbGVzcyB0aGFuIHRoZSBzZWNvbmQKKy8vLyAgICBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNPTUlTUyAvIENPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWlsdF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taWx0KChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIGZpcnN0IG9wZXJhbmQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorLy8vICAgIHNlY29uZCBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNPTUlTUyAvIENPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWlsZV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taWxlKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIGZpcnN0IG9wZXJhbmQgaXMgZ3JlYXRlciB0aGFuIHRoZSBzZWNvbmQKKy8vLyAgICBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNPTUlTUyAvIENPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWlndF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taWd0KChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIGZpcnN0IG9wZXJhbmQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvCisvLy8gICAgdGhlIHNlY29uZCBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNPTUlTUyAvIENPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWlnZV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taWdlKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgdHdvIDMyLWJpdCBmbG9hdCB2YWx1ZXMgaW4gdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGgKKy8vLyAgICBvcGVyYW5kcyB0byBkZXRlcm1pbmUgaWYgdGhlIGZpcnN0IG9wZXJhbmQgaXMgbm90IGVxdWFsIHRvIHRoZSBzZWNvbmQKKy8vLyAgICBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNPTUlTUyAvIENPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWluZXFfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWluZXEoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhbiB1bm9yZGVyZWQgY29tcGFyaXNvbiBvZiB0d28gMzItYml0IGZsb2F0IHZhbHVlcyB1c2luZworLy8vICAgIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoIG9wZXJhbmRzIHRvIGRldGVybWluZSBlcXVhbGl0eSBhbmQgcmV0dXJucworLy8vICAgIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlVDT01JU1MgLyBVQ09NSVNTIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlCisvLy8gICAgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHJldHVybnMgQW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdWNvbWllcV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWllcSgoX192NHNmKV9fYSwgKF9fdjRzZilfX2IpOworfQorCisvLy8gXGJyaWVmIFBlcmZvcm1zIGFuIHVub3JkZXJlZCBjb21wYXJpc29uIG9mIHR3byAzMi1iaXQgZmxvYXQgdmFsdWVzIHVzaW5nCisvLy8gICAgdGhlIGxvdy1vcmRlciBiaXRzIG9mIGJvdGggb3BlcmFuZHMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaXJzdCBvcGVyYW5kIGlzCisvLy8gICAgbGVzcyB0aGFuIHRoZSBzZWNvbmQgb3BlcmFuZCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZVQ09NSVNTIC8gVUNPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Vjb21pbHRfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pbHQoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhbiB1bm9yZGVyZWQgY29tcGFyaXNvbiBvZiB0d28gMzItYml0IGZsb2F0IHZhbHVlcyB1c2luZworLy8vICAgIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoIG9wZXJhbmRzIHRvIGRldGVybWluZSBpZiB0aGUgZmlyc3Qgb3BlcmFuZAorLy8vICAgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc2Vjb25kIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZgorLy8vICAgIHRoZSBjb21wYXJpc29uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZVQ09NSVNTIC8gVUNPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Vjb21pbGVfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pbGUoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhbiB1bm9yZGVyZWQgY29tcGFyaXNvbiBvZiB0d28gMzItYml0IGZsb2F0IHZhbHVlcyB1c2luZworLy8vICAgIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoIG9wZXJhbmRzIHRvIGRldGVybWluZSBpZiB0aGUgZmlyc3Qgb3BlcmFuZAorLy8vICAgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc2Vjb25kIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUKKy8vLyAgICBjb21wYXJpc29uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZVQ09NSVNTIC8gVUNPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Vjb21pZ3Rfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pZ3QoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhbiB1bm9yZGVyZWQgY29tcGFyaXNvbiBvZiB0d28gMzItYml0IGZsb2F0IHZhbHVlcyB1c2luZworLy8vICAgIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoIG9wZXJhbmRzIHRvIGRldGVybWluZSBpZiB0aGUgZmlyc3Qgb3BlcmFuZCBpcworLy8vICAgIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc2Vjb25kIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZgorLy8vICAgIHRoZSBjb21wYXJpc29uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZVQ09NSVNTIC8gVUNPTUlTUyBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxyZXR1cm5zIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Vjb21pZ2Vfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pZ2UoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBQZXJmb3JtcyBhbiB1bm9yZGVyZWQgY29tcGFyaXNvbiBvZiB0d28gMzItYml0IGZsb2F0IHZhbHVlcyB1c2luZworLy8vICAgIHRoZSBsb3ctb3JkZXIgYml0cyBvZiBib3RoIG9wZXJhbmRzIHRvIGRldGVybWluZSBpbmVxdWFsaXR5IGFuZCByZXR1cm5zCisvLy8gICAgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWVUNPTUlTUyAvIFVDT01JU1MgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlCisvLy8gICAgdXNlZCBpbiB0aGUgY29tcGFyaXNvbi4KKy8vLyBccmV0dXJucyBBbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0cy4KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91Y29taW5lcV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWluZXEoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyBhIGZsb2F0IHZhbHVlIGNvbnRhaW5lZCBpbiB0aGUgbG93ZXIgMzIgYml0cyBvZiBhIHZlY3RvciBvZgorLy8vICAgIFs0IHggZmxvYXRdIGludG8gYSAzMi1iaXQgaW50ZWdlci4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZUU1MyU0kgLyBDVlRTUzJTSSBpbnN0cnVjdGlvbnMuCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGNvbnZlcnNpb24uCisvLy8gXHJldHVybnMgQSAzMi1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBjb252ZXJ0ZWQgdmFsdWUuCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c3Nfc2kzMihfX20xMjggX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0c3Myc2koKF9fdjRzZilfX2EpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgZmxvYXQgdmFsdWUgY29udGFpbmVkIGluIHRoZSBsb3dlciAzMiBiaXRzIG9mIGEgdmVjdG9yIG9mCisvLy8gICAgWzQgeCBmbG9hdF0gaW50byBhIDMyLWJpdCBpbnRlZ2VyLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlRTUzJTSSAvIENWVFNTMlNJIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlCisvLy8gICAgdXNlZCBpbiB0aGUgY29udmVyc2lvbi4KKy8vLyBccmV0dXJucyBBIDMyLWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZCB2YWx1ZS4KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRfc3Myc2koX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9tbV9jdnRzc19zaTMyKF9fYSk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCisKKy8vLyBcYnJpZWYgQ29udmVydHMgYSBmbG9hdCB2YWx1ZSBjb250YWluZWQgaW4gdGhlIGxvd2VyIDMyIGJpdHMgb2YgYSB2ZWN0b3Igb2YKKy8vLyAgICBbNCB4IGZsb2F0XSBpbnRvIGEgNjQtYml0IGludGVnZXIuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFNTMlNJIC8gQ1ZUU1MyU0kgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb252ZXJzaW9uLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlLgorc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNzX3NpNjQoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHNzMnNpNjQoKF9fdjRzZilfX2EpOworfQorCisjZW5kaWYKKworLy8vIFxicmllZiBDb252ZXJ0cyB0d28gbG93LW9yZGVyIGZsb2F0IHZhbHVlcyBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mCisvLy8gICAgWzQgeCBmbG9hdF0gaW50byBhIDY0LWJpdCB2ZWN0b3Igb2YgWzIgeCBpMzJdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIENWVFBTMlBJIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBzX3BpMzIoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9jdnRwczJwaSgoX192NHNmKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgdHdvIGxvdy1vcmRlciBmbG9hdCB2YWx1ZXMgaW4gYSAxMjgtYml0IHZlY3RvciBvZgorLy8vICAgIFs0IHggZmxvYXRdIGludG8gYSA2NC1iaXQgdmVjdG9yIG9mIFsyIHggaTMyXS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBDVlRQUzJQSSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRfcHMycGkoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9tbV9jdnRwc19waTMyKF9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgYSBmbG9hdCB2YWx1ZSBjb250YWluZWQgaW4gdGhlIGxvd2VyIDMyIGJpdHMgb2YgYSB2ZWN0b3Igb2YKKy8vLyAgICBbNCB4IGZsb2F0XSBpbnRvIGEgMzItYml0IGludGVnZXIsIHRydW5jYXRpbmcgdGhlIHJlc3VsdCB3aGVuIGl0IGlzCisvLy8gICAgaW5leGFjdC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZUVFNTMlNJIC8gQ1ZUVFNTMlNJIGluc3RydWN0aW9ucy4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIgMzIgYml0cyBvZiB0aGlzIG9wZXJhbmQgYXJlCisvLy8gICAgdXNlZCBpbiB0aGUgY29udmVyc2lvbi4KKy8vLyBccmV0dXJucyBBIDMyLWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZCB2YWx1ZS4KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0c3Nfc2kzMihfX20xMjggX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0dHNzMnNpKChfX3Y0c2YpX19hKTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyBhIGZsb2F0IHZhbHVlIGNvbnRhaW5lZCBpbiB0aGUgbG93ZXIgMzIgYml0cyBvZiBhIHZlY3RvciBvZgorLy8vICAgIFs0IHggZmxvYXRdIGludG8gYSAzMi1iaXQgaW50ZWdlciwgdHJ1bmNhdGluZyB0aGUgcmVzdWx0IHdoZW4gaXQgaXMKKy8vLyAgICBpbmV4YWN0LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlRUU1MyU0kgLyBDVlRUU1MyU0kgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb252ZXJzaW9uLgorLy8vIFxyZXR1cm5zIEEgMzItYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRfc3Myc2koX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9tbV9jdnR0c3Nfc2kzMihfX2EpOworfQorCisjaWZkZWYgX194ODZfNjRfXworLy8vIFxicmllZiBDb252ZXJ0cyBhIGZsb2F0IHZhbHVlIGNvbnRhaW5lZCBpbiB0aGUgbG93ZXIgMzIgYml0cyBvZiBhIHZlY3RvciBvZgorLy8vICAgIFs0IHggZmxvYXRdIGludG8gYSA2NC1iaXQgaW50ZWdlciwgdHJ1bmNhdGluZyB0aGUgcmVzdWx0IHdoZW4gaXQgaXMKKy8vLyAgICBpbmV4YWN0LgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlRUU1MyU0kgLyBDVlRUU1MyU0kgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciAzMiBiaXRzIG9mIHRoaXMgb3BlcmFuZCBhcmUKKy8vLyAgICB1c2VkIGluIHRoZSBjb252ZXJzaW9uLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlLgorc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRzc19zaTY0KF9fbTEyOCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnR0c3Myc2k2NCgoX192NHNmKV9fYSk7Cit9CisjZW5kaWYKKworLy8vIFxicmllZiBDb252ZXJ0cyB0d28gbG93LW9yZGVyIGZsb2F0IHZhbHVlcyBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mCisvLy8gICAgWzQgeCBmbG9hdF0gaW50byBhIDY0LWJpdCB2ZWN0b3Igb2YgWzIgeCBpMzJdLCB0cnVuY2F0aW5nIHRoZSByZXN1bHQKKy8vLyAgICB3aGVuIGl0IGlzIGluZXhhY3QuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQ1ZUVFBTMlBJIC8gVlRUUFMyUEkgaW5zdHJ1Y3Rpb25zLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRwc19waTMyKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfY3Z0dHBzMnBpKChfX3Y0c2YpX19hKTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyB0d28gbG93LW9yZGVyIGZsb2F0IHZhbHVlcyBpbiBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHgKKy8vLyAgICBmbG9hdF0gaW50byBhIDY0LWJpdCB2ZWN0b3Igb2YgWzIgeCBpMzJdLCB0cnVuY2F0aW5nIHRoZSByZXN1bHQgd2hlbiBpdAorLy8vICAgIGlzIGluZXhhY3QuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQ1ZUVFBTMlBJIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29udmVydGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRfcHMycGkoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9tbV9jdnR0cHNfcGkzMihfX2EpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgMzItYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlIGludG8gYSBmbG9hdGluZyBwb2ludCB2YWx1ZQorLy8vICAgIGFuZCB3cml0ZXMgaXQgdG8gdGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhlIGRlc3RpbmF0aW9uLiBUaGUgcmVtYWluaW5nCisvLy8gICAgaGlnaGVyIG9yZGVyIGVsZW1lbnRzIG9mIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3IgYXJlIGNvcGllZCBmcm9tIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgaW4gdGhlIGZpcnN0IG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVkNWVFNJMlNTIC8gQ1ZUU0kyU1MgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAzMi1iaXQgc2lnbmVkIGludGVnZXIgb3BlcmFuZCBjb250YWluaW5nIHRoZSB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSB3aG9zZSBsb3dlciAzMiBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgY29udmVydGVkIHZhbHVlIG9mIHRoZSBzZWNvbmQgb3BlcmFuZC4gVGhlIHVwcGVyIDk2IGJpdHMgYXJlIGNvcGllZCBmcm9tCisvLy8gICAgdGhlIHVwcGVyIDk2IGJpdHMgb2YgdGhlIGZpcnN0IG9wZXJhbmQuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2kzMl9zcyhfX20xMjggX19hLCBpbnQgX19iKQoreworICBfX2FbMF0gPSBfX2I7CisgIHJldHVybiBfX2E7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgdmFsdWUgaW50byBhIGZsb2F0aW5nIHBvaW50IHZhbHVlCisvLy8gICAgYW5kIHdyaXRlcyBpdCB0byB0aGUgbG93ZXIgMzIgYml0cyBvZiB0aGUgZGVzdGluYXRpb24uIFRoZSByZW1haW5pbmcKKy8vLyAgICBoaWdoZXIgb3JkZXIgZWxlbWVudHMgb2YgdGhlIGRlc3RpbmF0aW9uIGFyZSBjb3BpZWQgZnJvbSB0aGUKKy8vLyAgICBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGluIHRoZSBmaXJzdCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZDVlRTSTJTUyAvIENWVFNJMlNTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMzItYml0IHNpZ25lZCBpbnRlZ2VyIG9wZXJhbmQgY29udGFpbmluZyB0aGUgdmFsdWUgdG8gYmUgY29udmVydGVkLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gd2hvc2UgbG93ZXIgMzIgYml0cyBjb250YWluIHRoZQorLy8vICAgIGNvbnZlcnRlZCB2YWx1ZSBvZiB0aGUgc2Vjb25kIG9wZXJhbmQuIFRoZSB1cHBlciA5NiBiaXRzIGFyZSBjb3BpZWQgZnJvbQorLy8vICAgIHRoZSB1cHBlciA5NiBiaXRzIG9mIHRoZSBmaXJzdCBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dF9zaTJzcyhfX20xMjggX19hLCBpbnQgX19iKQoreworICByZXR1cm4gX21tX2N2dHNpMzJfc3MoX19hLCBfX2IpOworfQorCisjaWZkZWYgX194ODZfNjRfXworCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgNjQtYml0IHNpZ25lZCBpbnRlZ2VyIHZhbHVlIGludG8gYSBmbG9hdGluZyBwb2ludCB2YWx1ZQorLy8vICAgIGFuZCB3cml0ZXMgaXQgdG8gdGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhlIGRlc3RpbmF0aW9uLiBUaGUgcmVtYWluaW5nCisvLy8gICAgaGlnaGVyIG9yZGVyIGVsZW1lbnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBhcmUgY29waWVkIGZyb20gdGhlCisvLy8gICAgY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB0aGUgZmlyc3Qgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWQ1ZUU0kyU1MgLyBDVlRTSTJTUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDY0LWJpdCBzaWduZWQgaW50ZWdlciBvcGVyYW5kIGNvbnRhaW5pbmcgdGhlIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIHdob3NlIGxvd2VyIDMyIGJpdHMgY29udGFpbiB0aGUKKy8vLyAgICBjb252ZXJ0ZWQgdmFsdWUgb2YgdGhlIHNlY29uZCBvcGVyYW5kLiBUaGUgdXBwZXIgOTYgYml0cyBhcmUgY29waWVkIGZyb20KKy8vLyAgICB0aGUgdXBwZXIgOTYgYml0cyBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzaTY0X3NzKF9fbTEyOCBfX2EsIGxvbmcgbG9uZyBfX2IpCit7CisgIF9fYVswXSA9IF9fYjsKKyAgcmV0dXJuIF9fYTsKK30KKworI2VuZGlmCisKKy8vLyBcYnJpZWYgQ29udmVydHMgdHdvIGVsZW1lbnRzIG9mIGEgNjQtYml0IHZlY3RvciBvZiBbMiB4IGkzMl0gaW50byB0d28KKy8vLyAgICBmbG9hdGluZyBwb2ludCB2YWx1ZXMgYW5kIHdyaXRlcyB0aGVtIHRvIHRoZSBsb3dlciA2NC1iaXRzIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLiBUaGUgcmVtYWluaW5nIGhpZ2hlciBvcmRlciBlbGVtZW50cyBvZiB0aGUgZGVzdGluYXRpb24gYXJlCisvLy8gICAgY29waWVkIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgaW4gdGhlIGZpcnN0IG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQ1ZUUEkyUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFsyIHggaTMyXS4gVGhlIGVsZW1lbnRzIGluIHRoaXMgdmVjdG9yIGFyZSBjb252ZXJ0ZWQKKy8vLyAgICBhbmQgd3JpdHRlbiB0byB0aGUgY29ycmVzcG9uZGluZyBsb3ctb3JkZXIgZWxlbWVudHMgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gd2hvc2UgbG93ZXIgNjQgYml0cyBjb250YWluIHRoZQorLy8vICAgIGNvbnZlcnRlZCB2YWx1ZSBvZiB0aGUgc2Vjb25kIG9wZXJhbmQuIFRoZSB1cHBlciA2NCBiaXRzIGFyZSBjb3BpZWQgZnJvbQorLy8vICAgIHRoZSB1cHBlciA2NCBiaXRzIG9mIHRoZSBmaXJzdCBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBpMzJfcHMoX19tMTI4IF9fYSwgX19tNjQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0cGkycHMoKF9fdjRzZilfX2EsIChfX3Yyc2kpX19iKTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyB0d28gZWxlbWVudHMgb2YgYSA2NC1iaXQgdmVjdG9yIG9mIFsyIHggaTMyXSBpbnRvIHR3bworLy8vICAgIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBhbmQgd3JpdGVzIHRoZW0gdG8gdGhlIGxvd2VyIDY0LWJpdHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24uIFRoZSByZW1haW5pbmcgaGlnaGVyIG9yZGVyIGVsZW1lbnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBhcmUKKy8vLyAgICBjb3BpZWQgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB0aGUgZmlyc3Qgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBDVlRQSTJQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzIgeCBpMzJdLiBUaGUgZWxlbWVudHMgaW4gdGhpcyB2ZWN0b3IgYXJlIGNvbnZlcnRlZAorLy8vICAgIGFuZCB3cml0dGVuIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxvdy1vcmRlciBlbGVtZW50cyBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSB3aG9zZSBsb3dlciA2NCBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgY29udmVydGVkIHZhbHVlIGZyb20gdGhlIHNlY29uZCBvcGVyYW5kLiBUaGUgdXBwZXIgNjQgYml0cyBhcmUgY29waWVkCisvLy8gICAgZnJvbSB0aGUgdXBwZXIgNjQgYml0cyBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRfcGkycHMoX19tMTI4IF9fYSwgX19tNjQgX19iKQoreworICByZXR1cm4gX21tX2N2dHBpMzJfcHMoX19hLCBfX2IpOworfQorCisvLy8gXGJyaWVmIEV4dHJhY3RzIGEgZmxvYXQgdmFsdWUgY29udGFpbmVkIGluIHRoZSBsb3dlciAzMiBiaXRzIG9mIGEgdmVjdG9yIG9mCisvLy8gICAgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVlNTIC8gTU9WU1MgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhpcyBvcGVyYW5kIGFyZQorLy8vICAgIHVzZWQgaW4gdGhlIGV4dHJhY3Rpb24uCisvLy8gXHJldHVybnMgQSAzMi1iaXQgZmxvYXQgY29udGFpbmluZyB0aGUgZXh0cmFjdGVkIHZhbHVlLgorc3RhdGljIF9faW5saW5lX18gZmxvYXQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c3NfZjMyKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiBfX2FbMF07Cit9CisKKy8vLyBcYnJpZWYgTG9hZHMgdHdvIHBhY2tlZCBmbG9hdCB2YWx1ZXMgZnJvbSB0aGUgYWRkcmVzcyBfX3AgaW50byB0aGUKKy8vLyAgICAgaGlnaC1vcmRlciBiaXRzIG9mIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3ctb3JkZXIgYml0cworLy8vICAgICBhcmUgY29waWVkIGZyb20gdGhlIGxvdy1vcmRlciBiaXRzIG9mIHRoZSBmaXJzdCBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZIUEQgLyBNT1ZIUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gQml0cyBbNjM6MF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNjM6MF0KKy8vLyAgICBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byB0d28gcGFja2VkIGZsb2F0IHZhbHVlcy4gQml0cyBbNjM6MF0gYXJlIHdyaXR0ZW4gdG8gYml0cworLy8vICAgIFsxMjc6NjRdIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIG1vdmVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkaF9waShfX20xMjggX19hLCBjb25zdCBfX202NCAqX19wKQoreworICB0eXBlZGVmIGZsb2F0IF9fbW1fbG9hZGhfcGlfdjJmMzIgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDgpKSk7CisgIHN0cnVjdCBfX21tX2xvYWRoX3BpX3N0cnVjdCB7CisgICAgX19tbV9sb2FkaF9waV92MmYzMiBfX3U7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICBfX21tX2xvYWRoX3BpX3YyZjMyIF9fYiA9ICgoc3RydWN0IF9fbW1fbG9hZGhfcGlfc3RydWN0KilfX3ApLT5fX3U7CisgIF9fbTEyOCBfX2JiID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19iLCBfX2IsIDAsIDEsIDAsIDEpOworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2JiLCAwLCAxLCA0LCA1KTsKK30KKworLy8vIFxicmllZiBMb2FkcyB0d28gcGFja2VkIGZsb2F0IHZhbHVlcyBmcm9tIHRoZSBhZGRyZXNzIF9fcCBpbnRvIHRoZSBsb3ctb3JkZXIKKy8vLyAgICBiaXRzIG9mIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBoaWdoLW9yZGVyIGJpdHMgYXJlIGNvcGllZAorLy8vICAgIGZyb20gdGhlIGhpZ2gtb3JkZXIgYml0cyBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WTFBEIC8gTU9WTFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIEJpdHMgWzEyNzo2NF0gYXJlIHdyaXR0ZW4gdG8gYml0cworLy8vICAgIFsxMjc6NjRdIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIHR3byBwYWNrZWQgZmxvYXQgdmFsdWVzLiBCaXRzIFs2MzowXSBhcmUgd3JpdHRlbiB0byBiaXRzCisvLy8gICAgWzYzOjBdIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIG1vdmVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkbF9waShfX20xMjggX19hLCBjb25zdCBfX202NCAqX19wKQoreworICB0eXBlZGVmIGZsb2F0IF9fbW1fbG9hZGxfcGlfdjJmMzIgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDgpKSk7CisgIHN0cnVjdCBfX21tX2xvYWRsX3BpX3N0cnVjdCB7CisgICAgX19tbV9sb2FkbF9waV92MmYzMiBfX3U7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICBfX21tX2xvYWRsX3BpX3YyZjMyIF9fYiA9ICgoc3RydWN0IF9fbW1fbG9hZGxfcGlfc3RydWN0KilfX3ApLT5fX3U7CisgIF9fbTEyOCBfX2JiID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19iLCBfX2IsIDAsIDEsIDAsIDEpOworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2JiLCA0LCA1LCAyLCAzKTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlcgorLy8vICAgIDMyIGJpdHMgb2YgdGhlIHZlY3RvciBhcmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgc2luZ2xlLXByZWNpc2lvbgorLy8vICAgIGZsb2F0aW5nLXBvaW50IHZhbHVlIGxvYWRlZCBmcm9tIGEgc3BlY2lmaWVkIG1lbW9yeSBsb2NhdGlvbi4gVGhlIHVwcGVyCisvLy8gICAgOTYgYml0cyBhcmUgc2V0IHRvIHplcm8uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVlNTIC8gTU9WU1MgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIGEgMzItYml0IG1lbW9yeSBsb2NhdGlvbiBjb250YWluaW5nIGEgc2luZ2xlLXByZWNpc2lvbgorLy8vICAgIGZsb2F0aW5nLXBvaW50IHZhbHVlLgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUKKy8vLyAgICBsb3dlciAzMiBiaXRzIGNvbnRhaW4gdGhlIHZhbHVlIGxvYWRlZCBmcm9tIHRoZSBtZW1vcnkgbG9jYXRpb24uIFRoZQorLy8vICAgIHVwcGVyIDk2IGJpdHMgYXJlIHNldCB0byB6ZXJvLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWRfc3MoY29uc3QgZmxvYXQgKl9fcCkKK3sKKyAgc3RydWN0IF9fbW1fbG9hZF9zc19zdHJ1Y3QgeworICAgIGZsb2F0IF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIGZsb2F0IF9fdSA9ICgoc3RydWN0IF9fbW1fbG9hZF9zc19zdHJ1Y3QqKV9fcCktPl9fdTsKKyAgcmV0dXJuIChfX20xMjgpeyBfX3UsIDAsIDAsIDAgfTsKK30KKworLy8vIFxicmllZiBMb2FkcyBhIDMyLWJpdCBmbG9hdCB2YWx1ZSBhbmQgZHVwbGljYXRlcyBpdCB0byBhbGwgZm91ciB2ZWN0b3IKKy8vLyAgICBlbGVtZW50cyBvZiBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZTUyAvIE1PVlNTICsgXGMgc2h1ZmZsaW5nCisvLy8gICAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIGEgZmxvYXQgdmFsdWUgdG8gYmUgbG9hZGVkIGFuZCBkdXBsaWNhdGVkLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgbG9hZGVkCisvLy8gICAgYW5kIGR1cGxpY2F0ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWQxX3BzKGNvbnN0IGZsb2F0ICpfX3ApCit7CisgIHN0cnVjdCBfX21tX2xvYWQxX3BzX3N0cnVjdCB7CisgICAgZmxvYXQgX191OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgZmxvYXQgX191ID0gKChzdHJ1Y3QgX19tbV9sb2FkMV9wc19zdHJ1Y3QqKV9fcCktPl9fdTsKKyAgcmV0dXJuIChfX20xMjgpeyBfX3UsIF9fdSwgX191LCBfX3UgfTsKK30KKworI2RlZmluZSAgICAgICAgX21tX2xvYWRfcHMxKHApIF9tbV9sb2FkMV9wcyhwKQorCisvLy8gXGJyaWVmIExvYWRzIGEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gZnJvbSBhbiBhbGlnbmVkCisvLy8gICAgbWVtb3J5IGxvY2F0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZBUFMgLyBNT1ZBUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIGEgMTI4LWJpdCBtZW1vcnkgbG9jYXRpb24uIFRoZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkKKy8vLyAgICBsb2NhdGlvbiBoYXMgdG8gYmUgMTI4LWJpdCBhbGlnbmVkLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgbG9hZGVkIHZhbHVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWRfcHMoY29uc3QgZmxvYXQgKl9fcCkKK3sKKyAgcmV0dXJuICooX19tMTI4KilfX3A7Cit9CisKKy8vLyBcYnJpZWYgTG9hZHMgYSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBmcm9tIGFuCisvLy8gICAgdW5hbGlnbmVkIG1lbW9yeSBsb2NhdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WVVBTIC8gTU9WVVBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byBhIDEyOC1iaXQgbWVtb3J5IGxvY2F0aW9uLiBUaGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5CisvLy8gICAgbG9jYXRpb24gZG9lcyBub3QgaGF2ZSB0byBiZSBhbGlnbmVkLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgbG9hZGVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkdV9wcyhjb25zdCBmbG9hdCAqX19wKQoreworICBzdHJ1Y3QgX19sb2FkdV9wcyB7CisgICAgX19tMTI4IF9fdjsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIHJldHVybiAoKHN0cnVjdCBfX2xvYWR1X3BzKilfX3ApLT5fX3Y7Cit9CisKKy8vLyBcYnJpZWYgTG9hZHMgZm91ciBwYWNrZWQgZmxvYXQgdmFsdWVzLCBpbiByZXZlcnNlIG9yZGVyLCBmcm9tIGFuIGFsaWduZWQKKy8vLyAgICBtZW1vcnkgbG9jYXRpb24gdG8gMzItYml0IGVsZW1lbnRzIGluIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVkFQUyAvIE1PVkFQUyArIFxjIHNodWZmbGluZworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byBhIDEyOC1iaXQgbWVtb3J5IGxvY2F0aW9uLiBUaGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5CisvLy8gICAgbG9jYXRpb24gaGFzIHRvIGJlIDEyOC1iaXQgYWxpZ25lZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIG1vdmVkIHZhbHVlcywgbG9hZGVkCisvLy8gICAgaW4gcmV2ZXJzZSBvcmRlci4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2Fkcl9wcyhjb25zdCBmbG9hdCAqX19wKQoreworICBfX20xMjggX19hID0gX21tX2xvYWRfcHMoX19wKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYSwgMywgMiwgMSwgMCk7Cit9CisKKy8vLyBcYnJpZWYgQ3JlYXRlIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gd2l0aCB1bmRlZmluZWQgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaGFzIG5vIGNvcnJlc3BvbmRpbmcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdW5kZWZpbmVkIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bmRlZmluZWRfcHModm9pZCkKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdW5kZWYxMjgoKTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlcgorLy8vICAgIDMyIGJpdHMgb2YgdGhlIHZlY3RvciBhcmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHNpbmdsZS1wcmVjaXNpb24KKy8vLyAgICBmbG9hdGluZy1wb2ludCB2YWx1ZS4gVGhlIHVwcGVyIDk2IGJpdHMgYXJlIHNldCB0byB6ZXJvLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZTUyAvIE1PVlNTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fdworLy8vICAgIEEgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGxvd2VyIDMyCisvLy8gICAgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUKKy8vLyAgICBsb3dlciAzMiBiaXRzIGNvbnRhaW4gdGhlIHZhbHVlIHByb3ZpZGVkIGluIHRoZSBzb3VyY2Ugb3BlcmFuZC4gVGhlCisvLy8gICAgdXBwZXIgOTYgYml0cyBhcmUgc2V0IHRvIHplcm8uCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0X3NzKGZsb2F0IF9fdykKK3sKKyAgcmV0dXJuIChfX20xMjgpeyBfX3csIDAsIDAsIDAgfTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0sIHdpdGggZWFjaAorLy8vICAgIG9mIHRoZSBmb3VyIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmVjdG9yIGVsZW1lbnRzIHNldCB0byB0aGUKKy8vLyAgICBzcGVjaWZpZWQgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWUEVSTUlMUFMgLyBQRVJNSUxQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3cKKy8vLyAgICBBIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGVhY2ggdmVjdG9yCisvLy8gICAgZWxlbWVudCBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEFuIGluaXRpYWxpemVkIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldDFfcHMoZmxvYXQgX193KQoreworICByZXR1cm4gKF9fbTEyOCl7IF9fdywgX193LCBfX3csIF9fdyB9OworfQorCisvKiBNaWNyb3NvZnQgc3BlY2lmaWMuICovCisvLy8gXGJyaWVmIENvbnN0cnVjdHMgYSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XSwgd2l0aCBlYWNoCisvLy8gICAgb2YgdGhlIGZvdXIgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2ZWN0b3IgZWxlbWVudHMgc2V0IHRvIHRoZQorLy8vICAgIHNwZWNpZmllZCBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQRVJNSUxQUyAvIFBFUk1JTFBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fdworLy8vICAgIEEgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgZWFjaCB2ZWN0b3IKKy8vLyAgICBlbGVtZW50IG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0X3BzMShmbG9hdCBfX3cpCit7CisgICAgcmV0dXJuIF9tbV9zZXQxX3BzKF9fdyk7Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdCisvLy8gICAgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgc3BlY2lmaWMKKy8vLyAgICBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3oKKy8vLyAgICBBIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzEyNzo5Nl0KKy8vLyAgICBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX3kKKy8vLyAgICBBIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzk1OjY0XQorLy8vICAgIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9feAorLy8vICAgIEEgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbNjM6MzJdCisvLy8gICAgb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX193CisvLy8gICAgQSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFszMTowXQorLy8vICAgIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0X3BzKGZsb2F0IF9feiwgZmxvYXQgX195LCBmbG9hdCBfX3gsIGZsb2F0IF9fdykKK3sKKyAgcmV0dXJuIChfX20xMjgpeyBfX3csIF9feCwgX195LCBfX3ogfTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0sCisvLy8gICAgaW5pdGlhbGl6ZWQgaW4gcmV2ZXJzZSBvcmRlciB3aXRoIHRoZSBzcGVjaWZpZWQgMzItYml0IHNpbmdsZS1wcmVjaXNpb24KKy8vLyAgICBmbG9hdC1wb2ludCB2YWx1ZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBzcGVjaWZpYworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fegorLy8vICAgIEEgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbMzE6MF0KKy8vLyAgICBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX3kKKy8vLyAgICBBIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIGJpdHMgWzYzOjMyXQorLy8vICAgIG9mIHRoZSByZXN1bHQuCisvLy8gXHBhcmFtIF9feAorLy8vICAgIEEgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgYml0cyBbOTU6NjRdCisvLy8gICAgb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX193CisvLy8gICAgQSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSBiaXRzIFsxMjc6OTZdCisvLy8gICAgb2YgdGhlIHJlc3VsdC4KKy8vLyBccmV0dXJucyBBbiBpbml0aWFsaXplZCAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRyX3BzKGZsb2F0IF9feiwgZmxvYXQgX195LCBmbG9hdCBfX3gsIGZsb2F0IF9fdykKK3sKKyAgcmV0dXJuIChfX20xMjgpeyBfX3osIF9feSwgX194LCBfX3cgfTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gaW5pdGlhbGl6ZWQKKy8vLyAgICB0byB6ZXJvLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZYT1JQUyAvIFhPUlBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHJldHVybnMgQW4gaW5pdGlhbGl6ZWQgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gd2l0aAorLy8vICAgIGFsbCBlbGVtZW50cyBzZXQgdG8gemVyby4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXR6ZXJvX3BzKHZvaWQpCit7CisgIHJldHVybiAoX19tMTI4KXsgMCwgMCwgMCwgMCB9OworfQorCisvLy8gXGJyaWVmIFN0b3JlcyB0aGUgdXBwZXIgNjQgYml0cyBvZiBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIHRvIGEKKy8vLyAgICBtZW1vcnkgbG9jYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBFWFRSUSAvIE1PVlEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIGEgNjQtYml0IG1lbW9yeSBsb2NhdGlvbi4KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gYmUgc3RvcmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZWhfcGkoX19tNjQgKl9fcCwgX19tMTI4IF9fYSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVocHMoKF9fdjJzaSAqKV9fcCwgKF9fdjRzZilfX2EpOworfQorCisvLy8gXGJyaWVmIFN0b3JlcyB0aGUgbG93ZXIgNjQgYml0cyBvZiBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIHRvIGEKKy8vLyAgICAgbWVtb3J5IGxvY2F0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZMUFMgLyBNT1ZMUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIGEgbWVtb3J5IGxvY2F0aW9uIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBmbG9hdCB2YWx1ZXMuCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIHN0b3JlZC4KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmVsX3BpKF9fbTY0ICpfX3AsIF9fbTEyOCBfX2EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JlbHBzKChfX3Yyc2kgKilfX3AsIChfX3Y0c2YpX19hKTsKK30KKworLy8vIFxicmllZiBTdG9yZXMgdGhlIGxvd2VyIDMyIGJpdHMgb2YgYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSB0byBhCisvLy8gICAgIG1lbW9yeSBsb2NhdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WU1MgLyBNT1ZTUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX3AKKy8vLyAgICBBIHBvaW50ZXIgdG8gYSAzMi1iaXQgbWVtb3J5IGxvY2F0aW9uLgorLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHZhbHVlIHRvIGJlIHN0b3JlZC4KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmVfc3MoZmxvYXQgKl9fcCwgX19tMTI4IF9fYSkKK3sKKyAgc3RydWN0IF9fbW1fc3RvcmVfc3Nfc3RydWN0IHsKKyAgICBmbG9hdCBfX3U7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICAoKHN0cnVjdCBfX21tX3N0b3JlX3NzX3N0cnVjdCopX19wKS0+X191ID0gX19hWzBdOworfQorCisvLy8gXGJyaWVmIFN0b3JlcyBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIHRvIGFuIHVuYWxpZ25lZCBtZW1vcnkKKy8vLyAgICBsb2NhdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WVVBTIC8gTU9WVVBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byBhIDEyOC1iaXQgbWVtb3J5IGxvY2F0aW9uLiBUaGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5CisvLy8gICAgbG9jYXRpb24gZG9lcyBub3QgaGF2ZSB0byBiZSBhbGlnbmVkLgorLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byBiZSBzdG9yZWQuCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0b3JldV9wcyhmbG9hdCAqX19wLCBfX20xMjggX19hKQoreworICBzdHJ1Y3QgX19zdG9yZXVfcHMgeworICAgIF9fbTEyOCBfX3Y7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICAoKHN0cnVjdCBfX3N0b3JldV9wcyopX19wKS0+X192ID0gX19hOworfQorCisvLy8gXGJyaWVmIFN0b3JlcyBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGludG8gYW4gYWxpZ25lZCBtZW1vcnkKKy8vLyAgICBsb2NhdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWTU9WQVBTIC8gTU9WQVBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byBhIDEyOC1iaXQgbWVtb3J5IGxvY2F0aW9uLiBUaGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5CisvLy8gICAgbG9jYXRpb24gaGFzIHRvIGJlIDE2LWJ5dGUgYWxpZ25lZC4KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gYmUgc3RvcmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZV9wcyhmbG9hdCAqX19wLCBfX20xMjggX19hKQoreworICAqKF9fbTEyOCopX19wID0gX19hOworfQorCisvLy8gXGJyaWVmIFN0b3JlcyB0aGUgbG93ZXIgMzIgYml0cyBvZiBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGludG8KKy8vLyAgICBmb3VyIGNvbnRpZ3VvdXMgZWxlbWVudHMgaW4gYW4gYWxpZ25lZCBtZW1vcnkgbG9jYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byBcYyBWTU9WQVBTIC8gTU9WQVBTICsgXGMgc2h1ZmZsaW5nCisvLy8gICAgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19wCisvLy8gICAgQSBwb2ludGVyIHRvIGEgMTI4LWJpdCBtZW1vcnkgbG9jYXRpb24uCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gd2hvc2UgbG93ZXIgMzIgYml0cyBhcmUgc3RvcmVkIHRvIGVhY2gKKy8vLyAgICBvZiB0aGUgZm91ciBjb250aWd1b3VzIGVsZW1lbnRzIHBvaW50ZWQgYnkgX19wLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZTFfcHMoZmxvYXQgKl9fcCwgX19tMTI4IF9fYSkKK3sKKyAgX19hID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19hLCAwLCAwLCAwLCAwKTsKKyAgX21tX3N0b3JlX3BzKF9fcCwgX19hKTsKK30KKworLy8vIFxicmllZiBTdG9yZXMgdGhlIGxvd2VyIDMyIGJpdHMgb2YgYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBpbnRvCisvLy8gICAgZm91ciBjb250aWd1b3VzIGVsZW1lbnRzIGluIGFuIGFsaWduZWQgbWVtb3J5IGxvY2F0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gXGMgVk1PVkFQUyAvIE1PVkFQUyArIFxjIHNodWZmbGluZworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byBhIDEyOC1iaXQgbWVtb3J5IGxvY2F0aW9uLgorLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIHdob3NlIGxvd2VyIDMyIGJpdHMgYXJlIHN0b3JlZCB0byBlYWNoCisvLy8gICAgb2YgdGhlIGZvdXIgY29udGlndW91cyBlbGVtZW50cyBwb2ludGVkIGJ5IF9fcC4KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmVfcHMxKGZsb2F0ICpfX3AsIF9fbTEyOCBfX2EpCit7CisgIHJldHVybiBfbW1fc3RvcmUxX3BzKF9fcCwgX19hKTsKK30KKworLy8vIFxicmllZiBTdG9yZXMgZmxvYXQgdmFsdWVzIGZyb20gYSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSB0byBhbgorLy8vICAgIGFsaWduZWQgbWVtb3J5IGxvY2F0aW9uIGluIHJldmVyc2Ugb3JkZXIuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVkFQUyAvIE1PVkFQUyArIFxjIHNodWZmbGluZworLy8vICAgIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byBhIDEyOC1iaXQgbWVtb3J5IGxvY2F0aW9uLiBUaGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5CisvLy8gICAgbG9jYXRpb24gaGFzIHRvIGJlIDEyOC1iaXQgYWxpZ25lZC4KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gYmUgc3RvcmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZXJfcHMoZmxvYXQgKl9fcCwgX19tMTI4IF9fYSkKK3sKKyAgX19hID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19hLCAzLCAyLCAxLCAwKTsKKyAgX21tX3N0b3JlX3BzKF9fcCwgX19hKTsKK30KKworI2RlZmluZSBfTU1fSElOVF9UMCAzCisjZGVmaW5lIF9NTV9ISU5UX1QxIDIKKyNkZWZpbmUgX01NX0hJTlRfVDIgMQorI2RlZmluZSBfTU1fSElOVF9OVEEgMAorCisjaWZuZGVmIF9NU0NfVkVSCisvKiBGSVhNRTogV2UgaGF2ZSB0byAjZGVmaW5lIHRoaXMgYmVjYXVzZSAic2VsIiBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciwgYW5kCisgICBTZW1hIGRvZXNuJ3QgZG8gYW55IGZvcm0gb2YgY29uc3RhbnQgcHJvcGFnYXRpb24geWV0LiAqLworCisvLy8gXGJyaWVmIExvYWRzIG9uZSBjYWNoZSBsaW5lIG9mIGRhdGEgZnJvbSB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgdG8gYSBsb2NhdGlvbgorLy8vICAgIGNsb3NlciB0byB0aGUgcHJvY2Vzc29yLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyB2b2lkIF9tbV9wcmVmZXRjaChjb25zdCB2b2lkICogYSwgY29uc3QgaW50IHNlbCk7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQUkVGRVRDSE5UQSBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQSBwb2ludGVyIHRvIGEgbWVtb3J5IGxvY2F0aW9uIGNvbnRhaW5pbmcgYSBjYWNoZSBsaW5lIG9mIGRhdGEuCisvLy8gXHBhcmFtIHNlbAorLy8vICAgIEEgcHJlZGVmaW5lZCBpbnRlZ2VyIGNvbnN0YW50IHNwZWNpZnlpbmcgdGhlIHR5cGUgb2YgcHJlZmV0Y2ggb3BlcmF0aW9uOgorLy8vICAgIF9NTV9ISU5UX05UQTogTW92ZSBkYXRhIHVzaW5nIHRoZSBub24tdGVtcG9yYWwgYWNjZXNzIChOVEEpIGhpbnQuCisvLy8gICAgVGhlIFBSRUZFVENITlRBIGluc3RydWN0aW9uIHdpbGwgYmUgZ2VuZXJhdGVkLgorLy8vICAgIF9NTV9ISU5UX1QwOiBNb3ZlIGRhdGEgdXNpbmcgdGhlIFQwIGhpbnQuIFRoZSBQUkVGRVRDSFQwIGluc3RydWN0aW9uIHdpbGwKKy8vLyAgICBiZSBnZW5lcmF0ZWQuCisvLy8gICAgX01NX0hJTlRfVDE6IE1vdmUgZGF0YSB1c2luZyB0aGUgVDEgaGludC4gVGhlIFBSRUZFVENIVDEgaW5zdHJ1Y3Rpb24gd2lsbAorLy8vICAgIGJlIGdlbmVyYXRlZC4KKy8vLyAgICBfTU1fSElOVF9UMjogTW92ZSBkYXRhIHVzaW5nIHRoZSBUMiBoaW50LiBUaGUgUFJFRkVUQ0hUMiBpbnN0cnVjdGlvbiB3aWxsCisvLy8gICAgYmUgZ2VuZXJhdGVkLgorI2RlZmluZSBfbW1fcHJlZmV0Y2goYSwgc2VsKSAoX19idWlsdGluX3ByZWZldGNoKCh2b2lkICopKGEpLCAwLCAoc2VsKSkpCisjZW5kaWYKKworLy8vIFxicmllZiBTdG9yZXMgYSA2NC1iaXQgaW50ZWdlciBpbiB0aGUgc3BlY2lmaWVkIGFsaWduZWQgbWVtb3J5IGxvY2F0aW9uLiBUbworLy8vICAgIG1pbmltaXplIGNhY2hpbmcsIHRoZSBkYXRhIGlzIGZsYWdnZWQgYXMgbm9uLXRlbXBvcmFsICh1bmxpa2VseSB0byBiZQorLy8vICAgIHVzZWQgYWdhaW4gc29vbikuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgTU9WTlRRIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byBhbiBhbGlnbmVkIG1lbW9yeSBsb2NhdGlvbiB1c2VkIHRvIHN0b3JlIHRoZSByZWdpc3RlciB2YWx1ZS4KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSB2YWx1ZSB0byBiZSBzdG9yZWQuCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0cmVhbV9waShfX202NCAqX19wLCBfX202NCBfX2EpCit7CisgIF9fYnVpbHRpbl9pYTMyX21vdm50cShfX3AsIF9fYSk7Cit9CisKKy8vLyBcYnJpZWYgTW92ZXMgcGFja2VkIGZsb2F0IHZhbHVlcyBmcm9tIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gdG8gYQorLy8vICAgIDEyOC1iaXQgYWxpZ25lZCBtZW1vcnkgbG9jYXRpb24uIFRvIG1pbmltaXplIGNhY2hpbmcsIHRoZSBkYXRhIGlzIGZsYWdnZWQKKy8vLyAgICBhcyBub24tdGVtcG9yYWwgKHVubGlrZWx5IHRvIGJlIHVzZWQgYWdhaW4gc29vbikuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVk5UUFMgLyBNT1ZOVFBTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIEEgcG9pbnRlciB0byBhIDEyOC1iaXQgYWxpZ25lZCBtZW1vcnkgbG9jYXRpb24gdGhhdCB3aWxsIHJlY2VpdmUgdGhlCisvLy8gICAgaW50ZWdlciB2YWx1ZXMuCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIG1vdmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdHJlYW1fcHMoZmxvYXQgKl9fcCwgX19tMTI4IF9fYSkKK3sKKyAgX19idWlsdGluX25vbnRlbXBvcmFsX3N0b3JlKChfX3Y0c2YpX19hLCAoX192NHNmKilfX3ApOworfQorCisvLy8gXGJyaWVmIEZvcmNlcyBzdHJvbmcgbWVtb3J5IG9yZGVyaW5nIChzZXJpYWxpemF0aW9uKSBiZXR3ZWVuIHN0b3JlCisvLy8gICAgaW5zdHJ1Y3Rpb25zIHByZWNlZGluZyB0aGlzIGluc3RydWN0aW9uIGFuZCBzdG9yZSBpbnN0cnVjdGlvbnMgZm9sbG93aW5nCisvLy8gICAgdGhpcyBpbnN0cnVjdGlvbiwgZW5zdXJpbmcgdGhlIHN5c3RlbSBjb21wbGV0ZXMgYWxsIHByZXZpb3VzIHN0b3JlcworLy8vICAgIGJlZm9yZSBleGVjdXRpbmcgc3Vic2VxdWVudCBzdG9yZXMuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgU0ZFTkNFIGluc3RydWN0aW9uLgorLy8vCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIKKyNlbmRpZgordm9pZCBfbW1fc2ZlbmNlKHZvaWQpOworCisvLy8gXGJyaWVmIEV4dHJhY3RzIDE2LWJpdCBlbGVtZW50IGZyb20gYSA2NC1iaXQgdmVjdG9yIG9mIFs0IHggaTE2XSBhbmQKKy8vLyAgICByZXR1cm5zIGl0LCBhcyBzcGVjaWZpZWQgYnkgdGhlIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlBFWFRSVyAvIFBFWFRSVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzQgeCBpMTZdLgorLy8vIFxwYXJhbSBfX24KKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kIHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBiaXRzIGFyZSBleHRyYWN0ZWQ6CisvLy8gICAgMDogQml0cyBbMTU6MF0gYXJlIGNvcGllZCB0byB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgMTogQml0cyBbMzE6MTZdIGFyZSBjb3BpZWQgdG8gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIDI6IEJpdHMgWzQ3OjMyXSBhcmUgY29waWVkIHRvIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICAzOiBCaXRzIFs2Mzo0OF0gYXJlIGNvcGllZCB0byB0aGUgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAxNi1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBleHRyYWN0ZWQgMTYgYml0cyBvZiBwYWNrZWQgZGF0YS4KKyNkZWZpbmUgX21tX2V4dHJhY3RfcGkxNihhLCBuKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKGludClfX2J1aWx0aW5faWEzMl92ZWNfZXh0X3Y0aGkoKF9fbTY0KWEsIChpbnQpbik7IH0pCisKKy8vLyBcYnJpZWYgQ29waWVzIGRhdGEgZnJvbSB0aGUgNjQtYml0IHZlY3RvciBvZiBbNCB4IGkxNl0gdG8gdGhlIGRlc3RpbmF0aW9uLAorLy8vICAgIGFuZCBpbnNlcnRzIHRoZSBsb3dlciAxNi1iaXRzIG9mIGFuIGludGVnZXIgb3BlcmFuZCBhdCB0aGUgMTYtYml0IG9mZnNldAorLy8vICAgIHNwZWNpZmllZCBieSB0aGUgaW1tZWRpYXRlIG9wZXJhbmQgX19uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZQSU5TUlcgLyBQSU5TUlcgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFs0IHggaTE2XS4KKy8vLyBccGFyYW0gX19kCisvLy8gICAgQW4gaW50ZWdlci4gVGhlIGxvd2VyIDE2LWJpdCB2YWx1ZSBmcm9tIHRoaXMgb3BlcmFuZCBpcyB3cml0dGVuIHRvIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uIGF0IHRoZSBvZmZzZXQgc3BlY2lmaWVkIGJ5IG9wZXJhbmQgX19uLgorLy8vIFxwYXJhbSBfX24KKy8vLyAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW50IHRoYXQgZGV0ZXJtaW5lcyB3aGljaCB0aGUgYml0cyB0byBiZSB1c2VkCisvLy8gICAgaW4gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIDA6IEJpdHMgWzE1OjBdIGFyZSBjb3BpZWQgdG8gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIDE6IEJpdHMgWzMxOjE2XSBhcmUgY29waWVkIHRvIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICAyOiBCaXRzIFs0NzozMl0gYXJlIGNvcGllZCB0byB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgMzogQml0cyBbNjM6NDhdIGFyZSBjb3BpZWQgdG8gdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIFRoZSByZW1haW5pbmcgYml0cyBpbiB0aGUgZGVzdGluYXRpb24gYXJlIGNvcGllZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nCisvLy8gICAgYml0cyBpbiBvcGVyYW5kIF9fYS4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb3BpZWQgcGFja2VkIGRhdGEgZnJvbSB0aGUKKy8vLyAgICBvcGVyYW5kcy4KKyNkZWZpbmUgX21tX2luc2VydF9waTE2KGEsIGQsIG4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNjQpX19idWlsdGluX2lhMzJfdmVjX3NldF92NGhpKChfX202NClhLCAoaW50KWQsIChpbnQpbik7IH0pCisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBwYWNrZWQgMTYtYml0IGludGVnZXIgdmFsdWVzIG9mCisvLy8gICAgdGhlIDY0LWJpdCBpbnRlZ2VyIHZlY3RvcnMsIGFuZCB3cml0ZXMgdGhlIGdyZWF0ZXIgdmFsdWUgdG8gdGhlCisvLy8gICAgY29ycmVzcG9uZGluZyBiaXRzIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQTUFYU1cgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyBvbmUgb2YgdGhlIHNvdXJjZSBvcGVyYW5kcy4KKy8vLyBccmV0dXJucyBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXhfcGkxNihfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbWF4c3coKF9fdjRoaSlfX2EsIChfX3Y0aGkpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIHBhY2tlZCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyCisvLy8gICAgdmFsdWVzIG9mIHRoZSA2NC1iaXQgaW50ZWdlciB2ZWN0b3JzLCBhbmQgd3JpdGVzIHRoZSBncmVhdGVyIHZhbHVlIHRvIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUE1BWFVCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWF4X3B1OChfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbWF4dWIoKF9fdjhxaSlfX2EsIChfX3Y4cWkpX19iKTsKK30KKworLy8vIFxicmllZiBDb21wYXJlcyBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIHBhY2tlZCAxNi1iaXQgaW50ZWdlciB2YWx1ZXMgb2YKKy8vLyAgICB0aGUgNjQtYml0IGludGVnZXIgdmVjdG9ycywgYW5kIHdyaXRlcyB0aGUgbGVzc2VyIHZhbHVlIHRvIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUE1JTlNXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG1pbnN3KChfX3Y0aGkpX19hLCAoX192NGhpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcGFyZXMgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBwYWNrZWQgOC1iaXQgdW5zaWduZWQgaW50ZWdlcgorLy8vICAgIHZhbHVlcyBvZiB0aGUgNjQtYml0IGludGVnZXIgdmVjdG9ycywgYW5kIHdyaXRlcyB0aGUgbGVzc2VyIHZhbHVlIHRvIHRoZQorLy8vICAgIGNvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgUE1JTlVCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29tcGFyaXNvbiByZXN1bHRzLgorc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX3B1OChfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbWludWIoKF9fdjhxaSlfX2EsIChfX3Y4cWkpX19iKTsKK30KKworLy8vIFxicmllZiBUYWtlcyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgZnJvbSBlYWNoIDgtYml0IGVsZW1lbnQgaW4gYSA2NC1iaXQKKy8vLyAgICBpbnRlZ2VyIHZlY3RvciB0byBjcmVhdGUgYSAxNi1iaXQgbWFzayB2YWx1ZS4gWmVyby1leHRlbmRzIHRoZSB2YWx1ZSB0bworLy8vICAgIDMyLWJpdCBpbnRlZ2VyIGFuZCB3cml0ZXMgaXQgdG8gdGhlIGRlc3RpbmF0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBNT1ZNU0tCIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB3aXRoIGJpdHMgdG8gYmUgZXh0cmFjdGVkLgorLy8vIFxyZXR1cm5zIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBmcm9tIGVhY2ggOC1iaXQgZWxlbWVudCBpbiB0aGUgb3BlcmFuZCwKKy8vLyAgICB3cml0dGVuIHRvIGJpdHMgWzE1OjBdLgorc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdmVtYXNrX3BpOChfX202NCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wbW92bXNrYigoX192OHFpKV9fYSk7Cit9CisKKy8vLyBcYnJpZWYgTXVsdGlwbGllcyBwYWNrZWQgMTYtYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzIGFuZCB3cml0ZXMgdGhlCisvLy8gICAgaGlnaC1vcmRlciAxNiBiaXRzIG9mIGVhY2ggMzItYml0IHByb2R1Y3QgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBpbgorLy8vICAgIHRoZSBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQTVVMSFVXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgcHJvZHVjdHMgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX211bGhpX3B1MTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG11bGh1dygoX192NGhpKV9fYSwgKF9fdjRoaSlfX2IpOworfQorCisvLy8gXGJyaWVmIFNodWZmbGVzIHRoZSA0IDE2LWJpdCBpbnRlZ2VycyBmcm9tIGEgNjQtYml0IGludGVnZXIgdmVjdG9yIHRvIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLCBhcyBzcGVjaWZpZWQgYnkgdGhlIGltbWVkaWF0ZSB2YWx1ZSBvcGVyYW5kLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTSFVGVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tNjQgX21tX3NodWZmbGVfcGkxNihfX202NCBhLCBjb25zdCBpbnQgbik7CisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIGJlIHNodWZmbGVkLgorLy8vIFxwYXJhbSBuCisvLy8gICAgQW4gaW1tZWRpYXRlIHZhbHVlIGNvbnRhaW5pbmcgYW4gOC1iaXQgdmFsdWUgc3BlY2lmeWluZyB3aGljaCBlbGVtZW50cyB0bworLy8vICAgIGNvcHkgZnJvbSBhLiBUaGUgZGVzdGluYXRpb25zIHdpdGhpbiB0aGUgNjQtYml0IGRlc3RpbmF0aW9uIGFyZSBhc3NpZ25lZAorLy8vICAgIHZhbHVlcyBhcyBmb2xsb3dzOgorLy8vICAgIEJpdHMgWzE6MF0gYXJlIHVzZWQgdG8gYXNzaWduIHZhbHVlcyB0byBiaXRzIFsxNTowXSBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbMzoyXSBhcmUgdXNlZCB0byBhc3NpZ24gdmFsdWVzIHRvIGJpdHMgWzMxOjE2XSBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbNTo0XSBhcmUgdXNlZCB0byBhc3NpZ24gdmFsdWVzIHRvIGJpdHMgWzQ3OjMyXSBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbNzo2XSBhcmUgdXNlZCB0byBhc3NpZ24gdmFsdWVzIHRvIGJpdHMgWzYzOjQ4XSBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0IHZhbHVlIGFzc2lnbm1lbnRzOgorLy8vICAgIDAwOiBhc3NpZ25lZCBmcm9tIGJpdHMgWzE1OjBdIG9mIGEuCisvLy8gICAgMDE6IGFzc2lnbmVkIGZyb20gYml0cyBbMzE6MTZdIG9mIGEuCisvLy8gICAgMTA6IGFzc2lnbmVkIGZyb20gYml0cyBbNDc6MzJdIG9mIGEuCisvLy8gICAgMTE6IGFzc2lnbmVkIGZyb20gYml0cyBbNjM6NDhdIG9mIGEuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgc2h1ZmZsZWQgdmFsdWVzLgorI2RlZmluZSBfbW1fc2h1ZmZsZV9waTE2KGEsIG4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNjQpX19idWlsdGluX2lhMzJfcHNodWZ3KChfX3Y0aGkpKF9fbTY0KShhKSwgKG4pKTsgfSkKKworLy8vIFxicmllZiBDb25kaXRpb25hbGx5IGNvcGllcyB0aGUgdmFsdWVzIGZyb20gZWFjaCA4LWJpdCBlbGVtZW50IGluIHRoZSBmaXJzdAorLy8vICAgIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kIHRvIHRoZSBzcGVjaWZpZWQgbWVtb3J5IGxvY2F0aW9uLCBhcworLy8vICAgIHNwZWNpZmllZCBieSB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBpbiB0aGUKKy8vLyAgICBzZWNvbmQgNjQtYml0IGludGVnZXIgdmVjdG9yIG9wZXJhbmQuIFRvIG1pbmltaXplIGNhY2hpbmcsIHRoZSBkYXRhIGlzCisvLy8gICAgZmxhZ2dlZCBhcyBub24tdGVtcG9yYWwgKHVubGlrZWx5IHRvIGJlIHVzZWQgYWdhaW4gc29vbikuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgTUFTS01PVlEgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19kCisvLy8gICAgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgdmFsdWVzIHdpdGggZWxlbWVudHMgdG8gYmUgY29waWVkLgorLy8vIFxwYXJhbSBfX24KKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvcGVyYW5kLiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgZnJvbSBlYWNoIDgtYml0CisvLy8gICAgZWxlbWVudCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBpbiBvcGVyYW5kIF9fZCBpcworLy8vICAgIGNvcGllZC4gSWYgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIGEgZ2l2ZW4gZWxlbWVudCBpcyAxLCB0aGUKKy8vLyAgICBjb3JyZXNwb25kaW5nIGVsZW1lbnQgaW4gb3BlcmFuZCBfX2QgaXMgY29waWVkLgorLy8vIFxwYXJhbSBfX3AKKy8vLyAgICBBIHBvaW50ZXIgdG8gYSA2NC1iaXQgbWVtb3J5IGxvY2F0aW9uIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBjb25kaXRpb25hbGx5CisvLy8gICAgY29waWVkIGludGVnZXIgdmFsdWVzLiBUaGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IGxvY2F0aW9uIGRvZXMgbm90IGhhdmUKKy8vLyAgICB0byBiZSBhbGlnbmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrbW92ZV9zaTY0KF9fbTY0IF9fZCwgX19tNjQgX19uLCBjaGFyICpfX3ApCit7CisgIF9fYnVpbHRpbl9pYTMyX21hc2ttb3ZxKChfX3Y4cWkpX19kLCAoX192OHFpKV9fbiwgX19wKTsKK30KKworLy8vIFxicmllZiBDb21wdXRlcyB0aGUgcm91bmRlZCBhdmVyYWdlcyBvZiB0aGUgcGFja2VkIHVuc2lnbmVkIDgtYml0IGludGVnZXIKKy8vLyAgICB2YWx1ZXMgYW5kIHdyaXRlcyB0aGUgYXZlcmFnZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUKKy8vLyAgICBkZXN0aW5hdGlvbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBQQVZHQiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGF2ZXJhZ2VzIG9mIGJvdGggb3BlcmFuZHMuCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hdmdfcHU4KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhdmdiKChfX3Y4cWkpX19hLCAoX192OHFpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29tcHV0ZXMgdGhlIHJvdW5kZWQgYXZlcmFnZXMgb2YgdGhlIHBhY2tlZCB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlcgorLy8vICAgIHZhbHVlcyBhbmQgd3JpdGVzIHRoZSBhdmVyYWdlcyB0byB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGluIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBBVkdXIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzb3VyY2Ugb3BlcmFuZHMuCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgYXZlcmFnZXMgb2YgYm90aCBvcGVyYW5kcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2F2Z19wdTE2KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3Bhdmd3KChfX3Y0aGkpX19hLCAoX192NGhpKV9fYik7Cit9CisKKy8vLyBcYnJpZWYgU3VidHJhY3RzIHRoZSBjb3JyZXNwb25kaW5nIDgtYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzIG9mIHRoZSB0d28KKy8vLyAgICA2NC1iaXQgdmVjdG9yIG9wZXJhbmRzIGFuZCBjb21wdXRlcyB0aGUgYWJzb2x1dGUgdmFsdWUgZm9yIGVhY2ggb2YgdGhlCisvLy8gICAgZGlmZmVyZW5jZS4gVGhlbiBzdW0gb2YgdGhlIDggYWJzb2x1dGUgZGlmZmVyZW5jZXMgaXMgd3JpdHRlbiB0byB0aGUKKy8vLyAgICBiaXRzIFsxNTowXSBvZiB0aGUgZGVzdGluYXRpb247IHRoZSByZW1haW5pbmcgYml0cyBbNjM6MTZdIGFyZSBjbGVhcmVkLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFBTQURCVyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzLgorLy8vIFxyZXR1cm5zIEEgNjQtYml0IGludGVnZXIgdmVjdG9yIHdob3NlIGxvd2VyIDE2IGJpdHMgY29udGFpbiB0aGUgc3VtcyBvZiB0aGUKKy8vLyAgICBzZXRzIG9mIGFic29sdXRlIGRpZmZlcmVuY2VzIGJldHdlZW4gYm90aCBvcGVyYW5kcy4gVGhlIHVwcGVyIGJpdHMgYXJlCisvLy8gICAgY2xlYXJlZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NhZF9wdTgoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNhZGJ3KChfX3Y4cWkpX19hLCAoX192OHFpKV9fYik7Cit9CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8vIFxicmllZiBSZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgTVhDU1IgcmVnaXN0ZXIgYXMgYSAzMi1iaXQgdW5zaWduZWQKKy8vLyAgICBpbnRlZ2VyIHZhbHVlLiBUaGVyZSBhcmUgc2V2ZXJhbCBncm91cHMgb2YgbWFjcm9zIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisvLy8gICAgaW50cmluc2ljLCBpbmNsdWRpbmc6CisvLy8gICAgKiBGb3IgY2hlY2tpbmcgZXhjZXB0aW9uIHN0YXRlczogX01NX0VYQ0VQVF9JTlZBTElELCBfTU1fRVhDRVBUX0RJVl9aRVJPLAorLy8vICAgICAgX01NX0VYQ0VQVF9ERU5PUk0sIF9NTV9FWENFUFRfT1ZFUkZMT1csIF9NTV9FWENFUFRfVU5ERVJGTE9XLAorLy8vICAgICAgX01NX0VYQ0VQVF9JTkVYQUNULiBUaGVyZSBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIKKy8vLyAgICAgIF9NTV9HRVRfRVhDRVBUSU9OX1NUQVRFKCkuCisvLy8gICAgKiBGb3IgY2hlY2tpbmcgZXhjZXB0aW9uIG1hc2tzOiBfTU1fTUFTS19VTkRFUkZMT1csIF9NTV9NQVNLX09WRVJGTE9XLAorLy8vICAgICAgX01NX01BU0tfSU5WQUxJRCwgX01NX01BU0tfREVOT1JNLCBfTU1fTUFTS19ESVZfWkVSTywgX01NX01BU0tfSU5FWEFDVC4KKy8vLyAgICAgIFRoZXJlIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBfTU1fR0VUX0VYQ0VQVElPTl9NQVNLKCkuCisvLy8gICAgKiBGb3IgY2hlY2tpbmcgcm91bmRpbmcgbW9kZXM6IF9NTV9ST1VORF9ORUFSRVNULCBfTU1fUk9VTkRfRE9XTiwKKy8vLyAgICAgIF9NTV9ST1VORF9VUCwgX01NX1JPVU5EX1RPV0FSRF9aRVJPLiBUaGVyZSBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIKKy8vLyAgICAgIF9NTV9HRVRfUk9VTkRJTkdfTU9ERSh4KSB3aGVyZSB4IGlzIG9uZSBvZiB0aGVzZSBtYWNyb3MuCisvLy8gICAgKiBGb3IgY2hlY2tpbmcgZmx1c2gtdG8temVybyBtb2RlOiBfTU1fRkxVU0hfWkVST19PTiwgX01NX0ZMVVNIX1pFUk9fT0ZGLgorLy8vICAgICAgVGhlcmUgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIF9NTV9HRVRfRkxVU0hfWkVST19NT0RFKCkuCisvLy8gICAgKiBGb3IgY2hlY2tpbmcgZGVub3JtYWxzLWFyZS16ZXJvIG1vZGU6IF9NTV9ERU5PUk1BTFNfWkVST19PTiwKKy8vLyAgICAgIF9NTV9ERU5PUk1BTFNfWkVST19PRkYuIFRoZXJlIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlcgorLy8vICAgICAgX01NX0dFVF9ERU5PUk1BTFNfWkVST19NT0RFKCkuCisvLy8KKy8vLyAgICBGb3IgZXhhbXBsZSwgdGhlIGV4cHJlc3Npb24gYmVsb3cgY2hlY2tzIGlmIGFuIG92ZXJmbG93IGV4Y2VwdGlvbiBoYXMKKy8vLyAgICBvY2N1cnJlZDoKKy8vLyAgICAgICggX21tX2dldGNzcigpICYgX01NX0VYQ0VQVF9PVkVSRkxPVyApCisvLy8KKy8vLyAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZ2V0cyB0aGUgY3VycmVudCByb3VuZGluZyBtb2RlOgorLy8vICAgICAgX01NX0dFVF9ST1VORElOR19NT0RFKCkKKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBWU1RNWENTUiAvIFNUTVhDU1IgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccmV0dXJucyBBIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBNWENTUgorLy8vICAgIHJlZ2lzdGVyLgordW5zaWduZWQgaW50IF9tbV9nZXRjc3Iodm9pZCk7CisKKy8vLyBcYnJpZWYgU2V0cyB0aGUgTVhDU1IgcmVnaXN0ZXIgd2l0aCB0aGUgMzItYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUuIFRoZXJlCisvLy8gICAgYXJlIHNldmVyYWwgZ3JvdXBzIG9mIG1hY3JvcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnRyaW5zaWMsIGluY2x1ZGluZzoKKy8vLyAgICAqIEZvciBzZXR0aW5nIGV4Y2VwdGlvbiBzdGF0ZXM6IF9NTV9FWENFUFRfSU5WQUxJRCwgX01NX0VYQ0VQVF9ESVZfWkVSTywKKy8vLyAgICAgIF9NTV9FWENFUFRfREVOT1JNLCBfTU1fRVhDRVBUX09WRVJGTE9XLCBfTU1fRVhDRVBUX1VOREVSRkxPVywKKy8vLyAgICAgIF9NTV9FWENFUFRfSU5FWEFDVC4gVGhlcmUgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyCisvLy8gICAgICBfTU1fU0VUX0VYQ0VQVElPTl9TVEFURSh4KSB3aGVyZSB4IGlzIG9uZSBvZiB0aGVzZSBtYWNyb3MuCisvLy8gICAgKiBGb3Igc2V0dGluZyBleGNlcHRpb24gbWFza3M6IF9NTV9NQVNLX1VOREVSRkxPVywgX01NX01BU0tfT1ZFUkZMT1csCisvLy8gICAgICBfTU1fTUFTS19JTlZBTElELCBfTU1fTUFTS19ERU5PUk0sIF9NTV9NQVNLX0RJVl9aRVJPLCBfTU1fTUFTS19JTkVYQUNULgorLy8vICAgICAgVGhlcmUgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIF9NTV9TRVRfRVhDRVBUSU9OX01BU0soeCkgd2hlcmUgeCBpcyBvbmUKKy8vLyAgICAgIG9mIHRoZXNlIG1hY3Jvcy4KKy8vLyAgICAqIEZvciBzZXR0aW5nIHJvdW5kaW5nIG1vZGVzOiBfTU1fUk9VTkRfTkVBUkVTVCwgX01NX1JPVU5EX0RPV04sCisvLy8gICAgICBfTU1fUk9VTkRfVVAsIF9NTV9ST1VORF9UT1dBUkRfWkVSTy4gVGhlcmUgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyCisvLy8gICAgICBfTU1fU0VUX1JPVU5ESU5HX01PREUoeCkgd2hlcmUgeCBpcyBvbmUgb2YgdGhlc2UgbWFjcm9zLgorLy8vICAgICogRm9yIHNldHRpbmcgZmx1c2gtdG8temVybyBtb2RlOiBfTU1fRkxVU0hfWkVST19PTiwgX01NX0ZMVVNIX1pFUk9fT0ZGLgorLy8vICAgICAgVGhlcmUgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIF9NTV9TRVRfRkxVU0hfWkVST19NT0RFKHgpIHdoZXJlIHggaXMKKy8vLyAgICAgIG9uZSBvZiB0aGVzZSBtYWNyb3MuCisvLy8gICAgKiBGb3Igc2V0dGluZyBkZW5vcm1hbHMtYXJlLXplcm8gbW9kZTogX01NX0RFTk9STUFMU19aRVJPX09OLAorLy8vICAgICAgX01NX0RFTk9STUFMU19aRVJPX09GRi4gVGhlcmUgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyCisvLy8gICAgICBfTU1fU0VUX0RFTk9STUFMU19aRVJPX01PREUoeCkgd2hlcmUgeCBpcyBvbmUgb2YgdGhlc2UgbWFjcm9zLgorLy8vCisvLy8gICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbiBjYXVzZXMgc3Vic2VxdWVudCBmbG9hdGluZy1wb2ludAorLy8vICAgIG9wZXJhdGlvbnMgdG8gcm91bmQgdXA6CisvLy8gICAgICBfbW1fc2V0Y3NyKF9tbV9nZXRjc3IoKSB8IF9NTV9ST1VORF9VUCkKKy8vLworLy8vICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzZXRzIHRoZSBEQVogYW5kIEZUWiBmbGFnczoKKy8vLyAgICAgIHZvaWQgc2V0RmxhZ3MoKSB7CisvLy8gICAgICAgIF9NTV9TRVRfRkxVU0hfWkVST19NT0RFKF9NTV9GTFVTSF9aRVJPX09OKQorLy8vICAgICAgICBfTU1fU0VUX0RFTk9STUFMU19aRVJPX01PREUoX01NX0RFTk9STUFMU19aRVJPX09OKQorLy8vICAgICAgfQorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZMRE1YQ1NSIC8gTERNWENTUiBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBfX2kKKy8vLyAgICBBIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIE1YQ1NSIHJlZ2lzdGVyLgordm9pZCBfbW1fc2V0Y3NyKHVuc2lnbmVkIGludCk7CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfSAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworLy8vIFxicmllZiBTZWxlY3RzIDQgZmxvYXQgdmFsdWVzIGZyb20gdGhlIDEyOC1iaXQgb3BlcmFuZHMgb2YgWzQgeCBmbG9hdF0sIGFzCisvLy8gICAgc3BlY2lmaWVkIGJ5IHRoZSBpbW1lZGlhdGUgdmFsdWUgb3BlcmFuZC4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMTI4IF9tbV9zaHVmZmxlX3BzKF9fbTEyOCBhLCBfX20xMjggYiwgY29uc3QgaW50IG1hc2spOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlNIVUZQUyAvIFNIVUZQUyBpbnN0cnVjdGlvbi4KKy8vLworLy8vIFxwYXJhbSBhCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccGFyYW0gYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHBhcmFtIG1hc2sKKy8vLyAgICBBbiBpbW1lZGlhdGUgdmFsdWUgY29udGFpbmluZyBhbiA4LWJpdCB2YWx1ZSBzcGVjaWZ5aW5nIHdoaWNoIGVsZW1lbnRzIHRvCisvLy8gICAgY29weSBmcm9tIGEgYW5kIGIuCisvLy8gICAgQml0cyBbMzowXSBzcGVjaWZ5IHRoZSB2YWx1ZXMgY29waWVkIGZyb20gb3BlcmFuZCBhLgorLy8vICAgIEJpdHMgWzc6NF0gc3BlY2lmeSB0aGUgdmFsdWVzIGNvcGllZCBmcm9tIG9wZXJhbmQgYi4gVGhlIGRlc3RpbmF0aW9ucworLy8vICAgIHdpdGhpbiB0aGUgMTI4LWJpdCBkZXN0aW5hdGlvbiBhcmUgYXNzaWduZWQgdmFsdWVzIGFzIGZvbGxvd3M6CisvLy8gICAgQml0cyBbMTowXSBhcmUgdXNlZCB0byBhc3NpZ24gdmFsdWVzIHRvIGJpdHMgWzMxOjBdIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXRzIFszOjJdIGFyZSB1c2VkIHRvIGFzc2lnbiB2YWx1ZXMgdG8gYml0cyBbNjM6MzJdIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXRzIFs1OjRdIGFyZSB1c2VkIHRvIGFzc2lnbiB2YWx1ZXMgdG8gYml0cyBbOTU6NjRdIGluIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXRzIFs3OjZdIGFyZSB1c2VkIHRvIGFzc2lnbiB2YWx1ZXMgdG8gYml0cyBbMTI3Ojk2XSBpbiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0IHZhbHVlIGFzc2lnbm1lbnRzOgorLy8vICAgIDAwOiBCaXRzIFszMTowXSBjb3BpZWQgZnJvbSB0aGUgc3BlY2lmaWVkIG9wZXJhbmQuCisvLy8gICAgMDE6IEJpdHMgWzYzOjMyXSBjb3BpZWQgZnJvbSB0aGUgc3BlY2lmaWVkIG9wZXJhbmQuCisvLy8gICAgMTA6IEJpdHMgWzk1OjY0XSBjb3BpZWQgZnJvbSB0aGUgc3BlY2lmaWVkIG9wZXJhbmQuCisvLy8gICAgMTE6IEJpdHMgWzEyNzo5Nl0gY29waWVkIGZyb20gdGhlIHNwZWNpZmllZCBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgc2h1ZmZsZWQgdmFsdWVzLgorI2RlZmluZSBfbW1fc2h1ZmZsZV9wcyhhLCBiLCBtYXNrKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNmKShfX20xMjgpKGEpLCAoX192NHNmKShfX20xMjgpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICgoKG1hc2spID4+IDApICYgMHgzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoKChtYXNrKSA+PiAyKSAmIDB4MyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgobWFzaykgPj4gNCkgJiAweDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKG1hc2spID4+IDYpICYgMHgzKSk7IH0pCisKKy8vLyBcYnJpZWYgVW5wYWNrcyB0aGUgaGlnaC1vcmRlciAoaW5kZXggMiwzKSB2YWx1ZXMgZnJvbSB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mCisvLy8gICAgWzQgeCBmbG9hdF0gYW5kIGludGVybGVhdmVzIHRoZW0gaW50byBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHgKKy8vLyAgICBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlVOUENLSFBTIC8gVU5QQ0tIUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyAgICBCaXRzIFs5NTo2NF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMzE6MF0gb2YgdGhlIGRlc3RpbmF0aW9uLgorLy8vICAgIEJpdHMgWzEyNzo5Nl0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbOTU6NjRdIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyAgICBCaXRzIFs5NTo2NF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNjM6MzJdIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXRzIFsxMjc6OTZdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzEyNzo5Nl0gb2YgdGhlIGRlc3RpbmF0aW9uLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgaW50ZXJsZWF2ZWQgdmFsdWVzLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VucGFja2hpX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNmKV9fYSwgKF9fdjRzZilfX2IsIDIsIDYsIDMsIDcpOworfQorCisvLy8gXGJyaWVmIFVucGFja3MgdGhlIGxvdy1vcmRlciAoaW5kZXggMCwxKSB2YWx1ZXMgZnJvbSB0d28gMTI4LWJpdCB2ZWN0b3JzIG9mCisvLy8gICAgWzQgeCBmbG9hdF0gYW5kIGludGVybGVhdmVzIHRoZW0gaW50byBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHgKKy8vLyAgICBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlVOUENLTFBTIC8gVU5QQ0tMUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyAgICBCaXRzIFszMTowXSBhcmUgd3JpdHRlbiB0byBiaXRzIFszMTowXSBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gICAgQml0cyBbNjM6MzJdIGFyZSB3cml0dGVuIHRvIGJpdHMgWzk1OjY0XSBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHBhcmFtIF9fYgorLy8vICAgIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gICAgQml0cyBbMzE6MF0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbNjM6MzJdIG9mIHRoZSBkZXN0aW5hdGlvbi4KKy8vLyAgICBCaXRzIFs2MzozMl0gYXJlIHdyaXR0ZW4gdG8gYml0cyBbMTI3Ojk2XSBvZiB0aGUgZGVzdGluYXRpb24uCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBpbnRlcmxlYXZlZCB2YWx1ZXMuCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNrbG9fcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYiwgMCwgNCwgMSwgNSk7Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIKKy8vLyAgICAzMiBiaXRzIGFyZSBzZXQgdG8gdGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhlIHNlY29uZCBwYXJhbWV0ZXIuIFRoZSB1cHBlcgorLy8vICAgIDk2IGJpdHMgYXJlIHNldCB0byB0aGUgdXBwZXIgOTYgYml0cyBvZiB0aGUgZmlyc3QgcGFyYW1ldGVyLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZNT1ZTUyAvIE1PVlNTIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSB1cHBlciA5NiBiaXRzIGFyZQorLy8vICAgIHdyaXR0ZW4gdG8gdGhlIHVwcGVyIDk2IGJpdHMgb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDMyIGJpdHMgYXJlCisvLy8gICAgd3JpdHRlbiB0byB0aGUgbG93ZXIgMzIgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92ZV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iLCA0LCAxLCAyLCAzKTsKK30KKworLy8vIFxicmllZiBDb25zdHJ1Y3RzIGEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlcgorLy8vICAgIDY0IGJpdHMgYXJlIHNldCB0byB0aGUgdXBwZXIgNjQgYml0cyBvZiB0aGUgc2Vjb25kIHBhcmFtZXRlci4gVGhlIHVwcGVyCisvLy8gICAgNjQgYml0cyBhcmUgc2V0IHRvIHRoZSB1cHBlciA2NCBiaXRzIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVlVOUENLSFBEIC8gVU5QQ0tIUEQgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIHVwcGVyIDY0IGJpdHMgYXJlCisvLy8gICAgd3JpdHRlbiB0byB0aGUgdXBwZXIgNjQgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgdXBwZXIgNjQgYml0cyBhcmUKKy8vLyAgICB3cml0dGVuIHRvIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZSByZXN1bHQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlaGxfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYiwgNiwgNywgMiwgMyk7Cit9CisKKy8vLyBcYnJpZWYgQ29uc3RydWN0cyBhIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdLiBUaGUgbG93ZXIKKy8vLyAgICA2NCBiaXRzIGFyZSBzZXQgdG8gdGhlIGxvd2VyIDY0IGJpdHMgb2YgdGhlIGZpcnN0IHBhcmFtZXRlci4gVGhlIHVwcGVyCisvLy8gICAgNjQgYml0cyBhcmUgc2V0IHRvIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZSBzZWNvbmQgcGFyYW1ldGVyLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIFZVTlBDS0xQRCAvIFVOUENLTFBEIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uIFRoZSBsb3dlciA2NCBiaXRzIGFyZQorLy8vICAgIHdyaXR0ZW4gdG8gdGhlIGxvd2VyIDY0IGJpdHMgb2YgdGhlIHJlc3VsdC4KKy8vLyBccGFyYW0gX19iCisvLy8gICAgQSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4gVGhlIGxvd2VyIDY0IGJpdHMgYXJlCisvLy8gICAgd3JpdHRlbiB0byB0aGUgdXBwZXIgNjQgYml0cyBvZiB0aGUgcmVzdWx0LgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92ZWxoX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNmKV9fYSwgKF9fdjRzZilfX2IsIDAsIDEsIDQsIDUpOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgNjQtYml0IHZlY3RvciBvZiBbNCB4IGkxNl0gaW50byBhIDEyOC1iaXQgdmVjdG9yIG9mIFs0IHgKKy8vLyAgICBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQ1ZUUEkyUFMgKyBcYyBDT01QT1NJVEUgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFs0IHggaTE2XS4gVGhlIGVsZW1lbnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBhcmUgY29waWVkCisvLy8gICAgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB0aGlzIG9wZXJhbmQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb3BpZWQgYW5kIGNvbnZlcnRlZAorLy8vICAgIHZhbHVlcyBmcm9tIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBpMTZfcHMoX19tNjQgX19hKQoreworICBfX202NCBfX2IsIF9fYzsKKyAgX19tMTI4IF9fcjsKKworICBfX2IgPSBfbW1fc2V0emVyb19zaTY0KCk7CisgIF9fYiA9IF9tbV9jbXBndF9waTE2KF9fYiwgX19hKTsKKyAgX19jID0gX21tX3VucGFja2hpX3BpMTYoX19hLCBfX2IpOworICBfX3IgPSBfbW1fc2V0emVyb19wcygpOworICBfX3IgPSBfbW1fY3Z0cGkzMl9wcyhfX3IsIF9fYyk7CisgIF9fciA9IF9tbV9tb3ZlbGhfcHMoX19yLCBfX3IpOworICBfX2MgPSBfbW1fdW5wYWNrbG9fcGkxNihfX2EsIF9fYik7CisgIF9fciA9IF9tbV9jdnRwaTMyX3BzKF9fciwgX19jKTsKKworICByZXR1cm4gX19yOworfQorCisvLy8gXGJyaWVmIENvbnZlcnRzIGEgNjQtYml0IHZlY3RvciBvZiAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMgaW50byBhCisvLy8gICAgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQ1ZUUEkyUFMgKyBcYyBDT01QT1NJVEUgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gVGhlIGVsZW1lbnRzIG9mIHRoZQorLy8vICAgIGRlc3RpbmF0aW9uIGFyZSBjb3BpZWQgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB0aGlzIG9wZXJhbmQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb3BpZWQgYW5kIGNvbnZlcnRlZAorLy8vICAgIHZhbHVlcyBmcm9tIHRoZSBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHB1MTZfcHMoX19tNjQgX19hKQoreworICBfX202NCBfX2IsIF9fYzsKKyAgX19tMTI4IF9fcjsKKworICBfX2IgPSBfbW1fc2V0emVyb19zaTY0KCk7CisgIF9fYyA9IF9tbV91bnBhY2toaV9waTE2KF9fYSwgX19iKTsKKyAgX19yID0gX21tX3NldHplcm9fcHMoKTsKKyAgX19yID0gX21tX2N2dHBpMzJfcHMoX19yLCBfX2MpOworICBfX3IgPSBfbW1fbW92ZWxoX3BzKF9fciwgX19yKTsKKyAgX19jID0gX21tX3VucGFja2xvX3BpMTYoX19hLCBfX2IpOworICBfX3IgPSBfbW1fY3Z0cGkzMl9wcyhfX3IsIF9fYyk7CisKKyAgcmV0dXJuIF9fcjsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyB0aGUgbG93ZXIgZm91ciA4LWJpdCB2YWx1ZXMgZnJvbSBhIDY0LWJpdCB2ZWN0b3Igb2YgWzggeCBpOF0KKy8vLyAgICBpbnRvIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQ1ZUUEkyUFMgKyBcYyBDT01QT1NJVEUgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFs4IHggaThdLiBUaGUgZWxlbWVudHMgb2YgdGhlIGRlc3RpbmF0aW9uIGFyZSBjb3BpZWQKKy8vLyAgICBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGxvd2VyIDQgZWxlbWVudHMgaW4gdGhpcyBvcGVyYW5kLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gY29udGFpbmluZyB0aGUgY29waWVkIGFuZCBjb252ZXJ0ZWQKKy8vLyAgICB2YWx1ZXMgZnJvbSB0aGUgb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwaThfcHMoX19tNjQgX19hKQoreworICBfX202NCBfX2I7CisKKyAgX19iID0gX21tX3NldHplcm9fc2k2NCgpOworICBfX2IgPSBfbW1fY21wZ3RfcGk4KF9fYiwgX19hKTsKKyAgX19iID0gX21tX3VucGFja2xvX3BpOChfX2EsIF9fYik7CisKKyAgcmV0dXJuIF9tbV9jdnRwaTE2X3BzKF9fYik7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgdGhlIGxvd2VyIGZvdXIgdW5zaWduZWQgOC1iaXQgaW50ZWdlciB2YWx1ZXMgZnJvbSBhIDY0LWJpdAorLy8vICAgIHZlY3RvciBvZiBbOCB4IHU4XSBpbnRvIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQ1ZUUEkyUFMgKyBcYyBDT01QT1NJVEUgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIHVuc2lnbmVkIDgtYml0IGludGVnZXIgdmFsdWVzLiBUaGUgZWxlbWVudHMgb2YgdGhlCisvLy8gICAgZGVzdGluYXRpb24gYXJlIGNvcGllZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGxvd2VyIDQgZWxlbWVudHMgaW4gdGhpcworLy8vICAgIG9wZXJhbmQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSBjb250YWluaW5nIHRoZSBjb3BpZWQgYW5kIGNvbnZlcnRlZAorLy8vICAgIHZhbHVlcyBmcm9tIHRoZSBzb3VyY2Ugb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwdThfcHMoX19tNjQgX19hKQoreworICBfX202NCBfX2I7CisKKyAgX19iID0gX21tX3NldHplcm9fc2k2NCgpOworICBfX2IgPSBfbW1fdW5wYWNrbG9fcGk4KF9fYSwgX19iKTsKKworICByZXR1cm4gX21tX2N2dHBpMTZfcHMoX19iKTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyB0aGUgdHdvIDMyLWJpdCBzaWduZWQgaW50ZWdlciB2YWx1ZXMgZnJvbSBlYWNoIDY0LWJpdCB2ZWN0b3IKKy8vLyAgICBvcGVyYW5kIG9mIFsyIHggaTMyXSBpbnRvIGEgMTI4LWJpdCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQ1ZUUEkyUFMgKyBcYyBDT01QT1NJVEUgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSA2NC1iaXQgdmVjdG9yIG9mIFsyIHggaTMyXS4gVGhlIGxvd2VyIGVsZW1lbnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBhcmUKKy8vLyAgICBjb3BpZWQgZnJvbSB0aGUgZWxlbWVudHMgaW4gdGhpcyBvcGVyYW5kLgorLy8vIFxwYXJhbSBfX2IKKy8vLyAgICBBIDY0LWJpdCB2ZWN0b3Igb2YgWzIgeCBpMzJdLiBUaGUgdXBwZXIgZWxlbWVudHMgb2YgdGhlIGRlc3RpbmF0aW9uIGFyZQorLy8vICAgIGNvcGllZCBmcm9tIHRoZSBlbGVtZW50cyBpbiB0aGlzIG9wZXJhbmQuCisvLy8gXHJldHVybnMgQSAxMjgtYml0IHZlY3RvciBvZiBbNCB4IGZsb2F0XSB3aG9zZSBsb3dlciA2NCBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgY29waWVkIGFuZCBjb252ZXJ0ZWQgdmFsdWVzIGZyb20gdGhlIGZpcnN0IG9wZXJhbmQuIFRoZSB1cHBlciA2NCBiaXRzCisvLy8gICAgY29udGFpbiB0aGUgY29waWVkIGFuZCBjb252ZXJ0ZWQgdmFsdWVzIGZyb20gdGhlIHNlY29uZCBvcGVyYW5kLgorc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBpMzJ4Ml9wcyhfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgX19tMTI4IF9fYzsKKworICBfX2MgPSBfbW1fc2V0emVyb19wcygpOworICBfX2MgPSBfbW1fY3Z0cGkzMl9wcyhfX2MsIF9fYik7CisgIF9fYyA9IF9tbV9tb3ZlbGhfcHMoX19jLCBfX2MpOworCisgIHJldHVybiBfbW1fY3Z0cGkzMl9wcyhfX2MsIF9fYSk7Cit9CisKKy8vLyBcYnJpZWYgQ29udmVydHMgZWFjaCBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGVsZW1lbnQgb2YgYSAxMjgtYml0CisvLy8gICAgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGludG8gYSAxNi1iaXQgc2lnbmVkIGludGVnZXIsIGFuZAorLy8vICAgIHBhY2tzIHRoZSByZXN1bHRzIGludG8gYSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdLiBJZiB0aGUKKy8vLyAgICBmbG9hdGluZy1wb2ludCBlbGVtZW50IGlzIE5hTiBvciBpbmZpbml0eSwgb3IgaWYgdGhlIGZsb2F0aW5nLXBvaW50CisvLy8gICAgZWxlbWVudCBpcyBncmVhdGVyIHRoYW4gMHg3RkZGRkZGRiBvciBsZXNzIHRoYW4gLTB4ODAwMCwgaXQgaXMgY29udmVydGVkCisvLy8gICAgdG8gMHg4MDAwLiBPdGhlcndpc2UgaWYgdGhlIGZsb2F0aW5nLXBvaW50IGVsZW1lbnQgaXMgZ3JlYXRlcgorLy8vICAgIHRoYW4gMHg3RkZGLCBpdCBpcyBjb252ZXJ0ZWQgdG8gMHg3RkZGLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIENWVFBTMlBJICsgXGMgQ09NUE9TSVRFIGluc3RydWN0aW9uLgorLy8vCisvLy8gXHBhcmFtIF9fYQorLy8vICAgIEEgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzQgeCBpMTZdIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnRlZAorLy8vICAgIHZhbHVlcy4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBzX3BpMTYoX19tMTI4IF9fYSkKK3sKKyAgX19tNjQgX19iLCBfX2M7CisKKyAgX19iID0gX21tX2N2dHBzX3BpMzIoX19hKTsKKyAgX19hID0gX21tX21vdmVobF9wcyhfX2EsIF9fYSk7CisgIF9fYyA9IF9tbV9jdnRwc19waTMyKF9fYSk7CisKKyAgcmV0dXJuIF9tbV9wYWNrc19waTMyKF9fYiwgX19jKTsKK30KKworLy8vIFxicmllZiBDb252ZXJ0cyBlYWNoIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgZWxlbWVudCBvZiBhIDEyOC1iaXQKKy8vLyAgICBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0gaW50byBhbiA4LWJpdCBzaWduZWQgaW50ZWdlciwgYW5kCisvLy8gICAgcGFja3MgdGhlIHJlc3VsdHMgaW50byB0aGUgbG93ZXIgMzIgYml0cyBvZiBhIDY0LWJpdCBpbnRlZ2VyIHZlY3RvciBvZgorLy8vICAgIFs4IHggaThdLiBUaGUgdXBwZXIgMzIgYml0cyBvZiB0aGUgdmVjdG9yIGFyZSBzZXQgdG8gMC4gSWYgdGhlCisvLy8gICAgZmxvYXRpbmctcG9pbnQgZWxlbWVudCBpcyBOYU4gb3IgaW5maW5pdHksIG9yIGlmIHRoZSBmbG9hdGluZy1wb2ludAorLy8vICAgIGVsZW1lbnQgaXMgZ3JlYXRlciB0aGFuIDB4N0ZGRkZGRkYgb3IgbGVzcyB0aGFuIC0weDgwLCBpdCBpcyBjb252ZXJ0ZWQKKy8vLyAgICB0byAweDgwLiBPdGhlcndpc2UgaWYgdGhlIGZsb2F0aW5nLXBvaW50IGVsZW1lbnQgaXMgZ3JlYXRlcgorLy8vICAgIHRoYW4gMHg3RiwgaXQgaXMgY29udmVydGVkIHRvIDB4N0YuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgQ1ZUUFMyUEkgKyBcYyBDT01QT1NJVEUgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgMTI4LWJpdCBmbG9hdGluZy1wb2ludCB2ZWN0b3Igb2YgWzQgeCBmbG9hdF0uCisvLy8gXHJldHVybnMgQSA2NC1iaXQgaW50ZWdlciB2ZWN0b3Igb2YgWzggeCBpOF0uIFRoZSBsb3dlciAzMiBiaXRzIGNvbnRhaW4gdGhlCisvLy8gICAgY29udmVydGVkIHZhbHVlcyBhbmQgdGhlIHVwcHBlciAzMiBiaXRzIGFyZSBzZXQgdG8gemVyby4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBzX3BpOChfX20xMjggX19hKQoreworICBfX202NCBfX2IsIF9fYzsKKworICBfX2IgPSBfbW1fY3Z0cHNfcGkxNihfX2EpOworICBfX2MgPSBfbW1fc2V0emVyb19zaTY0KCk7CisKKyAgcmV0dXJuIF9tbV9wYWNrc19waTE2KF9fYiwgX19jKTsKK30KKworLy8vIFxicmllZiBFeHRyYWN0cyB0aGUgc2lnbiBiaXRzIGZyb20gZWFjaCBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50CisvLy8gICAgZWxlbWVudCBvZiBhIDEyOC1iaXQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIG9mIFs0IHggZmxvYXRdIGFuZCByZXR1cm5zIHRoZQorLy8vICAgIHNpZ24gYml0cyBpbiBiaXRzIFswOjNdIG9mIHRoZSByZXN1bHQuIEJpdHMgWzMxOjRdIG9mIHRoZSByZXN1bHQgYXJlIHNldAorLy8vICAgIHRvIHplcm8uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgVk1PVk1TS1BTIC8gTU9WTVNLUFMgaW5zdHJ1Y3Rpb24uCisvLy8KKy8vLyBccGFyYW0gX19hCisvLy8gICAgQSAxMjgtYml0IGZsb2F0aW5nLXBvaW50IHZlY3RvciBvZiBbNCB4IGZsb2F0XS4KKy8vLyBccmV0dXJucyBBIDMyLWJpdCBpbnRlZ2VyIHZhbHVlLiBCaXRzIFszOjBdIGNvbnRhaW4gdGhlIHNpZ24gYml0cyBmcm9tIGVhY2gKKy8vLyAgICBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGVsZW1lbnQgb2YgdGhlIHBhcmFtZXRlci4gQml0cyBbMzE6NF0gYXJlCisvLy8gICAgc2V0IHRvIHplcm8uCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92ZW1hc2tfcHMoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21vdm1za3BzKChfX3Y0c2YpX19hKTsKK30KKworCisjZGVmaW5lIF9NTV9BTElHTjE2IF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTYpKSkKKworI2RlZmluZSBfTU1fU0hVRkZMRSh6LCB5LCB4LCB3KSAoKCh6KSA8PCA2KSB8ICgoeSkgPDwgNCkgfCAoKHgpIDw8IDIpIHwgKHcpKQorCisjZGVmaW5lIF9NTV9FWENFUFRfSU5WQUxJRCAgICAoMHgwMDAxKQorI2RlZmluZSBfTU1fRVhDRVBUX0RFTk9STSAgICAgKDB4MDAwMikKKyNkZWZpbmUgX01NX0VYQ0VQVF9ESVZfWkVSTyAgICgweDAwMDQpCisjZGVmaW5lIF9NTV9FWENFUFRfT1ZFUkZMT1cgICAoMHgwMDA4KQorI2RlZmluZSBfTU1fRVhDRVBUX1VOREVSRkxPVyAgKDB4MDAxMCkKKyNkZWZpbmUgX01NX0VYQ0VQVF9JTkVYQUNUICAgICgweDAwMjApCisjZGVmaW5lIF9NTV9FWENFUFRfTUFTSyAgICAgICAoMHgwMDNmKQorCisjZGVmaW5lIF9NTV9NQVNLX0lOVkFMSUQgICAgICAoMHgwMDgwKQorI2RlZmluZSBfTU1fTUFTS19ERU5PUk0gICAgICAgKDB4MDEwMCkKKyNkZWZpbmUgX01NX01BU0tfRElWX1pFUk8gICAgICgweDAyMDApCisjZGVmaW5lIF9NTV9NQVNLX09WRVJGTE9XICAgICAoMHgwNDAwKQorI2RlZmluZSBfTU1fTUFTS19VTkRFUkZMT1cgICAgKDB4MDgwMCkKKyNkZWZpbmUgX01NX01BU0tfSU5FWEFDVCAgICAgICgweDEwMDApCisjZGVmaW5lIF9NTV9NQVNLX01BU0sgICAgICAgICAoMHgxZjgwKQorCisjZGVmaW5lIF9NTV9ST1VORF9ORUFSRVNUICAgICAoMHgwMDAwKQorI2RlZmluZSBfTU1fUk9VTkRfRE9XTiAgICAgICAgKDB4MjAwMCkKKyNkZWZpbmUgX01NX1JPVU5EX1VQICAgICAgICAgICgweDQwMDApCisjZGVmaW5lIF9NTV9ST1VORF9UT1dBUkRfWkVSTyAoMHg2MDAwKQorI2RlZmluZSBfTU1fUk9VTkRfTUFTSyAgICAgICAgKDB4NjAwMCkKKworI2RlZmluZSBfTU1fRkxVU0hfWkVST19NQVNLICAgKDB4ODAwMCkKKyNkZWZpbmUgX01NX0ZMVVNIX1pFUk9fT04gICAgICgweDgwMDApCisjZGVmaW5lIF9NTV9GTFVTSF9aRVJPX09GRiAgICAoMHgwMDAwKQorCisjZGVmaW5lIF9NTV9HRVRfRVhDRVBUSU9OX01BU0soKSAoX21tX2dldGNzcigpICYgX01NX01BU0tfTUFTSykKKyNkZWZpbmUgX01NX0dFVF9FWENFUFRJT05fU1RBVEUoKSAoX21tX2dldGNzcigpICYgX01NX0VYQ0VQVF9NQVNLKQorI2RlZmluZSBfTU1fR0VUX0ZMVVNIX1pFUk9fTU9ERSgpIChfbW1fZ2V0Y3NyKCkgJiBfTU1fRkxVU0hfWkVST19NQVNLKQorI2RlZmluZSBfTU1fR0VUX1JPVU5ESU5HX01PREUoKSAoX21tX2dldGNzcigpICYgX01NX1JPVU5EX01BU0spCisKKyNkZWZpbmUgX01NX1NFVF9FWENFUFRJT05fTUFTSyh4KSAoX21tX3NldGNzcigoX21tX2dldGNzcigpICYgfl9NTV9NQVNLX01BU0spIHwgKHgpKSkKKyNkZWZpbmUgX01NX1NFVF9FWENFUFRJT05fU1RBVEUoeCkgKF9tbV9zZXRjc3IoKF9tbV9nZXRjc3IoKSAmIH5fTU1fRVhDRVBUX01BU0spIHwgKHgpKSkKKyNkZWZpbmUgX01NX1NFVF9GTFVTSF9aRVJPX01PREUoeCkgKF9tbV9zZXRjc3IoKF9tbV9nZXRjc3IoKSAmIH5fTU1fRkxVU0hfWkVST19NQVNLKSB8ICh4KSkpCisjZGVmaW5lIF9NTV9TRVRfUk9VTkRJTkdfTU9ERSh4KSAoX21tX3NldGNzcigoX21tX2dldGNzcigpICYgfl9NTV9ST1VORF9NQVNLKSB8ICh4KSkpCisKKyNkZWZpbmUgX01NX1RSQU5TUE9TRTRfUFMocm93MCwgcm93MSwgcm93Miwgcm93MykgXAorZG8geyBcCisgIF9fbTEyOCB0bXAzLCB0bXAyLCB0bXAxLCB0bXAwOyBcCisgIHRtcDAgPSBfbW1fdW5wYWNrbG9fcHMoKHJvdzApLCAocm93MSkpOyBcCisgIHRtcDIgPSBfbW1fdW5wYWNrbG9fcHMoKHJvdzIpLCAocm93MykpOyBcCisgIHRtcDEgPSBfbW1fdW5wYWNraGlfcHMoKHJvdzApLCAocm93MSkpOyBcCisgIHRtcDMgPSBfbW1fdW5wYWNraGlfcHMoKHJvdzIpLCAocm93MykpOyBcCisgIChyb3cwKSA9IF9tbV9tb3ZlbGhfcHModG1wMCwgdG1wMik7IFwKKyAgKHJvdzEpID0gX21tX21vdmVobF9wcyh0bXAyLCB0bXAwKTsgXAorICAocm93MikgPSBfbW1fbW92ZWxoX3BzKHRtcDEsIHRtcDMpOyBcCisgIChyb3czKSA9IF9tbV9tb3ZlaGxfcHModG1wMywgdG1wMSk7IFwKK30gd2hpbGUgKDApCisKKy8qIEFsaWFzZXMgZm9yIGNvbXBhdGliaWxpdHkuICovCisjZGVmaW5lIF9tX3BleHRydyBfbW1fZXh0cmFjdF9waTE2CisjZGVmaW5lIF9tX3BpbnNydyBfbW1faW5zZXJ0X3BpMTYKKyNkZWZpbmUgX21fcG1heHN3IF9tbV9tYXhfcGkxNgorI2RlZmluZSBfbV9wbWF4dWIgX21tX21heF9wdTgKKyNkZWZpbmUgX21fcG1pbnN3IF9tbV9taW5fcGkxNgorI2RlZmluZSBfbV9wbWludWIgX21tX21pbl9wdTgKKyNkZWZpbmUgX21fcG1vdm1za2IgX21tX21vdmVtYXNrX3BpOAorI2RlZmluZSBfbV9wbXVsaHV3IF9tbV9tdWxoaV9wdTE2CisjZGVmaW5lIF9tX3BzaHVmdyBfbW1fc2h1ZmZsZV9waTE2CisjZGVmaW5lIF9tX21hc2ttb3ZxIF9tbV9tYXNrbW92ZV9zaTY0CisjZGVmaW5lIF9tX3BhdmdiIF9tbV9hdmdfcHU4CisjZGVmaW5lIF9tX3Bhdmd3IF9tbV9hdmdfcHUxNgorI2RlZmluZSBfbV9wc2FkYncgX21tX3NhZF9wdTgKKyNkZWZpbmUgX21fIF9tbV8KKyNkZWZpbmUgX21fIF9tbV8KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisvKiBVZ2x5IGhhY2sgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IChjb21wYXRpYmxlIHdpdGggZ2NjKSAqLworI2lmIGRlZmluZWQoX19TU0UyX18pICYmICFfX2J1aWxkaW5nX21vZHVsZShfQnVpbHRpbl9pbnRyaW5zaWNzKQorI2luY2x1ZGUgPGVtbWludHJpbi5oPgorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1hNTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3hvcGludHJpbi5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS94b3BpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGYwY2VjCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS94b3BpbnRyaW4uaApAQCAtMCwwICsxLDc4MiBAQAorLyo9PT0tLS0tIHhvcGludHJpbi5oIC0gWE9QIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX1g4NklOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8eG9waW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX1hPUElOVFJJTl9ICisjZGVmaW5lIF9fWE9QSU5UUklOX0gKKworI2luY2x1ZGUgPGZtYTRpbnRyaW4uaD4KKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJ4b3AiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFjY3NfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CLCBfX20xMjhpIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwbWFjc3N3dygoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IsIChfX3Y4aGkpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWNjX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hY3N3dygoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IsIChfX3Y4aGkpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWNjc2RfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CLCBfX20xMjhpIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwbWFjc3N3ZCgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IsIChfX3Y0c2kpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWNjZF9lcGkxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IsIF9fbTEyOGkgX19DKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBtYWNzd2QoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CLCAoX192NHNpKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFjY3NfZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CLCBfX20xMjhpIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwbWFjc3NkZCgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IsIChfX3Y0c2kpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWNjX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hY3NkZCgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IsIChfX3Y0c2kpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWNjc2xvX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hY3NzZHFsKChfX3Y0c2kpX19BLCAoX192NHNpKV9fQiwgKF9fdjJkaSlfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hY2Nsb19lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IsIF9fbTEyOGkgX19DKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBtYWNzZHFsKChfX3Y0c2kpX19BLCAoX192NHNpKV9fQiwgKF9fdjJkaSlfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hY2NzaGlfZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CLCBfX20xMjhpIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwbWFjc3NkcWgoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CLCAoX192MmRpKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFjY2hpX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hY3NkcWgoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CLCAoX192MmRpKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFkZHNkX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hZGNzc3dkKChfX3Y4aGkpX19BLCAoX192OGhpKV9fQiwgKF9fdjRzaSlfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hZGRkX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hZGNzd2QoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CLCAoX192NHNpKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZHdfZXBpOChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZGJ3KChfX3YxNnFpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZGRfZXBpOChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZGJkKChfX3YxNnFpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZHFfZXBpOChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZGJxKChfX3YxNnFpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZGRfZXBpMTYoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGR3ZCgoX192OGhpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZHFfZXBpMTYoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGR3cSgoX192OGhpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZHFfZXBpMzIoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGRkcSgoX192NHNpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZHdfZXB1OChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZHVidygoX192MTZxaSlfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hhZGRkX2VwdTgoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGR1YmQoKF9fdjE2cWkpX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oYWRkcV9lcHU4KF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBoYWRkdWJxKChfX3YxNnFpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZGRfZXB1MTYoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGR1d2QoKF9fdjhoaSlfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hhZGRxX2VwdTE2KF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBoYWRkdXdxKChfX3Y4aGkpX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oYWRkcV9lcHUzMihfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZHVkcSgoX192NHNpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1YndfZXBpOChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaHN1YmJ3KChfX3YxNnFpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1YmRfZXBpMTYoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhzdWJ3ZCgoX192OGhpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1YnFfZXBpMzIoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhzdWJkcSgoX192NHNpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21vdl9zaTEyOChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IsIF9fbTEyOGkgX19DKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBjbW92KChfX3YyZGkpX19BLCAoX192MmRpKV9fQiwgKF9fdjJkaSlfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Ntb3Zfc2kyNTYoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CLCBfX20yNTZpIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3ZwY21vdl8yNTYoKF9fdjRkaSlfX0EsIChfX3Y0ZGkpX19CLCAoX192NGRpKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcGVybV9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHBlcm0oKF9fdjE2cWkpX19BLCAoX192MTZxaSlfX0IsIChfX3YxNnFpKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcm90X2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3RiKChfX3YxNnFpKV9fQSwgKF9fdjE2cWkpX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9yb3RfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3R3KChfX3Y4aGkpX19BLCAoX192OGhpKV9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcm90X2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwcm90ZCgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3JvdF9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHJvdHEoKF9fdjJkaSlfX0EsIChfX3YyZGkpX19CKTsKK30KKworI2RlZmluZSBfbW1fcm90aV9lcGk4KEEsIE4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHJvdGJpKChfX3YxNnFpKShfX20xMjhpKShBKSwgKE4pKTsgfSkKKworI2RlZmluZSBfbW1fcm90aV9lcGkxNihBLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3R3aSgoX192OGhpKShfX20xMjhpKShBKSwgKE4pKTsgfSkKKworI2RlZmluZSBfbW1fcm90aV9lcGkzMihBLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3RkaSgoX192NHNpKShfX20xMjhpKShBKSwgKE4pKTsgfSkKKworI2RlZmluZSBfbW1fcm90aV9lcGk2NChBLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3RxaSgoX192MmRpKShfX20xMjhpKShBKSwgKE4pKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaGxfZXBpOChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHNobGIoKF9fdjE2cWkpX19BLCAoX192MTZxaSlfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NobF9lcGkxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHNobHcoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaGxfZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBzaGxkKChfX3Y0c2kpX19BLCAoX192NHNpKV9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2hsX2VwaTY0KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwc2hscSgoX192MmRpKV9fQSwgKF9fdjJkaSlfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYV9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwc2hhYigoX192MTZxaSlfX0EsIChfX3YxNnFpKV9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2hhX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwc2hhdygoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYV9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHNoYWQoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaGFfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBzaGFxKChfX3YyZGkpX19BLCAoX192MmRpKV9fQik7Cit9CisKKyNkZWZpbmUgX21tX2NvbV9lcHU4KEEsIEIsIE4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGNvbXViKChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKE4pKTsgfSkKKworI2RlZmluZSBfbW1fY29tX2VwdTE2KEEsIEIsIE4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGNvbXV3KChfX3Y4aGkpKF9fbTEyOGkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSkoX19tMTI4aSkoQiksIChOKSk7IH0pCisKKyNkZWZpbmUgX21tX2NvbV9lcHUzMihBLCBCLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBjb211ZCgoX192NHNpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEIpLCAoTikpOyB9KQorCisjZGVmaW5lIF9tbV9jb21fZXB1NjQoQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwY29tdXEoKF9fdjJkaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShCKSwgKE4pKTsgfSkKKworI2RlZmluZSBfbW1fY29tX2VwaTgoQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwY29tYigoX192MTZxaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKE4pKTsgfSkKKworI2RlZmluZSBfbW1fY29tX2VwaTE2KEEsIEIsIE4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGNvbXcoKF9fdjhoaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKEIpLCAoTikpOyB9KQorCisjZGVmaW5lIF9tbV9jb21fZXBpMzIoQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwY29tZCgoX192NHNpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoQiksIChOKSk7IH0pCisKKyNkZWZpbmUgX21tX2NvbV9lcGk2NChBLCBCLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBjb21xKChfX3YyZGkpKF9fbTEyOGkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShCKSwgKE4pKTsgfSkKKworI2RlZmluZSBfTU1fUENPTUNUUkxfTFQgICAgMAorI2RlZmluZSBfTU1fUENPTUNUUkxfTEUgICAgMQorI2RlZmluZSBfTU1fUENPTUNUUkxfR1QgICAgMgorI2RlZmluZSBfTU1fUENPTUNUUkxfR0UgICAgMworI2RlZmluZSBfTU1fUENPTUNUUkxfRVEgICAgNAorI2RlZmluZSBfTU1fUENPTUNUUkxfTkVRICAgNQorI2RlZmluZSBfTU1fUENPTUNUUkxfRkFMU0UgNgorI2RlZmluZSBfTU1fUENPTUNUUkxfVFJVRSAgNworCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWx0X2VwdTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTFQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWxlX2VwdTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTEUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWd0X2VwdTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR1QpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWdlX2VwdTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWVxX2VwdTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbW5lcV9lcHU4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1OChfX0EsIF9fQiwgX01NX1BDT01DVFJMX05FUSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZmFsc2VfZXB1OChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTgoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9GQUxTRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tdHJ1ZV9lcHU4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1OChfX0EsIF9fQiwgX01NX1BDT01DVFJMX1RSVUUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWx0X2VwdTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9MVCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbGVfZXB1MTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHUxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21ndF9lcHUxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTE2KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR1QpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWdlX2VwdTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9HRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZXFfZXB1MTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHUxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0VRKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21uZXFfZXB1MTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHUxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX05FUSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZmFsc2VfZXB1MTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHUxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0ZBTFNFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb210cnVlX2VwdTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9UUlVFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21sdF9lcHUzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTFQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWxlX2VwdTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9MRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZ3RfZXB1MzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHUzMihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21nZV9lcHUzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWVxX2VwdTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9FUSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbmVxX2VwdTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9ORVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWZhbHNlX2VwdTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9GQUxTRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tdHJ1ZV9lcHUzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfVFJVRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbHRfZXB1NjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21sZV9lcHU2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTEUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWd0X2VwdTY0KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1NjQoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9HVCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZ2VfZXB1NjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21lcV9lcHU2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbW5lcV9lcHU2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTkVRKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21mYWxzZV9lcHU2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRkFMU0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbXRydWVfZXB1NjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX1RSVUUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWx0X2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTFQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWxlX2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTEUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWd0X2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR1QpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWdlX2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWVxX2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbW5lcV9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpOChfX0EsIF9fQiwgX01NX1BDT01DVFJMX05FUSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZmFsc2VfZXBpOChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTgoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9GQUxTRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tdHJ1ZV9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpOChfX0EsIF9fQiwgX01NX1BDT01DVFJMX1RSVUUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWx0X2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9MVCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbGVfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGkxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21ndF9lcGkxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTE2KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR1QpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWdlX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9HRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZXFfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGkxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0VRKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21uZXFfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGkxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX05FUSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZmFsc2VfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGkxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0ZBTFNFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb210cnVlX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9UUlVFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21sdF9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTFQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWxlX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9MRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZ3RfZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGkzMihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21nZV9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWVxX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9FUSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbmVxX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9ORVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWZhbHNlX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9GQUxTRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tdHJ1ZV9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfVFJVRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbHRfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21sZV9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTEUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWd0X2VwaTY0KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpNjQoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9HVCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZ2VfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21lcV9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbW5lcV9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTkVRKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21mYWxzZV9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRkFMU0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbXRydWVfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX1RSVUUpOworfQorCisjZGVmaW5lIF9tbV9wZXJtdXRlMl9wZChYLCBZLCBDLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdnBlcm1pbDJwZCgoX192MmRmKShfX20xMjhkKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQyksIChJKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3Blcm11dGUyX3BkKFgsIFksIEMsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92cGVybWlsMnBkMjU2KChfX3Y0ZGYpKF9fbTI1NmQpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoWSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShDKSwgKEkpKTsgfSkKKworI2RlZmluZSBfbW1fcGVybXV0ZTJfcHMoWCwgWSwgQywgSSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfdnBlcm1pbDJwcygoX192NHNmKShfX20xMjgpKFgpLCAoX192NHNmKShfX20xMjgpKFkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShDKSwgKEkpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfcGVybXV0ZTJfcHMoWCwgWSwgQywgSSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfdnBlcm1pbDJwczI1NigoX192OHNmKShfX20yNTYpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKFkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShDKSwgKEkpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZyY3pfc3MoX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZyY3pzcygoX192NHNmKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZnJjel9zZChfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmcmN6c2QoKF9fdjJkZilfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZnJjel9wcyhfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92ZnJjenBzKChfX3Y0c2YpX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mcmN6X3BkKF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZyY3pwZCgoX192MmRmKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9mcmN6X3BzKF9fbTI1NiBfX0EpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZmcmN6cHMyNTYoKF9fdjhzZilfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2ZyY3pfcGQoX19tMjU2ZCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92ZnJjenBkMjU2KChfX3Y0ZGYpX19BKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19YT1BJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS94c2F2ZWNpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUveHNhdmVjaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk4NDcwYQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUveHNhdmVjaW50cmluLmgKQEAgLTAsMCArMSw0OCBAQAorLyo9PT0tLS0tIHhzYXZlY2ludHJpbi5oIC0gWFNBVkVDIGludHJpbnNpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPHhzYXZlY2ludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19YU0FWRUNJTlRSSU5fSAorI2RlZmluZSBfX1hTQVZFQ0lOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgIF9fdGFyZ2V0X18oInhzYXZlYyIpKSkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK194c2F2ZWModm9pZCAqX19wLCB1bnNpZ25lZCBsb25nIGxvbmcgX19tKSB7CisgIF9fYnVpbHRpbl9pYTMyX3hzYXZlYyhfX3AsIF9fbSk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX3hzYXZlYzY0KHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICBfX2J1aWx0aW5faWEzMl94c2F2ZWM2NChfX3AsIF9fbSk7Cit9CisjZW5kaWYKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUveHNhdmVpbnRyaW4uaCBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUveHNhdmVpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmU2YjJlCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS94c2F2ZWludHJpbi5oCkBAIC0wLDAgKzEsNTggQEAKKy8qPT09LS0tLSB4c2F2ZWludHJpbi5oIC0gWFNBVkUgaW50cmluc2ljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8eHNhdmVpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fWFNBVkVJTlRSSU5fSAorI2RlZmluZSBfX1hTQVZFSU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCAgX190YXJnZXRfXygieHNhdmUiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfeHNhdmUodm9pZCAqX19wLCB1bnNpZ25lZCBsb25nIGxvbmcgX19tKSB7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl94c2F2ZShfX3AsIF9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfeHJzdG9yKHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICByZXR1cm4gX19idWlsdGluX2lhMzJfeHJzdG9yKF9fcCwgX19tKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfeHNhdmU2NCh2b2lkICpfX3AsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX20pIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3hzYXZlNjQoX19wLCBfX20pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX3hyc3RvcjY0KHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICByZXR1cm4gX19idWlsdGluX2lhMzJfeHJzdG9yNjQoX19wLCBfX20pOworfQorI2VuZGlmCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3hzYXZlb3B0aW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3hzYXZlb3B0aW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNmYWFlNwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUveHNhdmVvcHRpbnRyaW4uaApAQCAtMCwwICsxLDQ4IEBACisvKj09PS0tLS0geHNhdmVvcHRpbnRyaW4uaCAtIFhTQVZFT1BUIGludHJpbnNpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPHhzYXZlb3B0aW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX1hTQVZFT1BUSU5UUklOX0gKKyNkZWZpbmUgX19YU0FWRU9QVElOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgIF9fdGFyZ2V0X18oInhzYXZlb3B0IikpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX3hzYXZlb3B0KHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICByZXR1cm4gX19idWlsdGluX2lhMzJfeHNhdmVvcHQoX19wLCBfX20pOworfQorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK194c2F2ZW9wdDY0KHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICByZXR1cm4gX19idWlsdGluX2lhMzJfeHNhdmVvcHQ2NChfX3AsIF9fbSk7Cit9CisjZW5kaWYKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2luY2x1ZGUveHNhdmVzaW50cmluLmggYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3hzYXZlc2ludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZTU0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3hzYXZlc2ludHJpbi5oCkBAIC0wLDAgKzEsNTggQEAKKy8qPT09LS0tLSB4c2F2ZXNpbnRyaW4uaCAtIFhTQVZFUyBpbnRyaW5zaWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDx4c2F2ZXNpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fWFNBVkVTSU5UUklOX0gKKyNkZWZpbmUgX19YU0FWRVNJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sICBfX3RhcmdldF9fKCJ4c2F2ZXMiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfeHNhdmVzKHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICBfX2J1aWx0aW5faWEzMl94c2F2ZXMoX19wLCBfX20pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX3hyc3RvcnModm9pZCAqX19wLCB1bnNpZ25lZCBsb25nIGxvbmcgX19tKSB7CisgIF9fYnVpbHRpbl9pYTMyX3hyc3RvcnMoX19wLCBfX20pOworfQorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK194cnN0b3JzNjQodm9pZCAqX19wLCB1bnNpZ25lZCBsb25nIGxvbmcgX19tKSB7CisgIF9fYnVpbHRpbl9pYTMyX3hyc3RvcnM2NChfX3AsIF9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfeHNhdmVzNjQodm9pZCAqX19wLCB1bnNpZ25lZCBsb25nIGxvbmcgX19tKSB7CisgIF9fYnVpbHRpbl9pYTMyX3hzYXZlczY0KF9fcCwgX19tKTsKK30KKyNlbmRpZgorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS94dGVzdGludHJpbi5oIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvaW5jbHVkZS94dGVzdGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMzM3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9pbmNsdWRlL3h0ZXN0aW50cmluLmgKQEAgLTAsMCArMSw0MSBAQAorLyo9PT0tLS0tIHh0ZXN0aW50cmluLmggLSBYVEVTVCBpbnRyaW5zaWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDx4dGVzdGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19YVEVTVElOVFJJTl9ICisjZGVmaW5lIF9fWFRFU1RJTlRSSU5fSAorCisvKiB4dGVzdCByZXR1cm5zIG5vbi16ZXJvIGlmIHRoZSBpbnN0cnVjdGlvbiBpcyBleGVjdXRlZCB3aXRoaW4gYW4gUlRNIG9yIGFjdGl2ZQorICogSExFIHJlZ2lvbi4gKi8KKy8qIEZJWE1FOiBUaGlzIGNhbiBiZSBhbiBlaXRoZXIgb3IgZm9yIFJUTS9ITEUuIERlYWwgd2l0aCB0aGlzIHdoZW4gSExFIGlzCisgKiBzdXBwb3J0ZWQuICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInJ0bSIpKSkKKyAgICBfeHRlc3Qodm9pZCkgeworICByZXR1cm4gX19idWlsdGluX2lhMzJfeHRlc3QoKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvYWFyY2g2NC9saWJGdXp6ZXIuYSBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9hYXJjaDY0L2xpYkZ1enplci5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMTBlMTMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvYWFyY2g2NC9saWJGdXp6ZXIuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvYWFyY2g2NC9saWJvbXAuYSBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9hYXJjaDY0L2xpYm9tcC5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOTg3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvYWFyY2g2NC9saWJvbXAuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvYXJtL2xpYkZ1enplci5hIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L2FybS9saWJGdXp6ZXIuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTkyNjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L2FybS9saWJGdXp6ZXIuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvYXJtL2xpYm9tcC5hIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L2FybS9saWJvbXAuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWYyMTA1Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L2FybS9saWJvbXAuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvaTM4Ni9saWJGdXp6ZXIuYSBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9pMzg2L2xpYkZ1enplci5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ODBmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvaTM4Ni9saWJGdXp6ZXIuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvaTM4Ni9saWJvbXAuYSBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9pMzg2L2xpYm9tcC5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYjNjZDIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvaTM4Ni9saWJvbXAuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1hYXJjaDY0LWFuZHJvaWQuc28gYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1hYXJjaDY0LWFuZHJvaWQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzQzM2M0MgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuLWFhcmNoNjQtYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1hcm0tYW5kcm9pZC5zbyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuLWFybS1hbmRyb2lkLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFiZWQ5NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1hcm0tYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1pNjg2LWFuZHJvaWQuc28gYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1pNjg2LWFuZHJvaWQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmM3ODg3OQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuLWk2ODYtYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1pNjg2LmEgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1pNjg2LmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNkNTc4YwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuLWk2ODYuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1taXBzLWFuZHJvaWQuc28gYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1taXBzLWFuZHJvaWQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmVmYjE3NAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuLW1pcHMtYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1taXBzNjQtYW5kcm9pZC5zbyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuLW1pcHM2NC1hbmRyb2lkLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMxNTY1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1taXBzNjQtYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi14ODZfNjQtYW5kcm9pZC5zbyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuLXg4Nl82NC1hbmRyb2lkLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU0NmMxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi14ODZfNjQtYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi14ODZfNjQuYSBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuLXg4Nl82NC5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NGI2OGEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi14ODZfNjQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbl9jeHgtaTY4Ni5hIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L2xpYmNsYW5nX3J0LmFzYW5fY3h4LWk2ODYuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWFlOGEwCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L2xpYmNsYW5nX3J0LmFzYW5fY3h4LWk2ODYuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbl9jeHgteDg2XzY0LmEgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbl9jeHgteDg2XzY0LmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjZTMzZAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuX2N4eC14ODZfNjQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1hYXJjaDY0LWFuZHJvaWQuYSBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLWFhcmNoNjQtYW5kcm9pZC5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YTA2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1hYXJjaDY0LWFuZHJvaWQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1hcm0tYW5kcm9pZC5hIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtYXJtLWFuZHJvaWQuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjkzMmZlCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtYXJtLWFuZHJvaWQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1pNjg2LWFuZHJvaWQuYSBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLWk2ODYtYW5kcm9pZC5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwODAyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1pNjg2LWFuZHJvaWQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1pNjg2LmEgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1pNjg2LmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiMTkyNwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLWk2ODYuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1taXBzNjRlbC1hbmRyb2lkLmEgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1taXBzNjRlbC1hbmRyb2lkLmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmYjk1MwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLW1pcHM2NGVsLWFuZHJvaWQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1taXBzZWwtYW5kcm9pZC5hIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtbWlwc2VsLWFuZHJvaWQuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGQwNTIxCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtbWlwc2VsLWFuZHJvaWQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS14ODZfNjQtYW5kcm9pZC5hIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUteDg2XzY0LWFuZHJvaWQuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGY3ZjEwCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUteDg2XzY0LWFuZHJvaWQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS14ODZfNjQuYSBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLXg4Nl82NC5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MjU3MWIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS14ODZfNjQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudHNhbi1hYXJjaDY0LWFuZHJvaWQuc28gYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudHNhbi1hYXJjaDY0LWFuZHJvaWQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjY1MWI4NQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC50c2FuLWFhcmNoNjQtYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudHNhbi14ODZfNjQtYW5kcm9pZC5zbyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC50c2FuLXg4Nl82NC1hbmRyb2lkLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJjZTJiZmQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudHNhbi14ODZfNjQtYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudHNhbi14ODZfNjQuYSBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC50c2FuLXg4Nl82NC5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZjk1NzgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudHNhbi14ODZfNjQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudHNhbl9jeHgteDg2XzY0LmEgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudHNhbl9jeHgteDg2XzY0LmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwNTAzOAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC50c2FuX2N4eC14ODZfNjQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1hYXJjaDY0LWFuZHJvaWQuc28gYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1hYXJjaDY0LWFuZHJvaWQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjBiYWJjYwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC51YnNhbl9zdGFuZGFsb25lLWFhcmNoNjQtYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1hcm0tYW5kcm9pZC5zbyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC51YnNhbl9zdGFuZGFsb25lLWFybS1hbmRyb2lkLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk4NTY1NWEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1hcm0tYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1pNjg2LWFuZHJvaWQuc28gYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1pNjg2LWFuZHJvaWQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzA2YzMzMQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC51YnNhbl9zdGFuZGFsb25lLWk2ODYtYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1pNjg2LmEgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1pNjg2LmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmMGU0MAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC51YnNhbl9zdGFuZGFsb25lLWk2ODYuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1taXBzLWFuZHJvaWQuc28gYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1taXBzLWFuZHJvaWQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2YyYjkzZgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC51YnNhbl9zdGFuZGFsb25lLW1pcHMtYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1taXBzNjQtYW5kcm9pZC5zbyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC51YnNhbl9zdGFuZGFsb25lLW1pcHM2NC1hbmRyb2lkLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU3NDM3NGIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS1taXBzNjQtYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS14ODZfNjQtYW5kcm9pZC5zbyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC51YnNhbl9zdGFuZGFsb25lLXg4Nl82NC1hbmRyb2lkLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUwOTYxNjkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS14ODZfNjQtYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS14ODZfNjQuYSBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC51YnNhbl9zdGFuZGFsb25lLXg4Nl82NC5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MzljOWMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZS14ODZfNjQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZV9jeHgtaTY4Ni5hIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnVic2FuX3N0YW5kYWxvbmVfY3h4LWk2ODYuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmU2ZDcwCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnVic2FuX3N0YW5kYWxvbmVfY3h4LWk2ODYuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZV9jeHgteDg2XzY0LmEgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbGliY2xhbmdfcnQudWJzYW5fc3RhbmRhbG9uZV9jeHgteDg2XzY0LmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZjZTI2YQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9saWJjbGFuZ19ydC51YnNhbl9zdGFuZGFsb25lX2N4eC14ODZfNjQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbWlwcy9saWJGdXp6ZXIuYSBiL2NsYW5nLTM4NTk0MjQvbGliNjQvY2xhbmcvNC4wL2xpYi9saW51eC9taXBzL2xpYkZ1enplci5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOWRhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbWlwcy9saWJGdXp6ZXIuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgvbWlwczY0L2xpYkZ1enplci5hIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L21pcHM2NC9saWJGdXp6ZXIuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmEwMzJiCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L21pcHM2NC9saWJGdXp6ZXIuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgveDg2XzY0L2xpYkZ1enplci5hIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L3g4Nl82NC9saWJGdXp6ZXIuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWZiZGQyCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L3g4Nl82NC9saWJGdXp6ZXIuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2NsYW5nLzQuMC9saWIvbGludXgveDg2XzY0L2xpYm9tcC5hIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L3g4Nl82NC9saWJvbXAuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNThiYTRjCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9saWI2NC9jbGFuZy80LjAvbGliL2xpbnV4L3g4Nl82NC9saWJvbXAuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2xpYkxMVk0uc28gYi9jbGFuZy0zODU5NDI0L2xpYjY0L2xpYkxMVk0uc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTdiZTIzZQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvbGliTExWTS5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L2xpYjY0L2xpYmMrKy5zbyBiL2NsYW5nLTM4NTk0MjQvbGliNjQvbGliYysrLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNmYjdhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L2xpYjY0L2xpYmMrKy5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L21hbmlmZXN0XzM4NTk0MjQueG1sIGIvY2xhbmctMzg1OTQyNC9tYW5pZmVzdF8zODU5NDI0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDNhODBhCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9tYW5pZmVzdF8zODU5NDI0LnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPG1hbmlmZXN0PgorICA8cmVtb3RlIGZldGNoPSIuLiIgbmFtZT0iYW9zcCIgcmV2aWV3PSJodHRwczovL2FuZHJvaWQtcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20vIiAvPgorICA8ZGVmYXVsdCByZW1vdGU9ImFvc3AiIHJldmlzaW9uPSJtYXN0ZXIiIHN5bmMtaj0iNCIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGssdHJhZGVmZWQiIG5hbWU9InBsYXRmb3JtL2J1aWxkIiBwYXRoPSJidWlsZCIgcmV2aXNpb249ImFlNDc3OWUyNTRhODdiZTY0NWQ5MGRmZTNjOGVmYjE4NDgxMDhiZmQiIHVwc3RyZWFtPSJtYXN0ZXIiPgorICAgIDxjb3B5ZmlsZSBkZXN0PSJNYWtlZmlsZSIgc3JjPSJjb3JlL3Jvb3QubWsiIC8+CisgIDwvcHJvamVjdD4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGssdHJhZGVmZWQiIG5hbWU9InBsYXRmb3JtL2J1aWxkL2JsdWVwcmludCIgcGF0aD0iYnVpbGQvYmx1ZXByaW50IiByZXZpc2lvbj0iN2M4YzQ1Njc5NWY4MjU4ZmU4YjhkYmI0ZWJkNWM0YTY2ZDdlZDRlOCIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGssdHJhZGVmZWQiIG5hbWU9InBsYXRmb3JtL2J1aWxkL2thdGkiIHBhdGg9ImJ1aWxkL2thdGkiIHJldmlzaW9uPSIzNDFhMmNlY2NiODM2YWIyM2Y5MmMwYmE5NmQwYTBlNzMxNDI1NzYyIiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayx0cmFkZWZlZCIgbmFtZT0icGxhdGZvcm0vYnVpbGQvc29vbmciIHBhdGg9ImJ1aWxkL3Nvb25nIiByZXZpc2lvbj0iOWUzZjYyN2VhNzNiMzk4MmQ4YmU1YWQ4YjQwMmI0MjY0YWFiMGIxOCIgdXBzdHJlYW09Im1hc3RlciI+CisgICAgPGxpbmtmaWxlIGRlc3Q9IkFuZHJvaWQuYnAiIHNyYz0icm9vdC5icCIgLz4KKyAgICA8bGlua2ZpbGUgZGVzdD0iYm9vdHN0cmFwLmJhc2giIHNyYz0iYm9vdHN0cmFwLmJhc2giIC8+CisgIDwvcHJvamVjdD4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGsiIG5hbWU9InBsYXRmb3JtL2Jpb25pYyIgcGF0aD0iYmlvbmljIiByZXZpc2lvbj0iZGYzYjkyMmZjZjA1NmJiNzY2NjVmOWMwNmYwYzE5YzQ4ZWY5MzdmOSIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGsiIG5hbWU9InBsYXRmb3JtL2V4dGVybmFsL2NsYW5nIiBwYXRoPSJleHRlcm5hbC9jbGFuZyIgcmV2aXNpb249ImI3MDk4YzJhNDk2NmQ1ZGE5NzQ2NjEyMTJmNGQ1NDkxMDA0MWZkNjYiIHVwc3RyZWFtPSJkZXYiIC8+CisgIDxwcm9qZWN0IG5hbWU9InBsYXRmb3JtL2V4dGVybmFsL2NsYW5nLXRvb2xzLWV4dHJhIiBwYXRoPSJleHRlcm5hbC9jbGFuZy10b29scy1leHRyYSIgcmV2aXNpb249ImNlYjIyOGI2Y2FhMTY1NWIzZWRiMTU1ODAzZmRhM2I3NmM0MTU2NTUiIHVwc3RyZWFtPSJkZXYiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrIiBuYW1lPSJwbGF0Zm9ybS9leHRlcm5hbC9jb21waWxlci1ydCIgcGF0aD0iZXh0ZXJuYWwvY29tcGlsZXItcnQiIHJldmlzaW9uPSIwNDZhYTBkOTQzNGE4MTM3ZWNlOWFmMTIxYzk3ZTkwNWZhYjc0ZTcyIiB1cHN0cmVhbT0iZGV2IiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayIgbmFtZT0icGxhdGZvcm0vZXh0ZXJuYWwvZ29vZ2xldGVzdCIgcGF0aD0iZXh0ZXJuYWwvZ29vZ2xldGVzdCIgcmV2aXNpb249ImZiNTVhZTYxMmNiY2VhYWRhMmZhMTAwZjQxYzYxNTRmOWEyYzlkOTMiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrIiBuYW1lPSJwbGF0Zm9ybS9leHRlcm5hbC9qZW1hbGxvYyIgcGF0aD0iZXh0ZXJuYWwvamVtYWxsb2MiIHJldmlzaW9uPSJmNjc0ZjQzODkzZDYyODJiZjZlNzI4YzUxMGI5MDFhMTBiMzhiYzQ4IiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayIgbmFtZT0icGxhdGZvcm0vZXh0ZXJuYWwvbGliY3h4IiBwYXRoPSJleHRlcm5hbC9saWJjeHgiIHJldmlzaW9uPSI4ZmU0MzA1OWM0MzkyYTBjODYzYjg1NTFkMmFjM2ViMmViN2E2NmVkIiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayIgbmFtZT0icGxhdGZvcm0vZXh0ZXJuYWwvbGliY3h4YWJpIiBwYXRoPSJleHRlcm5hbC9saWJjeHhhYmkiIHJldmlzaW9uPSI5ZGQ1MmY0MzAwMTM5OTk4MTdkM2I5ZTcxMDRkNGEwNjdjZWE4OWY3IiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayIgbmFtZT0icGxhdGZvcm0vZXh0ZXJuYWwvbGlidW53aW5kIiBwYXRoPSJleHRlcm5hbC9saWJ1bndpbmQiIHJldmlzaW9uPSIxYjQ3ZGE3MzNlMjU1M2JhNThlYWI3MDhhN2VjZDYyNzg5Yzg5NzA4IiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayIgbmFtZT0icGxhdGZvcm0vZXh0ZXJuYWwvbGlidW53aW5kX2xsdm0iIHBhdGg9ImV4dGVybmFsL2xpYnVud2luZF9sbHZtIiByZXZpc2lvbj0iYTExNzEwNjIwMDg5ZmJmMTAwNGQ1MjZhYmJhMDM4MTk4MTFmYWUxOSIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGsiIG5hbWU9InBsYXRmb3JtL2V4dGVybmFsL2xsdm0iIHBhdGg9ImV4dGVybmFsL2xsdm0iIHJldmlzaW9uPSJkNTdhMTUwY2JjZmQyMmY2NmUwY2VhYjA4Njg4ZDdhNzc3NThlZTc2IiB1cHN0cmVhbT0iZGV2IiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayIgbmFtZT0icGxhdGZvcm0vZXh0ZXJuYWwvbHptYSIgcGF0aD0iZXh0ZXJuYWwvbHptYSIgcmV2aXNpb249ImIwNGU4ZGJhNDQ2YWVkMGIxYjFkMWU1ODk0NWZiOTk2NmI0ZTg1ZWIiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IG5hbWU9InBsYXRmb3JtL2V4dGVybmFsL29wZW5tcF9sbHZtIiBwYXRoPSJleHRlcm5hbC9vcGVubXBfbGx2bSIgcmV2aXNpb249IjlmMGI3MGQyYWJhODMwMDkyYmQ3ODcyNmZiYjI2MjlkZDJjZTFkY2YiIHVwc3RyZWFtPSJkZXYiIC8+CisgIDxwcm9qZWN0IGNsb25lLWRlcHRoPSIxIiBncm91cHM9InBkayIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL2J1aWxkLXRvb2xzIiBwYXRoPSJwcmVidWlsdHMvYnVpbGQtdG9vbHMiIHJldmlzaW9uPSJiNTdiZmEyNDY0N2I5YjgyODA4YzM0NzM3YWI5NjRlOGQ1M2Q3YmJiIiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayxkYXJ3aW4iIG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9jbGFuZy9ob3N0L2Rhcndpbi14ODYiIHBhdGg9InByZWJ1aWx0cy9jbGFuZy9ob3N0L2Rhcndpbi14ODYiIHJldmlzaW9uPSI0Yzc2ZTI2NjgwMmQ5ZjkxMzI0MTg2ZDgzNGFjNGFjZTdmYzJmMTFkIiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayxsaW51eCIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL2NsYW5nL2hvc3QvbGludXgteDg2IiBwYXRoPSJwcmVidWlsdHMvY2xhbmcvaG9zdC9saW51eC14ODYiIHJldmlzaW9uPSJjMzEyNDJhNDUwZjUwOWZiMjA4MjRjZTMwOWQ5M2RhZjVhM2ExZjFhIiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayxsaW51eCIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL2NsYW5nL2hvc3Qvd2luZG93cy14ODYiIHBhdGg9InByZWJ1aWx0cy9jbGFuZy9ob3N0L3dpbmRvd3MteDg2IiByZXZpc2lvbj0iYWQ1Y2M3YWJiMDFhZTY3ODgwNmQ1N2M5YjQxMzZlNGViZDUzZGUyMCIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGssZGFyd2luLGFybSIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2FhcmNoNjQvYWFyY2g2NC1saW51eC1hbmRyb2lkLTQuOSIgcGF0aD0icHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2FhcmNoNjQvYWFyY2g2NC1saW51eC1hbmRyb2lkLTQuOSIgcmV2aXNpb249IjAzZTJhZTE1ODUyNDQ5YWU4MWRkYWE1NGMzNTczOWFmMjcxODA1ODEiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrLGRhcndpbixhcm0iIG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9hcm0vYXJtLWVhYmktNC44IiBwYXRoPSJwcmVidWlsdHMvZ2NjL2Rhcndpbi14ODYvYXJtL2FybS1lYWJpLTQuOCIgcmV2aXNpb249IjZkMDhjYTlmNDVmZjY4NTY0OGZkMTNjNzViZjVjYWM0YjExYzE5YmIiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9hcm0vYXJtLWxpbnV4LWFuZHJvaWRlYWJpLTQuOSIgcGF0aD0icHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2FybS9hcm0tbGludXgtYW5kcm9pZGVhYmktNC45IiByZXZpc2lvbj0iZDhjNDE0ZmM0OWU5MzNjMDc0ZjE3M2U2ZDg3Nzk1Y2M3ZmRjZmVkYyIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGssZGFyd2luIiBuYW1lPSJwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2Rhcndpbi14ODYvaG9zdC9oZWFkZXJzIiBwYXRoPSJwcmVidWlsdHMvZ2NjL2Rhcndpbi14ODYvaG9zdC9oZWFkZXJzIiByZXZpc2lvbj0iNGFjNGY3Y2M0MWNmM2M5ZTM2ZmMzZDZjZjM3ZmQxY2ZhOTU4N2E2OCIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGssZGFyd2luIiBuYW1lPSJwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2Rhcndpbi14ODYvaG9zdC9pNjg2LWFwcGxlLWRhcndpbi00LjIuMSIgcGF0aD0icHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2hvc3QvaTY4Ni1hcHBsZS1kYXJ3aW4tNC4yLjEiIHJldmlzaW9uPSJlYzVhYTY2YWFhNDk2NGMyNzU2NGQwZWM4NGRjMWYxOGEyZDcyYjdlIiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayxkYXJ3aW4sbWlwcyIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L21pcHMvbWlwczY0ZWwtbGludXgtYW5kcm9pZC00LjkiIHBhdGg9InByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9taXBzL21pcHM2NGVsLWxpbnV4LWFuZHJvaWQtNC45IiByZXZpc2lvbj0iYzNiN2ExNzU2NDBmYzU5NzExNjE0YzBhZDUyNjlhMDM3ZTA2ZmU3YSIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGssZGFyd2luLHg4NiIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L3g4Ni94ODZfNjQtbGludXgtYW5kcm9pZC00LjkiIHBhdGg9InByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni94ODYveDg2XzY0LWxpbnV4LWFuZHJvaWQtNC45IiByZXZpc2lvbj0iZThhMmYyMWMxY2M3Zjg3MDY5ZGE3MWJjMmYxOTAxYWNjNGVhMmJkZiIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGssbGludXgsYXJtIiBuYW1lPSJwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9hYXJjaDY0L2FhcmNoNjQtbGludXgtYW5kcm9pZC00LjkiIHBhdGg9InByZWJ1aWx0cy9nY2MvbGludXgteDg2L2FhcmNoNjQvYWFyY2g2NC1saW51eC1hbmRyb2lkLTQuOSIgcmV2aXNpb249ImNlOWQ3NzUwNTA3MjQ1MGQyZjE2YTRiZjA2NjczZjMxZDhkNjdmZjAiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrLGxpbnV4LGFybSIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvYXJtL2FybS1lYWJpLTQuOCIgcGF0aD0icHJlYnVpbHRzL2djYy9saW51eC14ODYvYXJtL2FybS1lYWJpLTQuOCIgcmV2aXNpb249IjI2ZTkzZjZhZjQ3ZjdiZDNhOWJlYjVjMTAyYTVmNDVlMTliZmEzOGEiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L2FybS9hcm0tbGludXgtYW5kcm9pZGVhYmktNC45IiBwYXRoPSJwcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9hcm0vYXJtLWxpbnV4LWFuZHJvaWRlYWJpLTQuOSIgcmV2aXNpb249ImVhOWM4OGJlYjlmZmJiMWEwODMzY2MzZWU5NGI1Mzk1MDcyOTQ3M2QiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrLGxpbnV4IiBuYW1lPSJwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9ob3N0L3g4Nl82NC1saW51eC1nbGliYzIuMTEtNC44IiBwYXRoPSJwcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9ob3N0L3g4Nl82NC1saW51eC1nbGliYzIuMTEtNC44IiByZXZpc2lvbj0iZTk1MzRhYmY5ZTQ5MTZiYzlmMGYwYzc0YjY0YWQyZjQwNGEzNGU5NyIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvaG9zdC94ODZfNjQtbGludXgtZ2xpYmMyLjE1LTQuOCIgcGF0aD0icHJlYnVpbHRzL2djYy9saW51eC14ODYvaG9zdC94ODZfNjQtbGludXgtZ2xpYmMyLjE1LTQuOCIgcmV2aXNpb249IjczY2E5OTE5NjcyM2Y4MTBkYWQ0MjM5MGQxNTQ2NTQzNTRmNTdjMTYiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L2hvc3QveDg2XzY0LXc2NC1taW5ndzMyLTQuOCIgcGF0aD0icHJlYnVpbHRzL2djYy9saW51eC14ODYvaG9zdC94ODZfNjQtdzY0LW1pbmd3MzItNC44IiByZXZpc2lvbj0iOTA0YzM2MzlkMWU1NzQ2NzFjOTY5ZjM2NDJjYTQ3NWQzYjAwYzM4MiIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJwZGssbGludXgsbWlwcyIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvbWlwcy9taXBzNjRlbC1saW51eC1hbmRyb2lkLTQuOSIgcGF0aD0icHJlYnVpbHRzL2djYy9saW51eC14ODYvbWlwcy9taXBzNjRlbC1saW51eC1hbmRyb2lkLTQuOSIgcmV2aXNpb249ImEzMzJkZjhkYWRkNzg4NjZjMmE1N2YyYzczNDhkNDk5OTUyOTM5YzIiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0icGRrLGxpbnV4LHg4NiIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYveDg2L3g4Nl82NC1saW51eC1hbmRyb2lkLTQuOSIgcGF0aD0icHJlYnVpbHRzL2djYy9saW51eC14ODYveDg2L3g4Nl82NC1saW51eC1hbmRyb2lkLTQuOSIgcmV2aXNpb249IjE5NDRmNDQxNjdhOTA3OTY5ZGU1MTM4ZmU0Y2M0NDI0MzJiN2NjMzciIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGNsb25lLWRlcHRoPSIxIiBncm91cHM9ImRhcndpbix0cmFkZWZlZCIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL2dvL2Rhcndpbi14ODYiIHBhdGg9InByZWJ1aWx0cy9nby9kYXJ3aW4teDg2IiByZXZpc2lvbj0iMThmYWRmYjJmYTc1NGQwNjNkNDhmNjMwMGQ1ZmQ5ZjllMTZiNGU0NyIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgY2xvbmUtZGVwdGg9IjEiIGdyb3Vwcz0ibGludXgsdHJhZGVmZWQiIG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9nby9saW51eC14ODYiIHBhdGg9InByZWJ1aWx0cy9nby9saW51eC14ODYiIHJldmlzaW9uPSJhNzI3Y2QwNDU0ZjAyMjJiZjhhYzZmZDBlMTI0OTE0YzIwNzQwMjFkIiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayIgbmFtZT0icGxhdGZvcm0vcHJlYnVpbHRzL25kayIgcGF0aD0icHJlYnVpbHRzL25kayIgcmV2aXNpb249ImQ4OWRlYTJmMGRlOWQ3MGI5YmJiZDJmYTFhNTA2MGIwZGVhMzY2ZDYiIHVwc3RyZWFtPSJtYXN0ZXIiIC8+CisgIDxwcm9qZWN0IGdyb3Vwcz0ibGludXgscGRrLHRyYWRlZmVkIiBuYW1lPSJwbGF0Zm9ybS9wcmVidWlsdHMvbmluamEvbGludXgteDg2IiBwYXRoPSJwcmVidWlsdHMvbmluamEvbGludXgteDg2IiByZXZpc2lvbj0iNjM2OWIxOWZjM2ZiZTc2NTYzNmFmNzVkMzk0NjI3ZTJiOTI1OTllZCIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgZ3JvdXBzPSJkYXJ3aW4scGRrLHRyYWRlZmVkIiBuYW1lPSJwbGF0Zm9ybS9wcmVidWlsdHMvbmluamEvZGFyd2luLXg4NiIgcGF0aD0icHJlYnVpbHRzL25pbmphL2Rhcndpbi14ODYiIHJldmlzaW9uPSIwMGY3OTgzNDZkZWRiNGE3YTZhNmRjYzlhZDMyZmYwOWQ2NmVlMGRiIiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBjbG9uZS1kZXB0aD0iMSIgZ3JvdXBzPSJwZGsiIG5hbWU9InBsYXRmb3JtL3ByZWJ1aWx0cy9zZGsiIHBhdGg9InByZWJ1aWx0cy9zZGsiIHJldmlzaW9uPSJiZGZhOGQ5ZWU1ZjkyZGQxY2Q3YTZmNjM2MzdiNTkwNjAwYjBjMmU1IiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorICA8cHJvamVjdCBncm91cHM9InBkayIgbmFtZT0icGxhdGZvcm0vc3lzdGVtL2NvcmUiIHBhdGg9InN5c3RlbS9jb3JlIiByZXZpc2lvbj0iZTBiZWM2YjExZTJjMDkwNWM0YmZkZWMyY2Q3NWU0NGZkMTZmOTE4MSIgdXBzdHJlYW09Im1hc3RlciIgLz4KKyAgPHByb2plY3QgbmFtZT0idG9vbGNoYWluL2JpbnV0aWxzIiBwYXRoPSJ0b29sY2hhaW4vYmludXRpbHMiIHJldmlzaW9uPSI5YmY2Y2JmNmRkODg3Nzc3MTljNTc1NzkyMmFmZjAxOTBlYzQ2NTM5IiB1cHN0cmVhbT0ibWFzdGVyIiAvPgorPC9tYW5pZmVzdD4KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvcHJlYnVpbHRfaW5jbHVkZS9sbHZtL2xpYi9GdXp6ZXIvRnV6emVyQ29ycHVzLmggYi9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplckNvcnB1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NWMyNDIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplckNvcnB1cy5oCkBAIC0wLDAgKzEsMjE1IEBACisvLz09PS0gRnV6emVyQ29ycHVzLmggLSBJbnRlcm5hbCBoZWFkZXIgZm9yIHRoZSBGdXp6ZXIgLS0tLS0tLS0tLSotIEMrKyAtKiA9PT0vLworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKKy8vIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8gZnV6emVyOjpJbnB1dENvcnB1cworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKworI2lmbmRlZiBMTFZNX0ZVWlpFUl9DT1JQVVMKKyNkZWZpbmUgTExWTV9GVVpaRVJfQ09SUFVTCisKKyNpbmNsdWRlIDxyYW5kb20+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgIkZ1enplckRlZnMuaCIKKyNpbmNsdWRlICJGdXp6ZXJSYW5kb20uaCIKKyNpbmNsdWRlICJGdXp6ZXJUcmFjZVBDLmgiCisKK25hbWVzcGFjZSBmdXp6ZXIgeworCitzdHJ1Y3QgSW5wdXRJbmZvIHsKKyAgVW5pdCBVOyAgLy8gVGhlIGFjdHVhbCBpbnB1dCBkYXRhLgorICB1aW50OF90IFNoYTFba1NIQTFOdW1CeXRlc107ICAvLyBDaGVja3N1bS4KKyAgLy8gTnVtYmVyIG9mIGZlYXR1cmVzIHRoYXQgdGhpcyBpbnB1dCBoYXMgYW5kIG5vIHNtYWxsZXIgaW5wdXQgaGFzLgorICBzaXplX3QgTnVtRmVhdHVyZXMgPSAwOworICBzaXplX3QgVG1wID0gMDsgLy8gVXNlZCBieSBWYWxpZGF0ZUZlYXR1cmVTZXQuCisgIC8vIFN0YXRzLgorICBzaXplX3QgTnVtRXhlY3V0ZWRNdXRhdGlvbnMgPSAwOworICBzaXplX3QgTnVtU3VjY2Vzc2Z1bGxNdXRhdGlvbnMgPSAwOworICBib29sIE1heURlbGV0ZUZpbGUgPSBmYWxzZTsKK307CisKK2NsYXNzIElucHV0Q29ycHVzIHsKKyBwdWJsaWM6CisgIHN0YXRpYyBjb25zdCBzaXplX3Qga0ZlYXR1cmVTZXRTaXplID0gMSA8PCAxNjsKKyAgSW5wdXRDb3JwdXMoY29uc3Qgc3RkOjpzdHJpbmcgJk91dHB1dENvcnB1cykgOiBPdXRwdXRDb3JwdXMoT3V0cHV0Q29ycHVzKSB7CisgICAgbWVtc2V0KElucHV0U2l6ZXNQZXJGZWF0dXJlLCAwLCBzaXplb2YoSW5wdXRTaXplc1BlckZlYXR1cmUpKTsKKyAgICBtZW1zZXQoU21hbGxlc3RFbGVtZW50UGVyRmVhdHVyZSwgMCwgc2l6ZW9mKFNtYWxsZXN0RWxlbWVudFBlckZlYXR1cmUpKTsKKyAgfQorICB+SW5wdXRDb3JwdXMoKSB7CisgICAgZm9yIChhdXRvIElJIDogSW5wdXRzKQorICAgICAgZGVsZXRlIElJOworICB9CisgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gSW5wdXRzLnNpemUoKTsgfQorICBzaXplX3QgU2l6ZUluQnl0ZXMoKSBjb25zdCB7CisgICAgc2l6ZV90IFJlcyA9IDA7CisgICAgZm9yIChhdXRvIElJIDogSW5wdXRzKQorICAgICAgUmVzICs9IElJLT5VLnNpemUoKTsKKyAgICByZXR1cm4gUmVzOworICB9CisgIHNpemVfdCBOdW1BY3RpdmVVbml0cygpIGNvbnN0IHsKKyAgICBzaXplX3QgUmVzID0gMDsKKyAgICBmb3IgKGF1dG8gSUkgOiBJbnB1dHMpCisgICAgICBSZXMgKz0gIUlJLT5VLmVtcHR5KCk7CisgICAgcmV0dXJuIFJlczsKKyAgfQorICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gSW5wdXRzLmVtcHR5KCk7IH0KKyAgY29uc3QgVW5pdCAmb3BlcmF0b3JbXSAoc2l6ZV90IElkeCkgY29uc3QgeyByZXR1cm4gSW5wdXRzW0lkeF0tPlU7IH0KKyAgdm9pZCBBZGRUb0NvcnB1cyhjb25zdCBVbml0ICZVLCBzaXplX3QgTnVtRmVhdHVyZXMsIGJvb2wgTWF5RGVsZXRlRmlsZSA9IGZhbHNlKSB7CisgICAgYXNzZXJ0KCFVLmVtcHR5KCkpOworICAgIHVpbnQ4X3QgSGFzaFtrU0hBMU51bUJ5dGVzXTsKKyAgICBpZiAoRmVhdHVyZURlYnVnKQorICAgICAgUHJpbnRmKCJBRERfVE9fQ09SUFVTICV6ZCBORiAlemRcbiIsIElucHV0cy5zaXplKCksIE51bUZlYXR1cmVzKTsKKyAgICBDb21wdXRlU0hBMShVLmRhdGEoKSwgVS5zaXplKCksIEhhc2gpOworICAgIEhhc2hlcy5pbnNlcnQoU2hhMVRvU3RyaW5nKEhhc2gpKTsKKyAgICBJbnB1dHMucHVzaF9iYWNrKG5ldyBJbnB1dEluZm8oKSk7CisgICAgSW5wdXRJbmZvICZJSSA9ICpJbnB1dHMuYmFjaygpOworICAgIElJLlUgPSBVOworICAgIElJLk51bUZlYXR1cmVzID0gTnVtRmVhdHVyZXM7CisgICAgSUkuTWF5RGVsZXRlRmlsZSA9IE1heURlbGV0ZUZpbGU7CisgICAgbWVtY3B5KElJLlNoYTEsIEhhc2gsIGtTSEExTnVtQnl0ZXMpOworICAgIFVwZGF0ZUNvcnB1c0Rpc3RyaWJ1dGlvbigpOworICAgIFZhbGlkYXRlRmVhdHVyZVNldCgpOworICB9CisKKyAgYm9vbCBIYXNVbml0KGNvbnN0IFVuaXQgJlUpIHsgcmV0dXJuIEhhc2hlcy5jb3VudChIYXNoKFUpKTsgfQorICBib29sIEhhc1VuaXQoY29uc3Qgc3RkOjpzdHJpbmcgJkgpIHsgcmV0dXJuIEhhc2hlcy5jb3VudChIKTsgfQorICBJbnB1dEluZm8gJkNob29zZVVuaXRUb011dGF0ZShSYW5kb20gJlJhbmQpIHsKKyAgICBJbnB1dEluZm8gJklJID0gKklucHV0c1tDaG9vc2VVbml0SWR4VG9NdXRhdGUoUmFuZCldOworICAgIGFzc2VydCghSUkuVS5lbXB0eSgpKTsKKyAgICByZXR1cm4gSUk7CisgIH07CisKKyAgLy8gUmV0dXJucyBhbiBpbmRleCBvZiByYW5kb20gdW5pdCBmcm9tIHRoZSBjb3JwdXMgdG8gbXV0YXRlLgorICAvLyBIeXBvdGhlc2lzOiB1bml0cyBhZGRlZCB0byB0aGUgY29ycHVzIGxhc3QgYXJlIG1vcmUgbGlrZWx5IHRvIGJlCisgIC8vIGludGVyZXN0aW5nLiBUaGlzIGZ1bmN0aW9uIGdpdmVzIG1vcmUgd2VpZ2h0IHRvIHRoZSBtb3JlIHJlY2VudCB1bml0cy4KKyAgc2l6ZV90IENob29zZVVuaXRJZHhUb011dGF0ZShSYW5kb20gJlJhbmQpIHsKKyAgICBzaXplX3QgSWR4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihDb3JwdXNEaXN0cmlidXRpb24oUmFuZC5HZXRfbXQxOTkzNygpKSk7CisgICAgYXNzZXJ0KElkeCA8IElucHV0cy5zaXplKCkpOworICAgIHJldHVybiBJZHg7CisgIH0KKworICB2b2lkIFByaW50U3RhdHMoKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBJbnB1dHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgIGNvbnN0IGF1dG8gJklJID0gKklucHV0c1tpXTsKKyAgICAgIFByaW50ZigiICBbJXpkICVzXVx0c3o6ICV6ZFx0cnVuczogJXpkXHRzdWNjOiAlemRcbiIsIGksCisgICAgICAgICAgICAgU2hhMVRvU3RyaW5nKElJLlNoYTEpLmNfc3RyKCksIElJLlUuc2l6ZSgpLAorICAgICAgICAgICAgIElJLk51bUV4ZWN1dGVkTXV0YXRpb25zLCBJSS5OdW1TdWNjZXNzZnVsbE11dGF0aW9ucyk7CisgICAgfQorICB9CisKKyAgdm9pZCBQcmludEZlYXR1cmVTZXQoKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrRmVhdHVyZVNldFNpemU7IGkrKykgeworICAgICAgaWYoc2l6ZV90IFN6ID0gR2V0RmVhdHVyZShpKSkKKyAgICAgICAgUHJpbnRmKCJbJXpkOiBpZCAlemQgc3olemRdICIsIGksIFNtYWxsZXN0RWxlbWVudFBlckZlYXR1cmVbaV0sIFN6KTsKKyAgICB9CisgICAgUHJpbnRmKCJcblx0Iik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBJbnB1dHMuc2l6ZSgpOyBpKyspCisgICAgICBpZiAoc2l6ZV90IE4gPSBJbnB1dHNbaV0tPk51bUZlYXR1cmVzKQorICAgICAgICBQcmludGYoIiAlemQ9PiV6ZCAiLCBpLCBOKTsKKyAgICBQcmludGYoIlxuIik7CisgIH0KKworICB2b2lkIERlbGV0ZUlucHV0KHNpemVfdCBJZHgpIHsKKyAgICBJbnB1dEluZm8gJklJID0gKklucHV0c1tJZHhdOworICAgIGlmICghT3V0cHV0Q29ycHVzLmVtcHR5KCkgJiYgSUkuTWF5RGVsZXRlRmlsZSkKKyAgICAgIERlbGV0ZUZpbGUoRGlyUGx1c0ZpbGUoT3V0cHV0Q29ycHVzLCBTaGExVG9TdHJpbmcoSUkuU2hhMSkpKTsKKyAgICBVbml0KCkuc3dhcChJSS5VKTsKKyAgICBpZiAoRmVhdHVyZURlYnVnKQorICAgICAgUHJpbnRmKCJFVklDVEVEICV6ZFxuIiwgSWR4KTsKKyAgfQorCisgIGJvb2wgQWRkRmVhdHVyZShzaXplX3QgSWR4LCB1aW50MzJfdCBOZXdTaXplLCBib29sIFNocmluaykgeworICAgIGFzc2VydChOZXdTaXplKTsKKyAgICBJZHggPSBJZHggJSBrRmVhdHVyZVNldFNpemU7CisgICAgdWludDMyX3QgT2xkU2l6ZSA9IEdldEZlYXR1cmUoSWR4KTsKKyAgICBpZiAoT2xkU2l6ZSA9PSAwIHx8IChTaHJpbmsgJiYgT2xkU2l6ZSA+IE5ld1NpemUpKSB7CisgICAgICBpZiAoT2xkU2l6ZSA+IDApIHsKKyAgICAgICAgc2l6ZV90IE9sZElkeCA9IFNtYWxsZXN0RWxlbWVudFBlckZlYXR1cmVbSWR4XTsKKyAgICAgICAgSW5wdXRJbmZvICZJSSA9ICpJbnB1dHNbT2xkSWR4XTsKKyAgICAgICAgYXNzZXJ0KElJLk51bUZlYXR1cmVzID4gMCk7CisgICAgICAgIElJLk51bUZlYXR1cmVzLS07CisgICAgICAgIGlmIChJSS5OdW1GZWF0dXJlcyA9PSAwKQorICAgICAgICAgIERlbGV0ZUlucHV0KE9sZElkeCk7CisgICAgICB9CisgICAgICBpZiAoRmVhdHVyZURlYnVnKQorICAgICAgICBQcmludGYoIkFERCBGRUFUVVJFICV6ZCBzeiAlZFxuIiwgSWR4LCBOZXdTaXplKTsKKyAgICAgIFNtYWxsZXN0RWxlbWVudFBlckZlYXR1cmVbSWR4XSA9IElucHV0cy5zaXplKCk7CisgICAgICBJbnB1dFNpemVzUGVyRmVhdHVyZVtJZHhdID0gTmV3U2l6ZTsKKyAgICAgIENvdW50aW5nRmVhdHVyZXMgPSB0cnVlOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHNpemVfdCBOdW1GZWF0dXJlcygpIGNvbnN0IHsKKyAgICBzaXplX3QgUmVzID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtGZWF0dXJlU2V0U2l6ZTsgaSsrKQorICAgICAgUmVzICs9IEdldEZlYXR1cmUoaSkgIT0gMDsKKyAgICByZXR1cm4gUmVzOworICB9CisKKyAgdm9pZCBSZXNldEZlYXR1cmVTZXQoKSB7CisgICAgYXNzZXJ0KElucHV0cy5lbXB0eSgpKTsKKyAgICBtZW1zZXQoSW5wdXRTaXplc1BlckZlYXR1cmUsIDAsIHNpemVvZihJbnB1dFNpemVzUGVyRmVhdHVyZSkpOworICAgIG1lbXNldChTbWFsbGVzdEVsZW1lbnRQZXJGZWF0dXJlLCAwLCBzaXplb2YoU21hbGxlc3RFbGVtZW50UGVyRmVhdHVyZSkpOworICB9CisKK3ByaXZhdGU6CisKKyAgc3RhdGljIGNvbnN0IGJvb2wgRmVhdHVyZURlYnVnID0gZmFsc2U7CisKKyAgc2l6ZV90IEdldEZlYXR1cmUoc2l6ZV90IElkeCkgY29uc3QgeyByZXR1cm4gSW5wdXRTaXplc1BlckZlYXR1cmVbSWR4XTsgfQorCisgIHZvaWQgVmFsaWRhdGVGZWF0dXJlU2V0KCkgeworICAgIGlmICghQ291bnRpbmdGZWF0dXJlcykgcmV0dXJuOworICAgIGlmIChGZWF0dXJlRGVidWcpCisgICAgICBQcmludEZlYXR1cmVTZXQoKTsKKyAgICBmb3IgKHNpemVfdCBJZHggPSAwOyBJZHggPCBrRmVhdHVyZVNldFNpemU7IElkeCsrKQorICAgICAgaWYgKEdldEZlYXR1cmUoSWR4KSkKKyAgICAgICAgSW5wdXRzW1NtYWxsZXN0RWxlbWVudFBlckZlYXR1cmVbSWR4XV0tPlRtcCsrOworICAgIGZvciAoYXV0byBJSTogSW5wdXRzKSB7CisgICAgICBpZiAoSUktPlRtcCAhPSBJSS0+TnVtRmVhdHVyZXMpCisgICAgICAgIFByaW50ZigiWlpaICV6ZCAlemRcbiIsIElJLT5UbXAsIElJLT5OdW1GZWF0dXJlcyk7CisgICAgICBhc3NlcnQoSUktPlRtcCA9PSBJSS0+TnVtRmVhdHVyZXMpOworICAgICAgSUktPlRtcCA9IDA7CisgICAgfQorICB9CisKKyAgLy8gVXBkYXRlcyB0aGUgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uIGZvciB0aGUgdW5pdHMgaW4gdGhlIGNvcnB1cy4KKyAgLy8gTXVzdCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGNvcnB1cyBvciB1bml0IHdlaWdodHMgYXJlIGNoYW5nZWQuCisgIHZvaWQgVXBkYXRlQ29ycHVzRGlzdHJpYnV0aW9uKCkgeworICAgIHNpemVfdCBOID0gSW5wdXRzLnNpemUoKTsKKyAgICBJbnRlcnZhbHMucmVzaXplKE4gKyAxKTsKKyAgICBXZWlnaHRzLnJlc2l6ZShOKTsKKyAgICBzdGQ6OmlvdGEoSW50ZXJ2YWxzLmJlZ2luKCksIEludGVydmFscy5lbmQoKSwgMCk7CisgICAgaWYgKENvdW50aW5nRmVhdHVyZXMpCisgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE47IGkrKykKKyAgICAgICAgV2VpZ2h0c1tpXSA9IElucHV0c1tpXS0+TnVtRmVhdHVyZXMgKiAoaSArIDEpOworICAgIGVsc2UKKyAgICAgIHN0ZDo6aW90YShXZWlnaHRzLmJlZ2luKCksIFdlaWdodHMuZW5kKCksIDEpOworICAgIENvcnB1c0Rpc3RyaWJ1dGlvbiA9IHN0ZDo6cGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxkb3VibGU+KAorICAgICAgICBJbnRlcnZhbHMuYmVnaW4oKSwgSW50ZXJ2YWxzLmVuZCgpLCBXZWlnaHRzLmJlZ2luKCkpOworICB9CisgIHN0ZDo6cGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxkb3VibGU+IENvcnB1c0Rpc3RyaWJ1dGlvbjsKKworICBzdGQ6OnZlY3Rvcjxkb3VibGU+IEludGVydmFsczsKKyAgc3RkOjp2ZWN0b3I8ZG91YmxlPiBXZWlnaHRzOworCisgIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnN0cmluZz4gSGFzaGVzOworICBzdGQ6OnZlY3RvcjxJbnB1dEluZm8qPiBJbnB1dHM7CisKKyAgYm9vbCBDb3VudGluZ0ZlYXR1cmVzID0gZmFsc2U7CisgIHVpbnQzMl90IElucHV0U2l6ZXNQZXJGZWF0dXJlW2tGZWF0dXJlU2V0U2l6ZV07CisgIHVpbnQzMl90IFNtYWxsZXN0RWxlbWVudFBlckZlYXR1cmVba0ZlYXR1cmVTZXRTaXplXTsKKworICBzdGQ6OnN0cmluZyBPdXRwdXRDb3JwdXM7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgZnV6emVyCisKKyNlbmRpZiAgLy8gTExWTV9GVVpaRVJfQ09SUFVTCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplckRlZnMuaCBiL2NsYW5nLTM4NTk0MjQvcHJlYnVpbHRfaW5jbHVkZS9sbHZtL2xpYi9GdXp6ZXIvRnV6emVyRGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4N2UyM2MKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplckRlZnMuaApAQCAtMCwwICsxLDEyOCBAQAorLy89PT0tIEZ1enplckRlZnMuaCAtIEludGVybmFsIGhlYWRlciBmb3IgdGhlIEZ1enplciAtLS0tLS0tLS0tLS0qLSBDKysgLSogPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vIEJhc2ljIGRlZmluaXRpb25zLgorLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKyNpZm5kZWYgTExWTV9GVVpaRVJfREVGU19ICisjZGVmaW5lIExMVk1fRlVaWkVSX0RFRlNfSAorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCisvLyBQbGF0Zm9ybSBkZXRlY3Rpb24uCisjaWZkZWYgX19saW51eF9fCisjZGVmaW5lIExJQkZVWlpFUl9MSU5VWCAxCisjZGVmaW5lIExJQkZVWlpFUl9BUFBMRSAwCisjZWxpZiBfX0FQUExFX18KKyNkZWZpbmUgTElCRlVaWkVSX0xJTlVYIDAKKyNkZWZpbmUgTElCRlVaWkVSX0FQUExFIDEKKyNlbHNlCisjZXJyb3IgIlN1cHBvcnQgZm9yIHlvdXIgcGxhdGZvcm0gaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIgorI2VuZGlmCisKKyNpZmRlZiBfX3g4Nl82NAorI2RlZmluZSBBVFRSSUJVVEVfVEFSR0VUX1BPUENOVCBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoInBvcGNudCIpKSkKKyNlbHNlCisjZGVmaW5lIEFUVFJJQlVURV9UQVJHRVRfUE9QQ05UCisjZW5kaWYKKworbmFtZXNwYWNlIGZ1enplciB7CisKK3RlbXBsYXRlIDxjbGFzcyBUPiBUIE1pbihUIGEsIFQgYikgeyByZXR1cm4gYSA8IGIgPyBhIDogYjsgfQordGVtcGxhdGUgPGNsYXNzIFQ+IFQgTWF4KFQgYSwgVCBiKSB7IHJldHVybiBhID4gYiA/IGEgOiBiOyB9CisKK2NsYXNzIFJhbmRvbTsKK2NsYXNzIERpY3Rpb25hcnk7CitjbGFzcyBEaWN0aW9uYXJ5RW50cnk7CitjbGFzcyBNdXRhdGlvbkRpc3BhdGNoZXI7CitzdHJ1Y3QgRnV6emluZ09wdGlvbnM7CitjbGFzcyBJbnB1dENvcnB1czsKK3N0cnVjdCBJbnB1dEluZm87CitzdHJ1Y3QgRXh0ZXJuYWxGdW5jdGlvbnM7CisKKy8vIEdsb2JhbCBpbnRlcmZhY2UgdG8gZnVuY3Rpb25zIHRoYXQgbWF5IG9yIG1heSBub3QgYmUgYXZhaWxhYmxlLgorZXh0ZXJuIEV4dGVybmFsRnVuY3Rpb25zICpFRjsKKwordHlwZWRlZiBzdGQ6OnZlY3Rvcjx1aW50OF90PiBVbml0OwordHlwZWRlZiBzdGQ6OnZlY3RvcjxVbml0PiBVbml0VmVjdG9yOwordHlwZWRlZiBpbnQgKCpVc2VyQ2FsbGJhY2spKGNvbnN0IHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplKTsKK2ludCBGdXp6ZXJEcml2ZXIoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YsIFVzZXJDYWxsYmFjayBDYWxsYmFjayk7CisKK2Jvb2wgSXNGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nICZQYXRoKTsKK2xvbmcgR2V0RXBvY2goY29uc3Qgc3RkOjpzdHJpbmcgJlBhdGgpOworc3RkOjpzdHJpbmcgRmlsZVRvU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZQYXRoKTsKK1VuaXQgRmlsZVRvVmVjdG9yKGNvbnN0IHN0ZDo6c3RyaW5nICZQYXRoLCBzaXplX3QgTWF4U2l6ZSA9IDAsCisgICAgICAgICAgICAgICAgICBib29sIEV4aXRPbkVycm9yID0gdHJ1ZSk7Cit2b2lkIFJlYWREaXJUb1ZlY3Rvck9mVW5pdHMoY29uc3QgY2hhciAqUGF0aCwgc3RkOjp2ZWN0b3I8VW5pdD4gKlYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqRXBvY2gsIHNpemVfdCBNYXhTaXplLCBib29sIEV4aXRPbkVycm9yKTsKK3ZvaWQgV3JpdGVUb0ZpbGUoY29uc3QgVW5pdCAmVSwgY29uc3Qgc3RkOjpzdHJpbmcgJlBhdGgpOwordm9pZCBDb3B5RmlsZVRvRXJyKGNvbnN0IHN0ZDo6c3RyaW5nICZQYXRoKTsKK3ZvaWQgRGVsZXRlRmlsZShjb25zdCBzdGQ6OnN0cmluZyAmUGF0aCk7CisvLyBSZXR1cm5zICJEaXIvRmlsZU5hbWUiIG9yIGVxdWl2YWxlbnQgZm9yIHRoZSBjdXJyZW50IE9TLgorc3RkOjpzdHJpbmcgRGlyUGx1c0ZpbGUoY29uc3Qgc3RkOjpzdHJpbmcgJkRpclBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmRmlsZU5hbWUpOworCit2b2lkIER1cEFuZENsb3NlU3RkZXJyKCk7Cit2b2lkIENsb3NlU3Rkb3V0KCk7Cit2b2lkIFByaW50Zihjb25zdCBjaGFyICpGbXQsIC4uLik7Cit2b2lkIFByaW50SGV4QXJyYXkoY29uc3QgVW5pdCAmVSwgY29uc3QgY2hhciAqUHJpbnRBZnRlciA9ICIiKTsKK3ZvaWQgUHJpbnRIZXhBcnJheShjb25zdCB1aW50OF90ICpEYXRhLCBzaXplX3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpQcmludEFmdGVyID0gIiIpOwordm9pZCBQcmludEFTQ0lJKGNvbnN0IHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplLCBjb25zdCBjaGFyICpQcmludEFmdGVyID0gIiIpOwordm9pZCBQcmludEFTQ0lJKGNvbnN0IFVuaXQgJlUsIGNvbnN0IGNoYXIgKlByaW50QWZ0ZXIgPSAiIik7CisKK3ZvaWQgUHJpbnRQQyhjb25zdCBjaGFyICpTeW1ib2xpemVkRk1ULCBjb25zdCBjaGFyICpGYWxsYmFja0ZNVCwgdWludHB0cl90IFBDKTsKK3N0ZDo6c3RyaW5nIERlc2NyaWJlUEMoY29uc3QgY2hhciAqU3ltYm9saXplZEZNVCwgdWludHB0cl90IFBDKTsKK3N0ZDo6c3RyaW5nIEhhc2goY29uc3QgVW5pdCAmVSk7Cit2b2lkIFNldFRpbWVyKGludCBTZWNvbmRzKTsKK3ZvaWQgU2V0U2lnU2VndkhhbmRsZXIoKTsKK3ZvaWQgU2V0U2lnQnVzSGFuZGxlcigpOwordm9pZCBTZXRTaWdBYnJ0SGFuZGxlcigpOwordm9pZCBTZXRTaWdJbGxIYW5kbGVyKCk7Cit2b2lkIFNldFNpZ0ZwZUhhbmRsZXIoKTsKK3ZvaWQgU2V0U2lnSW50SGFuZGxlcigpOwordm9pZCBTZXRTaWdUZXJtSGFuZGxlcigpOworc3RkOjpzdHJpbmcgQmFzZTY0KGNvbnN0IFVuaXQgJlUpOworaW50IEV4ZWN1dGVDb21tYW5kKGNvbnN0IHN0ZDo6c3RyaW5nICZDb21tYW5kKTsKK2Jvb2wgRXhlY3V0ZUNvbW1hbmRBbmRSZWFkT3V0cHV0KGNvbnN0IHN0ZDo6c3RyaW5nICZDb21tYW5kLCBzdGQ6OnN0cmluZyAqT3V0KTsKKworc2l6ZV90IEdldFBlYWtSU1NNYigpOworCisvLyBQcml2YXRlIGNvcHkgb2YgU0hBMSBpbXBsZW1lbnRhdGlvbi4KK3N0YXRpYyBjb25zdCBpbnQga1NIQTFOdW1CeXRlcyA9IDIwOworLy8gQ29tcHV0ZXMgU0hBMSBoYXNoIG9mICdMZW4nIGJ5dGVzIGluICdEYXRhJywgd3JpdGVzIGtTSEExTnVtQnl0ZXMgdG8gJ091dCcuCit2b2lkIENvbXB1dGVTSEExKGNvbnN0IHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBMZW4sIHVpbnQ4X3QgKk91dCk7CitzdGQ6OnN0cmluZyBTaGExVG9TdHJpbmcoY29uc3QgdWludDhfdCBTaGExW2tTSEExTnVtQnl0ZXNdKTsKKworLy8gQ2hhbmdlcyBVIHRvIGNvbnRhaW4gb25seSBBU0NJSSAoaXNwcmludCtpc3NwYWNlKSBjaGFyYWN0ZXJzLgorLy8gUmV0dXJucyB0cnVlIGlmZiBVIGhhcyBiZWVuIGNoYW5nZWQuCitib29sIFRvQVNDSUkodWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUpOworYm9vbCBJc0FTQ0lJKGNvbnN0IFVuaXQgJlUpOworYm9vbCBJc0FTQ0lJKGNvbnN0IHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplKTsKKworaW50IE51bWJlck9mQ3B1Q29yZXMoKTsKK2ludCBHZXRQaWQoKTsKK3ZvaWQgU2xlZXBTZWNvbmRzKGludCBTZWNvbmRzKTsKKworCitzdHJ1Y3QgU2NvcGVkRG9pbmdNeU93bk1lbW1lbSB7CisgIFNjb3BlZERvaW5nTXlPd25NZW1tZW0oKTsKKyAgflNjb3BlZERvaW5nTXlPd25NZW1tZW0oKTsKK307CisKK2lubGluZSB1aW50OF90ICBCc3dhcCh1aW50OF90IHgpICB7IHJldHVybiB4OyB9CitpbmxpbmUgdWludDE2X3QgQnN3YXAodWludDE2X3QgeCkgeyByZXR1cm4gX19idWlsdGluX2Jzd2FwMTYoeCk7IH0KK2lubGluZSB1aW50MzJfdCBCc3dhcCh1aW50MzJfdCB4KSB7IHJldHVybiBfX2J1aWx0aW5fYnN3YXAzMih4KTsgfQoraW5saW5lIHVpbnQ2NF90IEJzd2FwKHVpbnQ2NF90IHgpIHsgcmV0dXJuIF9fYnVpbHRpbl9ic3dhcDY0KHgpOyB9CisKK30gIC8vIG5hbWVzcGFjZSBmdXp6ZXIKKyNlbmRpZiAgLy8gTExWTV9GVVpaRVJfREVGU19ICmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplckRpY3Rpb25hcnkuaCBiL2NsYW5nLTM4NTk0MjQvcHJlYnVpbHRfaW5jbHVkZS9sbHZtL2xpYi9GdXp6ZXIvRnV6emVyRGljdGlvbmFyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMDk4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplckRpY3Rpb25hcnkuaApAQCAtMCwwICsxLDEyNCBAQAorLy89PT0tIEZ1enplckRpY3Rpb25hcnkuaCAtIEludGVybmFsIGhlYWRlciBmb3IgdGhlIEZ1enplciAtLS0tLS0qLSBDKysgLSogPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vIGZ1enplcjo6RGljdGlvbmFyeQorLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKworI2lmbmRlZiBMTFZNX0ZVWlpFUl9ESUNUSU9OQVJZX0gKKyNkZWZpbmUgTExWTV9GVVpaRVJfRElDVElPTkFSWV9ICisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8bGltaXRzPgorCisjaW5jbHVkZSAiRnV6emVyRGVmcy5oIgorCituYW1lc3BhY2UgZnV6emVyIHsKKy8vIEEgc2ltcGxlIFBPRCBzaXplZCBhcnJheSBvZiBieXRlcy4KK3RlbXBsYXRlIDxzaXplX3Qga01heFNpemU+IGNsYXNzIEZpeGVkV29yZCB7CitwdWJsaWM6CisgIEZpeGVkV29yZCgpIHt9CisgIEZpeGVkV29yZChjb25zdCB1aW50OF90ICpCLCB1aW50OF90IFMpIHsgU2V0KEIsIFMpOyB9CisKKyAgdm9pZCBTZXQoY29uc3QgdWludDhfdCAqQiwgdWludDhfdCBTKSB7CisgICAgYXNzZXJ0KFMgPD0ga01heFNpemUpOworICAgIG1lbWNweShEYXRhLCBCLCBTKTsKKyAgICBTaXplID0gUzsKKyAgfQorCisgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGaXhlZFdvcmQ8a01heFNpemU+ICZ3KSBjb25zdCB7CisgICAgcmV0dXJuIFNpemUgPT0gdy5TaXplICYmIDAgPT0gbWVtY21wKERhdGEsIHcuRGF0YSwgU2l6ZSk7CisgIH0KKworICBib29sIG9wZXJhdG9yPChjb25zdCBGaXhlZFdvcmQ8a01heFNpemU+ICZ3KSBjb25zdCB7CisgICAgaWYgKFNpemUgIT0gdy5TaXplKQorICAgICAgcmV0dXJuIFNpemUgPCB3LlNpemU7CisgICAgcmV0dXJuIG1lbWNtcChEYXRhLCB3LkRhdGEsIFNpemUpIDwgMDsKKyAgfQorCisgIHN0YXRpYyBzaXplX3QgR2V0TWF4U2l6ZSgpIHsgcmV0dXJuIGtNYXhTaXplOyB9CisgIGNvbnN0IHVpbnQ4X3QgKmRhdGEoKSBjb25zdCB7IHJldHVybiBEYXRhOyB9CisgIHVpbnQ4X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIFNpemU7IH0KKworcHJpdmF0ZToKKyAgdWludDhfdCBTaXplID0gMDsKKyAgdWludDhfdCBEYXRhW2tNYXhTaXplXTsKK307CisKK3R5cGVkZWYgRml4ZWRXb3JkPDI3PiBXb3JkOyAvLyAyOCBieXRlcy4KKworY2xhc3MgRGljdGlvbmFyeUVudHJ5IHsKKyBwdWJsaWM6CisgIERpY3Rpb25hcnlFbnRyeSgpIHt9CisgIERpY3Rpb25hcnlFbnRyeShXb3JkIFcpIDogVyhXKSB7fQorICBEaWN0aW9uYXJ5RW50cnkoV29yZCBXLCBzaXplX3QgUG9zaXRpb25IaW50KSA6IFcoVyksIFBvc2l0aW9uSGludChQb3NpdGlvbkhpbnQpIHt9CisgIGNvbnN0IFdvcmQgJkdldFcoKSBjb25zdCB7IHJldHVybiBXOyB9CisKKyAgYm9vbCBIYXNQb3NpdGlvbkhpbnQoKSBjb25zdCB7IHJldHVybiBQb3NpdGlvbkhpbnQgIT0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsgfQorICBzaXplX3QgR2V0UG9zaXRpb25IaW50KCkgY29uc3QgeworICAgIGFzc2VydChIYXNQb3NpdGlvbkhpbnQoKSk7CisgICAgcmV0dXJuIFBvc2l0aW9uSGludDsKKyAgfQorICB2b2lkIEluY1VzZUNvdW50KCkgeyBVc2VDb3VudCsrOyB9CisgIHZvaWQgSW5jU3VjY2Vzc0NvdW50KCkgeyBTdWNjZXNzQ291bnQrKzsgfQorICBzaXplX3QgR2V0VXNlQ291bnQoKSBjb25zdCB7IHJldHVybiBVc2VDb3VudDsgfQorICBzaXplX3QgR2V0U3VjY2Vzc0NvdW50KCkgY29uc3Qge3JldHVybiBTdWNjZXNzQ291bnQ7IH0KKworICB2b2lkIFByaW50KGNvbnN0IGNoYXIgKlByaW50QWZ0ZXIgPSAiXG4iKSB7CisgICAgUHJpbnRBU0NJSShXLmRhdGEoKSwgVy5zaXplKCkpOworICAgIGlmIChIYXNQb3NpdGlvbkhpbnQoKSkKKyAgICAgIFByaW50ZigiQCV6ZCIsIEdldFBvc2l0aW9uSGludCgpKTsKKyAgICBQcmludGYoIiVzIiwgUHJpbnRBZnRlcik7CisgIH0KKworcHJpdmF0ZToKKyAgV29yZCBXOworICBzaXplX3QgUG9zaXRpb25IaW50ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsKKyAgc2l6ZV90IFVzZUNvdW50ID0gMDsKKyAgc2l6ZV90IFN1Y2Nlc3NDb3VudCA9IDA7Cit9OworCitjbGFzcyBEaWN0aW9uYXJ5IHsKKyBwdWJsaWM6CisgIHN0YXRpYyBjb25zdCBzaXplX3Qga01heERpY3RTaXplID0gMSA8PCAxNDsKKworICBib29sIENvbnRhaW5zV29yZChjb25zdCBXb3JkICZXKSBjb25zdCB7CisgICAgcmV0dXJuIHN0ZDo6YW55X29mKGJlZ2luKCksIGVuZCgpLCBbJl0oY29uc3QgRGljdGlvbmFyeUVudHJ5ICZERSkgeworICAgICAgcmV0dXJuIERFLkdldFcoKSA9PSBXOworICAgIH0pOworICB9CisgIGNvbnN0IERpY3Rpb25hcnlFbnRyeSAqYmVnaW4oKSBjb25zdCB7IHJldHVybiAmREVbMF07IH0KKyAgY29uc3QgRGljdGlvbmFyeUVudHJ5ICplbmQoKSBjb25zdCB7IHJldHVybiBiZWdpbigpICsgU2l6ZTsgfQorICBEaWN0aW9uYXJ5RW50cnkgJiBvcGVyYXRvcltdIChzaXplX3QgSWR4KSB7CisgICAgYXNzZXJ0KElkeCA8IFNpemUpOworICAgIHJldHVybiBERVtJZHhdOworICB9CisgIHZvaWQgcHVzaF9iYWNrKERpY3Rpb25hcnlFbnRyeSBERSkgeworICAgIGlmIChTaXplIDwga01heERpY3RTaXplKQorICAgICAgdGhpcy0+REVbU2l6ZSsrXSA9IERFOworICB9CisgIHZvaWQgY2xlYXIoKSB7IFNpemUgPSAwOyB9CisgIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBTaXplID09IDA7IH0KKyAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBTaXplOyB9CisKK3ByaXZhdGU6CisgIERpY3Rpb25hcnlFbnRyeSBERVtrTWF4RGljdFNpemVdOworICBzaXplX3QgU2l6ZSA9IDA7Cit9OworCisvLyBQYXJzZXMgb25lIGRpY3Rpb25hcnkgZW50cnkuCisvLyBJZiBzdWNjZXNzZnVsbCwgd3JpdGUgdGhlIGVudHkgdG8gVW5pdCBhbmQgcmV0dXJucyB0cnVlLAorLy8gb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCitib29sIFBhcnNlT25lRGljdGlvbmFyeUVudHJ5KGNvbnN0IHN0ZDo6c3RyaW5nICZTdHIsIFVuaXQgKlUpOworLy8gUGFyc2VzIHRoZSBkaWN0aW9uYXJ5IGZpbGUsIGZpbGxzIFVuaXRzLCByZXR1cm5zIHRydWUgaWZmIGFsbCBsaW5lcworLy8gd2VyZSBwYXJzZWQgc3VjY2VzZnVsbHkuCitib29sIFBhcnNlRGljdGlvbmFyeUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcgJlRleHQsIHN0ZDo6dmVjdG9yPFVuaXQ+ICpVbml0cyk7CisKK30gIC8vIG5hbWVzcGFjZSBmdXp6ZXIKKworI2VuZGlmICAvLyBMTFZNX0ZVWlpFUl9ESUNUSU9OQVJZX0gKKwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9wcmVidWlsdF9pbmNsdWRlL2xsdm0vbGliL0Z1enplci9GdXp6ZXJFeHRGdW5jdGlvbnMuZGVmIGIvY2xhbmctMzg1OTQyNC9wcmVidWlsdF9pbmNsdWRlL2xsdm0vbGliL0Z1enplci9GdXp6ZXJFeHRGdW5jdGlvbnMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNDY3MGYKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplckV4dEZ1bmN0aW9ucy5kZWYKQEAgLTAsMCArMSw0NyBAQAorLy89PT0tIEZ1enplckV4dEZ1bmN0aW9ucy5kZWYgLSBFeHRlcm5hbCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0qLSBDKysgLSogPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vIFRoaXMgZGVmaW5lcyB0aGUgZXh0ZXJuYWwgZnVuY3Rpb24gcG9pbnRlcnMgdGhhdAorLy8gYGBmdXp6ZXI6OkV4dGVybmFsRnVuY3Rpb25zYGAgc2hvdWxkIGNvbnRhaW4gYW5kIHRyeSB0byBpbml0aWFsaXplLiAgVGhlCisvLyBFWFRfRlVOQyBtYWNybyBtdXN0IGJlIGRlZmluZWQgYXQgdGhlIHBvaW50IG9mIGluY2x1c2lvbi4gVGhlIHNpZ25hdHVyZSBvZgorLy8gdGhlIG1hY3JvIGlzOgorLy8KKy8vIEVYVF9GVU5DKDxuYW1lPiwgPHJldHVybl90eXBlPiwgPGZ1bmN0aW9uX3NpZ25hdHVyZT4sIDx3YXJuX2lmX21pc3Npbmc+KQorLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKworLy8gT3B0aW9uYWwgdXNlciBmdW5jdGlvbnMKK0VYVF9GVU5DKExMVk1GdXp6ZXJJbml0aWFsaXplLCBpbnQsIChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndiksIGZhbHNlKTsKK0VYVF9GVU5DKExMVk1GdXp6ZXJDdXN0b21NdXRhdG9yLCBzaXplX3QsCisgICAgICAgICAodWludDhfdCAqIERhdGEsIHNpemVfdCBTaXplLCBzaXplX3QgTWF4U2l6ZSwgdW5zaWduZWQgaW50IFNlZWQpLAorICAgICAgICAgZmFsc2UpOworRVhUX0ZVTkMoTExWTUZ1enplckN1c3RvbUNyb3NzT3Zlciwgc2l6ZV90LAorICAgICAgICAgKGNvbnN0IHVpbnQ4X3QgKiBEYXRhMSwgc2l6ZV90IFNpemUxLAorICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKiBEYXRhMiwgc2l6ZV90IFNpemUyLAorICAgICAgICAgIHVpbnQ4X3QgKiBPdXQsIHNpemVfdCBNYXhPdXRTaXplLCB1bnNpZ25lZCBpbnQgU2VlZCksCisgICAgICAgICBmYWxzZSk7CisKKy8vIFNhbml0aXplciBmdW5jdGlvbnMKK0VYVF9GVU5DKF9fbHNhbl9lbmFibGUsIHZvaWQsICgpLCBmYWxzZSk7CitFWFRfRlVOQyhfX2xzYW5fZGlzYWJsZSwgdm9pZCwgKCksIGZhbHNlKTsKK0VYVF9GVU5DKF9fbHNhbl9kb19yZWNvdmVyYWJsZV9sZWFrX2NoZWNrLCBpbnQsICgpLCBmYWxzZSk7CitFWFRfRlVOQyhfX3Nhbml0aXplcl9nZXRfbnVtYmVyX29mX2NvdW50ZXJzLCBzaXplX3QsICgpLCBmYWxzZSk7CitFWFRfRlVOQyhfX3Nhbml0aXplcl9pbnN0YWxsX21hbGxvY19hbmRfZnJlZV9ob29rcywgaW50LAorICAgICAgICAgKHZvaWQgKCptYWxsb2NfaG9vaykoY29uc3Qgdm9sYXRpbGUgdm9pZCAqLCBzaXplX3QpLAorICAgICAgICAgIHZvaWQgKCpmcmVlX2hvb2spKGNvbnN0IHZvbGF0aWxlIHZvaWQgKikpLAorICAgICAgICAgZmFsc2UpOworRVhUX0ZVTkMoX19zYW5pdGl6ZXJfZ2V0X3RvdGFsX3VuaXF1ZV9jYWxsZXJfY2FsbGVlX3BhaXJzLCBzaXplX3QsICgpLCBmYWxzZSk7CitFWFRfRlVOQyhfX3Nhbml0aXplcl9nZXRfdG90YWxfdW5pcXVlX2NvdmVyYWdlLCBzaXplX3QsICgpLCB0cnVlKTsKK0VYVF9GVU5DKF9fc2FuaXRpemVyX3ByaW50X21lbW9yeV9wcm9maWxlLCBpbnQsIChzaXplX3QpLCBmYWxzZSk7CitFWFRfRlVOQyhfX3Nhbml0aXplcl9wcmludF9zdGFja190cmFjZSwgdm9pZCwgKCksIHRydWUpOworRVhUX0ZVTkMoX19zYW5pdGl6ZXJfc3ltYm9saXplX3BjLCB2b2lkLAorICAgICAgICAgKHZvaWQgKiwgY29uc3QgY2hhciAqZm10LCBjaGFyICpvdXRfYnVmLCBzaXplX3Qgb3V0X2J1Zl9zaXplKSwgZmFsc2UpOworRVhUX0ZVTkMoX19zYW5pdGl6ZXJfcmVzZXRfY292ZXJhZ2UsIHZvaWQsICgpLCB0cnVlKTsKK0VYVF9GVU5DKF9fc2FuaXRpemVyX3NldF9kZWF0aF9jYWxsYmFjaywgdm9pZCwgKHZvaWQgKCopKHZvaWQpKSwgdHJ1ZSk7CitFWFRfRlVOQyhfX3Nhbml0aXplcl9zZXRfcmVwb3J0X2ZkLCB2b2lkLCAodm9pZCopLCBmYWxzZSk7CitFWFRfRlVOQyhfX3Nhbml0aXplcl91cGRhdGVfY291bnRlcl9iaXRzZXRfYW5kX2NsZWFyX2NvdW50ZXJzLCB1aW50cHRyX3QsCisgICh1aW50OF90KiksIGZhbHNlKTsKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvcHJlYnVpbHRfaW5jbHVkZS9sbHZtL2xpYi9GdXp6ZXIvRnV6emVyRXh0RnVuY3Rpb25zLmggYi9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplckV4dEZ1bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYzg2Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplckV4dEZ1bmN0aW9ucy5oCkBAIC0wLDAgKzEsMzMgQEAKKy8vPT09LSBGdXp6ZXJFeHRGdW5jdGlvbnMuaCAtIEludGVyZmFjZSB0byBleHRlcm5hbCBmdW5jdGlvbnMgLS0tKi0gQysrIC0qID09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLyBEZWZpbmVzIGFuIGludGVyZmFjZSB0byAocG9zc2libHkgb3B0aW9uYWwpIGZ1bmN0aW9ucy4KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisjaWZuZGVmIExMVk1fRlVaWkVSX0VYVF9GVU5DVElPTlNfSAorI2RlZmluZSBMTFZNX0ZVWlpFUl9FWFRfRlVOQ1RJT05TX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCituYW1lc3BhY2UgZnV6emVyIHsKKworc3RydWN0IEV4dGVybmFsRnVuY3Rpb25zIHsKKyAgLy8gSW5pdGlhbGl6ZSBmdW5jdGlvbiBwb2ludGVycy4gRnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBhdmFpbGFibGUgd2lsbCBiZSBzZXQKKyAgLy8gdG8gbnVsbHB0ci4gIERvIG5vdCBjYWxsIHRoaXMgY29uc3RydWN0b3IgIGJlZm9yZSBgYG1haW4oKWBgIGhhcyBiZWVuCisgIC8vIGVudGVyZWQuCisgIEV4dGVybmFsRnVuY3Rpb25zKCk7CisKKyNkZWZpbmUgRVhUX0ZVTkMoTkFNRSwgUkVUVVJOX1RZUEUsIEZVTkNfU0lHLCBXQVJOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFJFVFVSTl9UWVBFKCpOQU1FKSBGVU5DX1NJRyA9IG51bGxwdHIKKworI2luY2x1ZGUgIkZ1enplckV4dEZ1bmN0aW9ucy5kZWYiCisKKyN1bmRlZiBFWFRfRlVOQworfTsKK30gLy8gbmFtZXNwYWNlIGZ1enplcgorI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplckZsYWdzLmRlZiBiL2NsYW5nLTM4NTk0MjQvcHJlYnVpbHRfaW5jbHVkZS9sbHZtL2xpYi9GdXp6ZXIvRnV6emVyRmxhZ3MuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMTA3YTMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplckZsYWdzLmRlZgpAQCAtMCwwICsxLDExMiBAQAorLy89PT0tIEZ1enplckZsYWdzLmRlZiAtIFJ1bi10aW1lIGZsYWdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLSBDKysgLSogPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vIEZsYWdzLiBGVVpaRVJfRkxBR19JTlQvRlVaWkVSX0ZMQUdfU1RSSU5HIG1hY3JvcyBzaG91bGQgYmUgZGVmaW5lZCBhdCB0aGUKKy8vIHBvaW50IG9mIGluY2x1c2lvbi4gV2UgYXJlIG5vdCB1c2luZyBhbnkgZmxhZyBwYXJzaW5nIGxpYnJhcnkgZm9yIGJldHRlcgorLy8gcG9ydGFiaWxpdHkgYW5kIGluZGVwZW5kZW5jZS4KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCitGVVpaRVJfRkxBR19JTlQodmVyYm9zaXR5LCAxLCAiVmVyYm9zaXR5IGxldmVsLiIpCitGVVpaRVJfRkxBR19VTlNJR05FRChzZWVkLCAwLCAiUmFuZG9tIHNlZWQuIElmIDAsIHNlZWQgaXMgZ2VuZXJhdGVkLiIpCitGVVpaRVJfRkxBR19JTlQocnVucywgLTEsCisgICAgICAgICAgICAiTnVtYmVyIG9mIGluZGl2aWR1YWwgdGVzdCBydW5zICgtMSBmb3IgaW5maW5pdGUgcnVucykuIikKK0ZVWlpFUl9GTEFHX0lOVChtYXhfbGVuLCAwLCAiTWF4aW11bSBsZW5ndGggb2YgdGhlIHRlc3QgaW5wdXQuICIKKyAgICAiSWYgMCwgbGliRnV6emVyIHRyaWVzIHRvIGd1ZXNzIGEgZ29vZCB2YWx1ZSBiYXNlZCBvbiB0aGUgY29ycHVzICIKKyAgICAiYW5kIHJlcG9ydHMgaXQuICIpCitGVVpaRVJfRkxBR19JTlQoY3Jvc3Nfb3ZlciwgMSwgIklmIDEsIGNyb3NzIG92ZXIgaW5wdXRzLiIpCitGVVpaRVJfRkxBR19JTlQobXV0YXRlX2RlcHRoLCA1LAorICAgICAgICAgICAgIkFwcGx5IHRoaXMgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIG11dGF0aW9ucyB0byBlYWNoIGlucHV0LiIpCitGVVpaRVJfRkxBR19JTlQoc2h1ZmZsZSwgMSwgIlNodWZmbGUgaW5wdXRzIGF0IHN0YXJ0dXAiKQorRlVaWkVSX0ZMQUdfSU5UKHByZWZlcl9zbWFsbCwgMSwKKyAgICAiSWYgMSwgYWx3YXlzIHByZWZlciBzbWFsbGVyIGlucHV0cyBkdXJpbmcgdGhlIGNvcnB1cyBzaHVmZmxlLiIpCitGVVpaRVJfRkxBR19JTlQoCisgICAgdGltZW91dCwgMTIwMCwKKyAgICAiVGltZW91dCBpbiBzZWNvbmRzIChpZiBwb3NpdGl2ZSkuICIKKyAgICAiSWYgb25lIHVuaXQgcnVucyBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2Ygc2Vjb25kcyB0aGUgcHJvY2VzcyB3aWxsIGFib3J0LiIpCitGVVpaRVJfRkxBR19JTlQodGltZW91dF9leGl0Y29kZSwgNzcsCisgICAgICAgICAgICAgICAgIlVubGVzcyBhYm9ydF9vbl90aW1lb3V0IGlzIHNldCwgdXNlIHRoaXMgZXhpdGNvZGUgb24gdGltZW91dC4iKQorRlVaWkVSX0ZMQUdfSU5UKGVycm9yX2V4aXRfY29kZSwgNzcsICJXaGVuIGxpYkZ1enplcidzIHNpZ25hbCBoYW5kbGVycyBhcmUgaW4gIgorICAidXNlIGV4aXQgd2l0aCB0aGlzIGV4aXRjb2RlIGFmdGVyIGNhdGNoaW5nIGEgZGVhZGx5IHNpZ25hbC4iKQorRlVaWkVSX0ZMQUdfSU5UKG1heF90b3RhbF90aW1lLCAwLCAiSWYgcG9zaXRpdmUsIGluZGljYXRlcyB0aGUgbWF4aW1hbCB0b3RhbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lIGluIHNlY29uZHMgdG8gcnVuIHRoZSBmdXp6ZXIuIikKK0ZVWlpFUl9GTEFHX0lOVChoZWxwLCAwLCAiUHJpbnQgaGVscC4iKQorRlVaWkVSX0ZMQUdfSU5UKG1lcmdlLCAwLCAiSWYgMSwgdGhlIDItbmQsIDMtcmQsIGV0YyBjb3Jwb3JhIHdpbGwgYmUgIgorICAibWVyZ2VkIGludG8gdGhlIDEtc3QgY29ycHVzLiBPbmx5IGludGVyZXN0aW5nIHVuaXRzIHdpbGwgYmUgdGFrZW4uICIKKyAgIlRoaXMgZmxhZyBjYW4gYmUgdXNlZCB0byBtaW5pbWl6ZSBhIGNvcnB1cy4iKQorRlVaWkVSX0ZMQUdfSU5UKG1pbmltaXplX2NyYXNoLCAwLCAiSWYgMSwgbWluaW1pemVzIHRoZSBwcm92aWRlZCIKKyAgIiBjcmFzaCBpbnB1dC4gVXNlIHdpdGggLXJ1bnM9TiBvciAtbWF4X3RvdGFsX3RpbWU9TiB0byBsaW1pdCAiCisgICJ0aGUgbnVtYmVyIGF0dGVtcHRzIikKK0ZVWlpFUl9GTEFHX0lOVChtaW5pbWl6ZV9jcmFzaF9pbnRlcm5hbF9zdGVwLCAwLCAiaW50ZXJuYWwgZmxhZyIpCitGVVpaRVJfRkxBR19JTlQodXNlX2NvdW50ZXJzLCAxLCAiVXNlIGNvdmVyYWdlIGNvdW50ZXJzIikKK0ZVWlpFUl9GTEFHX0lOVCh1c2VfaW5kaXJfY2FsbHMsIDEsICJVc2UgaW5kaXJlY3QgY2FsbGVyLWNhbGxlZSBjb3VudGVycyIpCitGVVpaRVJfRkxBR19JTlQodXNlX21lbWNtcCwgMSwKKyAgICAgICAgICAgICAgICAiVXNlIGhpbnRzIGZyb20gaW50ZXJjZXB0aW5nIG1lbWNtcCwgc3RyY21wLCBldGMiKQorRlVaWkVSX0ZMQUdfSU5UKHVzZV9tZW1tZW0sIDEsCisgICAgICAgICAgICAgICAgIlVzZSBoaW50cyBmcm9tIGludGVyY2VwdGluZyBtZW1tZW0sIHN0cnN0ciwgZXRjIikKK0ZVWlpFUl9GTEFHX0lOVCh1c2VfdmFsdWVfcHJvZmlsZSwgMCwKKyAgICAgICAgICAgICAgICAiRXhwZXJpbWVudGFsLiBVc2UgdmFsdWUgcHJvZmlsZSB0byBndWlkZSBmdXp6aW5nLiIpCitGVVpaRVJfRkxBR19JTlQodXNlX2NtcCwgMSwgIlVzZSBDTVAgdHJhY2VzIHRvIGd1aWRlIG11dGF0aW9ucyIpCitGVVpaRVJfRkxBR19JTlQoc2hyaW5rLCAwLCAiRXhwZXJpbWVudGFsLiBUcnkgdG8gc2hyaW5rIGNvcnB1cyBlbGVtZW50cy4iKQorRlVaWkVSX0ZMQUdfSU5UKGpvYnMsIDAsICJOdW1iZXIgb2Ygam9icyB0byBydW4uIElmIGpvYnMgPj0gMSB3ZSBzcGF3biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0aGlzIG51bWJlciBvZiBqb2JzIGluIHNlcGFyYXRlIHdvcmtlciBwcm9jZXNzZXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgd2l0aCBzdGRvdXQvc3RkZXJyIHJlZGlyZWN0ZWQgdG8gZnV6ei1KT0IubG9nLiIpCitGVVpaRVJfRkxBR19JTlQod29ya2VycywgMCwKKyAgICAgICAgICAgICJOdW1iZXIgb2Ygc2ltdWx0YW5lb3VzIHdvcmtlciBwcm9jZXNzZXMgdG8gcnVuIHRoZSBqb2JzLiIKKyAgICAgICAgICAgICIgSWYgemVybywgXCJtaW4oam9icyxOdW1iZXJPZkNwdUNvcmVzKCkvMilcIiBpcyB1c2VkLiIpCitGVVpaRVJfRkxBR19JTlQocmVsb2FkLCAxLAorICAgICAgICAgICAgICAgICJSZWxvYWQgdGhlIG1haW4gY29ycHVzIGV2ZXJ5IDxOPiBzZWNvbmRzIHRvIGdldCBuZXcgdW5pdHMiCisgICAgICAgICAgICAgICAgIiBkaXNjb3ZlcmVkIGJ5IG90aGVyIHByb2Nlc3Nlcy4gSWYgMCwgZGlzYWJsZWQiKQorRlVaWkVSX0ZMQUdfSU5UKHJlcG9ydF9zbG93X3VuaXRzLCAxMCwKKyAgICAiUmVwb3J0IHNsb3dlc3QgdW5pdHMgaWYgdGhleSBydW4gZm9yIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBzZWNvbmRzLiIpCitGVVpaRVJfRkxBR19JTlQob25seV9hc2NpaSwgMCwKKyAgICAgICAgICAgICAgICAiSWYgMSwgZ2VuZXJhdGUgb25seSBBU0NJSSAoaXNwcmludCtpc3NwYWNlKSBpbnB1dHMuIikKK0ZVWlpFUl9GTEFHX1NUUklORyhkaWN0LCAiRXhwZXJpbWVudGFsLiBVc2UgdGhlIGRpY3Rpb25hcnkgZmlsZS4iKQorRlVaWkVSX0ZMQUdfU1RSSU5HKGFydGlmYWN0X3ByZWZpeCwgIldyaXRlIGZ1enppbmcgYXJ0aWZhY3RzIChjcmFzaCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQsIG9yIHNsb3cgaW5wdXRzKSBhcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJChhcnRpZmFjdF9wcmVmaXgpZmlsZSIpCitGVVpaRVJfRkxBR19TVFJJTkcoZXhhY3RfYXJ0aWZhY3RfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAiV3JpdGUgdGhlIHNpbmdsZSBhcnRpZmFjdCBvbiBmYWlsdXJlIChjcmFzaCwgdGltZW91dCkgIgorICAgICAgICAgICAgICAgICAgICJhcyAkKGV4YWN0X2FydGlmYWN0X3BhdGgpLiBUaGlzIG92ZXJyaWRlcyAtYXJ0aWZhY3RfcHJlZml4ICIKKyAgICAgICAgICAgICAgICAgICAiYW5kIHdpbGwgbm90IHVzZSBjaGVja3N1bSBpbiB0aGUgZmlsZSBuYW1lLiBEbyBub3QgIgorICAgICAgICAgICAgICAgICAgICJ1c2UgdGhlIHNhbWUgcGF0aCBmb3Igc2V2ZXJhbCBwYXJhbGxlbCBwcm9jZXNzZXMuIikKK0ZVWlpFUl9GTEFHX0lOVChvdXRwdXRfY3N2LCAwLCAiRW5hYmxlIHB1bHNlIG91dHB1dCBpbiBDU1YgZm9ybWF0LiIpCitGVVpaRVJfRkxBR19JTlQocHJpbnRfcGNzLCAwLCAiSWYgMSwgcHJpbnQgb3V0IG5ld2x5IGNvdmVyZWQgUENzLiIpCitGVVpaRVJfRkxBR19JTlQocHJpbnRfZmluYWxfc3RhdHMsIDAsICJJZiAxLCBwcmludCBzdGF0aXN0aWNzIGF0IGV4aXQuIikKK0ZVWlpFUl9GTEFHX0lOVChwcmludF9jb3JwdXNfc3RhdHMsIDAsCisgICJJZiAxLCBwcmludCBzdGF0aXN0aWNzIG9uIGNvcnB1cyBlbGVtZW50cyBhdCBleGl0LiIpCitGVVpaRVJfRkxBR19JTlQocHJpbnRfY292ZXJhZ2UsIDAsICJJZiAxLCBwcmludCBjb3ZlcmFnZSBpbmZvcm1hdGlvbiBhdCBleGl0LiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBFeHBlcmltZW50YWwsIG9ubHkgd2l0aCB0cmFjZS1wYy1ndWFyZCIpCitGVVpaRVJfRkxBR19JTlQoaGFuZGxlX3NlZ3YsIDEsICJJZiAxLCB0cnkgdG8gaW50ZXJjZXB0IFNJR1NFR1YuIikKK0ZVWlpFUl9GTEFHX0lOVChoYW5kbGVfYnVzLCAxLCAiSWYgMSwgdHJ5IHRvIGludGVyY2VwdCBTSUdTRUdWLiIpCitGVVpaRVJfRkxBR19JTlQoaGFuZGxlX2FicnQsIDEsICJJZiAxLCB0cnkgdG8gaW50ZXJjZXB0IFNJR0FCUlQuIikKK0ZVWlpFUl9GTEFHX0lOVChoYW5kbGVfaWxsLCAxLCAiSWYgMSwgdHJ5IHRvIGludGVyY2VwdCBTSUdJTEwuIikKK0ZVWlpFUl9GTEFHX0lOVChoYW5kbGVfZnBlLCAxLCAiSWYgMSwgdHJ5IHRvIGludGVyY2VwdCBTSUdGUEUuIikKK0ZVWlpFUl9GTEFHX0lOVChoYW5kbGVfaW50LCAxLCAiSWYgMSwgdHJ5IHRvIGludGVyY2VwdCBTSUdJTlQuIikKK0ZVWlpFUl9GTEFHX0lOVChoYW5kbGVfdGVybSwgMSwgIklmIDEsIHRyeSB0byBpbnRlcmNlcHQgU0lHVEVSTS4iKQorRlVaWkVSX0ZMQUdfSU5UKGNsb3NlX2ZkX21hc2ssIDAsICJJZiAxLCBjbG9zZSBzdGRvdXQgYXQgc3RhcnR1cDsgIgorICAgICJpZiAyLCBjbG9zZSBzdGRlcnI7IGlmIDMsIGNsb3NlIGJvdGguICIKKyAgICAiQmUgY2FyZWZ1bCwgdGhpcyB3aWxsIGFsc28gY2xvc2UgZS5nLiBhc2FuJ3Mgc3RkZXJyL3N0ZG91dC4iKQorRlVaWkVSX0ZMQUdfSU5UKGRldGVjdF9sZWFrcywgMSwgIklmIDEsIGFuZCBpZiBMZWFrU2FuaXRpemVyIGlzIGVuYWJsZWQgIgorICAgICJ0cnkgdG8gZGV0ZWN0IG1lbW9yeSBsZWFrcyBkdXJpbmcgZnV6emluZyAoaS5lLiBub3Qgb25seSBhdCBzaHV0IGRvd24pLiIpCitGVVpaRVJfRkxBR19JTlQodHJhY2VfbWFsbG9jLCAwLCAiSWYgPj0gMSB3aWxsIHByaW50IGFsbCBtYWxsb2NzL2ZyZWVzLiAiCisgICAgIklmID49IDIgd2lsbCBhbHNvIHByaW50IHN0YWNrIHRyYWNlcy4iKQorRlVaWkVSX0ZMQUdfSU5UKHJzc19saW1pdF9tYiwgMjA0OCwgIklmIG5vbi16ZXJvLCB0aGUgZnV6emVyIHdpbGwgZXhpdCB1cG9uIgorICAgICJyZWFjaGluZyB0aGlzIGxpbWl0IG9mIFJTUyBtZW1vcnkgdXNhZ2UuIikKK0ZVWlpFUl9GTEFHX1NUUklORyhleGl0X29uX3NyY19wb3MsICJFeGl0IGlmIGEgbmV3bHkgZm91bmQgUEMgb3JpZ2luYXRlcyIKKyAgICAiIGZyb20gdGhlIGdpdmVuIHNvdXJjZSBsb2NhdGlvbi4gRXhhbXBsZTogLWV4aXRfb25fc3JjX3Bvcz1mb28uY2M6MTIzLiAiCisgICAgIlVzZWQgcHJpbWFyaWx5IGZvciB0ZXN0aW5nIGxpYkZ1enplciBpdHNlbGYuIikKK0ZVWlpFUl9GTEFHX1NUUklORyhleGl0X29uX2l0ZW0sICJFeGl0IGlmIGFuIGl0ZW0gd2l0aCBhIGdpdmVuIHNoYTEgc3VtIgorICAgICIgd2FzIGFkZGVkIHRvIHRoZSBjb3JwdXMuICIKKyAgICAiVXNlZCBwcmltYXJpbHkgZm9yIHRlc3RpbmcgbGliRnV6emVyIGl0c2VsZi4iKQorCitGVVpaRVJfREVQUkVDQVRFRF9GTEFHKGV4aXRfb25fZmlyc3QpCitGVVpaRVJfREVQUkVDQVRFRF9GTEFHKHNhdmVfbWluaW1pemVkX2NvcnB1cykKK0ZVWlpFUl9ERVBSRUNBVEVEX0ZMQUcoc3luY19jb21tYW5kKQorRlVaWkVSX0RFUFJFQ0FURURfRkxBRyhzeW5jX3RpbWVvdXQpCitGVVpaRVJfREVQUkVDQVRFRF9GTEFHKHRlc3Rfc2luZ2xlX2lucHV0KQorRlVaWkVSX0RFUFJFQ0FURURfRkxBRyhkcmlsbCkKK0ZVWlpFUl9ERVBSRUNBVEVEX0ZMQUcodHJ1bmNhdGVfdW5pdHMpCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplckZuQWRhcHRlci5oIGIvY2xhbmctMzg1OTQyNC9wcmVidWlsdF9pbmNsdWRlL2xsdm0vbGliL0Z1enplci9GdXp6ZXJGbkFkYXB0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjJjMjE5Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9wcmVidWlsdF9pbmNsdWRlL2xsdm0vbGliL0Z1enplci9GdXp6ZXJGbkFkYXB0ZXIuaApAQCAtMCwwICsxLDE4NyBAQAorLy89PT0tIEZ1enplckFkYXB0ZXIuaCAtIEFyYml0cmFyeSBmdW5jdGlvbiBGdXp6ZXIgYWRhcHRlciAtLS0tLS0tKi0gQysrIC0qPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCisvLyBXIEEgUiBOIEkgTiBHIDogIEUgWCBQIEUgUiBJIE0gRSBOIFQgQSBMLgorLy8KKy8vIERlZmluZXMgYW4gYWRhcHRlciB0byBmdXp6IGZ1bmN0aW9ucyB3aXRoIChhbG1vc3QpIGFyYml0cmFyeSBzaWduYXR1cmVzLgorLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKworI2lmbmRlZiBMTFZNX0ZVWlpFUl9BREFQVEVSX0gKKyNkZWZpbmUgTExWTV9GVVpaRVJfQURBUFRFUl9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgZnV6emVyIHsKKworLy8vIFVucGFja3MgYnl0ZXMgZnJvbSBccCBEYXRhIGFjY29yZGluZyB0byBccCBGIGFyZ3VtZW50IHR5cGVzCisvLy8gYW5kIGNhbGxzIHRoZSBmdW5jdGlvbi4KKy8vLyBVc2UgdG8gYXV0b21hdGljYWxseSBhZGFwdCBMTFZNRnV6emVyVGVzdE9uZUlucHV0IGludGVyZmFjZSB0bworLy8vIGEgc3BlY2lmaWMgZnVuY3Rpb24uCisvLy8gU3VwcG9ydGVkIGFyZ3VtZW50IHR5cGVzOiBwcmltaXRpdmUgdHlwZXMsIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+LgordGVtcGxhdGUgPHR5cGVuYW1lIEZuPiBib29sIEFkYXB0KEZuIEYsIGNvbnN0IHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplKTsKKworLy8gVGhlIGltcGxlbWVudGF0aW9uIHBlcmZvcm1zIHNldmVyYWwgc3RlcHM6CisvLyAtIGZ1bmN0aW9uIGFyZ3VtZW50IHR5cGVzIGFyZSBvYnRhaW5lZCAoQXJncy4uLikKKy8vIC0gZGF0YSBpcyB1bnBhY2tlZCBpbnRvIHN0ZDo6dHVwbGU8QXJncy4uLj4gb25lIGJ5IG9uZQorLy8gLSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBzdGQ6OnR1cGxlPEFyZ3MuLi4+IGNvbnRhaW5pbmcgYXJndW1lbnRzLgorbmFtZXNwYWNlIGltcGwgeworCisvLyBTaW5nbGUgYXJndW1lbnQgdW5wYWNraW5nLgorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3NpemVfdCBVbnBhY2tQcmltaXRpdmUoY29uc3QgdWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsIFQgKlZhbHVlKSB7CisgIGlmIChTaXplIDwgc2l6ZW9mKFQpKQorICAgIHJldHVybiBTaXplOworICAqVmFsdWUgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUICo+KERhdGEpOworICByZXR1cm4gU2l6ZSAtIHNpemVvZihUKTsKK30KKworLy8vIFVucGFja3MgaW50byBhIGdpdmVuIFZhbHVlIGFuZCByZXR1cm5zIHRoZSBTaXplIC0gbnVtX2NvbnN1bWVkX2J5dGVzLgorLy8vIFJldHVybiB2YWx1ZSBlcXVhbCB0byBTaXplIHNpZ25hbHMgaW5hYmlsaXR5IHRvIHVucGFjayB0aGUgZGF0YSAodHlwaWNhbGx5CisvLy8gYmVjYXVzZSB0aGVyZSBhcmUgbm90IGVub3VnaCBieXRlcykuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3NpemVfdCBVbnBhY2tTaW5nbGUoY29uc3QgdWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsIFQgKlZhbHVlKTsKKworI2RlZmluZSBVTlBBQ0tfU0lOR0xFX1BSSU1JVElWRShUeXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGUgPD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHNpemVfdCBVbnBhY2tTaW5nbGU8VHlwZT4oY29uc3QgdWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsIFR5cGUgKlZhbHVlKSB7ICAgXAorICAgIHJldHVybiBVbnBhY2tQcmltaXRpdmUoRGF0YSwgU2l6ZSwgVmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCitVTlBBQ0tfU0lOR0xFX1BSSU1JVElWRShjaGFyKQorVU5QQUNLX1NJTkdMRV9QUklNSVRJVkUoc2lnbmVkIGNoYXIpCitVTlBBQ0tfU0lOR0xFX1BSSU1JVElWRSh1bnNpZ25lZCBjaGFyKQorCitVTlBBQ0tfU0lOR0xFX1BSSU1JVElWRShzaG9ydCBpbnQpCitVTlBBQ0tfU0lOR0xFX1BSSU1JVElWRSh1bnNpZ25lZCBzaG9ydCBpbnQpCisKK1VOUEFDS19TSU5HTEVfUFJJTUlUSVZFKGludCkKK1VOUEFDS19TSU5HTEVfUFJJTUlUSVZFKHVuc2lnbmVkIGludCkKKworVU5QQUNLX1NJTkdMRV9QUklNSVRJVkUobG9uZyBpbnQpCitVTlBBQ0tfU0lOR0xFX1BSSU1JVElWRSh1bnNpZ25lZCBsb25nIGludCkKKworVU5QQUNLX1NJTkdMRV9QUklNSVRJVkUoYm9vbCkKK1VOUEFDS19TSU5HTEVfUFJJTUlUSVZFKHdjaGFyX3QpCisKK1VOUEFDS19TSU5HTEVfUFJJTUlUSVZFKGZsb2F0KQorVU5QQUNLX1NJTkdMRV9QUklNSVRJVkUoZG91YmxlKQorVU5QQUNLX1NJTkdMRV9QUklNSVRJVkUobG9uZyBkb3VibGUpCisKKyN1bmRlZiBVTlBBQ0tfU0lOR0xFX1BSSU1JVElWRQorCit0ZW1wbGF0ZSA8Pgorc2l6ZV90IFVucGFja1NpbmdsZTxzdGQ6OnZlY3Rvcjx1aW50OF90Pj4oY29uc3QgdWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiAqVmFsdWUpIHsKKyAgaWYgKFNpemUgPCAxKQorICAgIHJldHVybiBTaXplOworICBzaXplX3QgTGVuID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8c2l6ZV90PigqRGF0YSksIFNpemUgLSAxKTsKKyAgc3RkOjp2ZWN0b3I8dWludDhfdD4gVihEYXRhICsgMSwgRGF0YSArIDEgKyBMZW4pOworICBWYWx1ZS0+c3dhcChWKTsKKyAgcmV0dXJuIFNpemUgLSBMZW4gLSAxOworfQorCit0ZW1wbGF0ZSA8Pgorc2l6ZV90IFVucGFja1NpbmdsZTxzdGQ6OnN0cmluZz4oY29uc3QgdWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsCisgICAgc3RkOjpzdHJpbmcgKlZhbHVlKSB7CisgIGlmIChTaXplIDwgMSkKKyAgICByZXR1cm4gU2l6ZTsKKyAgc2l6ZV90IExlbiA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PHNpemVfdD4oKkRhdGEpLCBTaXplIC0gMSk7CisgIHN0ZDo6c3RyaW5nIFMoRGF0YSArIDEsIERhdGEgKyAxICsgTGVuKTsKKyAgVmFsdWUtPnN3YXAoUyk7CisgIHJldHVybiBTaXplIC0gTGVuIC0gMTsKK30KKworLy8gVW5wYWNraW5nIGludG8gYXJiaXRyYXJ5IHR1cGxlLgorCisvLyBSZWN1cnNpb24gZ3VhcmQuCit0ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFR1cGxlVD4KK3R5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPE4gPT0gc3RkOjp0dXBsZV9zaXplPFR1cGxlVD46OnZhbHVlLCBib29sPjo6dHlwZQorVW5wYWNrSW1wbChjb25zdCB1aW50OF90ICpEYXRhLCBzaXplX3QgU2l6ZSwgVHVwbGVUICpUdXBsZSkgeworICByZXR1cm4gdHJ1ZTsKK30KKworLy8gVW5wYWNrIHR1cGxlIGVsZW1lbnRzIHN0YXJ0aW5nIGZyb20gTnRoLgordGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZSBUdXBsZVQ+Cit0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxOIDwgc3RkOjp0dXBsZV9zaXplPFR1cGxlVD46OnZhbHVlLCBib29sPjo6dHlwZQorVW5wYWNrSW1wbChjb25zdCB1aW50OF90ICpEYXRhLCBzaXplX3QgU2l6ZSwgVHVwbGVUICpUdXBsZSkgeworICBzaXplX3QgTmV3U2l6ZSA9IFVucGFja1NpbmdsZShEYXRhLCBTaXplLCAmc3RkOjpnZXQ8Tj4oKlR1cGxlKSk7CisgIGlmIChOZXdTaXplID09IFNpemUpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICByZXR1cm4gVW5wYWNrSW1wbDxOICsgMSwgVHVwbGVUPihEYXRhICsgKFNpemUgLSBOZXdTaXplKSwgTmV3U2l6ZSwgVHVwbGUpOworfQorCisvLyBVbnBhY2tzIGludG8gYXJiaXRyYXJ5IHR1cGxlIGFuZCByZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bC4KK3RlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgorYm9vbCBVbnBhY2soY29uc3QgdWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsIHN0ZDo6dHVwbGU8QXJncy4uLj4gKlR1cGxlKSB7CisgIHJldHVybiBVbnBhY2tJbXBsPDAsIHN0ZDo6dHVwbGU8QXJncy4uLj4+KERhdGEsIFNpemUsIFR1cGxlKTsKK30KKworLy8gSGVscGVyIGludGVnZXIgc2VxdWVuY2UgdGVtcGxhdGVzLgorCit0ZW1wbGF0ZSA8aW50Li4uPiBzdHJ1Y3QgU2VxIHt9OworCit0ZW1wbGF0ZSA8aW50IE4sIGludC4uLiBTPiBzdHJ1Y3QgR2VuU2VxIDogR2VuU2VxPE4gLSAxLCBOIC0gMSwgUy4uLj4ge307CisKKy8vIEdlblNlcTxOPjo6dHlwZSBpcyBTZXE8MCwgMSwgLi4uLCBOLTE+Cit0ZW1wbGF0ZSA8aW50Li4uIFM+IHN0cnVjdCBHZW5TZXE8MCwgUy4uLj4geyB0eXBlZGVmIFNlcTxTLi4uPiB0eXBlOyB9OworCisvLyBGdW5jdGlvbiBzaWduYXR1cmUgaW50cm9zcGVjdGlvbi4KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBGblRyYWl0cyB7fTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CitzdHJ1Y3QgRm5UcmFpdHM8UmV0dXJuVHlwZSAoKikoQXJncy4uLik+IHsKKyAgZW51bSB7IEFyaXR5ID0gc2l6ZW9mLi4uKEFyZ3MpIH07CisgIHR5cGVkZWYgc3RkOjp0dXBsZTxBcmdzLi4uPiBBcmdzVHVwbGVUOworfTsKKworLy8gQ2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYXJndW1lbnRzIGluIGEgdHVwbGUuCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBGbiwgaW50Li4uIFM+Cit2b2lkIEFwcGx5SW1wbChGbiBGLCBjb25zdCB0eXBlbmFtZSBGblRyYWl0czxGbj46OkFyZ3NUdXBsZVQgJlBhcmFtcywKKyAgICAgICAgICAgICAgIFNlcTxTLi4uPikgeworICBGKHN0ZDo6Z2V0PFM+KFBhcmFtcykuLi4pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRm4+Cit2b2lkIEFwcGx5KEZuIEYsIGNvbnN0IHR5cGVuYW1lIEZuVHJhaXRzPEZuPjo6QXJnc1R1cGxlVCAmUGFyYW1zKSB7CisgIC8vIFMgaXMgU2VxPDAsIC4uLiwgQXJpdHktMT4KKyAgYXV0byBTID0gdHlwZW5hbWUgR2VuU2VxPEZuVHJhaXRzPEZuPjo6QXJpdHk+Ojp0eXBlKCk7CisgIEFwcGx5SW1wbChGLCBQYXJhbXMsIFMpOworfQorCisvLyBVbnBhY2tpbmcgZGF0YSBpbnRvIGFyZ3VtZW50cyB0dXBsZSBvZiBjb3JyZWN0IHR5cGUgYW5kIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLgordGVtcGxhdGUgPHR5cGVuYW1lIEZuPgorYm9vbCBVbnBhY2tBbmRBcHBseShGbiBGLCBjb25zdCB1aW50OF90ICpEYXRhLCBzaXplX3QgU2l6ZSkgeworICB0eXBlbmFtZSBGblRyYWl0czxGbj46OkFyZ3NUdXBsZVQgVHVwbGU7CisgIGlmICghVW5wYWNrKERhdGEsIFNpemUsICZUdXBsZSkpCisgICAgcmV0dXJuIGZhbHNlOworCisgIEFwcGx5KEYsIFR1cGxlKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIGltcGwKKwordGVtcGxhdGUgPHR5cGVuYW1lIEZuPiBib29sIEFkYXB0KEZuIEYsIGNvbnN0IHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplKSB7CisgIHJldHVybiBpbXBsOjpVbnBhY2tBbmRBcHBseShGLCBEYXRhLCBTaXplKTsKK30KKworfSAvLyBuYW1lc3BhY2UgZnV6emVyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9wcmVidWlsdF9pbmNsdWRlL2xsdm0vbGliL0Z1enplci9GdXp6ZXJJbnRlcmZhY2UuaCBiL2NsYW5nLTM4NTk0MjQvcHJlYnVpbHRfaW5jbHVkZS9sbHZtL2xpYi9GdXp6ZXIvRnV6emVySW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3ZTIwZQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvcHJlYnVpbHRfaW5jbHVkZS9sbHZtL2xpYi9GdXp6ZXIvRnV6emVySW50ZXJmYWNlLmgKQEAgLTAsMCArMSw2NyBAQAorLy89PT0tIEZ1enplckludGVyZmFjZS5oIC0gSW50ZXJmYWNlIGhlYWRlciBmb3IgdGhlIEZ1enplciAtLS0tLS0qLSBDKysgLSogPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vIERlZmluZSB0aGUgaW50ZXJmYWNlIGJldHdlZW4gbGliRnV6emVyIGFuZCB0aGUgbGlicmFyeSBiZWluZyB0ZXN0ZWQuCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworCisvLyBOT1RFOiB0aGUgbGliRnV6emVyIGludGVyZmFjZSBpcyB0aGluIGFuZCBpbiB0aGUgbWFqb3JpdHkgb2YgY2FzZXMKKy8vIHlvdSBzaG91bGQgbm90IGluY2x1ZGUgdGhpcyBmaWxlIGludG8geW91ciB0YXJnZXQuIEluIDk1JSBvZiBjYXNlcworLy8gYWxsIHlvdSBuZWVkIGlzIHRvIGRlZmluZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIGluIHlvdXIgZmlsZToKKy8vIGV4dGVybiAiQyIgaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUpOworCisvLyBXQVJOSU5HOiBrZWVwIHRoZSBpbnRlcmZhY2UgaW4gQy4KKworI2lmbmRlZiBMTFZNX0ZVWlpFUl9JTlRFUkZBQ0VfSAorI2RlZmluZSBMTFZNX0ZVWlpFUl9JTlRFUkZBQ0VfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgIC8vIF9fY3BsdXNwbHVzCisKKy8vIE1hbmRhdG9yeSB1c2VyLXByb3ZpZGVkIHRhcmdldCBmdW5jdGlvbi4KKy8vIEV4ZWN1dGVzIHRoZSBjb2RlIHVuZGVyIHRlc3Qgd2l0aCBbRGF0YSwgRGF0YStTaXplKSBhcyB0aGUgaW5wdXQuCisvLyBsaWJGdXp6ZXIgd2lsbCBpbnZva2UgdGhpcyBmdW5jdGlvbiAqbWFueSogdGltZXMgd2l0aCBkaWZmZXJlbnQgaW5wdXRzLgorLy8gTXVzdCByZXR1cm4gMC4KK2ludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplKTsKKworLy8gT3B0aW9uYWwgdXNlci1wcm92aWRlZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4KKy8vIElmIHByb3ZpZGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IGxpYkZ1enplciBvbmNlIGF0IHN0YXJ0dXAuCisvLyBJdCBtYXkgcmVhZCBhbmQgbW9kaWZ5IGFyZ2MvYXJndi4KKy8vIE11c3QgcmV0dXJuIDAuCitpbnQgTExWTUZ1enplckluaXRpYWxpemUoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YpOworCisvLyBPcHRpb25hbCB1c2VyLXByb3ZpZGVkIGN1c3RvbSBtdXRhdG9yLgorLy8gTXV0YXRlcyByYXcgZGF0YSBpbiBbRGF0YSwgRGF0YStTaXplKSBpbnBsYWNlLgorLy8gUmV0dXJucyB0aGUgbmV3IHNpemUsIHdoaWNoIGlzIG5vdCBncmVhdGVyIHRoYW4gTWF4U2l6ZS4KKy8vIEdpdmVuIHRoZSBzYW1lIFNlZWQgcHJvZHVjZXMgdGhlIHNhbWUgbXV0YXRpb24uCitzaXplX3QgTExWTUZ1enplckN1c3RvbU11dGF0b3IodWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsIHNpemVfdCBNYXhTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBTZWVkKTsKKworLy8gT3B0aW9uYWwgdXNlci1wcm92aWRlZCBjdXN0b20gY3Jvc3Mtb3ZlciBmdW5jdGlvbi4KKy8vIENvbWJpbmVzIHBpZWNlcyBvZiBEYXRhMSAmIERhdGEyIHRvZ2V0aGVyIGludG8gT3V0LgorLy8gUmV0dXJucyB0aGUgbmV3IHNpemUsIHdoaWNoIGlzIG5vdCBncmVhdGVyIHRoYW4gTWF4T3V0U2l6ZS4KKy8vIFNob3VsZCBwcm9kdWNlIHRoZSBzYW1lIG11dGF0aW9uIGdpdmVuIHRoZSBzYW1lIFNlZWQuCitzaXplX3QgTExWTUZ1enplckN1c3RvbUNyb3NzT3Zlcihjb25zdCB1aW50OF90ICpEYXRhMSwgc2l6ZV90IFNpemUxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqRGF0YTIsIHNpemVfdCBTaXplMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKk91dCwgc2l6ZV90IE1heE91dFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgU2VlZCk7CisKKy8vIEV4cGVyaW1lbnRhbCwgbWF5IGdvIGF3YXkgaW4gZnV0dXJlLgorLy8gbGliRnV6emVyLXByb3ZpZGVkIGZ1bmN0aW9uIHRvIGJlIHVzZWQgaW5zaWRlIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQuCisvLyBNdXRhdGVzIHJhdyBkYXRhIGluIFtEYXRhLCBEYXRhK1NpemUpIGlucGxhY2UuCisvLyBSZXR1cm5zIHRoZSBuZXcgc2l6ZSwgd2hpY2ggaXMgbm90IGdyZWF0ZXIgdGhhbiBNYXhTaXplLgorc2l6ZV90IExMVk1GdXp6ZXJNdXRhdGUodWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsIHNpemVfdCBNYXhTaXplKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYgIC8vIF9fY3BsdXNwbHVzCisKKyNlbmRpZiAgLy8gTExWTV9GVVpaRVJfSU5URVJGQUNFX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvcHJlYnVpbHRfaW5jbHVkZS9sbHZtL2xpYi9GdXp6ZXIvRnV6emVySW50ZXJuYWwuaCBiL2NsYW5nLTM4NTk0MjQvcHJlYnVpbHRfaW5jbHVkZS9sbHZtL2xpYi9GdXp6ZXIvRnV6emVySW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQ5MWVhCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9wcmVidWlsdF9pbmNsdWRlL2xsdm0vbGliL0Z1enplci9GdXp6ZXJJbnRlcm5hbC5oCkBAIC0wLDAgKzEsMTc2IEBACisvLz09PS0gRnV6emVySW50ZXJuYWwuaCAtIEludGVybmFsIGhlYWRlciBmb3IgdGhlIEZ1enplciAtLS0tLS0tLSotIEMrKyAtKiA9PT0vLworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKKy8vIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8gRGVmaW5lIHRoZSBtYWluIGNsYXNzIGZ1enplcjo6RnV6emVyIGFuZCBtb3N0IGZ1bmN0aW9ucy4KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisKKyNpZm5kZWYgTExWTV9GVVpaRVJfSU5URVJOQUxfSAorI2RlZmluZSBMTFZNX0ZVWlpFUl9JTlRFUk5BTF9ICisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8YXRvbWljPgorI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDxjbGltaXRzPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJGdXp6ZXJEZWZzLmgiCisjaW5jbHVkZSAiRnV6emVyRXh0RnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiRnV6emVySW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiRnV6emVyT3B0aW9ucy5oIgorI2luY2x1ZGUgIkZ1enplclZhbHVlQml0TWFwLmgiCisKK25hbWVzcGFjZSBmdXp6ZXIgeworCit1c2luZyBuYW1lc3BhY2Ugc3RkOjpjaHJvbm87CisKK2NsYXNzIEZ1enplciB7CitwdWJsaWM6CisKKyAgLy8gQWdncmVnYXRlcyBhbGwgYXZhaWxhYmxlIGNvdmVyYWdlIG1lYXN1cmVtZW50cy4KKyAgc3RydWN0IENvdmVyYWdlIHsKKyAgICBDb3ZlcmFnZSgpIHsgUmVzZXQoKTsgfQorCisgICAgdm9pZCBSZXNldCgpIHsKKyAgICAgIEJsb2NrQ292ZXJhZ2UgPSAwOworICAgICAgQ2FsbGVyQ2FsbGVlQ292ZXJhZ2UgPSAwOworICAgICAgQ291bnRlckJpdG1hcEJpdHMgPSAwOworICAgICAgQ291bnRlckJpdG1hcC5jbGVhcigpOworICAgICAgVlBNYXAuUmVzZXQoKTsKKyAgICB9CisKKyAgICBzaXplX3QgQmxvY2tDb3ZlcmFnZTsKKyAgICBzaXplX3QgQ2FsbGVyQ2FsbGVlQ292ZXJhZ2U7CisgICAgLy8gUHJlY2FsY3VsYXRlZCBudW1iZXIgb2YgYml0cyBpbiBDb3VudGVyQml0bWFwLgorICAgIHNpemVfdCBDb3VudGVyQml0bWFwQml0czsKKyAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBDb3VudGVyQml0bWFwOworICAgIFZhbHVlQml0TWFwIFZQTWFwOworICB9OworCisgIEZ1enplcihVc2VyQ2FsbGJhY2sgQ0IsIElucHV0Q29ycHVzICZDb3JwdXMsIE11dGF0aW9uRGlzcGF0Y2hlciAmTUQsCisgICAgICAgICBGdXp6aW5nT3B0aW9ucyBPcHRpb25zKTsKKyAgfkZ1enplcigpOworICB2b2lkIExvb3AoKTsKKyAgdm9pZCBNaW5pbWl6ZUNyYXNoTG9vcChjb25zdCBVbml0ICZVKTsKKyAgdm9pZCBTaHVmZmxlQW5kTWluaW1pemUoVW5pdFZlY3RvciAqVik7CisgIHZvaWQgSW5pdGlhbGl6ZVRyYWNlU3RhdGUoKTsKKyAgdm9pZCBSZXJlYWRPdXRwdXRDb3JwdXMoc2l6ZV90IE1heFNpemUpOworCisgIHNpemVfdCBzZWNvbmRzU2luY2VQcm9jZXNzU3RhcnRVcCgpIHsKKyAgICByZXR1cm4gZHVyYXRpb25fY2FzdDxzZWNvbmRzPihzeXN0ZW1fY2xvY2s6Om5vdygpIC0gUHJvY2Vzc1N0YXJ0VGltZSkKKyAgICAgICAgLmNvdW50KCk7CisgIH0KKworICBib29sIFRpbWVkT3V0KCkgeworICAgIHJldHVybiBPcHRpb25zLk1heFRvdGFsVGltZVNlYyA+IDAgJiYKKyAgICAgICAgICAgc2Vjb25kc1NpbmNlUHJvY2Vzc1N0YXJ0VXAoKSA+CisgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KE9wdGlvbnMuTWF4VG90YWxUaW1lU2VjKTsKKyAgfQorCisgIHNpemVfdCBleGVjUGVyU2VjKCkgeworICAgIHNpemVfdCBTZWNvbmRzID0gc2Vjb25kc1NpbmNlUHJvY2Vzc1N0YXJ0VXAoKTsKKyAgICByZXR1cm4gU2Vjb25kcyA/IFRvdGFsTnVtYmVyT2ZSdW5zIC8gU2Vjb25kcyA6IDA7CisgIH0KKworICBzaXplX3QgZ2V0VG90YWxOdW1iZXJPZlJ1bnMoKSB7IHJldHVybiBUb3RhbE51bWJlck9mUnVuczsgfQorCisgIHN0YXRpYyB2b2lkIFN0YXRpY0FsYXJtQ2FsbGJhY2soKTsKKyAgc3RhdGljIHZvaWQgU3RhdGljQ3Jhc2hTaWduYWxDYWxsYmFjaygpOworICBzdGF0aWMgdm9pZCBTdGF0aWNJbnRlcnJ1cHRDYWxsYmFjaygpOworCisgIHZvaWQgRXhlY3V0ZUNhbGxiYWNrKGNvbnN0IHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplKTsKKyAgc2l6ZV90IFJ1bk9uZShjb25zdCB1aW50OF90ICpEYXRhLCBzaXplX3QgU2l6ZSk7CisKKyAgLy8gTWVyZ2UgQ29ycG9yYVsxOl0gaW50byBDb3Jwb3JhWzBdLgorICB2b2lkIE1lcmdlKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmQ29ycG9yYSk7CisgIC8vIFJldHVybnMgYSBzdWJzZXQgb2YgJ0V4dHJhJyB0aGF0IGFkZHMgY292ZXJhZ2UgdG8gJ0luaXRpYWwnLgorICBVbml0VmVjdG9yIEZpbmRFeHRyYVVuaXRzKGNvbnN0IFVuaXRWZWN0b3IgJkluaXRpYWwsIGNvbnN0IFVuaXRWZWN0b3IgJkV4dHJhKTsKKyAgTXV0YXRpb25EaXNwYXRjaGVyICZHZXRNRCgpIHsgcmV0dXJuIE1EOyB9CisgIHZvaWQgUHJpbnRGaW5hbFN0YXRzKCk7CisgIHZvaWQgU2V0TWF4SW5wdXRMZW4oc2l6ZV90IE1heElucHV0TGVuKTsKKyAgdm9pZCBTZXRNYXhNdXRhdGlvbkxlbihzaXplX3QgTWF4TXV0YXRpb25MZW4pOworICB2b2lkIFJzc0xpbWl0Q2FsbGJhY2soKTsKKworICAvLyBQdWJsaWMgZm9yIHRlc3RzLgorICB2b2lkIFJlc2V0Q292ZXJhZ2UoKTsKKworICBib29sIEluRnV6emluZ1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIElzTXlUaHJlYWQ7IH0KKyAgc2l6ZV90IEdldEN1cnJlbnRVbml0SW5GdXp6aW5nVGhlYWQoY29uc3QgdWludDhfdCAqKkRhdGEpIGNvbnN0OworICB2b2lkIFRyeURldGVjdGluZ0FNZW1vcnlMZWFrKGNvbnN0IHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgRHVyaW5nSW5pdGlhbENvcnB1c0V4ZWN1dGlvbik7CisKK3ByaXZhdGU6CisgIHZvaWQgQWxhcm1DYWxsYmFjaygpOworICB2b2lkIENyYXNoQ2FsbGJhY2soKTsKKyAgdm9pZCBJbnRlcnJ1cHRDYWxsYmFjaygpOworICB2b2lkIE11dGF0ZUFuZFRlc3RPbmUoKTsKKyAgdm9pZCBSZXBvcnROZXdDb3ZlcmFnZShJbnB1dEluZm8gKklJLCBjb25zdCBVbml0ICZVKTsKKyAgc2l6ZV90IFJ1bk9uZShjb25zdCBVbml0ICZVKSB7IHJldHVybiBSdW5PbmUoVS5kYXRhKCksIFUuc2l6ZSgpKTsgfQorICB2b2lkIFdyaXRlVG9PdXRwdXRDb3JwdXMoY29uc3QgVW5pdCAmVSk7CisgIHZvaWQgV3JpdGVVbml0VG9GaWxlV2l0aFByZWZpeChjb25zdCBVbml0ICZVLCBjb25zdCBjaGFyICpQcmVmaXgpOworICB2b2lkIFByaW50U3RhdHMoY29uc3QgY2hhciAqV2hlcmUsIGNvbnN0IGNoYXIgKkVuZCA9ICJcbiIsIHNpemVfdCBVbml0cyA9IDApOworICB2b2lkIFByaW50U3RhdHVzRm9yTmV3VW5pdChjb25zdCBVbml0ICZVKTsKKyAgdm9pZCBTaHVmZmxlQ29ycHVzKFVuaXRWZWN0b3IgKlYpOworICB2b2lkIEFkZFRvQ29ycHVzKGNvbnN0IFVuaXQgJlUpOworICB2b2lkIENoZWNrRXhpdE9uU3JjUG9zT3JJdGVtKCk7CisKKyAgLy8gVHJhY2UtYmFzZWQgZnV6emluZzogd2UgcnVuIGEgdW5pdCB3aXRoIHNvbWUga2luZCBvZiB0cmFjaW5nCisgIC8vIGVuYWJsZWQgYW5kIHJlY29yZCBwb3RlbnRpYWxseSB1c2VmdWwgbXV0YXRpb25zLiBUaGVuCisgIC8vIFdlIGFwcGx5IHRoZXNlIG11dGF0aW9ucyBvbmUgYnkgb25lIHRvIHRoZSB1bml0IGFuZCBydW4gaXQgYWdhaW4uCisKKyAgLy8gU3RhcnQgdHJhY2luZzsgZm9yZ2V0IGFsbCBwcmV2aW91c2x5IHByb3Bvc2VkIG11dGF0aW9ucy4KKyAgdm9pZCBTdGFydFRyYWNlUmVjb3JkaW5nKCk7CisgIC8vIFN0b3AgdHJhY2luZy4KKyAgdm9pZCBTdG9wVHJhY2VSZWNvcmRpbmcoKTsKKworICB2b2lkIFNldERlYXRoQ2FsbGJhY2soKTsKKyAgc3RhdGljIHZvaWQgU3RhdGljRGVhdGhDYWxsYmFjaygpOworICB2b2lkIER1bXBDdXJyZW50VW5pdChjb25zdCBjaGFyICpQcmVmaXgpOworICB2b2lkIERlYXRoQ2FsbGJhY2soKTsKKworICB2b2lkIFJlc2V0RWRnZUNvdmVyYWdlKCk7CisgIHZvaWQgUmVzZXRDb3VudGVycygpOworICB2b2lkIFByZXBhcmVDb3VudGVycyhGdXp6ZXI6OkNvdmVyYWdlICpDKTsKKyAgYm9vbCBSZWNvcmRNYXhDb3ZlcmFnZShGdXp6ZXI6OkNvdmVyYWdlICpDKTsKKworICB2b2lkIEFsbG9jYXRlQ3VycmVudFVuaXREYXRhKCk7CisgIHVpbnQ4X3QgKkN1cnJlbnRVbml0RGF0YSA9IG51bGxwdHI7CisgIHN0ZDo6YXRvbWljPHNpemVfdD4gQ3VycmVudFVuaXRTaXplOworICB1aW50OF90IEJhc2VTaGExW2tTSEExTnVtQnl0ZXNdOyAgLy8gQ2hlY2tzdW0gb2YgdGhlIGJhc2UgdW5pdC4KKworICBzaXplX3QgVG90YWxOdW1iZXJPZlJ1bnMgPSAwOworICBzaXplX3QgTnVtYmVyT2ZOZXdVbml0c0FkZGVkID0gMDsKKworICBib29sIEhhc01vcmVNYWxsb2NzVGhhbkZyZWVzID0gZmFsc2U7CisgIHNpemVfdCBOdW1iZXJPZkxlYWtEZXRlY3Rpb25BdHRlbXB0cyA9IDA7CisKKyAgVXNlckNhbGxiYWNrIENCOworICBJbnB1dENvcnB1cyAmQ29ycHVzOworICBNdXRhdGlvbkRpc3BhdGNoZXIgJk1EOworICBGdXp6aW5nT3B0aW9ucyBPcHRpb25zOworCisgIHN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBQcm9jZXNzU3RhcnRUaW1lID0gc3lzdGVtX2Nsb2NrOjpub3coKTsKKyAgc3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IFVuaXRTdGFydFRpbWUsIFVuaXRTdG9wVGltZTsKKyAgbG9uZyBUaW1lT2ZMb25nZXN0VW5pdEluU2Vjb25kcyA9IDA7CisgIGxvbmcgRXBvY2hPZkxhc3RSZWFkT2ZPdXRwdXRDb3JwdXMgPSAwOworCisgIC8vIE1heGltdW0gcmVjb3JkZWQgY292ZXJhZ2UuCisgIENvdmVyYWdlIE1heENvdmVyYWdlOworCisgIHNpemVfdCBNYXhJbnB1dExlbiA9IDA7CisgIHNpemVfdCBNYXhNdXRhdGlvbkxlbiA9IDA7CisKKyAgLy8gTmVlZCB0byBrbm93IG91ciBvd24gdGhyZWFkLgorICBzdGF0aWMgdGhyZWFkX2xvY2FsIGJvb2wgSXNNeVRocmVhZDsKKworICBib29sIEluTWVyZ2VNb2RlID0gZmFsc2U7Cit9OworCit9OyAvLyBuYW1lc3BhY2UgZnV6emVyCisKKyNlbmRpZiAvLyBMTFZNX0ZVWlpFUl9JTlRFUk5BTF9ICmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplck11dGF0ZS5oIGIvY2xhbmctMzg1OTQyNC9wcmVidWlsdF9pbmNsdWRlL2xsdm0vbGliL0Z1enplci9GdXp6ZXJNdXRhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2MwYjAwCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC9wcmVidWlsdF9pbmNsdWRlL2xsdm0vbGliL0Z1enplci9GdXp6ZXJNdXRhdGUuaApAQCAtMCwwICsxLDE0NSBAQAorLy89PT0tIEZ1enplck11dGF0ZS5oIC0gSW50ZXJuYWwgaGVhZGVyIGZvciB0aGUgRnV6emVyIC0tLS0tLS0tLS0qLSBDKysgLSogPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vIGZ1enplcjo6TXV0YXRpb25EaXNwYXRjaGVyCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworCisjaWZuZGVmIExMVk1fRlVaWkVSX01VVEFURV9ICisjZGVmaW5lIExMVk1fRlVaWkVSX01VVEFURV9ICisKKyNpbmNsdWRlICJGdXp6ZXJEZWZzLmgiCisjaW5jbHVkZSAiRnV6emVyRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIkZ1enplclJhbmRvbS5oIgorCituYW1lc3BhY2UgZnV6emVyIHsKKworY2xhc3MgTXV0YXRpb25EaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgTXV0YXRpb25EaXNwYXRjaGVyKFJhbmRvbSAmUmFuZCwgY29uc3QgRnV6emluZ09wdGlvbnMgJk9wdGlvbnMpOworICB+TXV0YXRpb25EaXNwYXRjaGVyKCkge30KKyAgLy8vIEluZGljYXRlIHRoYXQgd2UgYXJlIGFib3V0IHRvIHN0YXJ0IGEgbmV3IHNlcXVlbmNlIG9mIG11dGF0aW9ucy4KKyAgdm9pZCBTdGFydE11dGF0aW9uU2VxdWVuY2UoKTsKKyAgLy8vIFByaW50IHRoZSBjdXJyZW50IHNlcXVlbmNlIG9mIG11dGF0aW9ucy4KKyAgdm9pZCBQcmludE11dGF0aW9uU2VxdWVuY2UoKTsKKyAgLy8vIEluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgc2VxdWVuY2Ugb2YgbXV0YXRpb25zIHdhcyBzdWNjZXNzZnVsbC4KKyAgdm9pZCBSZWNvcmRTdWNjZXNzZnVsTXV0YXRpb25TZXF1ZW5jZSgpOworICAvLy8gTXV0YXRlcyBkYXRhIGJ5IGludm9raW5nIHVzZXItcHJvdmlkZWQgbXV0YXRvci4KKyAgc2l6ZV90IE11dGF0ZV9DdXN0b20odWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsIHNpemVfdCBNYXhTaXplKTsKKyAgLy8vIE11dGF0ZXMgZGF0YSBieSBpbnZva2luZyB1c2VyLXByb3ZpZGVkIGNyb3Nzb3Zlci4KKyAgc2l6ZV90IE11dGF0ZV9DdXN0b21Dcm9zc092ZXIodWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsIHNpemVfdCBNYXhTaXplKTsKKyAgLy8vIE11dGF0ZXMgZGF0YSBieSBzaHVmZmxpbmcgYnl0ZXMuCisgIHNpemVfdCBNdXRhdGVfU2h1ZmZsZUJ5dGVzKHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplLCBzaXplX3QgTWF4U2l6ZSk7CisgIC8vLyBNdXRhdGVzIGRhdGEgYnkgZXJhc2luZyBieXRlcy4KKyAgc2l6ZV90IE11dGF0ZV9FcmFzZUJ5dGVzKHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplLCBzaXplX3QgTWF4U2l6ZSk7CisgIC8vLyBNdXRhdGVzIGRhdGEgYnkgaW5zZXJ0aW5nIGEgYnl0ZS4KKyAgc2l6ZV90IE11dGF0ZV9JbnNlcnRCeXRlKHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplLCBzaXplX3QgTWF4U2l6ZSk7CisgIC8vLyBNdXRhdGVzIGRhdGEgYnkgaW5zZXJ0aW5nIHNldmVyYWwgcmVwZWF0ZWQgYnl0ZXMuCisgIHNpemVfdCBNdXRhdGVfSW5zZXJ0UmVwZWF0ZWRCeXRlcyh1aW50OF90ICpEYXRhLCBzaXplX3QgU2l6ZSwgc2l6ZV90IE1heFNpemUpOworICAvLy8gTXV0YXRlcyBkYXRhIGJ5IGNoYW5kaW5nIG9uZSBieXRlLgorICBzaXplX3QgTXV0YXRlX0NoYW5nZUJ5dGUodWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsIHNpemVfdCBNYXhTaXplKTsKKyAgLy8vIE11dGF0ZXMgZGF0YSBieSBjaGFuZGluZyBvbmUgYml0LgorICBzaXplX3QgTXV0YXRlX0NoYW5nZUJpdCh1aW50OF90ICpEYXRhLCBzaXplX3QgU2l6ZSwgc2l6ZV90IE1heFNpemUpOworICAvLy8gTXV0YXRlcyBkYXRhIGJ5IGNvcHlpbmcvaW5zZXJ0aW5nIGEgcGFydCBvZiBkYXRhIGludG8gYSBkaWZmZXJlbnQgcGxhY2UuCisgIHNpemVfdCBNdXRhdGVfQ29weVBhcnQodWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsIHNpemVfdCBNYXhTaXplKTsKKworICAvLy8gTXV0YXRlcyBkYXRhIGJ5IGFkZGluZyBhIHdvcmQgZnJvbSB0aGUgbWFudWFsIGRpY3Rpb25hcnkuCisgIHNpemVfdCBNdXRhdGVfQWRkV29yZEZyb21NYW51YWxEaWN0aW9uYXJ5KHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgTWF4U2l6ZSk7CisKKyAgLy8vIE11dGF0ZXMgZGF0YSBieSBhZGRpbmcgYSB3b3JkIGZyb20gdGhlIHRlbXBvcmFyeSBhdXRvbWF0aWMgZGljdGlvbmFyeS4KKyAgc2l6ZV90IE11dGF0ZV9BZGRXb3JkRnJvbVRlbXBvcmFyeUF1dG9EaWN0aW9uYXJ5KHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IE1heFNpemUpOworCisgIC8vLyBNdXRhdGVzIGRhdGEgYnkgYWRkaW5nIGEgd29yZCBmcm9tIHRoZSBUT1JDLgorICBzaXplX3QgTXV0YXRlX0FkZFdvcmRGcm9tVE9SQyh1aW50OF90ICpEYXRhLCBzaXplX3QgU2l6ZSwgc2l6ZV90IE1heFNpemUpOworCisgIC8vLyBNdXRhdGVzIGRhdGEgYnkgYWRkaW5nIGEgd29yZCBmcm9tIHRoZSBwZXJzaXN0ZW50IGF1dG9tYXRpYyBkaWN0aW9uYXJ5LgorICBzaXplX3QgTXV0YXRlX0FkZFdvcmRGcm9tUGVyc2lzdGVudEF1dG9EaWN0aW9uYXJ5KHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBNYXhTaXplKTsKKworICAvLy8gVHJpZXMgdG8gZmluZCBhbiBBU0NJSSBpbnRlZ2VyIGluIERhdGEsIGNoYW5nZXMgaXQgdG8gYW5vdGhlciBBU0NJSSBpbnQuCisgIHNpemVfdCBNdXRhdGVfQ2hhbmdlQVNDSUlJbnRlZ2VyKHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplLCBzaXplX3QgTWF4U2l6ZSk7CisgIC8vLyBDaGFuZ2UgYSAxLSwgMi0sIDQtLCBvciA4LWJ5dGUgaW50ZWdlciBpbiBpbnRlcmVzdGluZyB3YXlzLgorICBzaXplX3QgTXV0YXRlX0NoYW5nZUJpbmFyeUludGVnZXIodWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsIHNpemVfdCBNYXhTaXplKTsKKworICAvLy8gQ3Jvc3NPdmVyIERhdGEgd2l0aCBzb21lIG90aGVyIGVsZW1lbnQgb2YgdGhlIGNvcnB1cy4KKyAgc2l6ZV90IE11dGF0ZV9Dcm9zc092ZXIodWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsIHNpemVfdCBNYXhTaXplKTsKKworICAvLy8gQXBwbGllcyBvbmUgb2YgdGhlIGNvbmZpZ3VyZWQgbXV0YXRpb25zLgorICAvLy8gUmV0dXJucyB0aGUgbmV3IHNpemUgb2YgZGF0YSB3aGljaCBjb3VsZCBiZSB1cCB0byBNYXhTaXplLgorICBzaXplX3QgTXV0YXRlKHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplLCBzaXplX3QgTWF4U2l6ZSk7CisgIC8vLyBBcHBsaWVzIG9uZSBvZiB0aGUgZGVmYXVsdCBtdXRhdGlvbnMuIFByb3ZpZGVkIGFzIGEgc2VydmljZQorICAvLy8gdG8gbXV0YXRpb24gYXV0aG9ycy4KKyAgc2l6ZV90IERlZmF1bHRNdXRhdGUodWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsIHNpemVfdCBNYXhTaXplKTsKKworICAvLy8gQ3JlYXRlcyBhIGNyb3NzLW92ZXIgb2YgdHdvIHBpZWNlcyBvZiBEYXRhLCByZXR1cm5zIGl0cyBzaXplLgorICBzaXplX3QgQ3Jvc3NPdmVyKGNvbnN0IHVpbnQ4X3QgKkRhdGExLCBzaXplX3QgU2l6ZTEsIGNvbnN0IHVpbnQ4X3QgKkRhdGEyLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBTaXplMiwgdWludDhfdCAqT3V0LCBzaXplX3QgTWF4T3V0U2l6ZSk7CisKKyAgdm9pZCBBZGRXb3JkVG9NYW51YWxEaWN0aW9uYXJ5KGNvbnN0IFdvcmQgJlcpOworCisgIHZvaWQgQWRkV29yZFRvQXV0b0RpY3Rpb25hcnkoRGljdGlvbmFyeUVudHJ5IERFKTsKKyAgdm9pZCBDbGVhckF1dG9EaWN0aW9uYXJ5KCk7CisgIHZvaWQgUHJpbnRSZWNvbW1lbmRlZERpY3Rpb25hcnkoKTsKKworICB2b2lkIFNldENvcnB1cyhjb25zdCBJbnB1dENvcnB1cyAqQ29ycHVzKSB7IHRoaXMtPkNvcnB1cyA9IENvcnB1czsgfQorCisgIFJhbmRvbSAmR2V0UmFuZCgpIHsgcmV0dXJuIFJhbmQ7IH0KKworcHJpdmF0ZToKKworICBzdHJ1Y3QgTXV0YXRvciB7CisgICAgc2l6ZV90IChNdXRhdGlvbkRpc3BhdGNoZXI6OipGbikodWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsIHNpemVfdCBNYXgpOworICAgIGNvbnN0IGNoYXIgKk5hbWU7CisgIH07CisKKyAgc2l6ZV90IEFkZFdvcmRGcm9tRGljdGlvbmFyeShEaWN0aW9uYXJ5ICZELCB1aW50OF90ICpEYXRhLCBzaXplX3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgTWF4U2l6ZSk7CisgIHNpemVfdCBNdXRhdGVJbXBsKHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplLCBzaXplX3QgTWF4U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8TXV0YXRvcj4gJk11dGF0b3JzKTsKKworICBzaXplX3QgSW5zZXJ0UGFydE9mKGNvbnN0IHVpbnQ4X3QgKkZyb20sIHNpemVfdCBGcm9tU2l6ZSwgdWludDhfdCAqVG8sCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IFRvU2l6ZSwgc2l6ZV90IE1heFRvU2l6ZSk7CisgIHNpemVfdCBDb3B5UGFydE9mKGNvbnN0IHVpbnQ4X3QgKkZyb20sIHNpemVfdCBGcm9tU2l6ZSwgdWludDhfdCAqVG8sCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBUb1NpemUpOworICBzaXplX3QgQXBwbHlEaWN0aW9uYXJ5RW50cnkodWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUsIHNpemVfdCBNYXhTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGljdGlvbmFyeUVudHJ5ICZERSk7CisKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgIERpY3Rpb25hcnlFbnRyeSBNYWtlRGljdGlvbmFyeUVudHJ5RnJvbUNNUChUIEFyZzEsIFQgQXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplKTsKKworICBSYW5kb20gJlJhbmQ7CisgIGNvbnN0IEZ1enppbmdPcHRpb25zICZPcHRpb25zOworCisgIC8vIERpY3Rpb25hcnkgcHJvdmlkZWQgYnkgdGhlIHVzZXIgdmlhIC1kaWN0PURJQ1RfRklMRS4KKyAgRGljdGlvbmFyeSBNYW51YWxEaWN0aW9uYXJ5OworICAvLyBUZW1wb3JhcnkgZGljdGlvbmFyeSBtb2RpZmllZCBieSB0aGUgZnV6emVyIGl0c2VsZiwKKyAgLy8gcmVjcmVhdGVkIHBlcmlvZGljYWxseS4KKyAgRGljdGlvbmFyeSBUZW1wQXV0b0RpY3Rpb25hcnk7CisgIC8vIFBlcnNpc3RlbnQgZGljdGlvbmFyeSBtb2RpZmllZCBieSB0aGUgZnV6emVyLCBjb25zaXN0cyBvZgorICAvLyBlbnRyaWVzIHRoYXQgbGVkIHRvIHN1Y2Nlc3NmdWxsIGRpc2NvdmVyaWVzIGluIHRoZSBwYXN0IG11dGF0aW9ucy4KKyAgRGljdGlvbmFyeSBQZXJzaXN0ZW50QXV0b0RpY3Rpb25hcnk7CisKKyAgc3RkOjp2ZWN0b3I8TXV0YXRvcj4gQ3VycmVudE11dGF0b3JTZXF1ZW5jZTsKKyAgc3RkOjp2ZWN0b3I8RGljdGlvbmFyeUVudHJ5ICo+IEN1cnJlbnREaWN0aW9uYXJ5RW50cnlTZXF1ZW5jZTsKKworICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtDbXBEaWN0aW9uYXJ5RW50cmllc0RlcXVlU2l6ZSA9IDE2OworICBEaWN0aW9uYXJ5RW50cnkgQ21wRGljdGlvbmFyeUVudHJpZXNEZXF1ZVtrQ21wRGljdGlvbmFyeUVudHJpZXNEZXF1ZVNpemVdOworICBzaXplX3QgQ21wRGljdGlvbmFyeUVudHJpZXNEZXF1ZUlkeCA9IDA7CisKKyAgY29uc3QgSW5wdXRDb3JwdXMgKkNvcnB1cyA9IG51bGxwdHI7CisgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IE11dGF0ZUluUGxhY2VIZXJlOworCisgIHN0ZDo6dmVjdG9yPE11dGF0b3I+IE11dGF0b3JzOworICBzdGQ6OnZlY3RvcjxNdXRhdG9yPiBEZWZhdWx0TXV0YXRvcnM7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgZnV6emVyCisKKyNlbmRpZiAgLy8gTExWTV9GVVpaRVJfTVVUQVRFX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvcHJlYnVpbHRfaW5jbHVkZS9sbHZtL2xpYi9GdXp6ZXIvRnV6emVyT3B0aW9ucy5oIGIvY2xhbmctMzg1OTQyNC9wcmVidWlsdF9pbmNsdWRlL2xsdm0vbGliL0Z1enplci9GdXp6ZXJPcHRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkxMjZhMgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvcHJlYnVpbHRfaW5jbHVkZS9sbHZtL2xpYi9GdXp6ZXIvRnV6emVyT3B0aW9ucy5oCkBAIC0wLDAgKzEsNjAgQEAKKy8vPT09LSBGdXp6ZXJPcHRpb25zLmggLSBJbnRlcm5hbCBoZWFkZXIgZm9yIHRoZSBGdXp6ZXIgLS0tLS0tLS0tKi0gQysrIC0qID09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLyBmdXp6ZXI6OkZ1enppbmdPcHRpb25zCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworCisjaWZuZGVmIExMVk1fRlVaWkVSX09QVElPTlNfSAorI2RlZmluZSBMTFZNX0ZVWlpFUl9PUFRJT05TX0gKKworI2luY2x1ZGUgIkZ1enplckRlZnMuaCIKKworbmFtZXNwYWNlIGZ1enplciB7CisKK3N0cnVjdCBGdXp6aW5nT3B0aW9ucyB7CisgIGludCBWZXJib3NpdHkgPSAxOworICBzaXplX3QgTWF4TGVuID0gMDsKKyAgaW50IFVuaXRUaW1lb3V0U2VjID0gMzAwOworICBpbnQgVGltZW91dEV4aXRDb2RlID0gNzc7CisgIGludCBFcnJvckV4aXRDb2RlID0gNzc7CisgIGludCBNYXhUb3RhbFRpbWVTZWMgPSAwOworICBpbnQgUnNzTGltaXRNYiA9IDA7CisgIGJvb2wgRG9Dcm9zc092ZXIgPSB0cnVlOworICBpbnQgTXV0YXRlRGVwdGggPSA1OworICBib29sIFVzZUNvdW50ZXJzID0gZmFsc2U7CisgIGJvb2wgVXNlSW5kaXJDYWxscyA9IHRydWU7CisgIGJvb2wgVXNlTWVtY21wID0gdHJ1ZTsKKyAgYm9vbCBVc2VNZW1tZW0gPSB0cnVlOworICBib29sIFVzZUNtcCA9IGZhbHNlOworICBib29sIFVzZVZhbHVlUHJvZmlsZSA9IGZhbHNlOworICBib29sIFNocmluayA9IGZhbHNlOworICBpbnQgUmVsb2FkSW50ZXJ2YWxTZWMgPSAxOworICBib29sIFNodWZmbGVBdFN0YXJ0VXAgPSB0cnVlOworICBib29sIFByZWZlclNtYWxsID0gdHJ1ZTsKKyAgc2l6ZV90IE1heE51bWJlck9mUnVucyA9IC0xTDsKKyAgaW50IFJlcG9ydFNsb3dVbml0cyA9IDEwOworICBib29sIE9ubHlBU0NJSSA9IGZhbHNlOworICBzdGQ6OnN0cmluZyBPdXRwdXRDb3JwdXM7CisgIHN0ZDo6c3RyaW5nIEFydGlmYWN0UHJlZml4ID0gIi4vIjsKKyAgc3RkOjpzdHJpbmcgRXhhY3RBcnRpZmFjdFBhdGg7CisgIHN0ZDo6c3RyaW5nIEV4aXRPblNyY1BvczsKKyAgc3RkOjpzdHJpbmcgRXhpdE9uSXRlbTsKKyAgYm9vbCBTYXZlQXJ0aWZhY3RzID0gdHJ1ZTsKKyAgYm9vbCBQcmludE5FVyA9IHRydWU7IC8vIFByaW50IGEgc3RhdHVzIGxpbmUgd2hlbiBuZXcgdW5pdHMgYXJlIGZvdW5kOworICBib29sIE91dHB1dENTViA9IGZhbHNlOworICBib29sIFByaW50TmV3Q292UGNzID0gZmFsc2U7CisgIGJvb2wgUHJpbnRGaW5hbFN0YXRzID0gZmFsc2U7CisgIGJvb2wgUHJpbnRDb3JwdXNTdGF0cyA9IGZhbHNlOworICBib29sIFByaW50Q292ZXJhZ2UgPSBmYWxzZTsKKyAgYm9vbCBEZXRlY3RMZWFrcyA9IHRydWU7CisgIGludCAgVHJhY2VNYWxsb2MgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGZ1enplcgorCisjZW5kaWYgIC8vIExMVk1fRlVaWkVSX09QVElPTlNfSApkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC9wcmVidWlsdF9pbmNsdWRlL2xsdm0vbGliL0Z1enplci9GdXp6ZXJSYW5kb20uaCBiL2NsYW5nLTM4NTk0MjQvcHJlYnVpbHRfaW5jbHVkZS9sbHZtL2xpYi9GdXp6ZXIvRnV6emVyUmFuZG9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiZTBiYgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvcHJlYnVpbHRfaW5jbHVkZS9sbHZtL2xpYi9GdXp6ZXIvRnV6emVyUmFuZG9tLmgKQEAgLTAsMCArMSwzNiBAQAorLy89PT0tIEZ1enplclJhbmRvbS5oIC0gSW50ZXJuYWwgaGVhZGVyIGZvciB0aGUgRnV6emVyIC0tLS0tLS0tLS0qLSBDKysgLSogPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vIGZ1enplcjo6UmFuZG9tCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworCisjaWZuZGVmIExMVk1fRlVaWkVSX1JBTkRPTV9ICisjZGVmaW5lIExMVk1fRlVaWkVSX1JBTkRPTV9ICisKKyNpbmNsdWRlIDxyYW5kb20+CisKK25hbWVzcGFjZSBmdXp6ZXIgeworY2xhc3MgUmFuZG9tIHsKKyBwdWJsaWM6CisgIFJhbmRvbSh1bnNpZ25lZCBpbnQgc2VlZCkgOiBSKHNlZWQpIHt9CisgIHNpemVfdCBSYW5kKCkgeyByZXR1cm4gUigpOyB9CisgIHNpemVfdCBSYW5kQm9vbCgpIHsgcmV0dXJuIFJhbmQoKSAlIDI7IH0KKyAgc2l6ZV90IG9wZXJhdG9yKCkoc2l6ZV90IG4pIHsgcmV0dXJuIG4gPyBSYW5kKCkgJSBuIDogMDsgfQorICBpbnRwdHJfdCBvcGVyYXRvcigpKGludHB0cl90IEZyb20sIGludHB0cl90IFRvKSB7CisgICAgYXNzZXJ0KEZyb20gPCBUbyk7CisgICAgaW50cHRyX3QgUmFuZ2VTaXplID0gVG8gLSBGcm9tICsgMTsKKyAgICByZXR1cm4gb3BlcmF0b3IoKShSYW5nZVNpemUpICsgRnJvbTsKKyAgfQorICBzdGQ6Om10MTk5MzcgJkdldF9tdDE5OTM3KCkgeyByZXR1cm4gUjsgfQorIHByaXZhdGU6CisgIHN0ZDo6bXQxOTkzNyBSOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGZ1enplcgorCisjZW5kaWYgIC8vIExMVk1fRlVaWkVSX1JBTkRPTV9ICmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplclRyYWNlUEMuaCBiL2NsYW5nLTM4NTk0MjQvcHJlYnVpbHRfaW5jbHVkZS9sbHZtL2xpYi9GdXp6ZXIvRnV6emVyVHJhY2VQQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjY2UzNjMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplclRyYWNlUEMuaApAQCAtMCwwICsxLDEyMiBAQAorLy89PT0tIEZ1enplclRyYWNlUEMuaCAtIEludGVybmFsIGhlYWRlciBmb3IgdGhlIEZ1enplciAtLS0tLS0tLS0qLSBDKysgLSogPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vIGZ1enplcjo6VHJhY2VQQworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKworI2lmbmRlZiBMTFZNX0ZVWlpFUl9UUkFDRV9QQworI2RlZmluZSBMTFZNX0ZVWlpFUl9UUkFDRV9QQworCisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiRnV6emVyRGVmcy5oIgorI2luY2x1ZGUgIkZ1enplclZhbHVlQml0TWFwLmgiCisKK25hbWVzcGFjZSBmdXp6ZXIgeworCisvLyBUYWJsZU9mUmVjZW50Q29tcGFyZXMgKFRPUkMpIHJlbWVtYmVycyB0aGUgbW9zdCByZWNlbnRseSBwZXJmb3JtZWQKKy8vIGNvbXBhcmlzb25zIG9mIHR5cGUgVC4KKy8vIFdlIHJlY29yZCB0aGUgYXJndW1lbnRzIG9mIENNUCBpbnN0cnVjdGlvbnMgaW4gdGhpcyB0YWJsZSB1bmNvbmRpdGlvbmFsbHkKKy8vIGJlY2F1c2UgaXQgc2VlbXMgY2hlYXBlciB0aGlzIHdheSB0aGFuIHRvIGNvbXB1dGUgc29tZSBleHBlbnNpdmUKKy8vIGNvbmRpdGlvbnMgaW5zaWRlIF9fc2FuaXRpemVyX2Nvdl90cmFjZV9jbXAqLgorLy8gQWZ0ZXIgdGhlIHVuaXQgaGFzIGJlZW4gZXhlY3V0ZWQgd2UgbWF5IGRlY2lkZSB0byB1c2UgdGhlIGNvbnRlbnRzIG9mCisvLyB0aGlzIHRhYmxlIHRvIHBvcHVsYXRlIGEgRGljdGlvbmFyeS4KK3RlbXBsYXRlPGNsYXNzIFQsIHNpemVfdCBrU2l6ZVQ+CitzdHJ1Y3QgVGFibGVPZlJlY2VudENvbXBhcmVzIHsKKyAgc3RhdGljIGNvbnN0IHNpemVfdCBrU2l6ZSA9IGtTaXplVDsKKyAgc3RydWN0IFBhaXIgeworICAgIFQgQSwgQjsKKyAgfTsKKyAgdm9pZCBJbnNlcnQoc2l6ZV90IElkeCwgVCBBcmcxLCBUIEFyZzIpIHsKKyAgICBJZHggPSBJZHggJSBrU2l6ZTsKKyAgICBUYWJsZVtJZHhdLkEgPSBBcmcxOworICAgIFRhYmxlW0lkeF0uQiA9IEFyZzI7CisgIH0KKworICBQYWlyIEdldChzaXplX3QgSSkgeyByZXR1cm4gVGFibGVbSSAlIGtTaXplXTsgfQorCisgIFBhaXIgVGFibGVba1NpemVdOworfTsKKworY2xhc3MgVHJhY2VQQyB7CisgcHVibGljOgorICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtGZWF0dXJlU2V0U2l6ZSA9IFZhbHVlQml0TWFwOjprTnVtYmVyT2ZJdGVtczsKKworICB2b2lkIEhhbmRsZVRyYWNlKHVpbnQzMl90ICpndWFyZCwgdWludHB0cl90IFBDKTsKKyAgdm9pZCBIYW5kbGVJbml0KHVpbnQzMl90ICpzdGFydCwgdWludDMyX3QgKnN0b3ApOworICB2b2lkIEhhbmRsZUNhbGxlckNhbGxlZSh1aW50cHRyX3QgQ2FsbGVyLCB1aW50cHRyX3QgQ2FsbGVlKTsKKyAgdm9pZCBIYW5kbGVWYWx1ZVByb2ZpbGUoc2l6ZV90IFZhbHVlKSB7IFZhbHVlUHJvZmlsZU1hcC5BZGRWYWx1ZShWYWx1ZSk7IH0KKyAgdGVtcGxhdGUgPGNsYXNzIFQ+IHZvaWQgSGFuZGxlQ21wKHZvaWQgKlBDLCBUIEFyZzEsIFQgQXJnMik7CisgIHNpemVfdCBHZXRUb3RhbFBDQ292ZXJhZ2UoKTsKKyAgdm9pZCBTZXRVc2VDb3VudGVycyhib29sIFVDKSB7IFVzZUNvdW50ZXJzID0gVUM7IH0KKyAgdm9pZCBTZXRVc2VWYWx1ZVByb2ZpbGUoYm9vbCBWUCkgeyBVc2VWYWx1ZVByb2ZpbGUgPSBWUDsgfQorICB2b2lkIFNldFByaW50TmV3UENzKGJvb2wgUCkgeyBEb1ByaW50TmV3UENzID0gUDsgfQorICBzaXplX3QgRmluYWxpemVUcmFjZShJbnB1dENvcnB1cyAqQywgc2l6ZV90IElucHV0U2l6ZSwgYm9vbCBTaHJpbmspOworICBib29sIFVwZGF0ZVZhbHVlUHJvZmlsZU1hcChWYWx1ZUJpdE1hcCAqTWF4VmFsdWVQcm9maWxlTWFwKSB7CisgICAgcmV0dXJuIFVzZVZhbHVlUHJvZmlsZSAmJiBNYXhWYWx1ZVByb2ZpbGVNYXAtPk1lcmdlRnJvbShWYWx1ZVByb2ZpbGVNYXApOworICB9CisKKyAgdm9pZCBSZXNldE1hcHMoKSB7CisgICAgVmFsdWVQcm9maWxlTWFwLlJlc2V0KCk7CisgICAgbWVtc2V0KENvdW50ZXJzLCAwLCBzaXplb2YoQ291bnRlcnMpKTsKKyAgfQorCisgIHZvaWQgVXBkYXRlRmVhdHVyZVNldChzaXplX3QgQ3VycmVudEVsZW1lbnRJZHgsIHNpemVfdCBDdXJyZW50RWxlbWVudFNpemUpOworICB2b2lkIFByaW50RmVhdHVyZVNldCgpOworCisgIHZvaWQgUHJpbnRNb2R1bGVJbmZvKCk7CisKKyAgdm9pZCBQcmludENvdmVyYWdlKCk7CisKKyAgdm9pZCBBZGRWYWx1ZUZvck1lbWNtcCh2b2lkICpjYWxsZXJfcGMsIGNvbnN0IHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbik7CisgIHZvaWQgQWRkVmFsdWVGb3JTdHJjbXAodm9pZCAqY2FsbGVyX3BjLCBjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOworCisgIGJvb2wgVXNpbmdUcmFjZVBjR3VhcmQoKSBjb25zdCB7cmV0dXJuIE51bU1vZHVsZXM7IH0KKworICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtUT1JDU2l6ZSA9IDEgPDwgNTsKKyAgVGFibGVPZlJlY2VudENvbXBhcmVzPHVpbnQzMl90LCBrVE9SQ1NpemU+IFRPUkM0OworICBUYWJsZU9mUmVjZW50Q29tcGFyZXM8dWludDY0X3QsIGtUT1JDU2l6ZT4gVE9SQzg7CisKKyAgdm9pZCBQcmludE5ld1BDcygpOworICBzaXplX3QgR2V0TnVtUENzKCkgY29uc3QgeyByZXR1cm4gTWluKGtOdW1QQ3MsIE51bUd1YXJkcyArIDEpOyB9CisgIHVpbnRwdHJfdCBHZXRQQyhzaXplX3QgSWR4KSB7CisgICAgYXNzZXJ0KElkeCA8IEdldE51bVBDcygpKTsKKyAgICByZXR1cm4gUENzW0lkeF07CisgIH0KKworcHJpdmF0ZToKKyAgYm9vbCBVc2VDb3VudGVycyA9IGZhbHNlOworICBib29sIFVzZVZhbHVlUHJvZmlsZSA9IGZhbHNlOworICBib29sIERvUHJpbnROZXdQQ3MgPSBmYWxzZTsKKworICBzdHJ1Y3QgTW9kdWxlIHsKKyAgICB1aW50MzJfdCAqU3RhcnQsICpTdG9wOworICB9OworCisgIE1vZHVsZSBNb2R1bGVzWzQwOTZdOworICBzaXplX3QgTnVtTW9kdWxlcyA9IDA7CisgIHNpemVfdCBOdW1HdWFyZHMgPSAwOworCisgIHN0YXRpYyBjb25zdCBzaXplX3Qga051bUNvdW50ZXJzID0gMSA8PCAxNDsKKyAgYWxpZ25hcyg4KSB1aW50OF90IENvdW50ZXJzW2tOdW1Db3VudGVyc107CisKKyAgc3RhdGljIGNvbnN0IHNpemVfdCBrTnVtUENzID0gMSA8PCAyNDsKKyAgdWludHB0cl90IFBDc1trTnVtUENzXTsKKworICBzdGQ6OnNldDx1aW50cHRyX3Q+ICpQcmludGVkUENzOworCisgIFZhbHVlQml0TWFwIFZhbHVlUHJvZmlsZU1hcDsKK307CisKK2V4dGVybiBUcmFjZVBDIFRQQzsKKworfSAgLy8gbmFtZXNwYWNlIGZ1enplcgorCisjZW5kaWYgIC8vIExMVk1fRlVaWkVSX1RSQUNFX1BDCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplclZhbHVlQml0TWFwLmggYi9jbGFuZy0zODU5NDI0L3ByZWJ1aWx0X2luY2x1ZGUvbGx2bS9saWIvRnV6emVyL0Z1enplclZhbHVlQml0TWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY5MmFjZAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvcHJlYnVpbHRfaW5jbHVkZS9sbHZtL2xpYi9GdXp6ZXIvRnV6emVyVmFsdWVCaXRNYXAuaApAQCAtMCwwICsxLDg3IEBACisvLz09PS0gRnV6emVyVmFsdWVCaXRNYXAuaCAtIElOVEVSTkFMIC0gQml0IG1hcCAtLS0tLS0tLS0tLS0tLS0tLSotIEMrKyAtKiA9PT0vLworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKKy8vIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8gVmFsdWVCaXRNYXAuCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworCisjaWZuZGVmIExMVk1fRlVaWkVSX1ZBTFVFX0JJVF9NQVBfSAorI2RlZmluZSBMTFZNX0ZVWlpFUl9WQUxVRV9CSVRfTUFQX0gKKworI2luY2x1ZGUgIkZ1enplckRlZnMuaCIKKworbmFtZXNwYWNlIGZ1enplciB7CisKKy8vIEEgYml0IG1hcCBjb250YWluaW5nIGtNYXBTaXplSW5Xb3JkcyBiaXRzLgorc3RydWN0IFZhbHVlQml0TWFwIHsKKyAgc3RhdGljIGNvbnN0IHNpemVfdCBrTWFwU2l6ZUluQml0cyA9IDY1MzcxOyAgICAgICAgLy8gUHJpbWUuCisgIHN0YXRpYyBjb25zdCBzaXplX3Qga01hcFNpemVJbkJpdHNBbGlnbmVkID0gNjU1MzY7IC8vIDJeMTYKKyAgc3RhdGljIGNvbnN0IHNpemVfdCBrQml0c0luV29yZCA9IChzaXplb2YodWludHB0cl90KSAqIDgpOworICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtNYXBTaXplSW5Xb3JkcyA9IGtNYXBTaXplSW5CaXRzQWxpZ25lZCAvIGtCaXRzSW5Xb3JkOworIHB1YmxpYzoKKyAgc3RhdGljIGNvbnN0IHNpemVfdCBrTnVtYmVyT2ZJdGVtcyA9IGtNYXBTaXplSW5CaXRzOworICAvLyBDbGVhcnMgYWxsIGJpdHMuCisgIHZvaWQgUmVzZXQoKSB7IG1lbXNldChNYXAsIDAsIHNpemVvZihNYXApKTsgfQorCisgIC8vIENvbXB1dGVzIGEgaGFzaCBmdW5jdGlvbiBvZiBWYWx1ZSBhbmQgc2V0cyB0aGUgY29ycmVzcG9uZGluZyBiaXQuCisgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgYml0IHdhcyBjaGFuZ2VkIGZyb20gMCB0byAxLgorICBpbmxpbmUgYm9vbCBBZGRWYWx1ZSh1aW50cHRyX3QgVmFsdWUpIHsKKyAgICB1aW50cHRyX3QgSWR4ID0gVmFsdWUgPCBrTWFwU2l6ZUluQml0cyA/IFZhbHVlIDogVmFsdWUgJSBrTWFwU2l6ZUluQml0czsKKyAgICB1aW50cHRyX3QgV29yZElkeCA9IElkeCAvIGtCaXRzSW5Xb3JkOworICAgIHVpbnRwdHJfdCBCaXRJZHggPSBJZHggJSBrQml0c0luV29yZDsKKyAgICB1aW50cHRyX3QgT2xkID0gTWFwW1dvcmRJZHhdOworICAgIHVpbnRwdHJfdCBOZXcgPSBPbGQgfCAoMVVMIDw8IEJpdElkeCk7CisgICAgTWFwW1dvcmRJZHhdID0gTmV3OworICAgIHJldHVybiBOZXcgIT0gT2xkOworICB9CisKKyAgaW5saW5lIGJvb2wgR2V0KHVpbnRwdHJfdCBJZHgpIHsKKyAgICBhc3NlcnQoSWR4IDwga01hcFNpemVJbkJpdHMpOworICAgIHVpbnRwdHJfdCBXb3JkSWR4ID0gSWR4IC8ga0JpdHNJbldvcmQ7CisgICAgdWludHB0cl90IEJpdElkeCA9IElkeCAlIGtCaXRzSW5Xb3JkOworICAgIHJldHVybiBNYXBbV29yZElkeF0gJiAoMVVMIDw8IEJpdElkeCk7CisgIH0KKworICBzaXplX3QgR2V0TnVtQml0c1NpbmNlTGFzdE1lcmdlKCkgY29uc3QgeyByZXR1cm4gTnVtQml0czsgfQorCisgIC8vIE1lcmdlcyAnT3RoZXInIGludG8gJ3RoaXMnLCBjbGVhcnMgJ090aGVyJywgdXBkYXRlcyBOdW1CaXRzLAorICAvLyByZXR1cm5zIHRydWUgaWYgbmV3IGJpdHMgd2VyZSBhZGRlZC4KKyAgQVRUUklCVVRFX1RBUkdFVF9QT1BDTlQKKyAgYm9vbCBNZXJnZUZyb20oVmFsdWVCaXRNYXAgJk90aGVyKSB7CisgICAgdWludHB0cl90IFJlcyA9IDA7CisgICAgc2l6ZV90IE9sZE51bUJpdHMgPSBOdW1CaXRzOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga01hcFNpemVJbldvcmRzOyBpKyspIHsKKyAgICAgIGF1dG8gTyA9IE90aGVyLk1hcFtpXTsKKyAgICAgIGF1dG8gTSA9IE1hcFtpXTsKKyAgICAgIGlmIChPKSB7CisgICAgICAgIE1hcFtpXSA9IChNIHw9IE8pOworICAgICAgICBPdGhlci5NYXBbaV0gPSAwOworICAgICAgfQorICAgICAgaWYgKE0pCisgICAgICAgIFJlcyArPSBfX2J1aWx0aW5fcG9wY291bnRsKE0pOworICAgIH0KKyAgICBOdW1CaXRzID0gUmVzOworICAgIHJldHVybiBPbGROdW1CaXRzIDwgTnVtQml0czsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBDYWxsYmFjaz4KKyAgdm9pZCBGb3JFYWNoKENhbGxiYWNrIENCKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTWFwU2l6ZUluV29yZHM7IGkrKykKKyAgICAgIGlmICh1aW50cHRyX3QgTSA9IE1hcFtpXSkKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBzaXplb2YoTSkgKiA4OyBqKyspCisgICAgICAgICAgaWYgKE0gJiAoKHVpbnRwdHJfdCkxIDw8IGopKQorICAgICAgICAgICAgQ0IoaSAqIHNpemVvZihNKSAqIDggKyBqKTsKKyAgfQorCisgcHJpdmF0ZToKKyAgc2l6ZV90IE51bUJpdHMgPSAwOworICB1aW50cHRyX3QgTWFwW2tNYXBTaXplSW5Xb3Jkc10gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg1MTIpKSk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgZnV6emVyCisKKyNlbmRpZiAgLy8gTExWTV9GVVpaRVJfVkFMVUVfQklUX01BUF9ICmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L3JlcG8ucHJvcCBiL2NsYW5nLTM4NTk0MjQvcmVwby5wcm9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNDA4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3JlcG8ucHJvcApAQCAtMCwwICsxLDQ1IEBACitwbGF0Zm9ybS9iaW9uaWMgZGYzYjkyMmZjZjA1NmJiNzY2NjVmOWMwNmYwYzE5YzQ4ZWY5MzdmOQorcGxhdGZvcm0vYnVpbGQgYWU0Nzc5ZTI1NGE4N2JlNjQ1ZDkwZGZlM2M4ZWZiMTg0ODEwOGJmZAorcGxhdGZvcm0vYnVpbGQvYmx1ZXByaW50IDdjOGM0NTY3OTVmODI1OGZlOGI4ZGJiNGViZDVjNGE2NmQ3ZWQ0ZTgKK3BsYXRmb3JtL2J1aWxkL2thdGkgMzQxYTJjZWNjYjgzNmFiMjNmOTJjMGJhOTZkMGEwZTczMTQyNTc2MgorcGxhdGZvcm0vYnVpbGQvc29vbmcgOWUzZjYyN2VhNzNiMzk4MmQ4YmU1YWQ4YjQwMmI0MjY0YWFiMGIxOAorcGxhdGZvcm0vZXh0ZXJuYWwvY2xhbmcgYjcwOThjMmE0OTY2ZDVkYTk3NDY2MTIxMmY0ZDU0OTEwMDQxZmQ2NgorcGxhdGZvcm0vZXh0ZXJuYWwvY2xhbmctdG9vbHMtZXh0cmEgY2ViMjI4YjZjYWExNjU1YjNlZGIxNTU4MDNmZGEzYjc2YzQxNTY1NQorcGxhdGZvcm0vZXh0ZXJuYWwvY29tcGlsZXItcnQgMDQ2YWEwZDk0MzRhODEzN2VjZTlhZjEyMWM5N2U5MDVmYWI3NGU3MgorcGxhdGZvcm0vZXh0ZXJuYWwvZ29vZ2xldGVzdCBmYjU1YWU2MTJjYmNlYWFkYTJmYTEwMGY0MWM2MTU0ZjlhMmM5ZDkzCitwbGF0Zm9ybS9leHRlcm5hbC9qZW1hbGxvYyBmNjc0ZjQzODkzZDYyODJiZjZlNzI4YzUxMGI5MDFhMTBiMzhiYzQ4CitwbGF0Zm9ybS9leHRlcm5hbC9saWJjeHggOGZlNDMwNTljNDM5MmEwYzg2M2I4NTUxZDJhYzNlYjJlYjdhNjZlZAorcGxhdGZvcm0vZXh0ZXJuYWwvbGliY3h4YWJpIDlkZDUyZjQzMDAxMzk5OTgxN2QzYjllNzEwNGQ0YTA2N2NlYTg5ZjcKK3BsYXRmb3JtL2V4dGVybmFsL2xpYnVud2luZCAxYjQ3ZGE3MzNlMjU1M2JhNThlYWI3MDhhN2VjZDYyNzg5Yzg5NzA4CitwbGF0Zm9ybS9leHRlcm5hbC9saWJ1bndpbmRfbGx2bSBhMTE3MTA2MjAwODlmYmYxMDA0ZDUyNmFiYmEwMzgxOTgxMWZhZTE5CitwbGF0Zm9ybS9leHRlcm5hbC9sbHZtIGQ1N2ExNTBjYmNmZDIyZjY2ZTBjZWFiMDg2ODhkN2E3Nzc1OGVlNzYKK3BsYXRmb3JtL2V4dGVybmFsL2x6bWEgYjA0ZThkYmE0NDZhZWQwYjFiMWQxZTU4OTQ1ZmI5OTY2YjRlODVlYgorcGxhdGZvcm0vZXh0ZXJuYWwvb3Blbm1wX2xsdm0gOWYwYjcwZDJhYmE4MzAwOTJiZDc4NzI2ZmJiMjYyOWRkMmNlMWRjZgorcGxhdGZvcm0vbWFuaWZlc3QgZWMyNzY3YjU3MmJiOWMwOTI2OGFjMmUzZmU3Mjc4OTNiZTk4YzViNAorcGxhdGZvcm0vcHJlYnVpbHRzL2J1aWxkLXRvb2xzIGI1N2JmYTI0NjQ3YjliODI4MDhjMzQ3MzdhYjk2NGU4ZDUzZDdiYmIKK3BsYXRmb3JtL3ByZWJ1aWx0cy9jbGFuZy9ob3N0L2Rhcndpbi14ODYgNGM3NmUyNjY4MDJkOWY5MTMyNDE4NmQ4MzRhYzRhY2U3ZmMyZjExZAorcGxhdGZvcm0vcHJlYnVpbHRzL2NsYW5nL2hvc3QvbGludXgteDg2IGMzMTI0MmE0NTBmNTA5ZmIyMDgyNGNlMzA5ZDkzZGFmNWEzYTFmMWEKK3BsYXRmb3JtL3ByZWJ1aWx0cy9jbGFuZy9ob3N0L3dpbmRvd3MteDg2IGFkNWNjN2FiYjAxYWU2Nzg4MDZkNTdjOWI0MTM2ZTRlYmQ1M2RlMjAKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9hYXJjaDY0L2FhcmNoNjQtbGludXgtYW5kcm9pZC00LjkgMDNlMmFlMTU4NTI0NDlhZTgxZGRhYTU0YzM1NzM5YWYyNzE4MDU4MQorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2FybS9hcm0tZWFiaS00LjggNmQwOGNhOWY0NWZmNjg1NjQ4ZmQxM2M3NWJmNWNhYzRiMTFjMTliYgorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2FybS9hcm0tbGludXgtYW5kcm9pZGVhYmktNC45IGQ4YzQxNGZjNDllOTMzYzA3NGYxNzNlNmQ4Nzc5NWNjN2ZkY2ZlZGMKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9ob3N0L2hlYWRlcnMgNGFjNGY3Y2M0MWNmM2M5ZTM2ZmMzZDZjZjM3ZmQxY2ZhOTU4N2E2OAorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2hvc3QvaTY4Ni1hcHBsZS1kYXJ3aW4tNC4yLjEgZWM1YWE2NmFhYTQ5NjRjMjc1NjRkMGVjODRkYzFmMThhMmQ3MmI3ZQorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L21pcHMvbWlwczY0ZWwtbGludXgtYW5kcm9pZC00LjkgYzNiN2ExNzU2NDBmYzU5NzExNjE0YzBhZDUyNjlhMDM3ZTA2ZmU3YQorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L3g4Ni94ODZfNjQtbGludXgtYW5kcm9pZC00LjkgZThhMmYyMWMxY2M3Zjg3MDY5ZGE3MWJjMmYxOTAxYWNjNGVhMmJkZgorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LWFuZHJvaWQtNC45IGNlOWQ3NzUwNTA3MjQ1MGQyZjE2YTRiZjA2NjczZjMxZDhkNjdmZjAKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L2FybS9hcm0tZWFiaS00LjggMjZlOTNmNmFmNDdmN2JkM2E5YmViNWMxMDJhNWY0NWUxOWJmYTM4YQorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvYXJtL2FybS1saW51eC1hbmRyb2lkZWFiaS00LjkgZWE5Yzg4YmViOWZmYmIxYTA4MzNjYzNlZTk0YjUzOTUwNzI5NDczZAorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvaG9zdC94ODZfNjQtbGludXgtZ2xpYmMyLjExLTQuOCBlOTUzNGFiZjllNDkxNmJjOWYwZjBjNzRiNjRhZDJmNDA0YTM0ZTk3CitwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9ob3N0L3g4Nl82NC1saW51eC1nbGliYzIuMTUtNC44IDczY2E5OTE5NjcyM2Y4MTBkYWQ0MjM5MGQxNTQ2NTQzNTRmNTdjMTYKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L2hvc3QveDg2XzY0LXc2NC1taW5ndzMyLTQuOCA5MDRjMzYzOWQxZTU3NDY3MWM5NjlmMzY0MmNhNDc1ZDNiMDBjMzgyCitwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9taXBzL21pcHM2NGVsLWxpbnV4LWFuZHJvaWQtNC45IGEzMzJkZjhkYWRkNzg4NjZjMmE1N2YyYzczNDhkNDk5OTUyOTM5YzIKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L3g4Ni94ODZfNjQtbGludXgtYW5kcm9pZC00LjkgMTk0NGY0NDE2N2E5MDc5NjlkZTUxMzhmZTRjYzQ0MjQzMmI3Y2MzNworcGxhdGZvcm0vcHJlYnVpbHRzL2dvL2Rhcndpbi14ODYgMThmYWRmYjJmYTc1NGQwNjNkNDhmNjMwMGQ1ZmQ5ZjllMTZiNGU0NworcGxhdGZvcm0vcHJlYnVpbHRzL2dvL2xpbnV4LXg4NiBhNzI3Y2QwNDU0ZjAyMjJiZjhhYzZmZDBlMTI0OTE0YzIwNzQwMjFkCitwbGF0Zm9ybS9wcmVidWlsdHMvbmRrIGQ4OWRlYTJmMGRlOWQ3MGI5YmJiZDJmYTFhNTA2MGIwZGVhMzY2ZDYKK3BsYXRmb3JtL3ByZWJ1aWx0cy9uaW5qYS9kYXJ3aW4teDg2IDAwZjc5ODM0NmRlZGI0YTdhNmE2ZGNjOWFkMzJmZjA5ZDY2ZWUwZGIKK3BsYXRmb3JtL3ByZWJ1aWx0cy9uaW5qYS9saW51eC14ODYgNjM2OWIxOWZjM2ZiZTc2NTYzNmFmNzVkMzk0NjI3ZTJiOTI1OTllZAorcGxhdGZvcm0vcHJlYnVpbHRzL3NkayBiZGZhOGQ5ZWU1ZjkyZGQxY2Q3YTZmNjM2MzdiNTkwNjAwYjBjMmU1CitwbGF0Zm9ybS9zeXN0ZW0vY29yZSBlMGJlYzZiMTFlMmMwOTA1YzRiZmRlYzJjZDc1ZTQ0ZmQxNmY5MTgxCit0b29sY2hhaW4vYmludXRpbHMgOWJmNmNiZjZkZDg4Nzc3NzE5YzU3NTc5MjJhZmYwMTkwZWM0NjUzOQpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC90ZXN0L2FhcmNoNjQvYmluL2FzYW5fdGVzdCBiL2NsYW5nLTM4NTk0MjQvdGVzdC9hYXJjaDY0L2Jpbi9hc2FuX3Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDNlOGM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvdGVzdC9hYXJjaDY0L2Jpbi9hc2FuX3Rlc3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC90ZXN0L2FybS9iaW4vYXNhbl90ZXN0IGIvY2xhbmctMzg1OTQyNC90ZXN0L2FybS9iaW4vYXNhbl90ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzZGY5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3Rlc3QvYXJtL2Jpbi9hc2FuX3Rlc3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC90ZXN0L2k2ODYvYmluL2FzYW5fdGVzdCBiL2NsYW5nLTM4NTk0MjQvdGVzdC9pNjg2L2Jpbi9hc2FuX3Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTAxZmE1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvdGVzdC9pNjg2L2Jpbi9hc2FuX3Rlc3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC90ZXN0L21pcHMvYmluL2FzYW5fdGVzdCBiL2NsYW5nLTM4NTk0MjQvdGVzdC9taXBzL2Jpbi9hc2FuX3Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGY1MTc2ZgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvdGVzdC9taXBzL2Jpbi9hc2FuX3Rlc3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC90ZXN0L21pcHM2NC9iaW4vYXNhbl90ZXN0IGIvY2xhbmctMzg1OTQyNC90ZXN0L21pcHM2NC9iaW4vYXNhbl90ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzNmFlNDUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3Rlc3QvbWlwczY0L2Jpbi9hc2FuX3Rlc3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLWJ1aWxkL0NNYWtlTGlzdHMudHh0IGIvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLWJ1aWxkL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YzI0M2QKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tYnVpbGQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw4MiBAQAorb3B0aW9uKENMQU5HX0lOU1RBTExfU0NBTkJVSUxEICJJbnN0YWxsIHRoZSBzY2FuLWJ1aWxkIHRvb2wiIE9OKQorCitpbmNsdWRlKEdOVUluc3RhbGxEaXJzKQorCitpZiAoV0lOMzIgQU5EIE5PVCBDWUdXSU4pCisgIHNldChCaW5GaWxlcworICAgICAgICBzY2FuLWJ1aWxkLmJhdCkKKyAgc2V0KExpYmV4ZWNGaWxlcworICAgICAgICBjY2MtYW5hbHl6ZXIuYmF0CisgICAgICAgIGMrKy1hbmFseXplci5iYXQpCitlbHNlKCkKKyAgc2V0KEJpbkZpbGVzCisgICAgICAgIHNjYW4tYnVpbGQpCisgIHNldChMaWJleGVjRmlsZXMKKyAgICAgICAgY2NjLWFuYWx5emVyCisgICAgICAgIGMrKy1hbmFseXplcikKKyAgaWYgKEFQUExFKQorICAgIGxpc3QoQVBQRU5EIEJpbkZpbGVzCisgICAgICAgICAgIHNldC14Y29kZS1hbmFseXplcikKKyAgZW5kaWYoKQorZW5kaWYoKQorCitzZXQoTWFuUGFnZXMKKyAgICAgIHNjYW4tYnVpbGQuMSkKKworc2V0KFNoYXJlRmlsZXMKKyAgICAgIHNjYW52aWV3LmNzcworICAgICAgc29ydHRhYmxlLmpzKQorCisKK2lmKENMQU5HX0lOU1RBTExfU0NBTkJVSUxEKQorICBmb3JlYWNoKEJpbkZpbGUgJHtCaW5GaWxlc30pCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9L2Jpbi8ke0JpbkZpbGV9CisgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBtYWtlX2RpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vYmluCisgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2Jpbi8ke0JpbkZpbGV9CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9iaW4vCisgICAgICAgICAgICAgICAgICAgICAgIERFUEVORFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2Jpbi8ke0JpbkZpbGV9KQorICAgIGxpc3QoQVBQRU5EIERlcGVuZHMgJHtDTUFLRV9CSU5BUllfRElSfS9iaW4vJHtCaW5GaWxlfSkKKyAgICBpbnN0YWxsKFBST0dSQU1TIGJpbi8ke0JpbkZpbGV9IERFU1RJTkFUSU9OIGJpbikKKyAgZW5kZm9yZWFjaCgpCisKKyAgZm9yZWFjaChMaWJleGVjRmlsZSAke0xpYmV4ZWNGaWxlc30pCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9L2xpYmV4ZWMvJHtMaWJleGVjRmlsZX0KKyAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIG1ha2VfZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9saWJleGVjCisgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2xpYmV4ZWMvJHtMaWJleGVjRmlsZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L2xpYmV4ZWMvCisgICAgICAgICAgICAgICAgICAgICAgIERFUEVORFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2xpYmV4ZWMvJHtMaWJleGVjRmlsZX0pCisgICAgbGlzdChBUFBFTkQgRGVwZW5kcyAke0NNQUtFX0JJTkFSWV9ESVJ9L2xpYmV4ZWMvJHtMaWJleGVjRmlsZX0pCisgICAgaW5zdGFsbChQUk9HUkFNUyBsaWJleGVjLyR7TGliZXhlY0ZpbGV9IERFU1RJTkFUSU9OIGxpYmV4ZWMpCisgIGVuZGZvcmVhY2goKQorCisgIGZvcmVhY2goTWFuUGFnZSAke01hblBhZ2VzfSkKKyAgICBhZGRfY3VzdG9tX2NvbW1hbmQoT1VUUFVUICR7Q01BS0VfQklOQVJZX0RJUn0vJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMS8ke01hblBhZ2V9CisgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBtYWtlX2RpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMQorICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9tYW4vJHtNYW5QYWdlfQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMS8KKyAgICAgICAgICAgICAgICAgICAgICAgREVQRU5EUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vbWFuLyR7TWFuUGFnZX0pCisgICAgbGlzdChBUFBFTkQgRGVwZW5kcyAke0NNQUtFX0JJTkFSWV9ESVJ9LyR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjEvJHtNYW5QYWdlfSkKKyAgICBpbnN0YWxsKFBST0dSQU1TIG1hbi8ke01hblBhZ2V9IERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjEpCisgIGVuZGZvcmVhY2goKQorCisgIGZvcmVhY2goU2hhcmVGaWxlICR7U2hhcmVGaWxlc30pCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9L3NoYXJlL3NjYW4tYnVpbGQvJHtTaGFyZUZpbGV9CisgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBtYWtlX2RpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vc2hhcmUvc2Nhbi1idWlsZAorICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zaGFyZS9zY2FuLWJ1aWxkLyR7U2hhcmVGaWxlfQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vc2hhcmUvc2Nhbi1idWlsZC8KKyAgICAgICAgICAgICAgICAgICAgICAgREVQRU5EUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc2hhcmUvc2Nhbi1idWlsZC8ke1NoYXJlRmlsZX0pCisgICAgbGlzdChBUFBFTkQgRGVwZW5kcyAke0NNQUtFX0JJTkFSWV9ESVJ9L3NoYXJlL3NjYW4tYnVpbGQvJHtTaGFyZUZpbGV9KQorICAgIGluc3RhbGwoRklMRVMgc2hhcmUvc2Nhbi1idWlsZC8ke1NoYXJlRmlsZX0gREVTVElOQVRJT04gc2hhcmUvc2Nhbi1idWlsZCkKKyAgZW5kZm9yZWFjaCgpCisKKyAgYWRkX2N1c3RvbV90YXJnZXQoc2Nhbi1idWlsZCBBTEwgREVQRU5EUyAke0RlcGVuZHN9KQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoc2Nhbi1idWlsZCBQUk9QRVJUSUVTIEZPTERFUiAiTWlzYyIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tYnVpbGQvYmluL3NjYW4tYnVpbGQgYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tYnVpbGQvYmluL3NjYW4tYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2JmM2JmMwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvdG9vbHMvc2Nhbi1idWlsZC9iaW4vc2Nhbi1idWlsZApAQCAtMCwwICsxLDE4NzAgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorIworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKKyMgTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorIworIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKKyMKKyMgQSBzY3JpcHQgZGVzaWduZWQgdG8gd3JhcCBhIGJ1aWxkIHNvIHRoYXQgYWxsIGNhbGxzIHRvIGdjYyBhcmUgaW50ZXJjZXB0ZWQKKyMgYW5kIHBpcGVkIHRvIHRoZSBzdGF0aWMgYW5hbHl6ZXIuCisjCisjIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jIworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEZpbmRCaW4gcXcoJFJlYWxCaW4pOwordXNlIERpZ2VzdDo6TUQ1OwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEZpbGU6OkZpbmQ7Cit1c2UgRmlsZTo6Q29weSBxdyhjb3B5KTsKK3VzZSBGaWxlOjpQYXRoIHF3KCBybXRyZWUgbWtwYXRoICk7Cit1c2UgVGVybTo6QU5TSUNvbG9yOwordXNlIFRlcm06OkFOU0lDb2xvciBxdyg6Y29uc3RhbnRzKTsKK3VzZSBDd2QgcXcvIGdldGN3ZCBhYnNfcGF0aCAvOwordXNlIFN5czo6SG9zdG5hbWU7Cit1c2UgSGFzaDo6VXRpbCBxdyhsb2NrX2tleXMpOworCitteSAkUHJvZyA9ICJzY2FuLWJ1aWxkIjsKK215ICRCdWlsZE5hbWU7CitteSAkQnVpbGREYXRlOworCitteSAkVEVSTSA9ICRFTlZ7J1RFUk0nfTsKK215ICRVc2VDb2xvciA9IChkZWZpbmVkICRURVJNIGFuZCAkVEVSTSA9fiAneHRlcm0tLipjb2xvcicgYW5kIC10IFNURE9VVAorICAgICAgICAgICAgICAgIGFuZCBkZWZpbmVkICRFTlZ7J1NDQU5fQlVJTERfQ09MT1InfSk7CisKKyMgUG9ydGFiaWxpdHk6IGdldHB3dWlkIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgV2luMzIgKHNlZSBQZXJsIGxhbmd1YWdlCisjIHJlZmVyZW5jZSwgcGVybHBvcnQpLCB1c2UgZ2V0bG9naW4gaW5zdGVhZC4KK215ICRVc2VyTmFtZSA9IEh0bWxFc2NhcGUoZ2V0bG9naW4oKSB8fCBnZXRwd3VpZCgkPCkgfHwgJ3Vua25vd24nKTsKK215ICRIb3N0TmFtZSA9IEh0bWxFc2NhcGUoaG9zdG5hbWUoKSB8fCAndW5rbm93bicpOworbXkgJEN1cnJlbnREaXIgPSBIdG1sRXNjYXBlKGdldGN3ZCgpKTsKKworbXkgJENtZEFyZ3M7CisKK215ICREYXRlID0gbG9jYWx0aW1lKCk7CisKKyMgQ29tbWFuZC1saW5lL2NvbmZpZyBhcmd1bWVudHMuCitteSAlT3B0aW9ucyA9ICgKKyAgVmVyYm9zZSA9PiAwLCAgICAgICAgICAgICAgIyBWZXJib3NlIG91dHB1dCBmcm9tIHRoaXMgc2NyaXB0LgorICBBbmFseXplSGVhZGVycyA9PiAwLAorICBPdXRwdXREaXIgPT4gdW5kZWYsICAgICAgICAjIFBhcmVudCBkaXJlY3RvcnkgdG8gc3RvcmUgSFRNTCBmaWxlcy4KKyAgSHRtbFRpdGxlID0+IGJhc2VuYW1lKCRDdXJyZW50RGlyKS4iIC0gc2Nhbi1idWlsZCByZXN1bHRzIiwKKyAgSWdub3JlRXJyb3JzID0+IDAsICAgICAgICAgIyBJZ25vcmUgYnVpbGQgZXJyb3JzLgorICBWaWV3UmVzdWx0cyA9PiAwLCAgICAgICAgICAjIFZpZXcgcmVzdWx0cyB3aGVuIHRoZSBidWlsZCB0ZXJtaW5hdGVzLgorICBFeGl0U3RhdHVzRm91bmRCdWdzID0+IDAsICAjIEV4aXQgc3RhdHVzIHJlZmxlY3RzIHdoZXRoZXIgYnVncyB3ZXJlIGZvdW5kCisgIFNob3dEZXNjcmlwdGlvbiA9PiAwLCAgICAgICMgRGlzcGxheSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGRlZmVjdCBpbiB0aGUgbGlzdAorICBLZWVwRW1wdHkgPT4gMCwgICAgICAgICAgICAjIERvbid0IHJlbW92ZSBvdXRwdXQgZGlyZWN0b3J5IGV2ZW4gd2l0aCAwIHJlc3VsdHMuCisgIEVuYWJsZUNoZWNrZXJzID0+IHt9LAorICBEaXNhYmxlQ2hlY2tlcnMgPT4ge30sCisgIFVzZUNDID0+IHVuZGVmLCAgICAgICAgICAgICMgQyBjb21waWxlciB0byB1c2UgZm9yIGNvbXBpbGF0aW9uLgorICBVc2VDWFggPT4gdW5kZWYsICAgICAgICAgICAjIEMrKyBjb21waWxlciB0byB1c2UgZm9yIGNvbXBpbGF0aW9uLgorICBBbmFseXplclRhcmdldCA9PiB1bmRlZiwKKyAgU3RvcmVNb2RlbCA9PiB1bmRlZiwKKyAgQ29uc3RyYWludHNNb2RlbCA9PiB1bmRlZiwKKyAgSW50ZXJuYWxTdGF0cyA9PiB1bmRlZiwKKyAgT3V0cHV0Rm9ybWF0ID0+ICJodG1sIiwKKyAgQ29uZmlnT3B0aW9ucyA9PiBbXSwgICAgICAgIyBPcHRpb25zIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgYW5hbHl6ZXIncyAtYW5hbHl6ZXItY29uZmlnIGZsYWcuCisgIFJlcG9ydEZhaWx1cmVzID0+IHVuZGVmLAorICBBbmFseXplclN0YXRzID0+IDAsCisgIE1heExvb3AgPT4gMCwKKyAgUGx1Z2luc1RvTG9hZCA9PiBbXSwKKyAgQW5hbHl6ZXJEaXNjb3ZlcnlNZXRob2QgPT4gdW5kZWYsCisgIE92ZXJyaWRlQ29tcGlsZXIgPT4gMCwgICAgICAjIFRoZSBmbGFnIGNvcnJlc3BvbmRpbmcgdG8gdGhlIC0tb3ZlcnJpZGUtY29tcGlsZXIgY29tbWFuZCBsaW5lIG9wdGlvbi4KKyAgRm9yY2VBbmFseXplRGVidWdDb2RlID0+IDAKKyk7Citsb2NrX2tleXMoJU9wdGlvbnMpOworCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyBEaWFnbm9zdGljcworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworc3ViIERpYWcgeworICBpZiAoJFVzZUNvbG9yKSB7CisgICAgcHJpbnQgQk9MRCwgTUFHRU5UQSAiJFByb2c6IEBfIjsKKyAgICBwcmludCBSRVNFVDsKKyAgfQorICBlbHNlIHsKKyAgICBwcmludCAiJFByb2c6IEBfIjsKKyAgfQorfQorCitzdWIgRXJyb3JEaWFnIHsKKyAgaWYgKCRVc2VDb2xvcikgeworICAgIHByaW50IFNUREVSUiBCT0xELCBSRUQgIiRQcm9nOiAiOworICAgIHByaW50IFNUREVSUiBSRVNFVCwgUkVEIEBfOworICAgIHByaW50IFNUREVSUiBSRVNFVDsKKyAgfSBlbHNlIHsKKyAgICBwcmludCBTVERFUlIgIiRQcm9nOiBAXyI7CisgIH0KK30KKworc3ViIERpYWdDcmFzaGVzIHsKKyAgbXkgJERpciA9IHNoaWZ0OworICBEaWFnICgiVGhlIGFuYWx5emVyIGVuY291bnRlcmVkIHByb2JsZW1zIG9uIHNvbWUgc291cmNlIGZpbGVzLlxuIik7CisgIERpYWcgKCJQcmVwcm9jZXNzZWQgdmVyc2lvbnMgb2YgdGhlc2Ugc291cmNlcyB3ZXJlIGRlcG9zaXRlZCBpbiAnJERpci9mYWlsdXJlcycuXG4iKTsKKyAgRGlhZyAoIlBsZWFzZSBjb25zaWRlciBzdWJtaXR0aW5nIGEgYnVnIHJlcG9ydCB1c2luZyB0aGVzZSBmaWxlczpcbiIpOworICBEaWFnICgiICBodHRwOi8vY2xhbmctYW5hbHl6ZXIubGx2bS5vcmcvZmlsaW5nX2J1Z3MuaHRtbFxuIikKK30KKworc3ViIERpZURpYWcgeworICBpZiAoJFVzZUNvbG9yKSB7CisgICAgcHJpbnQgU1RERVJSIEJPTEQsIFJFRCAiJFByb2c6ICI7CisgICAgcHJpbnQgU1RERVJSIFJFU0VULCBSRUQgQF87CisgICAgcHJpbnQgU1RERVJSIFJFU0VUOworICB9CisgIGVsc2UgeworICAgIHByaW50IFNUREVSUiAiJFByb2c6ICIsIEBfOworICB9CisgIGV4aXQgMTsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgUHJpbnQgZGVmYXVsdCBjaGVja2VyIG5hbWVzCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitpZiAoZ3JlcCAvXi0taGVscC1jaGVja2VycyQvLCBAQVJHVikgeworICAgIG15IEBvcHRpb25zID0gcXgoJDAgLWgpOworICAgIGZvcmVhY2ggKEBvcHRpb25zKSB7CisgICAgbmV4dCB1bmxlc3MgL14gXCsvOworICAgIHMvXlxzKi8vOworICAgIG15ICgkc2lnbiwgJG5hbWUsIEB0ZXh0KSA9IHNwbGl0ICcgJywgJF87CisgICAgcHJpbnQgJG5hbWUsICQvIGlmICRzaWduIGVxICcrJzsKKyAgICB9CisgICAgZXhpdCAwOworfQorCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyBEZWNsYXJhdGlvbiBvZiBDbGFuZyBvcHRpb25zLiAgUG9wdWxhdGVkIGxhdGVyLgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworbXkgJENsYW5nOworbXkgJENsYW5nU0I7CitteSAkQ2xhbmdDWFg7CitteSAkQ2xhbmdWZXJzaW9uOworCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyBHZXRIVE1MUnVuRGlyIC0gQ29uc3RydWN0IGFuIEhUTUwgZGlyZWN0b3J5IG5hbWUgZm9yIHRoZSBjdXJyZW50IHN1Yi1ydW4uCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitzdWIgR2V0SFRNTFJ1bkRpciB7CisgIGRpZSAiTm90IGVub3VnaCBhcmd1bWVudHMuIiBpZiAoQF8gPT0gMCk7CisgIG15ICREaXIgPSBzaGlmdCBAXzsKKyAgbXkgJFRtcE1vZGUgPSAwOworICBpZiAoIWRlZmluZWQgJERpcikgeworICAgICREaXIgPSAkRU5WeydUTVBESVInfSB8fCAkRU5WeydURU1QJ30gfHwgJEVOVnsnVE1QJ30gfHwgIi90bXAiOworICAgICRUbXBNb2RlID0gMTsKKyAgfQorCisgICMgQ2hvcCBvZmYgYW55IHRyYWlsaW5nICcvJyBjaGFyYWN0ZXJzLgorICB3aGlsZSAoJERpciA9fiAvXC8kLykgeyBjaG9wICREaXI7IH0KKworICAjIEdldCBjdXJyZW50IGRhdGUgYW5kIHRpbWUuCisgIG15IEBDdXJyZW50VGltZSA9IGxvY2FsdGltZSgpOworICBteSAkeWVhciAgPSAkQ3VycmVudFRpbWVbNV0gKyAxOTAwOworICBteSAkZGF5ICAgPSAkQ3VycmVudFRpbWVbM107CisgIG15ICRtb250aCA9ICRDdXJyZW50VGltZVs0XSArIDE7CisgIG15ICRob3VyID0gICRDdXJyZW50VGltZVsyXTsKKyAgbXkgJG1pbiA9ICAgJEN1cnJlbnRUaW1lWzFdOworICBteSAkc2VjID0gICAkQ3VycmVudFRpbWVbMF07CisKKyAgbXkgJFRpbWVTdHJpbmcgPSBzcHJpbnRmKCIlMDJkJTAyZCUwMmQiLCAkaG91ciwgJG1pbiwgJHNlYyk7CisgIG15ICREYXRlU3RyaW5nID0gc3ByaW50ZigiJWQtJTAyZC0lMDJkLSVzLSQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ZWFyLCAkbW9udGgsICRkYXksICRUaW1lU3RyaW5nKTsKKworICAjIERldGVybWluZSB0aGUgcnVuIG51bWJlci4KKyAgbXkgJFJ1bk51bWJlcjsKKworICBpZiAoLWQgJERpcikgeworICAgIGlmICghIC1yICREaXIpIHsKKyAgICAgIERpZURpYWcoImRpcmVjdG9yeSAnJERpcicgZXhpc3RzIGJ1dCBpcyBub3QgcmVhZGFibGUuXG4iKTsKKyAgICB9CisgICAgIyBJdGVyYXRlIG92ZXIgYWxsIGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5LgorICAgIG15ICRtYXggPSAwOworICAgIG9wZW5kaXIoRElSLCAkRGlyKTsKKyAgICBteSBARklMRVMgPSBncmVwIHsgLWQgIiREaXIvJF8iIH0gcmVhZGRpcihESVIpOworICAgIGNsb3NlZGlyKERJUik7CisKKyAgICBmb3JlYWNoIG15ICRmIChARklMRVMpIHsKKyAgICAgICMgU3RyaXAgdGhlIHByZWZpeCAnJFByb2ctJyBpZiB3ZSBhcmUgZHVtcGluZyBmaWxlcyB0byAvdG1wLgorICAgICAgaWYgKCRUbXBNb2RlKSB7CisgICAgICAgIG5leHQgaWYgKCEoJGYgPX4gL14kUHJvZy0oLispLykpOworICAgICAgICAkZiA9ICQxOworICAgICAgfQorCisgICAgICBteSBAeCA9IHNwbGl0Ly0vLCAkZjsKKyAgICAgIG5leHQgaWYgKHNjYWxhcihAeCkgIT0gNCk7CisgICAgICBuZXh0IGlmICgkeFswXSAhPSAkeWVhcik7CisgICAgICBuZXh0IGlmICgkeFsxXSAhPSAkbW9udGgpOworICAgICAgbmV4dCBpZiAoJHhbMl0gIT0gJGRheSk7CisgICAgICBuZXh0IGlmICgkeFszXSAhPSAkVGltZVN0cmluZyk7CisgICAgICBuZXh0IGlmICgkeFs0XSAhPSAkJCk7CisKKyAgICAgIGlmICgkeFs1XSA+ICRtYXgpIHsKKyAgICAgICAgJG1heCA9ICR4WzVdOworICAgICAgfQorICAgIH0KKworICAgICRSdW5OdW1iZXIgPSAkbWF4ICsgMTsKKyAgfQorICBlbHNlIHsKKworICAgIGlmICgteCAkRGlyKSB7CisgICAgICBEaWVEaWFnKCInJERpcicgZXhpc3RzIGJ1dCBpcyBub3QgYSBkaXJlY3RvcnkuXG4iKTsKKyAgICB9CisKKyAgICBpZiAoJFRtcE1vZGUpIHsKKyAgICAgIERpZURpYWcoIlRoZSBkaXJlY3RvcnkgJy90bXAnIGRvZXMgbm90IGV4aXN0IG9yIGNhbm5vdCBiZSBhY2Nlc3NlZC5cbiIpOworICAgIH0KKworICAgICMgJERpciBkb2VzIG5vdCBleGlzdC4gIEl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IHRoZQorICAgICMgY2xhbmcgZHJpdmVyLiAgU2V0IHRoZSBydW4gbnVtYmVyIHRvIDEuCisKKyAgICAkUnVuTnVtYmVyID0gMTsKKyAgfQorCisgIGRpZSAiUnVuTnVtYmVyIG11c3QgYmUgZGVmaW5lZCEiIGlmICghZGVmaW5lZCAkUnVuTnVtYmVyKTsKKworICAjIEFwcGVuZCB0aGUgcnVuIG51bWJlci4KKyAgbXkgJE5ld0RpcjsKKyAgaWYgKCRUbXBNb2RlKSB7CisgICAgJE5ld0RpciA9ICIkRGlyLyRQcm9nLSREYXRlU3RyaW5nLSRSdW5OdW1iZXIiOworICB9CisgIGVsc2UgeworICAgICROZXdEaXIgPSAiJERpci8kRGF0ZVN0cmluZy0kUnVuTnVtYmVyIjsKKyAgfQorCisgICMgTWFrZSBzdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCBpbiBvcmRlciB0byBhdm9pZCBoaWphY2suCisgIGlmICgtZSAkTmV3RGlyKSB7CisgICAgICBEaWVEaWFnKCJUaGUgZGlyZWN0b3J5ICckTmV3RGlyJyBhbHJlYWR5IGV4aXN0cy5cbiIpOworICB9CisKKyAgbWtwYXRoKCROZXdEaXIpOworICByZXR1cm4gJE5ld0RpcjsKK30KKworc3ViIFNldEh0bWxFbnYgeworCisgIGRpZSAiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4iIGlmIChzY2FsYXIoQF8pICE9IDIpOworCisgIG15ICRBcmdzID0gc2hpZnQ7CisgIG15ICREaXIgPSBzaGlmdDsKKworICBkaWUgIk5vIGJ1aWxkIGNvbW1hbmQuIiBpZiAoc2NhbGFyKEAkQXJncykgPT0gMCk7CisKKyAgbXkgJENtZCA9ICQkQXJnc1swXTsKKworICBpZiAoJENtZCA9fiAvY29uZmlndXJlLyB8fCAkQ21kID1+IC9hdXRvZ2VuLykgeworICAgIHJldHVybjsKKyAgfQorCisgIGlmICgkT3B0aW9uc3tWZXJib3NlfSkgeworICAgIERpYWcoIkVtaXR0aW5nIHJlcG9ydHMgZm9yIHRoaXMgcnVuIHRvICckRGlyJy5cbiIpOworICB9CisKKyAgJEVOVnsnQ0NDX0FOQUxZWkVSX0hUTUwnfSA9ICREaXI7Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIENvbXB1dGVEaWdlc3QgLSBDb21wdXRlIGEgZGlnZXN0IG9mIHRoZSBzcGVjaWZpZWQgZmlsZS4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBDb21wdXRlRGlnZXN0IHsKKyAgbXkgJEZOYW1lID0gc2hpZnQ7CisgIERpZURpYWcoIkNhbm5vdCByZWFkICRGTmFtZSB0byBjb21wdXRlIERpZ2VzdC5cbiIpIGlmICghIC1yICRGTmFtZSk7CisKKyAgIyBVc2UgRGlnZXN0OjpNRDUuICBXZSBkb24ndCBoYXZlIHRvIGJlIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZS4gIFdlJ3JlCisgICMganVzdCBsb29raW5nIGZvciBkdXBsaWNhdGUgZmlsZXMgdGhhdCBjb21lIGZyb20gYSBub24tbWFsaWNpb3VzIHNvdXJjZS4KKyAgIyBXZSB1c2UgRGlnZXN0OjpNRDUgYmVjYXVzZSBpdCBpcyBhIHN0YW5kYXJkIFBlcmwgbW9kdWxlIHRoYXQgc2hvdWxkCisgICMgY29tZSBidW5kbGVkIG9uIG1vc3Qgc3lzdGVtcy4KKyAgb3BlbihGSUxFLCAkRk5hbWUpIG9yIERpZURpYWcoIkNhbm5vdCBvcGVuICRGTmFtZSB3aGVuIGNvbXB1dGluZyBEaWdlc3QuXG4iKTsKKyAgYmlubW9kZSBGSUxFOworICBteSAkUmVzdWx0ID0gRGlnZXN0OjpNRDUtPm5ldy0+YWRkZmlsZSgqRklMRSktPmhleGRpZ2VzdDsKKyAgY2xvc2UoRklMRSk7CisKKyAgIyBSZXR1cm4gdGhlIGRpZ2VzdC4KKyAgcmV0dXJuICRSZXN1bHQ7Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjICBVcGRhdGVQcmVmaXggLSBDb21wdXRlIHRoZSBjb21tb24gcHJlZml4IG9mIGZpbGVzLgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworbXkgJFByZWZpeDsKKworc3ViIFVwZGF0ZVByZWZpeCB7CisgIG15ICR4ID0gc2hpZnQ7CisgIG15ICR5ID0gYmFzZW5hbWUoJHgpOworICAkeCA9fiBzL1xRJHlcRSQvLzsKKworICBpZiAoIWRlZmluZWQgJFByZWZpeCkgeworICAgICRQcmVmaXggPSAkeDsKKyAgICByZXR1cm47CisgIH0KKworICBjaG9wICRQcmVmaXggd2hpbGUgKCEoJHggPX4gL15cUSRQcmVmaXgvKSk7Cit9CisKK3N1YiBHZXRQcmVmaXggeworICByZXR1cm4gJFByZWZpeDsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgIFVwZGF0ZUluRmlsZVBhdGggLSBVcGRhdGUgdGhlIHBhdGggaW4gdGhlIHJlcG9ydCBmaWxlLgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworc3ViIFVwZGF0ZUluRmlsZVBhdGggeworICBteSAkZm5hbWUgPSBzaGlmdDsKKyAgbXkgJHJlZ2V4ID0gc2hpZnQ7CisgIG15ICRuZXd0ZXh0ID0gc2hpZnQ7CisKKyAgb3BlbiAoUklOLCAkZm5hbWUpIG9yIGRpZSAiY2Fubm90IG9wZW4gJGZuYW1lIjsKKyAgb3BlbiAoUk9VVCwgIj4iLCAiJGZuYW1lLnRtcCIpIG9yIGRpZSAiY2Fubm90IG9wZW4gJGZuYW1lLnRtcCI7CisKKyAgd2hpbGUgKDxSSU4+KSB7CisgICAgcy8kcmVnZXgvJG5ld3RleHQvOworICAgIHByaW50IFJPVVQgJF87CisgIH0KKworICBjbG9zZSAoUk9VVCk7CisgIGNsb3NlIChSSU4pOworICByZW5hbWUoIiRmbmFtZS50bXAiLCAkZm5hbWUpCit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIEFkZFN0YXRMaW5lIC0gRGVjb2RlIGFuZCBpbnNlcnQgYSBzdGF0aXN0aWNzIGxpbmUgaW50byB0aGUgZGF0YWJhc2UuCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitzdWIgQWRkU3RhdExpbmUgeworICBteSAkTGluZSAgPSBzaGlmdDsKKyAgbXkgJFN0YXRzID0gc2hpZnQ7CisgIG15ICRGaWxlICA9IHNoaWZ0OworCisgIHByaW50ICRMaW5lIC4gIlxuIjsKKworICBteSAkUmVnZXggPSBxci8oLio/KVwgLT5cIFRvdGFsXCBDRkdCbG9ja3M6XCAoXGQrKVwgXHxcIFVucmVhY2hhYmxlCisgICAgICBcIENGR0Jsb2NrczpcIChcZCspXCBcfFwgRXhoYXVzdGVkXCBCbG9jazpcICh5ZXN8bm8pXCBcfFwgRW1wdHlcIFdvcmtMaXN0OgorICAgICAgXCAoeWVzfG5vKS94OworCisgIGlmICgkTGluZSAhfiAkUmVnZXgpIHsKKyAgICByZXR1cm47CisgIH0KKworICAjIENyZWF0ZSBhIGhhc2ggb2YgdGhlIGludGVyZXN0aW5nIGZpZWxkcworICBteSAkUm93ID0geworICAgIEZpbGVuYW1lICAgID0+ICRGaWxlLAorICAgIEZ1bmN0aW9uICAgID0+ICQxLAorICAgIFRvdGFsICAgICAgID0+ICQyLAorICAgIFVucmVhY2hhYmxlID0+ICQzLAorICAgIEFib3J0ZWQgICAgID0+ICQ0LAorICAgIEVtcHR5ICAgICAgID0+ICQ1CisgIH07CisKKyAgIyBBZGQgdGhlbSB0byB0aGUgc3RhdHMgYXJyYXkKKyAgcHVzaCBAJFN0YXRzLCAkUm93OworfQorCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyBTY2FuRmlsZSAtIFNjYW4gYSByZXBvcnQgZmlsZSBmb3IgdmFyaW91cyBpZGVudGlmeWluZyBhdHRyaWJ1dGVzLgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworIyBTb21ldGltZXMgYSBzb3VyY2UgZmlsZSBpcyBzY2FubmVkIG1vcmUgdGhhbiBvbmNlLCBhbmQgdGh1cyBwcm9kdWNlcworIyBtdWx0aXBsZSBlcnJvciByZXBvcnRzLiAgV2UgdXNlIGEgY2FjaGUgdG8gc29sdmUgdGhpcyBwcm9ibGVtLgorCitteSAlQWxyZWFkeVNjYW5uZWQ7CisKK3N1YiBTY2FuRmlsZSB7CisKKyAgbXkgJEluZGV4ID0gc2hpZnQ7CisgIG15ICREaXIgPSBzaGlmdDsKKyAgbXkgJEZOYW1lID0gc2hpZnQ7CisgIG15ICRTdGF0cyA9IHNoaWZ0OworCisgICMgQ29tcHV0ZSBhIGRpZ2VzdCBmb3IgdGhlIHJlcG9ydCBmaWxlLiAgRGV0ZXJtaW5lIGlmIHdlIGhhdmUgYWxyZWFkeQorICAjIHNjYW5uZWQgYSBmaWxlIHRoYXQgbG9va3MganVzdCBsaWtlIGl0LgorCisgIG15ICRkaWdlc3QgPSBDb21wdXRlRGlnZXN0KCIkRGlyLyRGTmFtZSIpOworCisgIGlmIChkZWZpbmVkICRBbHJlYWR5U2Nhbm5lZHskZGlnZXN0fSkgeworICAgICMgUmVkdW5kYW50IGZpbGUuICBSZW1vdmUgaXQuCisgICAgdW5saW5rKCIkRGlyLyRGTmFtZSIpOworICAgIHJldHVybjsKKyAgfQorCisgICRBbHJlYWR5U2Nhbm5lZHskZGlnZXN0fSA9IDE7CisKKyAgIyBBdCB0aGlzIHBvaW50IHRoZSByZXBvcnQgZmlsZSBpcyBub3Qgd29ybGQgcmVhZGFibGUuICBNYWtlIGl0IGhhcHBlbi4KKyAgY2htb2QoMDY0NCwgIiREaXIvJEZOYW1lIik7CisKKyAgIyBTY2FuIHRoZSByZXBvcnQgZmlsZSBmb3IgdGFncy4KKyAgb3BlbihJTiwgIiREaXIvJEZOYW1lIikgb3IgRGllRGlhZygiQ2Fubm90IG9wZW4gJyREaXIvJEZOYW1lJ1xuIik7CisKKyAgbXkgJEJ1Z1R5cGUgICAgICAgID0gIiI7CisgIG15ICRCdWdGaWxlICAgICAgICA9ICIiOworICBteSAkQnVnRnVuY3Rpb24gICAgPSAiIjsKKyAgbXkgJEJ1Z0NhdGVnb3J5ICAgID0gIiI7CisgIG15ICRCdWdEZXNjcmlwdGlvbiA9ICIiOworICBteSAkQnVnUGF0aExlbmd0aCAgPSAxOworICBteSAkQnVnTGluZSAgICAgICAgPSAwOworCisgIHdoaWxlICg8SU4+KSB7CisgICAgbGFzdCBpZiAoLzwhLS0gQlVHTUVUQUVORCAtLT4vKTsKKworICAgIGlmICgvPCEtLSBCVUdUWVBFICguKikgLS0+JC8pIHsKKyAgICAgICRCdWdUeXBlID0gJDE7CisgICAgfQorICAgIGVsc2lmICgvPCEtLSBCVUdGSUxFICguKikgLS0+JC8pIHsKKyAgICAgICRCdWdGaWxlID0gYWJzX3BhdGgoJDEpOworICAgICAgaWYgKCFkZWZpbmVkICRCdWdGaWxlKSB7CisgICAgICAgICAjIFRoZSBmaWxlIG5vIGxvbmdlciBleGlzdHM6IHVzZSB0aGUgb3JpZ2luYWwgcGF0aC4KKyAgICAgICAgICRCdWdGaWxlID0gJDE7CisgICAgICB9CisgICAgICBVcGRhdGVQcmVmaXgoJEJ1Z0ZpbGUpOworICAgIH0KKyAgICBlbHNpZiAoLzwhLS0gQlVHUEFUSExFTkdUSCAoLiopIC0tPiQvKSB7CisgICAgICAkQnVnUGF0aExlbmd0aCA9ICQxOworICAgIH0KKyAgICBlbHNpZiAoLzwhLS0gQlVHTElORSAoLiopIC0tPiQvKSB7CisgICAgICAkQnVnTGluZSA9ICQxOworICAgIH0KKyAgICBlbHNpZiAoLzwhLS0gQlVHQ0FURUdPUlkgKC4qKSAtLT4kLykgeworICAgICAgJEJ1Z0NhdGVnb3J5ID0gJDE7CisgICAgfQorICAgIGVsc2lmICgvPCEtLSBCVUdERVNDICguKikgLS0+JC8pIHsKKyAgICAgICRCdWdEZXNjcmlwdGlvbiA9ICQxOworICAgIH0KKyAgICBlbHNpZiAoLzwhLS0gRlVOQ1RJT05OQU1FICguKikgLS0+JC8pIHsKKyAgICAgICRCdWdGdW5jdGlvbiA9ICQxOworICAgIH0KKworICB9CisKKworICBjbG9zZShJTik7CisKKyAgaWYgKCFkZWZpbmVkICRCdWdDYXRlZ29yeSkgeworICAgICRCdWdDYXRlZ29yeSA9ICJPdGhlciI7CisgIH0KKworICAjIERvbid0IGFkZCBpbnRlcm5hbCBzdGF0aXN0aWNzIHRvIHRoZSBidWcgcmVwb3J0cworICBpZiAoJEJ1Z0NhdGVnb3J5ID1+IC9zdGF0aXN0aWNzL2kpIHsKKyAgICBBZGRTdGF0TGluZSgkQnVnRGVzY3JpcHRpb24sICRTdGF0cywgJEJ1Z0ZpbGUpOworICAgIHJldHVybjsKKyAgfQorCisgIHB1c2ggQCRJbmRleCxbICRGTmFtZSwgJEJ1Z0NhdGVnb3J5LCAkQnVnVHlwZSwgJEJ1Z0ZpbGUsICRCdWdGdW5jdGlvbiwgJEJ1Z0xpbmUsCisgICAgICAgICAgICAgICAgICRCdWdQYXRoTGVuZ3RoIF07CisKKyAgaWYgKCRPcHRpb25ze1Nob3dEZXNjcmlwdGlvbn0pIHsKKyAgICAgIHB1c2ggQHsgJEluZGV4LT5bLTFdIH0sICRCdWdEZXNjcmlwdGlvbgorICB9Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIENvcHlGaWxlcyAtIENvcHkgcmVzb3VyY2UgZmlsZXMgdG8gdGFyZ2V0IGRpcmVjdG9yeS4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBDb3B5RmlsZXMgeworCisgIG15ICREaXIgPSBzaGlmdDsKKworICBteSAkSlMgPSBDd2Q6OnJlYWxwYXRoKCIkUmVhbEJpbi8uLi9zaGFyZS9zY2FuLWJ1aWxkL3NvcnR0YWJsZS5qcyIpOworCisgIERpZURpYWcoIkNhbm5vdCBmaW5kICdzb3J0dGFibGUuanMnLlxuIikKKyAgICBpZiAoISAtciAkSlMpOworCisgIGNvcHkoJEpTLCAiJERpciIpOworCisgIERpZURpYWcoIkNvdWxkIG5vdCBjb3B5ICdzb3J0dGFibGUuanMnIHRvICckRGlyJy5cbiIpCisgICAgaWYgKCEgLXIgIiREaXIvc29ydHRhYmxlLmpzIik7CisKKyAgbXkgJENTUyA9IEN3ZDo6cmVhbHBhdGgoIiRSZWFsQmluLy4uL3NoYXJlL3NjYW4tYnVpbGQvc2NhbnZpZXcuY3NzIik7CisKKyAgRGllRGlhZygiQ2Fubm90IGZpbmQgJ3NjYW52aWV3LmNzcycuXG4iKQorICAgIGlmICghIC1yICRDU1MpOworCisgIGNvcHkoJENTUywgIiREaXIiKTsKKworICBEaWVEaWFnKCJDb3VsZCBub3QgY29weSAnc2NhbnZpZXcuY3NzJyB0byAnJERpcicuXG4iKQorICAgIGlmICghIC1yICRDU1MpOworfQorCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyBDYWxjU3RhdHMgLSBDYWxjdWxhdGVzIHZpc2l0YXRpb24gc3RhdGlzdGljcyBhbmQgcmV0dXJucyB0aGUgc3RyaW5nLgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworc3ViIENhbGNTdGF0cyB7CisgIG15ICRTdGF0cyA9IHNoaWZ0OworCisgIG15ICRUb3RhbEJsb2NrcyA9IDA7CisgIG15ICRVbnJlYWNoZWRCbG9ja3MgPSAwOworICBteSAkVG90YWxGdW5jdGlvbnMgPSBzY2FsYXIoQCRTdGF0cyk7CisgIG15ICRCbG9ja0Fib3J0ZWQgPSAwOworICBteSAkV29ya0xpc3RBYm9ydGVkID0gMDsKKyAgbXkgJEFib3J0ZWQgPSAwOworCisgICMgQ2FsY3VsYXRlIHRoZSB1bmlxdWUgZmlsZXMKKyAgbXkgJEZpbGVzSGFzaCA9IHt9OworCisgIGZvcmVhY2ggbXkgJFJvdyAoQCRTdGF0cykgeworICAgICRGaWxlc0hhc2gtPnskUm93LT57RmlsZW5hbWV9fSA9IDE7CisgICAgJFRvdGFsQmxvY2tzICs9ICRSb3ctPntUb3RhbH07CisgICAgJFVucmVhY2hlZEJsb2NrcyArPSAkUm93LT57VW5yZWFjaGFibGV9OworICAgICRCbG9ja0Fib3J0ZWQrKyBpZiAkUm93LT57QWJvcnRlZH0gZXEgJ3llcyc7CisgICAgJFdvcmtMaXN0QWJvcnRlZCsrIGlmICRSb3ctPntFbXB0eX0gZXEgJ25vJzsKKyAgICAkQWJvcnRlZCsrIGlmICRSb3ctPntBYm9ydGVkfSBlcSAneWVzJyB8fCAkUm93LT57RW1wdHl9IGVxICdubyc7CisgIH0KKworICBteSAkVG90YWxGaWxlcyA9IHNjYWxhcihrZXlzKCUkRmlsZXNIYXNoKSk7CisKKyAgIyBDYWxjdWxhdGlvbnMKKyAgbXkgJFBlcmNlbnRBYm9ydGVkID0gc3ByaW50ZigiJS4yZiIsICRBYm9ydGVkIC8gJFRvdGFsRnVuY3Rpb25zICogMTAwKTsKKyAgbXkgJFBlcmNlbnRCbG9ja0Fib3J0ZWQgPSBzcHJpbnRmKCIlLjJmIiwgJEJsb2NrQWJvcnRlZCAvICRUb3RhbEZ1bmN0aW9ucworICAgICAgKiAxMDApOworICBteSAkUGVyY2VudFdvcmtMaXN0QWJvcnRlZCA9IHNwcmludGYoIiUuMmYiLCAkV29ya0xpc3RBYm9ydGVkIC8KKyAgICAgICRUb3RhbEZ1bmN0aW9ucyAqIDEwMCk7CisgIG15ICRQZXJjZW50QmxvY2tzVW5yZWFjaGVkID0gc3ByaW50ZigiJS4yZiIsICRVbnJlYWNoZWRCbG9ja3MgLyAkVG90YWxCbG9ja3MKKyAgICAgICogMTAwKTsKKworICBteSAkU3RhdHNTdHJpbmcgPSAiQW5hbHl6ZWQgJFRvdGFsQmxvY2tzIGJsb2NrcyBpbiAkVG90YWxGdW5jdGlvbnMgZnVuY3Rpb25zIgorICAgIC4gIiBpbiAkVG90YWxGaWxlcyBmaWxlc1xuIgorICAgIC4gIiRBYm9ydGVkIGZ1bmN0aW9ucyBhYm9ydGVkIGVhcmx5ICgkUGVyY2VudEFib3J0ZWQlKVxuIgorICAgIC4gIiRCbG9ja0Fib3J0ZWQgaGFkIGFib3J0ZWQgYmxvY2tzICgkUGVyY2VudEJsb2NrQWJvcnRlZCUpXG4iCisgICAgLiAiJFdvcmtMaXN0QWJvcnRlZCBoYWQgdW5maW5pc2hlZCB3b3JrbGlzdHMgKCRQZXJjZW50V29ya0xpc3RBYm9ydGVkJSlcbiIKKyAgICAuICIkVW5yZWFjaGVkQmxvY2tzIGJsb2NrcyB3ZXJlIG5ldmVyIHJlYWNoZWQgKCRQZXJjZW50QmxvY2tzVW5yZWFjaGVkJSlcbiI7CisKKyAgcmV0dXJuICRTdGF0c1N0cmluZzsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgUG9zdHByb2Nlc3MgLSBQb3N0cHJvY2VzcyB0aGUgcmVzdWx0cyBvZiBhbiBhbmFseXNpcyBzY2FuLgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworbXkgQGZpbGVzRm91bmQ7CitteSAkYmFzZURpcjsKK3N1YiBGaWxlV2FudGVkIHsKKyAgICBteSAkYmFzZURpclJlZ0V4ID0gcXVvdGVtZXRhICRiYXNlRGlyOworICAgIG15ICRmaWxlID0gJEZpbGU6OkZpbmQ6Om5hbWU7CisKKyAgICAjIFRoZSBuYW1lIG9mIHRoZSBmaWxlIGlzIGdlbmVyYXRlZCBieSBjbGFuZyBiaW5hcnkgKEhUTUxEaWFnbm9zdGljcy5jcHApCisgICAgaWYgKCRmaWxlID1+IC9yZXBvcnQtLipcLmh0bWwkLykgeworICAgICAgIG15ICRyZWxhdGl2ZV9maWxlID0gJGZpbGU7CisgICAgICAgJHJlbGF0aXZlX2ZpbGUgPX4gcy8kYmFzZURpclJlZ0V4Ly9nOworICAgICAgIHB1c2ggQGZpbGVzRm91bmQsICRyZWxhdGl2ZV9maWxlOworICAgIH0KK30KKworc3ViIFBvc3Rwcm9jZXNzIHsKKworICBteSAkRGlyICAgICAgICAgICA9IHNoaWZ0OworICBteSAkQmFzZURpciAgICAgICA9IHNoaWZ0OworICBteSAkQW5hbHl6ZXJTdGF0cyA9IHNoaWZ0OworICBteSAkS2VlcEVtcHR5ICAgICA9IHNoaWZ0OworCisgIGRpZSAiTm8gZGlyZWN0b3J5IHNwZWNpZmllZC4iIGlmICghZGVmaW5lZCAkRGlyKTsKKworICBpZiAoISAtZCAkRGlyKSB7CisgICAgRGlhZygiTm8gYnVncyBmb3VuZC5cbiIpOworICAgIHJldHVybiAwOworICB9CisKKyAgJGJhc2VEaXIgPSAkRGlyIC4gIi8iOworICBmaW5kKHsgd2FudGVkID0+IFwmRmlsZVdhbnRlZCwgZm9sbG93ID0+IDB9LCAkRGlyKTsKKworICBpZiAoc2NhbGFyKEBmaWxlc0ZvdW5kKSA9PSAwIGFuZCAhIC1lICIkRGlyL2ZhaWx1cmVzIikgeworICAgIGlmICghICRLZWVwRW1wdHkpIHsKKyAgICAgIERpYWcoIlJlbW92aW5nIGRpcmVjdG9yeSAnJERpcicgYmVjYXVzZSBpdCBjb250YWlucyBubyByZXBvcnRzLlxuIik7CisgICAgICBybXRyZWUoJERpcikgb3IgZGllICJDYW5ub3Qgcm10cmVlICckRGlyJyA6ICQhIjsKKyAgICB9CisgICAgRGlhZygiTm8gYnVncyBmb3VuZC5cbiIpOworICAgIHJldHVybiAwOworICB9CisKKyAgIyBTY2FuIGVhY2ggcmVwb3J0IGZpbGUgYW5kIGJ1aWxkIGFuIGluZGV4LgorICBteSBASW5kZXg7CisgIG15IEBTdGF0czsKKyAgZm9yZWFjaCBteSAkZmlsZSAoQGZpbGVzRm91bmQpIHsgU2NhbkZpbGUoXEBJbmRleCwgJERpciwgJGZpbGUsIFxAU3RhdHMpOyB9CisKKyAgIyBTY2FuIHRoZSBmYWlsdXJlcyBkaXJlY3RvcnkgYW5kIHVzZSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIC5pbmZvIGZpbGVzCisgICMgdG8gdXBkYXRlIHRoZSBjb21tb24gcHJlZml4IGRpcmVjdG9yeS4KKyAgbXkgQGZhaWx1cmVzOworICBteSBAYXR0cmlidXRlc19pZ25vcmVkOworICBpZiAoLWQgIiREaXIvZmFpbHVyZXMiKSB7CisgICAgb3BlbmRpcihESVIsICIkRGlyL2ZhaWx1cmVzIik7CisgICAgQGZhaWx1cmVzID0gZ3JlcCB7IC9bLl1pbmZvLnR4dCQvICYmICEvYXR0cmlidXRlX2lnbm9yZWQvOyB9IHJlYWRkaXIoRElSKTsKKyAgICBjbG9zZWRpcihESVIpOworICAgIG9wZW5kaXIoRElSLCAiJERpci9mYWlsdXJlcyIpOworICAgIEBhdHRyaWJ1dGVzX2lnbm9yZWQgPSBncmVwIHsgL15hdHRyaWJ1dGVfaWdub3JlZC87IH0gcmVhZGRpcihESVIpOworICAgIGNsb3NlZGlyKERJUik7CisgICAgZm9yZWFjaCBteSAkZmlsZSAoQGZhaWx1cmVzKSB7CisgICAgICBvcGVuIElOLCAiJERpci9mYWlsdXJlcy8kZmlsZSIgb3IgRGllRGlhZygiY2Fubm90IG9wZW4gJGZpbGVcbiIpOworICAgICAgbXkgJFBhdGggPSA8SU4+OworICAgICAgaWYgKGRlZmluZWQgJFBhdGgpIHsgVXBkYXRlUHJlZml4KCRQYXRoKTsgfQorICAgICAgY2xvc2UgSU47CisgICAgfQorICB9CisKKyAgIyBHZW5lcmF0ZSBhbiBpbmRleC5odG1sIGZpbGUuCisgIG15ICRGTmFtZSA9ICIkRGlyL2luZGV4Lmh0bWwiOworICBvcGVuKE9VVCwgIj4iLCAkRk5hbWUpIG9yIERpZURpYWcoIkNhbm5vdCBjcmVhdGUgZmlsZSAnJEZOYW1lJ1xuIik7CisKKyAgIyBQcmludCBvdXQgdGhlIGhlYWRlci4KKworcHJpbnQgT1VUIDw8RU5EVEVYVDsKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+JHtPcHRpb25ze0h0bWxUaXRsZX19PC90aXRsZT4KKzxsaW5rIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGhyZWY9InNjYW52aWV3LmNzcyIvPgorPHNjcmlwdCBzcmM9InNvcnR0YWJsZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gU2V0RGlzcGxheShSb3dDbGFzcywgRGlzcGxheVZhbCkKK3sKKyAgdmFyIFJvd3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidHIiKTsKKyAgZm9yICggdmFyIGkgPSAwIDsgaSA8IFJvd3MubGVuZ3RoOyArK2kgKSB7CisgICAgaWYgKFJvd3NbaV0uY2xhc3NOYW1lID09IFJvd0NsYXNzKSB7CisgICAgICBSb3dzW2ldLnN0eWxlLmRpc3BsYXkgPSBEaXNwbGF5VmFsOworICAgIH0KKyAgfQorfQorCitmdW5jdGlvbiBDb3B5Q2hlY2tlZFN0YXRlVG9DaGVja0J1dHRvbnMoU3VtbWFyeUNoZWNrQnV0dG9uKSB7CisgIHZhciBJbnB1dHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKKyAgZm9yICggdmFyIGkgPSAwIDsgaSA8IElucHV0cy5sZW5ndGg7ICsraSApIHsKKyAgICBpZiAoSW5wdXRzW2ldLnR5cGUgPT0gImNoZWNrYm94IikgeworICAgICAgaWYoSW5wdXRzW2ldICE9IFN1bW1hcnlDaGVja0J1dHRvbikgeworICAgICAgICBJbnB1dHNbaV0uY2hlY2tlZCA9IFN1bW1hcnlDaGVja0J1dHRvbi5jaGVja2VkOworICAgICAgICBJbnB1dHNbaV0ub25jbGljaygpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCitmdW5jdGlvbiByZXR1cm5PYmpCeUlkKCBpZCApIHsKKyAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpCisgICAgICAgIHZhciByZXR1cm5WYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgZWxzZSBpZiAoZG9jdW1lbnQuYWxsKQorICAgICAgICB2YXIgcmV0dXJuVmFyID0gZG9jdW1lbnQuYWxsW2lkXTsKKyAgICBlbHNlIGlmIChkb2N1bWVudC5sYXllcnMpCisgICAgICAgIHZhciByZXR1cm5WYXIgPSBkb2N1bWVudC5sYXllcnNbaWRdOworICAgIHJldHVybiByZXR1cm5WYXI7Cit9CisKK3ZhciBOdW1VbmNoZWNrZWQgPSAwOworCitmdW5jdGlvbiBUb2dnbGVEaXNwbGF5KENoZWNrQnV0dG9uLCBDbGFzc05hbWUpIHsKKyAgaWYgKENoZWNrQnV0dG9uLmNoZWNrZWQpIHsKKyAgICBTZXREaXNwbGF5KENsYXNzTmFtZSwgIiIpOworICAgIGlmICgtLU51bVVuY2hlY2tlZCA9PSAwKSB7CisgICAgICByZXR1cm5PYmpCeUlkKCJBbGxCdWdzQ2hlY2siKS5jaGVja2VkID0gdHJ1ZTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgU2V0RGlzcGxheShDbGFzc05hbWUsICJub25lIik7CisgICAgTnVtVW5jaGVja2VkKys7CisgICAgcmV0dXJuT2JqQnlJZCgiQWxsQnVnc0NoZWNrIikuY2hlY2tlZCA9IGZhbHNlOworICB9Cit9Cis8L3NjcmlwdD4KKzwhLS0gU1VNTUFSWUVOREhFQUQgLS0+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT4ke09wdGlvbnN7SHRtbFRpdGxlfX08L2gxPgorCis8dGFibGU+Cis8dHI+PHRoPlVzZXI6PC90aD48dGQ+JHtVc2VyTmFtZX1cQCR7SG9zdE5hbWV9PC90ZD48L3RyPgorPHRyPjx0aD5Xb3JraW5nIERpcmVjdG9yeTo8L3RoPjx0ZD4ke0N1cnJlbnREaXJ9PC90ZD48L3RyPgorPHRyPjx0aD5Db21tYW5kIExpbmU6PC90aD48dGQ+JHtDbWRBcmdzfTwvdGQ+PC90cj4KKzx0cj48dGg+Q2xhbmcgVmVyc2lvbjo8L3RoPjx0ZD4ke0NsYW5nVmVyc2lvbn08L3RkPjwvdHI+Cis8dHI+PHRoPkRhdGU6PC90aD48dGQ+JHtEYXRlfTwvdGQ+PC90cj4KK0VORFRFWFQKKworcHJpbnQgT1VUICI8dHI+PHRoPlZlcnNpb246PC90aD48dGQ+JHtCdWlsZE5hbWV9ICgke0J1aWxkRGF0ZX0pPC90ZD48L3RyPlxuIgorICBpZiAoZGVmaW5lZCgkQnVpbGROYW1lKSAmJiBkZWZpbmVkKCRCdWlsZERhdGUpKTsKKworcHJpbnQgT1VUIDw8RU5EVEVYVDsKKzwvdGFibGU+CitFTkRURVhUCisKKyAgaWYgKHNjYWxhcihAZmlsZXNGb3VuZCkpIHsKKyAgICAjIFByaW50IG91dCB0aGUgc3VtbWFyeSB0YWJsZS4KKyAgICBteSAlVG90YWxzOworCisgICAgZm9yIG15ICRyb3cgKCBASW5kZXggKSB7CisgICAgICBteSAkYnVnX3R5cGUgPSAoJHJvdy0+WzJdKTsKKyAgICAgIG15ICRidWdfY2F0ZWdvcnkgPSAoJHJvdy0+WzFdKTsKKyAgICAgIG15ICRrZXkgPSAiJGJ1Z19jYXRlZ29yeTokYnVnX3R5cGUiOworCisgICAgICBpZiAoIWRlZmluZWQgJFRvdGFsc3ska2V5fSkgeyAkVG90YWxzeyRrZXl9ID0gWzEsJGJ1Z19jYXRlZ29yeSwkYnVnX3R5cGVdOyB9CisgICAgICBlbHNlIHsgJFRvdGFsc3ska2V5fS0+WzBdKys7IH0KKyAgICB9CisKKyAgICBwcmludCBPVVQgIjxoMj5CdWcgU3VtbWFyeTwvaDI+IjsKKworICAgIGlmIChkZWZpbmVkICRCdWlsZE5hbWUpIHsKKyAgICAgIHByaW50IE9VVCAiXG48cD5SZXN1bHRzIGluIHRoaXMgYW5hbHlzaXMgcnVuIGFyZSBiYXNlZCBvbiBhbmFseXplciBidWlsZCA8Yj4kQnVpbGROYW1lPC9iPi48L3A+XG4iCisgICAgfQorCisgIG15ICRUb3RhbEJ1Z3MgPSBzY2FsYXIoQEluZGV4KTsKK3ByaW50IE9VVCA8PEVORFRFWFQ7Cis8dGFibGU+Cis8dGhlYWQ+PHRyPjx0ZD5CdWcgVHlwZTwvdGQ+PHRkPlF1YW50aXR5PC90ZD48dGQgY2xhc3M9InNvcnR0YWJsZV9ub3NvcnQiPkRpc3BsYXk/PC90ZD48L3RyPjwvdGhlYWQ+Cis8dHIgc3R5bGU9ImZvbnQtd2VpZ2h0OmJvbGQiPjx0ZCBjbGFzcz0iU1VNTV9ERVNDIj5BbGwgQnVnczwvdGQ+PHRkIGNsYXNzPSJRIj4kVG90YWxCdWdzPC90ZD48dGQ+PGNlbnRlcj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJBbGxCdWdzQ2hlY2siIG9uQ2xpY2s9IkNvcHlDaGVja2VkU3RhdGVUb0NoZWNrQnV0dG9ucyh0aGlzKTsiIGNoZWNrZWQvPjwvY2VudGVyPjwvdGQ+PC90cj4KK0VORFRFWFQKKworICAgIG15ICRsYXN0X2NhdGVnb3J5OworCisgICAgZm9yIG15ICRrZXkgKAorICAgICAgc29ydCB7CisgICAgICAgIG15ICR4ID0gJFRvdGFsc3skYX07CisgICAgICAgIG15ICR5ID0gJFRvdGFsc3skYn07CisgICAgICAgIG15ICRyZXMgPSAkeC0+WzFdIGNtcCAkeS0+WzFdOworICAgICAgICAkcmVzID0gJHgtPlsyXSBjbXAgJHktPlsyXSBpZiAoJHJlcyA9PSAwKTsKKyAgICAgICAgJHJlcworICAgICAgfSBrZXlzICVUb3RhbHMgKQorICAgIHsKKyAgICAgIG15ICR2YWwgPSAkVG90YWxzeyRrZXl9OworICAgICAgbXkgJGNhdGVnb3J5ID0gJHZhbC0+WzFdOworICAgICAgaWYgKCFkZWZpbmVkICRsYXN0X2NhdGVnb3J5IG9yICRsYXN0X2NhdGVnb3J5IG5lICRjYXRlZ29yeSkgeworICAgICAgICAkbGFzdF9jYXRlZ29yeSA9ICRjYXRlZ29yeTsKKyAgICAgICAgcHJpbnQgT1VUICI8dHI+PHRoPiRjYXRlZ29yeTwvdGg+PHRoIGNvbHNwYW49Mj48L3RoPjwvdHI+XG4iOworICAgICAgfQorICAgICAgbXkgJHggPSBsYyAka2V5OworICAgICAgJHggPX4gcy9bICwnIjpcLygpXSsvXy9nOworICAgICAgcHJpbnQgT1VUICI8dHI+PHRkIGNsYXNzPVwiU1VNTV9ERVNDXCI+IjsKKyAgICAgIHByaW50IE9VVCAkdmFsLT5bMl07CisgICAgICBwcmludCBPVVQgIjwvdGQ+PHRkIGNsYXNzPVwiUVwiPiI7CisgICAgICBwcmludCBPVVQgJHZhbC0+WzBdOworICAgICAgcHJpbnQgT1VUICI8L3RkPjx0ZD48Y2VudGVyPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBvbkNsaWNrPVwiVG9nZ2xlRGlzcGxheSh0aGlzLCdidF8keCcpO1wiIGNoZWNrZWQvPjwvY2VudGVyPjwvdGQ+PC90cj5cbiI7CisgICAgfQorCisgICMgUHJpbnQgb3V0IHRoZSB0YWJsZSBvZiBlcnJvcnMuCisKK3ByaW50IE9VVCA8PEVORFRFWFQ7Cis8L3RhYmxlPgorPGgyPlJlcG9ydHM8L2gyPgorCis8dGFibGUgY2xhc3M9InNvcnRhYmxlIiBzdHlsZT0idGFibGUtbGF5b3V0OmF1dG9tYXRpYyI+Cis8dGhlYWQ+PHRyPgorICA8dGQ+QnVnIEdyb3VwPC90ZD4KKyAgPHRkIGNsYXNzPSJzb3J0dGFibGVfc29ydGVkIj5CdWcgVHlwZTxzcGFuIGlkPSJzb3J0dGFibGVfc29ydGZ3ZGluZCI+Jm5ic3A7JiN4MjVCRTs8L3NwYW4+PC90ZD4KKyAgPHRkPkZpbGU8L3RkPgorICA8dGQ+RnVuY3Rpb24vTWV0aG9kPC90ZD4KKyAgPHRkIGNsYXNzPSJRIj5MaW5lPC90ZD4KKyAgPHRkIGNsYXNzPSJRIj5QYXRoIExlbmd0aDwvdGQ+CitFTkRURVhUCisKK2lmICgkT3B0aW9uc3tTaG93RGVzY3JpcHRpb259KSB7CitwcmludCBPVVQgPDxFTkRURVhUOworICAgIDx0ZCBjbGFzcz0iUSI+RGVzY3JpcHRpb248L3RkPgorRU5EVEVYVAorfQorCitwcmludCBPVVQgPDxFTkRURVhUOworICA8dGQgY2xhc3M9InNvcnR0YWJsZV9ub3NvcnQiPjwvdGQ+CisgIDwhLS0gUkVQT1JUQlVHQ09MIC0tPgorPC90cj48L3RoZWFkPgorPHRib2R5PgorRU5EVEVYVAorCisgICAgbXkgJHByZWZpeCA9IEdldFByZWZpeCgpOworICAgIG15ICRyZWdleDsKKyAgICBteSAkSW5GaWxlUmVnZXg7CisgICAgbXkgJEluRmlsZVByZWZpeCA9ICJGaWxlOjwvdGQ+PHRkPiI7CisKKyAgICBpZiAoZGVmaW5lZCAkcHJlZml4KSB7CisgICAgICAkcmVnZXggPSBxci9eXFEkcHJlZml4XEUvaXM7CisgICAgICAkSW5GaWxlUmVnZXggPSBxci9cUSRJbkZpbGVQcmVmaXgkcHJlZml4XEUvaXM7CisgICAgfQorCisgICAgZm9yIG15ICRyb3cgKCBzb3J0IHsgJGEtPlsyXSBjbXAgJGItPlsyXSB9IEBJbmRleCApIHsKKyAgICAgIG15ICR4ID0gIiRyb3ctPlsxXTokcm93LT5bMl0iOworICAgICAgJHggPSBsYyAkeDsKKyAgICAgICR4ID1+IHMvWyAsJyI6XC8oKV0rL18vZzsKKworICAgICAgbXkgJFJlcG9ydEZpbGUgPSAkcm93LT5bMF07CisKKyAgICAgIHByaW50IE9VVCAiPHRyIGNsYXNzPVwiYnRfJHhcIj4iOworICAgICAgcHJpbnQgT1VUICI8dGQgY2xhc3M9XCJERVNDXCI+IjsKKyAgICAgIHByaW50IE9VVCAkcm93LT5bMV07ICMgJEJ1Z0NhdGVnb3J5CisgICAgICBwcmludCBPVVQgIjwvdGQ+IjsKKyAgICAgIHByaW50IE9VVCAiPHRkIGNsYXNzPVwiREVTQ1wiPiI7CisgICAgICBwcmludCBPVVQgJHJvdy0+WzJdOyAjICRCdWdUeXBlCisgICAgICBwcmludCBPVVQgIjwvdGQ+IjsKKworICAgICAgIyBVcGRhdGUgdGhlIGZpbGUgcHJlZml4LgorICAgICAgbXkgJGZuYW1lID0gJHJvdy0+WzNdOworCisgICAgICBpZiAoZGVmaW5lZCAkcmVnZXgpIHsKKyAgICAgICAgJGZuYW1lID1+IHMvJHJlZ2V4Ly87CisgICAgICAgIFVwZGF0ZUluRmlsZVBhdGgoIiREaXIvJFJlcG9ydEZpbGUiLCAkSW5GaWxlUmVnZXgsICRJbkZpbGVQcmVmaXgpCisgICAgICB9CisKKyAgICAgIHByaW50IE9VVCAiPHRkPiI7CisgICAgICBteSBAZm5hbWUgPSBzcGxpdCAvXC8vLCRmbmFtZTsKKyAgICAgIGlmICgkI2ZuYW1lID4gMCkgeworICAgICAgICB3aGlsZSAoJCNmbmFtZSA+PSAwKSB7CisgICAgICAgICAgbXkgJHggPSBzaGlmdCBAZm5hbWU7CisgICAgICAgICAgcHJpbnQgT1VUICR4OworICAgICAgICAgIGlmICgkI2ZuYW1lID49IDApIHsKKyAgICAgICAgICAgIHByaW50IE9VVCAiLyI7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgcHJpbnQgT1VUICRmbmFtZTsKKyAgICAgIH0KKyAgICAgIHByaW50IE9VVCAiPC90ZD4iOworCisgICAgICBwcmludCBPVVQgIjx0ZCBjbGFzcz1cIkRFU0NcIj4iOworICAgICAgcHJpbnQgT1VUICRyb3ctPls0XTsgIyBGdW5jdGlvbgorICAgICAgcHJpbnQgT1VUICI8L3RkPiI7CisKKyAgICAgICMgUHJpbnQgb3V0IHRoZSBxdWFudGl0aWVzLgorICAgICAgZm9yIG15ICRqICggNSAuLiA2ICkgeyAjIExpbmUgJiBQYXRoIGxlbmd0aAorICAgICAgICBwcmludCBPVVQgIjx0ZCBjbGFzcz1cIlFcIj4kcm93LT5bJGpdPC90ZD4iOworICAgICAgfQorCisgICAgICAjIFByaW50IHRoZSByZXN0IG9mIHRoZSBjb2x1bW5zLgorICAgICAgZm9yIChteSAkaiA9IDc7ICRqIDw9ICQjeyRyb3d9OyArKyRqKSB7CisgICAgICAgIHByaW50IE9VVCAiPHRkPiRyb3ctPlskal08L3RkPiIKKyAgICAgIH0KKworICAgICAgIyBFbWl0IHRoZSAiVmlldyIgbGluay4KKyAgICAgIHByaW50IE9VVCAiPHRkPjxhIGhyZWY9XCIkUmVwb3J0RmlsZSNFbmRQYXRoXCI+VmlldyBSZXBvcnQ8L2E+PC90ZD4iOworCisgICAgICAjIEVtaXQgUkVQT1JUQlVHIG1hcmtlcnMuCisgICAgICBwcmludCBPVVQgIlxuPCEtLSBSRVBPUlRCVUcgaWQ9XCIkUmVwb3J0RmlsZVwiIC0tPlxuIjsKKworICAgICAgIyBFbmQgdGhlIHJvdy4KKyAgICAgIHByaW50IE9VVCAiPC90cj5cbiI7CisgICAgfQorCisgICAgcHJpbnQgT1VUICI8L3Rib2R5PlxuPC90YWJsZT5cblxuIjsKKyAgfQorCisgIGlmIChzY2FsYXIgKEBmYWlsdXJlcykgfHwgc2NhbGFyKEBhdHRyaWJ1dGVzX2lnbm9yZWQpKSB7CisgICAgcHJpbnQgT1VUICI8aDI+QW5hbHl6ZXIgRmFpbHVyZXM8L2gyPlxuIjsKKworICAgIGlmIChzY2FsYXIgQGF0dHJpYnV0ZXNfaWdub3JlZCkgeworICAgICAgcHJpbnQgT1VUICJUaGUgYW5hbHl6ZXIncyBwYXJzZXIgaWdub3JlZCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6PHA+XG4iOworICAgICAgcHJpbnQgT1VUICI8dGFibGU+XG4iOworICAgICAgcHJpbnQgT1VUICI8dGhlYWQ+PHRyPjx0ZD5BdHRyaWJ1dGU8L3RkPjx0ZD5Tb3VyY2UgRmlsZTwvdGQ+PHRkPlByZXByb2Nlc3NlZCBGaWxlPC90ZD48dGQ+U1RERVJSIE91dHB1dDwvdGQ+PC90cj48L3RoZWFkPlxuIjsKKyAgICAgIGZvcmVhY2ggbXkgJGZpbGUgKHNvcnQgQGF0dHJpYnV0ZXNfaWdub3JlZCkgeworICAgICAgICBkaWUgImNhbm5vdCBkZW1hbmdsZSBhdHRyaWJ1dGUgbmFtZVxuIiBpZiAoISAoJGZpbGUgPX4gL15hdHRyaWJ1dGVfaWdub3JlZF8oLispLnR4dC8pKTsKKyAgICAgICAgbXkgJGF0dHJpYnV0ZSA9ICQxOworICAgICAgICAjIE9wZW4gdGhlIGF0dHJpYnV0ZSBmaWxlIHRvIGdldCB0aGUgZmlyc3QgZmlsZSB0aGF0IGZhaWxlZC4KKyAgICAgICAgbmV4dCBpZiAoIW9wZW4gKEFUVFIsICIkRGlyL2ZhaWx1cmVzLyRmaWxlIikpOworICAgICAgICBteSAkcHBmaWxlID0gPEFUVFI+OworICAgICAgICBjaG9tcCAkcHBmaWxlOworICAgICAgICBjbG9zZSBBVFRSOworICAgICAgICBuZXh0IGlmICghIC1lICIkRGlyL2ZhaWx1cmVzLyRwcGZpbGUiKTsKKyAgICAgICAgIyBPcGVuIHRoZSBpbmZvIGZpbGUgYW5kIGdldCB0aGUgbmFtZSBvZiB0aGUgc291cmNlIGZpbGUuCisgICAgICAgIG9wZW4gKElORk8sICIkRGlyL2ZhaWx1cmVzLyRwcGZpbGUuaW5mby50eHQiKSBvcgorICAgICAgICAgIGRpZSAiQ2Fubm90IG9wZW4gJERpci9mYWlsdXJlcy8kcHBmaWxlLmluZm8udHh0XG4iOworICAgICAgICBteSAkc3JjZmlsZSA9IDxJTkZPPjsKKyAgICAgICAgY2hvbXAgJHNyY2ZpbGU7CisgICAgICAgIGNsb3NlIChJTkZPKTsKKyAgICAgICAgIyBQcmludCB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHRhYmxlLgorICAgICAgICBteSAkcHJlZml4ID0gR2V0UHJlZml4KCk7CisgICAgICAgIGlmIChkZWZpbmVkICRwcmVmaXgpIHsgJHNyY2ZpbGUgPX4gcy9eXFEkcHJlZml4Ly87IH0KKyAgICAgICAgcHJpbnQgT1VUICI8dHI+PHRkPiRhdHRyaWJ1dGU8L3RkPjx0ZD4kc3JjZmlsZTwvdGQ+PHRkPjxhIGhyZWY9XCJmYWlsdXJlcy8kcHBmaWxlXCI+JHBwZmlsZTwvYT48L3RkPjx0ZD48YSBocmVmPVwiZmFpbHVyZXMvJHBwZmlsZS5zdGRlcnIudHh0XCI+JHBwZmlsZS5zdGRlcnIudHh0PC9hPjwvdGQ+PC90cj5cbiI7CisgICAgICAgIG15ICRwcGZpbGVfY2xhbmcgPSAkcHBmaWxlOworICAgICAgICAkcHBmaWxlX2NsYW5nID1+IHMvWy5dKC4rKSQvLmNsYW5nLiQxLzsKKyAgICAgICAgcHJpbnQgT1VUICIgIDwhLS0gUkVQT1JUUFJPQkxFTSBzcmM9XCIkc3JjZmlsZVwiIGZpbGU9XCJmYWlsdXJlcy8kcHBmaWxlXCIgY2xhbmdmaWxlPVwiZmFpbHVyZXMvJHBwZmlsZV9jbGFuZ1wiIHN0ZGVycj1cImZhaWx1cmVzLyRwcGZpbGUuc3RkZXJyLnR4dFwiIGluZm89XCJmYWlsdXJlcy8kcHBmaWxlLmluZm8udHh0XCIgLS0+XG4iOworICAgICAgfQorICAgICAgcHJpbnQgT1VUICI8L3RhYmxlPlxuIjsKKyAgICB9CisKKyAgICBpZiAoc2NhbGFyIEBmYWlsdXJlcykgeworICAgICAgcHJpbnQgT1VUICI8cD5UaGUgYW5hbHl6ZXIgaGFkIHByb2JsZW1zIHByb2Nlc3NpbmcgdGhlIGZvbGxvd2luZyBmaWxlczo8L3A+XG4iOworICAgICAgcHJpbnQgT1VUICI8dGFibGU+XG4iOworICAgICAgcHJpbnQgT1VUICI8dGhlYWQ+PHRyPjx0ZD5Qcm9ibGVtPC90ZD48dGQ+U291cmNlIEZpbGU8L3RkPjx0ZD5QcmVwcm9jZXNzZWQgRmlsZTwvdGQ+PHRkPlNUREVSUiBPdXRwdXQ8L3RkPjwvdHI+PC90aGVhZD5cbiI7CisgICAgICBmb3JlYWNoIG15ICRmaWxlIChzb3J0IEBmYWlsdXJlcykgeworICAgICAgICAkZmlsZSA9fiAvKC4rKS5pbmZvLnR4dCQvOworICAgICAgICAjIEdldCB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUuCisgICAgICAgIG15ICRwcGZpbGUgPSAkMTsKKyAgICAgICAgIyBPcGVuIHRoZSBpbmZvIGZpbGUgYW5kIGdldCB0aGUgbmFtZSBvZiB0aGUgc291cmNlIGZpbGUuCisgICAgICAgIG9wZW4gKElORk8sICIkRGlyL2ZhaWx1cmVzLyRmaWxlIikgb3IKKyAgICAgICAgICBkaWUgIkNhbm5vdCBvcGVuICREaXIvZmFpbHVyZXMvJGZpbGVcbiI7CisgICAgICAgIG15ICRzcmNmaWxlID0gPElORk8+OworICAgICAgICBjaG9tcCAkc3JjZmlsZTsKKyAgICAgICAgbXkgJHByb2JsZW0gPSA8SU5GTz47CisgICAgICAgIGNob21wICRwcm9ibGVtOworICAgICAgICBjbG9zZSAoSU5GTyk7CisgICAgICAgICMgUHJpbnQgdGhlIGluZm9ybWF0aW9uIGluIHRoZSB0YWJsZS4KKyAgICAgICAgbXkgJHByZWZpeCA9IEdldFByZWZpeCgpOworICAgICAgICBpZiAoZGVmaW5lZCAkcHJlZml4KSB7ICRzcmNmaWxlID1+IHMvXlxRJHByZWZpeC8vOyB9CisgICAgICAgIHByaW50IE9VVCAiPHRyPjx0ZD4kcHJvYmxlbTwvdGQ+PHRkPiRzcmNmaWxlPC90ZD48dGQ+PGEgaHJlZj1cImZhaWx1cmVzLyRwcGZpbGVcIj4kcHBmaWxlPC9hPjwvdGQ+PHRkPjxhIGhyZWY9XCJmYWlsdXJlcy8kcHBmaWxlLnN0ZGVyci50eHRcIj4kcHBmaWxlLnN0ZGVyci50eHQ8L2E+PC90ZD48L3RyPlxuIjsKKyAgICAgICAgbXkgJHBwZmlsZV9jbGFuZyA9ICRwcGZpbGU7CisgICAgICAgICRwcGZpbGVfY2xhbmcgPX4gcy9bLl0oLispJC8uY2xhbmcuJDEvOworICAgICAgICBwcmludCBPVVQgIiAgPCEtLSBSRVBPUlRQUk9CTEVNIHNyYz1cIiRzcmNmaWxlXCIgZmlsZT1cImZhaWx1cmVzLyRwcGZpbGVcIiBjbGFuZ2ZpbGU9XCJmYWlsdXJlcy8kcHBmaWxlX2NsYW5nXCIgc3RkZXJyPVwiZmFpbHVyZXMvJHBwZmlsZS5zdGRlcnIudHh0XCIgaW5mbz1cImZhaWx1cmVzLyRwcGZpbGUuaW5mby50eHRcIiAtLT5cbiI7CisgICAgICB9CisgICAgICBwcmludCBPVVQgIjwvdGFibGU+XG4iOworICAgIH0KKyAgICBwcmludCBPVVQgIjxwPlBsZWFzZSBjb25zaWRlciBzdWJtaXR0aW5nIHByZXByb2Nlc3NlZCBmaWxlcyBhcyA8YSBocmVmPVwiaHR0cDovL2NsYW5nLWFuYWx5emVyLmxsdm0ub3JnL2ZpbGluZ19idWdzLmh0bWxcIj5idWcgcmVwb3J0czwvYT4uIDwhLS0gUkVQT1JUQ1JBU0hFUyAtLT4gPC9wPlxuIjsKKyAgfQorCisgIHByaW50IE9VVCAiPC9ib2R5PjwvaHRtbD5cbiI7CisgIGNsb3NlKE9VVCk7CisgIENvcHlGaWxlcygkRGlyKTsKKworICAjIE1ha2Ugc3VyZSAkRGlyIGFuZCAkQmFzZURpciBhcmUgd29ybGQgcmVhZGFibGUvZXhlY3V0YWJsZS4KKyAgY2htb2QoMDc1NSwgJERpcik7CisgIGlmIChkZWZpbmVkICRCYXNlRGlyKSB7IGNobW9kKDA3NTUsICRCYXNlRGlyKTsgfQorCisgICMgUHJpbnQgc3RhdGlzdGljcworICBwcmludCBDYWxjU3RhdHMoXEBTdGF0cykgaWYgJEFuYWx5emVyU3RhdHM7CisKKyAgbXkgJE51bSA9IHNjYWxhcihASW5kZXgpOworICBpZiAoJE51bSA9PSAxKSB7CisgICAgRGlhZygiJE51bSBidWcgZm91bmQuXG4iKTsKKyAgfSBlbHNlIHsKKyAgICBEaWFnKCIkTnVtIGJ1Z3MgZm91bmQuXG4iKTsKKyAgfQorICBpZiAoJE51bSA+IDAgJiYgLXIgIiREaXIvaW5kZXguaHRtbCIpIHsKKyAgICBEaWFnKCJSdW4gJ3NjYW4tdmlldyAkRGlyJyB0byBleGFtaW5lIGJ1ZyByZXBvcnRzLlxuIik7CisgIH0KKworICBEaWFnQ3Jhc2hlcygkRGlyKSBpZiAoc2NhbGFyIEBmYWlsdXJlcyB8fCBzY2FsYXIgQGF0dHJpYnV0ZXNfaWdub3JlZCk7CisKKyAgcmV0dXJuICROdW07Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIFJ1bkJ1aWxkQ29tbWFuZCAtIFJ1biB0aGUgYnVpbGQgY29tbWFuZC4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBBZGRJZk5vdFByZXNlbnQgeworICBteSAkQXJncyA9IHNoaWZ0OworICBteSAkQXJnID0gc2hpZnQ7CisgIG15ICRmb3VuZCA9IDA7CisKKyAgZm9yZWFjaCBteSAkayAoQCRBcmdzKSB7CisgICAgaWYgKCRrIGVxICRBcmcpIHsKKyAgICAgICRmb3VuZCA9IDE7CisgICAgICBsYXN0OworICAgIH0KKyAgfQorCisgIGlmICgkZm91bmQgPT0gMCkgeworICAgIHB1c2ggQCRBcmdzLCAkQXJnOworICB9Cit9CisKK3N1YiBTZXRFbnYgeworICBteSAkRW52VmFycyA9IHNoaWZ0IEBfOworICBmb3JlYWNoIG15ICR2YXIgKCdDQycsICdDWFgnLCAnQ0xBTkcnLCAnQ0xBTkdfQ1hYJywKKyAgICAgICAgICAgICAgICAgICAnQ0NDX0FOQUxZWkVSX0FOQUxZU0lTJywgJ0NDQ19BTkFMWVpFUl9QTFVHSU5TJywKKyAgICAgICAgICAgICAgICAgICAnQ0NDX0FOQUxZWkVSX0NPTkZJRycpIHsKKyAgICBkaWUgIiR2YXIgaXMgdW5kZWZpbmVkXG4iIGlmICghZGVmaW5lZCAkdmFyKTsKKyAgICAkRU5WeyR2YXJ9ID0gJEVudlZhcnMtPnskdmFyfTsKKyAgfQorICBmb3JlYWNoIG15ICR2YXIgKCdDQ0NfQU5BTFlaRVJfU1RPUkVfTU9ERUwnLAorICAgICAgICAgICAgICAgICAgICdDQ0NfQU5BTFlaRVJfQ09OU1RSQUlOVFNfTU9ERUwnLAorICAgICAgICAgICAgICAgICAgICdDQ0NfQU5BTFlaRVJfSU5URVJOQUxfU1RBVFMnLAorICAgICAgICAgICAgICAgICAgICdDQ0NfQU5BTFlaRVJfT1VUUFVUX0ZPUk1BVCcsCisgICAgICAgICAgICAgICAgICAgJ0NDQ19DQycsCisgICAgICAgICAgICAgICAgICAgJ0NDQ19DWFgnLAorICAgICAgICAgICAgICAgICAgICdDQ0NfUkVQT1JUX0ZBSUxVUkVTJywKKyAgICAgICAgICAgICAgICAgICAnQ0xBTkdfQU5BTFlaRVJfVEFSR0VUJywKKyAgICAgICAgICAgICAgICAgICAnQ0NDX0FOQUxZWkVSX0ZPUkNFX0FOQUxZWkVfREVCVUdfQ09ERScpIHsKKyAgICBteSAkeCA9ICRFbnZWYXJzLT57JHZhcn07CisgICAgaWYgKGRlZmluZWQgJHgpIHsgJEVOVnskdmFyfSA9ICR4IH0KKyAgfQorICBteSAkVmVyYm9zZSA9ICRFbnZWYXJzLT57J1ZFUkJPU0UnfTsKKyAgaWYgKCRWZXJib3NlID49IDIpIHsKKyAgICAkRU5WeydDQ0NfQU5BTFlaRVJfVkVSQk9TRSd9ID0gMTsKKyAgfQorICBpZiAoJFZlcmJvc2UgPj0gMykgeworICAgICRFTlZ7J0NDQ19BTkFMWVpFUl9MT0cnfSA9IDE7CisgIH0KK30KKworc3ViIFJ1blhjb2RlYnVpbGQgeworICBteSAkQXJncyA9IHNoaWZ0OworICBteSAkSWdub3JlRXJyb3JzID0gc2hpZnQ7CisgIG15ICRDQ0FuYWx5emVyID0gc2hpZnQ7CisgIG15ICRDWFhBbmFseXplciA9IHNoaWZ0OworICBteSAkRW52VmFycyA9IHNoaWZ0OworCisgIGlmICgkSWdub3JlRXJyb3JzKSB7CisgICAgQWRkSWZOb3RQcmVzZW50KCRBcmdzLCItUEJYQnVpbGRzQ29udGludWVBZnRlckVycm9ycz1ZRVMiKTsKKyAgfQorCisgICMgRGV0ZWN0IHRoZSB2ZXJzaW9uIG9mIFhjb2RlLiAgSWYgWGNvZGUgNC42IG9yIGhpZ2hlciwgdXNlIG5ldworICAjIGluIHNpdHUgc3VwcG9ydCBmb3IgYW5hbHl6ZXIgaW50ZXJwb3NpdGlvbiB3aXRob3V0IG5lZWRlZCB0byBvdmVycmlkZQorICAjIHRoZSBjb21waWxlci4KKyAgb3BlbihERVRFQ1RfWENPREUsICItfCIsICRBcmdzLT5bMF0sICItdmVyc2lvbiIpIG9yCisgICAgZGllICJlcnJvcjogY2Fubm90IGRldGVjdCB2ZXJzaW9uIG9mIHhjb2RlYnVpbGRcbiI7CisKKyAgbXkgJG9sZEJlaGF2aW9yID0gMTsKKworICB3aGlsZSg8REVURUNUX1hDT0RFPikgeworICAgIGlmICgvXlhjb2RlICguKykkLykgeworICAgICAgbXkgJHZlciA9ICQxOworICAgICAgaWYgKCR2ZXIgPX4gL14oWzAtOV0rWy5dWzAtOV0rKVteMC05XT8vKSB7CisgICAgICAgIGlmICgkMSA+PSA0LjYpIHsKKyAgICAgICAgICAkb2xkQmVoYXZpb3IgPSAwOworICAgICAgICAgIGxhc3Q7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgY2xvc2UoREVURUNUX1hDT0RFKTsKKworICAjIElmIC0tb3ZlcnJpZGUtY29tcGlsZXIgaXMgZXhwbGljaXRlbHkgcmVxdWVzdGVkLCByZXNvcnQgdG8gdGhlIG9sZAorICAjIGJlaGF2aW9yIHJlZ2FyZGxlc3Mgb2YgWGNvZGUgdmVyc2lvbi4KKyAgaWYgKCRPcHRpb25ze092ZXJyaWRlQ29tcGlsZXJ9KSB7CisgICAgJG9sZEJlaGF2aW9yID0gMTsKKyAgfQorCisgIGlmICgkb2xkQmVoYXZpb3IgPT0gMCkgeworICAgIG15ICRPdXRwdXREaXIgPSAkRW52VmFycy0+eyJPVVRQVVRfRElSIn07CisgICAgbXkgJENMQU5HID0gJEVudlZhcnMtPnsiQ0xBTkcifTsKKyAgICBteSAkT3RoZXJGbGFncyA9ICRFbnZWYXJzLT57IkNDQ19BTkFMWVpFUl9BTkFMWVNJUyJ9OworICAgIHB1c2ggQCRBcmdzLAorICAgICAgICAiUlVOX0NMQU5HX1NUQVRJQ19BTkFMWVpFUj1ZRVMiLAorICAgICAgICAiQ0xBTkdfQU5BTFlaRVJfT1VUUFVUPXBsaXN0LWh0bWwiLAorICAgICAgICAiQ0xBTkdfQU5BTFlaRVJfRVhFQz0kQ0xBTkciLAorICAgICAgICAiQ0xBTkdfQU5BTFlaRVJfT1VUUFVUX0RJUj0kT3V0cHV0RGlyIiwKKyAgICAgICAgIkNMQU5HX0FOQUxZWkVSX09USEVSX0ZMQUdTPSRPdGhlckZsYWdzIjsKKworICAgIHJldHVybiAoc3lzdGVtKEAkQXJncykgPj4gOCk7CisgIH0KKworICAjIERlZmF1bHQgdG8gb2xkIGJlaGF2aW9yIHdoZXJlIHdlIGluc2VydCBhIGJvZ3VzIGNvbXBpbGVyLgorICBTZXRFbnYoJEVudlZhcnMpOworCisgICMgQ2hlY2sgaWYgdXNpbmcgaVBob25lIFNESyAzLjAgKHNpbXVsYXRvcikuICBJZiBzbyB0aGUgY29tcGlsZXIgYmVpbmcKKyAgIyB1c2VkIHNob3VsZCBiZSBnY2MtNC4yLgorICBpZiAoIWRlZmluZWQgJEVOVnsiQ0NDX0NDIn0pIHsKKyAgICBmb3IgKG15ICRpID0gMCA7ICRpIDwgc2NhbGFyKEAkQXJncyk7ICsrJGkpIHsKKyAgICAgIGlmICgkQXJncy0+WyRpXSBlcSAiLXNkayIgJiYgJGkgKyAxIDwgc2NhbGFyKEAkQXJncykpIHsKKyAgICAgICAgaWYgKEAkQXJnc1skaSsxXSA9fiAvXmlwaG9uZXNpbXVsYXRvcjMvKSB7CisgICAgICAgICAgJEVOVnsiQ0NDX0NDIn0gPSAiZ2NjLTQuMiI7CisgICAgICAgICAgJEVOVnsiQ0NDX0NYWCJ9ID0gImcrKy00LjIiOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgIyBEaXNhYmxlIFBDSCBmaWxlcyB1bnRpbCBjbGFuZyBzdXBwb3J0cyB0aGVtLgorICBBZGRJZk5vdFByZXNlbnQoJEFyZ3MsIkdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVI9Tk8iKTsKKworICAjIFdoZW4gJ0NDJyBpcyBzZXQsIHhjb2RlYnVpbGQgdXNlcyBpdCB0byBkbyBhbGwgbGlua2luZywgZXZlbiBpZiB3ZSBhcmUKKyAgIyBsaW5raW5nIEMrKyBvYmplY3QgZmlsZXMuICBTZXQgJ0xEUExVU1BMVVMnIHNvIHRoYXQgeGNvZGVidWlsZCB1c2VzICdnKysnCisgICMgKHZpYSBjKystYW5hbHl6ZXIpIHdoZW4gbGlua2luZyBzdWNoIGZpbGVzLgorICAkRU5WeyJMRFBMVVNQTFVTIn0gPSAkQ1hYQW5hbHl6ZXI7CisKKyAgcmV0dXJuIChzeXN0ZW0oQCRBcmdzKSA+PiA4KTsKK30KKworc3ViIFJ1bkJ1aWxkQ29tbWFuZCB7CisgIG15ICRBcmdzID0gc2hpZnQ7CisgIG15ICRJZ25vcmVFcnJvcnMgPSBzaGlmdDsKKyAgbXkgJENtZCA9ICRBcmdzLT5bMF07CisgIG15ICRDQ0FuYWx5emVyID0gc2hpZnQ7CisgIG15ICRDWFhBbmFseXplciA9IHNoaWZ0OworICBteSAkRW52VmFycyA9IHNoaWZ0OworCisgIGlmICgkQ21kID1+IC9cYnhjb2RlYnVpbGQkLykgeworICAgIHJldHVybiBSdW5YY29kZWJ1aWxkKCRBcmdzLCAkSWdub3JlRXJyb3JzLCAkQ0NBbmFseXplciwgJENYWEFuYWx5emVyLCAkRW52VmFycyk7CisgIH0KKworICAjIFNldHVwIHRoZSBlbnZpcm9ubWVudC4KKyAgU2V0RW52KCRFbnZWYXJzKTsKKworICBpZiAoJENtZCA9fiAvKC4qXC8/Z2NjW15cL10qJCkvIG9yCisgICAgICAkQ21kID1+IC8oLipcLz9jY1teXC9dKiQpLyBvcgorICAgICAgJENtZCA9fiAvKC4qXC8/bGx2bS1nY2NbXlwvXSokKS8gb3IKKyAgICAgICRDbWQgPX4gLyguKlwvP2NsYW5nJCkvIG9yCisgICAgICAkQ21kID1+IC8oLipcLz9jY2MtYW5hbHl6ZXJbXlwvXSokKS8pIHsKKworICAgIGlmICghKCRDbWQgPX4gL2NjYy1hbmFseXplci8pIGFuZCAhZGVmaW5lZCAkRU5WeyJDQ0NfQ0MifSkgeworICAgICAgJEVOVnsiQ0NDX0NDIn0gPSAkMTsKKyAgICB9CisKKyAgICBzaGlmdCBAJEFyZ3M7CisgICAgdW5zaGlmdCBAJEFyZ3MsICRDQ0FuYWx5emVyOworICB9CisgIGVsc2lmICgkQ21kID1+IC8oLipcLz9nXCtcK1teXC9dKiQpLyBvcgorICAgICAgICAkQ21kID1+IC8oLipcLz9jXCtcK1teXC9dKiQpLyBvcgorICAgICAgICAkQ21kID1+IC8oLipcLz9sbHZtLWdcK1wrW15cL10qJCkvIG9yCisgICAgICAgICRDbWQgPX4gLyguKlwvP2NsYW5nXCtcKyQpLyBvcgorICAgICAgICAkQ21kID1+IC8oLipcLz9jXCtcKy1hbmFseXplclteXC9dKiQpLykgeworICAgIGlmICghKCRDbWQgPX4gL2NcK1wrLWFuYWx5emVyLykgYW5kICFkZWZpbmVkICRFTlZ7IkNDQ19DWFgifSkgeworICAgICAgJEVOVnsiQ0NDX0NYWCJ9ID0gJDE7CisgICAgfQorICAgIHNoaWZ0IEAkQXJnczsKKyAgICB1bnNoaWZ0IEAkQXJncywgJENYWEFuYWx5emVyOworICB9CisgIGVsc2lmICgkQ21kIGVxICJtYWtlIiBvciAkQ21kIGVxICJnbWFrZSIgb3IgJENtZCBlcSAibWluZ3czMi1tYWtlIikgeworICAgIEFkZElmTm90UHJlc2VudCgkQXJncywgIkNDPSRDQ0FuYWx5emVyIik7CisgICAgQWRkSWZOb3RQcmVzZW50KCRBcmdzLCAiQ1hYPSRDWFhBbmFseXplciIpOworICAgIGlmICgkSWdub3JlRXJyb3JzKSB7CisgICAgICBBZGRJZk5vdFByZXNlbnQoJEFyZ3MsIi1rIik7CisgICAgICBBZGRJZk5vdFByZXNlbnQoJEFyZ3MsIi1pIik7CisgICAgfQorICB9CisKKyAgcmV0dXJuIChzeXN0ZW0oQCRBcmdzKSA+PiA4KTsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgRGlzcGxheUhlbHAgLSBVdGlsaXR5IGZ1bmN0aW9uIHRvIGRpc3BsYXkgYWxsIGhlbHAgb3B0aW9ucy4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBEaXNwbGF5SGVscCB7CisKKyAgbXkgJEFyZ0NsYW5nTm90Rm91bmRFcnJNc2cgPSBzaGlmdDsKK3ByaW50IDw8RU5EVEVYVDsKK1VTQUdFOiAkUHJvZyBbb3B0aW9uc10gPGJ1aWxkIGNvbW1hbmQ+IFtidWlsZCBvcHRpb25zXQorCitFTkRURVhUCisKKyAgaWYgKGRlZmluZWQgJEJ1aWxkTmFtZSkgeworICAgIHByaW50ICJBTkFMWVpFUiBCVUlMRDogJEJ1aWxkTmFtZSAoJEJ1aWxkRGF0ZSlcblxuIjsKKyAgfQorCitwcmludCA8PEVORFRFWFQ7CitPUFRJT05TOgorCisgLWFuYWx5emUtaGVhZGVycworCisgICBBbHNvIGFuYWx5emUgZnVuY3Rpb25zIGluICNpbmNsdWRlZCBmaWxlcy4gIEJ5IGRlZmF1bHQsIHN1Y2ggZnVuY3Rpb25zCisgICBhcmUgc2tpcHBlZCB1bmxlc3MgdGhleSBhcmUgY2FsbGVkIGJ5IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIG1haW4gc291cmNlIGZpbGUuCisKKyAtLWZvcmNlLWFuYWx5emUtZGVidWctY29kZQorCisgICBUZWxscyBhbmFseXplciB0byBlbmFibGUgYXNzZXJ0aW9ucyBpbiBjb2RlIGV2ZW4gaWYgdGhleSB3ZXJlIGRpc2FibGVkCisgICBkdXJpbmcgY29tcGlsYXRpb24gdG8gZW5hYmxlIG1vcmUgcHJlY2lzZSByZXN1bHRzLgorCisgLW8gPG91dHB1dCBsb2NhdGlvbj4KKworICAgU3BlY2lmaWVzIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciBhbmFseXplciByZXBvcnRzLiBTdWJkaXJlY3RvcmllcyB3aWxsIGJlCisgICBjcmVhdGVkIGFzIG5lZWRlZCB0byByZXByZXNlbnQgc2VwYXJhdGUgInJ1bnMiIG9mIHRoZSBhbmFseXplci4gSWYgdGhpcworICAgb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIGEgZGlyZWN0b3J5IGlzIGNyZWF0ZWQgaW4gL3RtcCAoVE1QRElSIG9uIE1hYyBPUyBYKQorICAgdG8gc3RvcmUgdGhlIHJlcG9ydHMuCisKKyAtaAorIC0taGVscAorCisgICBEaXNwbGF5IHRoaXMgbWVzc2FnZS4KKworIC1rCisgLS1rZWVwLWdvaW5nCisKKyAgIEFkZCBhICJrZWVwIG9uIGdvaW5nIiBvcHRpb24gdG8gdGhlIHNwZWNpZmllZCBidWlsZCBjb21tYW5kLiBUaGlzIG9wdGlvbgorICAgY3VycmVudGx5IHN1cHBvcnRzIG1ha2UgYW5kIHhjb2RlYnVpbGQuIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBvcHRpb247IG9uZQorICAgY2FuIHNwZWNpZnkgdGhpcyBiZWhhdmlvciBkaXJlY3RseSB1c2luZyBidWlsZCBvcHRpb25zLgorCisgLS1odG1sLXRpdGxlIFt0aXRsZV0KKyAtLWh0bWwtdGl0bGU9W3RpdGxlXQorCisgICBTcGVjaWZ5IHRoZSB0aXRsZSB1c2VkIG9uIGdlbmVyYXRlZCBIVE1MIHBhZ2VzLiBJZiBub3Qgc3BlY2lmaWVkLCBhIGRlZmF1bHQKKyAgIHRpdGxlIHdpbGwgYmUgdXNlZC4KKworIC0tc2hvdy1kZXNjcmlwdGlvbgorCisgICBEaXNwbGF5IHRoZSBkZXNjcmlwdGlvbiBvZiBkZWZlY3RzIGluIHRoZSBsaXN0CisKKyAtcGxpc3QKKworICAgQnkgZGVmYXVsdCB0aGUgb3V0cHV0IG9mIHNjYW4tYnVpbGQgaXMgYSBzZXQgb2YgSFRNTCBmaWxlcy4gVGhpcyBvcHRpb24KKyAgIG91dHB1dHMgdGhlIHJlc3VsdHMgYXMgYSBzZXQgb2YgLnBsaXN0IGZpbGVzLgorCisgLXBsaXN0LWh0bWwKKworICAgQnkgZGVmYXVsdCB0aGUgb3V0cHV0IG9mIHNjYW4tYnVpbGQgaXMgYSBzZXQgb2YgSFRNTCBmaWxlcy4gVGhpcyBvcHRpb24KKyAgIG91dHB1dHMgdGhlIHJlc3VsdHMgYXMgYSBzZXQgb2YgSFRNTCBhbmQgLnBsaXN0IGZpbGVzLgorCisgLS1zdGF0dXMtYnVncworCisgICBCeSBkZWZhdWx0LCB0aGUgZXhpdCBzdGF0dXMgb2Ygc2Nhbi1idWlsZCBpcyB0aGUgc2FtZSBhcyB0aGUgZXhlY3V0ZWQgYnVpbGQKKyAgIGNvbW1hbmQuIFNwZWNpZnlpbmcgdGhpcyBvcHRpb24gY2F1c2VzIHRoZSBleGl0IHN0YXR1cyBvZiBzY2FuLWJ1aWxkIHRvIGJlIDEKKyAgIGlmIGl0IGZvdW5kIHBvdGVudGlhbCBidWdzIGFuZCAwIG90aGVyd2lzZS4KKworIC0tdXNlLWNjIFtjb21waWxlciBwYXRoXQorIC0tdXNlLWNjPVtjb21waWxlciBwYXRoXQorCisgICBzY2FuLWJ1aWxkIGFuYWx5emVzIGEgcHJvamVjdCBieSBpbnRlcnBvc2luZyBhICJmYWtlIGNvbXBpbGVyIiwgd2hpY2gKKyAgIGV4ZWN1dGVzIGEgcmVhbCBjb21waWxlciBmb3IgY29tcGlsYXRpb24gYW5kIHRoZSBzdGF0aWMgYW5hbHl6ZXIgZm9yIGFuYWx5c2lzLgorICAgQmVjYXVzZSBvZiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBpbnRlcnBvc2l0aW9uLCBzY2FuLWJ1aWxkIGRvZXMgbm90CisgICBrbm93IHdoYXQgY29tcGlsZXIgeW91ciBwcm9qZWN0IG5vcm1hbGx5IHVzZXMuICBJbnN0ZWFkLCBpdCBzaW1wbHkgb3ZlcnJpZGVzCisgICB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUsIGFuZCBndWVzc2VzIHlvdXIgZGVmYXVsdCBjb21waWxlci4KKworICAgSW4gdGhlIGZ1dHVyZSwgdGhpcyBpbnRlcnBvc2l0aW9uIG1lY2hhbmlzbSB0byBiZSBpbXByb3ZlZCwgYnV0IGlmIHlvdSBuZWVkCisgICBzY2FuLWJ1aWxkIHRvIHVzZSBhIHNwZWNpZmljIGNvbXBpbGVyIGZvciAqY29tcGlsYXRpb24qIHRoZW4geW91IGNhbiB1c2UKKyAgIHRoaXMgb3B0aW9uIHRvIHNwZWNpZnkgYSBwYXRoIHRvIHRoYXQgY29tcGlsZXIuCisKKyAgIElmIHRoZSBnaXZlbiBjb21waWxlciBpcyBhIGNyb3NzIGNvbXBpbGVyLCB5b3UgbWF5IGFsc28gbmVlZCB0byBwcm92aWRlCisgICAtLWFuYWx5emVyLXRhcmdldCBvcHRpb24gdG8gcHJvcGVybHkgYW5hbHl6ZSB0aGUgc291cmNlIGNvZGUgYmVjYXVzZSBzdGF0aWMKKyAgIGFuYWx5emVyIHJ1bnMgYXMgaWYgdGhlIGNvZGUgaXMgY29tcGlsZWQgZm9yIHRoZSBob3N0IG1hY2hpbmUgYnkgZGVmYXVsdC4KKworIC0tdXNlLWMrKyBbY29tcGlsZXIgcGF0aF0KKyAtLXVzZS1jKys9W2NvbXBpbGVyIHBhdGhdCisKKyAgIFRoaXMgaXMgdGhlIHNhbWUgYXMgIi0tdXNlLWNjIiBidXQgZm9yIEMrKyBjb2RlLgorCisgLS1hbmFseXplci10YXJnZXQgW3RhcmdldCB0cmlwbGUgbmFtZSBmb3IgYW5hbHlzaXNdCisgLS1hbmFseXplci10YXJnZXQ9W3RhcmdldCB0cmlwbGUgbmFtZSBmb3IgYW5hbHlzaXNdCisKKyAgIFRoaXMgcHJvdmlkZXMgdGFyZ2V0IHRyaXBsZSBpbmZvcm1hdGlvbiB0byBjbGFuZyBzdGF0aWMgYW5hbHl6ZXIuCisgICBJdCBvbmx5IGNoYW5nZXMgdGhlIHRhcmdldCBmb3IgYW5hbHlzaXMgYnV0IGRvZXNuJ3QgY2hhbmdlIHRoZSB0YXJnZXQgb2YgYQorICAgcmVhbCBjb21waWxlciBnaXZlbiBieSAtLXVzZS1jYyBhbmQgLS11c2UtYysrIG9wdGlvbnMuCisKKyAtdgorCisgICBFbmFibGUgdmVyYm9zZSBvdXRwdXQgZnJvbSBzY2FuLWJ1aWxkLiBBIHNlY29uZCBhbmQgdGhpcmQgJy12JyBpbmNyZWFzZXMKKyAgIHZlcmJvc2l0eS4KKworIC1WCisgLS12aWV3CisKKyAgIFZpZXcgYW5hbHlzaXMgcmVzdWx0cyBpbiBhIHdlYiBicm93c2VyIHdoZW4gdGhlIGJ1aWxkIGNvbXBsZXRlcy4KKworQURWQU5DRUQgT1BUSU9OUzoKKworIC1uby1mYWlsdXJlLXJlcG9ydHMKKworICAgRG8gbm90IGNyZWF0ZSBhICdmYWlsdXJlcycgc3ViZGlyZWN0b3J5IHRoYXQgaW5jbHVkZXMgYW5hbHl6ZXIgY3Jhc2ggcmVwb3J0cworICAgYW5kIHByZXByb2Nlc3NlZCBzb3VyY2UgZmlsZXMuCisKKyAtc3RhdHMKKworICAgR2VuZXJhdGVzIHZpc2l0YXRpb24gc3RhdGlzdGljcyBmb3IgdGhlIHByb2plY3QgYmVpbmcgYW5hbHl6ZWQuCisKKyAtbWF4bG9vcCA8bG9vcCBjb3VudD4KKworICAgU3BlY2lmaXkgdGhlIG51bWJlciBvZiB0aW1lcyBhIGJsb2NrIGNhbiBiZSB2aXNpdGVkIGJlZm9yZSBnaXZpbmcgdXAuCisgICBEZWZhdWx0IGlzIDQuIEluY3JlYXNlIGZvciBtb3JlIGNvbXByZWhlbnNpdmUgY292ZXJhZ2UgYXQgYSBjb3N0IG9mIHNwZWVkLgorCisgLWludGVybmFsLXN0YXRzCisKKyAgIEdlbmVyYXRlIGludGVybmFsIGFuYWx5emVyIHN0YXRpc3RpY3MuCisKKyAtLXVzZS1hbmFseXplciBbWGNvZGV8cGF0aCB0byBjbGFuZ10KKyAtLXVzZS1hbmFseXplcj1bWGNvZGV8cGF0aCB0byBjbGFuZ10KKworICAgc2Nhbi1idWlsZCB1c2VzIHRoZSAnY2xhbmcnIGV4ZWN1dGFibGUgcmVsYXRpdmUgdG8gaXRzZWxmIGZvciBzdGF0aWMKKyAgIGFuYWx5c2lzLiBPbmUgY2FuIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3Igd2l0aCB0aGlzIG9wdGlvbiBieSB1c2luZyB0aGUKKyAgICdjbGFuZycgcGFja2FnZWQgd2l0aCBYY29kZSAob24gT1MgWCkgb3IgZnJvbSB0aGUgUEFUSC4KKworIC0ta2VlcC1lbXB0eQorCisgICBEb24ndCByZW1vdmUgdGhlIGJ1aWxkIHJlc3VsdHMgZGlyZWN0b3J5IGV2ZW4gaWYgbm8gaXNzdWVzIHdlcmUgcmVwb3J0ZWQuCisKKyAtLW92ZXJyaWRlLWNvbXBpbGVyCisgICBBbHdheXMgcmVzb3J0IHRvIHRoZSBjY2MtYW5hbHl6ZXIgZXZlbiB3aGVuIGJldHRlciBpbnRlcnBvc2l0aW9uIG1ldGhvZHMKKyAgIGFyZSBhdmFpbGFibGUuCisKKyAtYW5hbHl6ZXItY29uZmlnIDxvcHRpb25zPgorCisgICBQcm92aWRlIG9wdGlvbnMgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBhbmFseXplcidzIC1hbmFseXplci1jb25maWcgZmxhZy4KKyAgIFNldmVyYWwgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIHdpdGggY29tbWE6ICdrZXkxPXZhbDEsa2V5Mj12YWwyJworCisgICBBdmFpbGFibGUgb3B0aW9uczoKKyAgICAgKiBzdGFibGUtcmVwb3J0LWZpbGVuYW1lPXRydWUgb3IgZmFsc2UgKGRlZmF1bHQpCisgICAgICAgU3dpdGNoIHRoZSBwYWdlIG5hbWluZyB0bzoKKyAgICAgICByZXBvcnQtPGZpbGVuYW1lPi08ZnVuY3Rpb24vbWV0aG9kIG5hbWU+LTxpZD4uaHRtbAorICAgICAgIGluc3RlYWQgb2YgcmVwb3J0LVhYWFhYWC5odG1sCisKK0NPTlRST0xMSU5HIENIRUNLRVJTOgorCisgQSBkZWZhdWx0IGdyb3VwIG9mIGNoZWNrZXJzIGFyZSBhbHdheXMgcnVuIHVubGVzcyBleHBsaWNpdGx5IGRpc2FibGVkLgorIENoZWNrZXJzIG1heSBiZSBlbmFibGVkL2Rpc2FibGVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworIC1lbmFibGUtY2hlY2tlciBbY2hlY2tlciBuYW1lXQorIC1kaXNhYmxlLWNoZWNrZXIgW2NoZWNrZXIgbmFtZV0KKworTE9BRElORyBDSEVDS0VSUzoKKworIExvYWRpbmcgZXh0ZXJuYWwgY2hlY2tlcnMgdXNpbmcgdGhlIGNsYW5nIHBsdWdpbiBpbnRlcmZhY2U6CisKKyAtbG9hZC1wbHVnaW4gW3BsdWdpbiBsaWJyYXJ5XQorRU5EVEVYVAorCisgIGlmIChkZWZpbmVkICRDbGFuZyAmJiAteCAkQ2xhbmcpIHsKKyAgICAjIFF1ZXJ5IGNsYW5nIGZvciBsaXN0IG9mIGNoZWNrZXJzIHRoYXQgYXJlIGVuYWJsZWQuCisKKyAgICAjIGNyZWF0ZSBhIGxpc3QgdG8gbG9hZCB0aGUgcGx1Z2lucyB2aWEgdGhlICdYY2xhbmcnIGNvbW1hbmQgbGluZQorICAgICMgYXJndW1lbnQKKyAgICBteSBAUGx1Z2luTG9hZENvbW1hbmRsaW5lX3hjbGFuZzsKKyAgICBmb3JlYWNoIG15ICRwYXJhbSAoIEB7JE9wdGlvbnN7UGx1Z2luc1RvTG9hZH19ICkgeworICAgICAgcHVzaCAoIEBQbHVnaW5Mb2FkQ29tbWFuZGxpbmVfeGNsYW5nLCAiLVhjbGFuZyIgKTsKKyAgICAgIHB1c2ggKCBAUGx1Z2luTG9hZENvbW1hbmRsaW5lX3hjbGFuZywgIi1sb2FkIiApOworICAgICAgcHVzaCAoIEBQbHVnaW5Mb2FkQ29tbWFuZGxpbmVfeGNsYW5nLCAiLVhjbGFuZyIgKTsKKyAgICAgIHB1c2ggKCBAUGx1Z2luTG9hZENvbW1hbmRsaW5lX3hjbGFuZywgJHBhcmFtICk7CisgICAgfQorCisgICAgbXkgJUVuYWJsZWRDaGVja2VyczsKKyAgICBmb3JlYWNoIG15ICRsYW5nICgiYyIsICJvYmplY3RpdmUtYyIsICJvYmplY3RpdmUtYysrIiwgImMrKyIpIHsKKyAgICAgIG15ICRFeGVjTGluZSA9IGpvaW4oJyAnLCBxcS8iJENsYW5nIi8sIEBQbHVnaW5Mb2FkQ29tbWFuZGxpbmVfeGNsYW5nLCAiLS1hbmFseXplIiwgIi14IiwgJGxhbmcsICItIiwgIi0jIyMiLCAiMj4mMSIsICJ8Iik7CisgICAgICBvcGVuKFBTLCAkRXhlY0xpbmUpOworICAgICAgd2hpbGUgKDxQUz4pIHsKKyAgICAgICAgZm9yZWFjaCBteSAkdmFsIChzcGxpdCAvXHMrLykgeworICAgICAgICAgICR2YWwgPX4gcy9cIi8vZzsKKyAgICAgICAgICBpZiAoJHZhbCA9fiAvLWFuYWx5emVyLWNoZWNrZXJcPShbXlxzXSspLykgeworICAgICAgICAgICAgJEVuYWJsZWRDaGVja2Vyc3skMX0gPSAxOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgICMgUXVlcnkgY2xhbmcgZm9yIGNvbXBsZXRlIGxpc3Qgb2YgY2hlY2tlcnMuCisgICAgbXkgQFBsdWdpbkxvYWRDb21tYW5kbGluZTsKKyAgICBmb3JlYWNoIG15ICRwYXJhbSAoIEB7JE9wdGlvbnN7UGx1Z2luc1RvTG9hZH19ICkgeworICAgICAgcHVzaCAoIEBQbHVnaW5Mb2FkQ29tbWFuZGxpbmUsICItbG9hZCIgKTsKKyAgICAgIHB1c2ggKCBAUGx1Z2luTG9hZENvbW1hbmRsaW5lLCAkcGFyYW0gKTsKKyAgICB9CisKKyAgICBteSAkRXhlY0xpbmUgPSBqb2luKCcgJywgcXEvIiRDbGFuZyIvLCAiLWNjMSIsIEBQbHVnaW5Mb2FkQ29tbWFuZGxpbmUsICItYW5hbHl6ZXItY2hlY2tlci1oZWxwIiwgIjI+JjEiLCAifCIpOworICAgIG9wZW4oUFMsICRFeGVjTGluZSk7CisgICAgbXkgJGZvdW5kQ2hlY2tlcnMgPSAwOworICAgIHdoaWxlICg8UFM+KSB7CisgICAgICBpZiAoL0NIRUNLRVJTOi8pIHsKKyAgICAgICAgJGZvdW5kQ2hlY2tlcnMgPSAxOworICAgICAgICBsYXN0OworICAgICAgfQorICAgIH0KKyAgICBpZiAoISRmb3VuZENoZWNrZXJzKSB7CisgICAgICBwcmludCAiICAqKiogQ291bGQgbm90IHF1ZXJ5IENsYW5nIGZvciB0aGUgbGlzdCBvZiBhdmFpbGFibGUgY2hlY2tlcnMuIjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBwcmludCgiXG5BVkFJTEFCTEUgQ0hFQ0tFUlM6XG5cbiIpOworICAgICAgbXkgJHNraXAgPSAwOworICAgICAgIHdoaWxlKDxQUz4pIHsKKyAgICAgICAgaWYgKC9leHBlcmltZW50YWwvKSB7CisgICAgICAgICAgJHNraXAgPSAxOworICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCRza2lwKSB7CisgICAgICAgICAgbmV4dCBpZiAoIS9eXHNcc1teXHNdLyk7CisgICAgICAgICAgJHNraXAgPSAwOworICAgICAgICB9CisgICAgICAgIHMvXlxzXHMvLzsKKyAgICAgICAgaWYgKC9eKFteXHNdKykvKSB7CisgICAgICAgICAgIyBJcyB0aGUgY2hlY2tlciBlbmFibGVkPworICAgICAgICAgIG15ICRjaGVja2VyID0gJDE7CisgICAgICAgICAgbXkgJGVuYWJsZWQgPSAwOworICAgICAgICAgIG15ICRhZ2dyZWdhdGUgPSAiIjsKKyAgICAgICAgICBmb3JlYWNoIG15ICRkb21haW4gKHNwbGl0IC9cLi8sICRjaGVja2VyKSB7CisgICAgICAgICAgICAkYWdncmVnYXRlIC49ICRkb21haW47CisgICAgICAgICAgICBpZiAoJEVuYWJsZWRDaGVja2Vyc3skYWdncmVnYXRlfSkgeworICAgICAgICAgICAgICAkZW5hYmxlZCA9MTsKKyAgICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICMgYXBwZW5kIGEgZG90LCBpZiBhbiBhZGRpdGlvbmFsIGRvbWFpbiBpcyBhZGRlZCBpbiB0aGUgbmV4dCBpdGVyYXRpb24KKyAgICAgICAgICAgICRhZ2dyZWdhdGUgLj0gIi4iOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICgkZW5hYmxlZCkgeworICAgICAgICAgICAgcHJpbnQgIiArICI7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcHJpbnQgIiAgICI7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHByaW50ICIgICAiOworICAgICAgICB9CisgICAgICAgIHByaW50ICRfOworICAgICAgfQorICAgICAgcHJpbnQgIlxuTk9URTogXCIrXCIgaW5kaWNhdGVzIHRoYXQgYW4gYW5hbHlzaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0LlxuIjsKKyAgICB9CisgICAgY2xvc2UgUFM7CisgIH0KKyAgZWxzZSB7CisgICAgcHJpbnQgIiAgKioqIENvdWxkIG5vdCBxdWVyeSBDbGFuZyBmb3IgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNoZWNrZXJzLlxuIjsKKyAgICBpZiAoZGVmaW5lZCAgJEFyZ0NsYW5nTm90Rm91bmRFcnJNc2cpIHsKKyAgICAgIHByaW50ICIgICoqKiBSZWFzb246ICRBcmdDbGFuZ05vdEZvdW5kRXJyTXNnXG4iOworICAgIH0KKyAgfQorCitwcmludCA8PEVORFRFWFQKKworQlVJTEQgT1BUSU9OUworCisgWW91IGNhbiBzcGVjaWZ5IGFueSBidWlsZCBvcHRpb24gYWNjZXB0YWJsZSB0byB0aGUgYnVpbGQgY29tbWFuZC4KKworRVhBTVBMRQorCisgc2Nhbi1idWlsZCAtbyAvdG1wL215aHRtbGRpciBtYWtlIC1qNAorCitUaGUgYWJvdmUgZXhhbXBsZSBjYXVzZXMgYW5hbHlzaXMgcmVwb3J0cyB0byBiZSBkZXBvc2l0ZWQgaW50byBhIHN1YmRpcmVjdG9yeQorb2YgIi90bXAvbXlodG1sZGlyIiBhbmQgdG8gcnVuICJtYWtlIiB3aXRoIHRoZSAiLWo0IiBvcHRpb24uIEEgZGlmZmVyZW50CitzdWJkaXJlY3RvcnkgaXMgY3JlYXRlZCBlYWNoIHRpbWUgc2Nhbi1idWlsZCBhbmFseXplcyBhIHByb2plY3QuIFRoZSBhbmFseXplcgorc2hvdWxkIHN1cHBvcnQgbW9zdCBwYXJhbGxlbCBidWlsZHMsIGJ1dCBub3QgZGlzdHJpYnV0ZWQgYnVpbGRzLgorCitFTkRURVhUCit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIEh0bWxFc2NhcGUgLSBIVE1MIGVudGl0eSBlbmNvZGUgY2hhcmFjdGVycyB0aGF0IGFyZSBzcGVjaWFsIGluIEhUTUwKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBIdG1sRXNjYXBlIHsKKyAgIyBjb3B5IGFyZ3VtZW50IHRvIG5ldyB2YXJpYWJsZSBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBvcmlnaW5hbAorICBteSAkYXJnID0gc2hpZnQgfHwgJyc7CisgIG15ICR0bXAgPSAkYXJnOworICAkdG1wID1+IHMvJi8mYW1wOy9nOworICAkdG1wID1+IHMvPC8mbHQ7L2c7CisgICR0bXAgPX4gcy8+LyZndDsvZzsKKyAgcmV0dXJuICR0bXA7Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIFNoZWxsRXNjYXBlIC0gYmFja3NsYXNoIGVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIHNwZWNpYWwgdG8gdGhlIHNoZWxsCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitzdWIgU2hlbGxFc2NhcGUgeworICAjIGNvcHkgYXJndW1lbnQgdG8gbmV3IHZhcmlhYmxlIHNvIHdlIGRvbid0IGNsb2JiZXIgdGhlIG9yaWdpbmFsCisgIG15ICRhcmcgPSBzaGlmdCB8fCAnJzsKKyAgaWYgKCRhcmcgPX4gL1siXHNdLykgeyByZXR1cm4gIiciIC4gJGFyZyAuICInIjsgfQorICByZXR1cm4gJGFyZzsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgRmluZENsYW5nIC0gc2VhcmNoZXMgZm9yICdjbGFuZycgZXhlY3V0YWJsZS4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBGaW5kQ2xhbmcgeworICBpZiAoIWRlZmluZWQgJE9wdGlvbnN7QW5hbHl6ZXJEaXNjb3ZlcnlNZXRob2R9KSB7CisgICAgJENsYW5nID0gQ3dkOjpyZWFscGF0aCgiJFJlYWxCaW4vYmluL2NsYW5nIikgaWYgKC1mICIkUmVhbEJpbi9iaW4vY2xhbmciKTsKKyAgICBpZiAoIWRlZmluZWQgJENsYW5nIHx8ICEgLXggJENsYW5nKSB7CisgICAgICAkQ2xhbmcgPSBDd2Q6OnJlYWxwYXRoKCIkUmVhbEJpbi9jbGFuZyIpIGlmICgtZiAiJFJlYWxCaW4vY2xhbmciKTsKKyAgICB9CisgICAgaWYgKCFkZWZpbmVkICRDbGFuZyB8fCAhIC14ICRDbGFuZykgeworICAgICAgcmV0dXJuICJlcnJvcjogQ2Fubm90IGZpbmQgYW4gZXhlY3V0YWJsZSAnY2xhbmcnIHJlbGF0aXZlIHRvIiAuCisgICAgICAgICAgICAgIiBzY2FuLWJ1aWxkLiBDb25zaWRlciB1c2luZyAtLXVzZS1hbmFseXplciB0byBwaWNrIGEgdmVyc2lvbiBvZiIgLgorICAgICAgICAgICAgICIgJ2NsYW5nJyB0byB1c2UgZm9yIHN0YXRpYyBhbmFseXNpcy5cbiI7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIGlmICgkT3B0aW9uc3tBbmFseXplckRpc2NvdmVyeU1ldGhvZH0gPX4gL15bWHhdY29kZSQvKSB7CisgICAgICBteSAkeGNydW4gPSBgd2hpY2ggeGNydW5gOworICAgICAgY2hvbXAgJHhjcnVuOworICAgICAgaWYgKCR4Y3J1biBlcSAiIikgeworICAgICAgICByZXR1cm4gIkNhbm5vdCBmaW5kICd4Y3J1bicgdG8gZmluZCAnY2xhbmcnIGZvciBhbmFseXNpcy5cbiI7CisgICAgICB9CisgICAgICAkQ2xhbmcgPSBgJHhjcnVuIC10b29sY2hhaW4gWGNvZGVEZWZhdWx0IC1maW5kIGNsYW5nYDsKKyAgICAgIGNob21wICRDbGFuZzsKKyAgICAgIGlmICgkQ2xhbmcgZXEgIiIpIHsKKyAgICAgICAgcmV0dXJuICJObyAnY2xhbmcnIGV4ZWN1dGFibGUgZm91bmQgYnkgJ3hjcnVuJ1xuIjsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAkQ2xhbmcgPSAkT3B0aW9uc3tBbmFseXplckRpc2NvdmVyeU1ldGhvZH07CisgICAgICBpZiAoIWRlZmluZWQgJENsYW5nIG9yIG5vdCAteCAkQ2xhbmcpIHsKKyAgICAgICAgcmV0dXJuICJDYW5ub3QgZmluZCBhbiBleGVjdXRhYmxlIGNsYW5nIGF0ICckT3B0aW9uc3tBbmFseXplckRpc2NvdmVyeU1ldGhvZH0nXG4iOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gdW5kZWY7Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIFByb2Nlc3MgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK215ICRSZXF1ZXN0RGlzcGxheUhlbHAgPSAwOworbXkgJEZvcmNlRGlzcGxheUhlbHAgPSAwOworCitzdWIgUHJvY2Vzc0FyZ3MgeworICBteSAkQXJncyA9IHNoaWZ0OworICBteSAkTnVtQXJncyA9IDA7CisKKyAgd2hpbGUgKEAkQXJncykgeworCisgICAgJE51bUFyZ3MrKzsKKworICAgICMgU2NhbiBmb3Igb3B0aW9ucyB3ZSByZWNvZ25pemUuCisKKyAgICBteSAkYXJnID0gJEFyZ3MtPlswXTsKKworICAgIGlmICgkYXJnIGVxICItaCIgb3IgJGFyZyBlcSAiLS1oZWxwIikgeworICAgICAgJFJlcXVlc3REaXNwbGF5SGVscCA9IDE7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICctYW5hbHl6ZS1oZWFkZXJzJykgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7QW5hbHl6ZUhlYWRlcnN9ID0gMTsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKCRhcmcgZXEgIi1vIikgeworICAgICAgc2hpZnQgQCRBcmdzOworCisgICAgICBpZiAoIUAkQXJncykgeworICAgICAgICBEaWVEaWFnKCInLW8nIG9wdGlvbiByZXF1aXJlcyBhIHRhcmdldCBkaXJlY3RvcnkgbmFtZS5cbiIpOworICAgICAgfQorCisgICAgICAjIENvbnN0cnVjdCBhbiBhYnNvbHV0ZSBwYXRoLiAgVXNlcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorICAgICAgIyBhcyBhIGJhc2UgaWYgdGhlIG9yaWdpbmFsIHBhdGggd2FzIG5vdCBhYnNvbHV0ZS4KKyAgICAgIG15ICRPdXREaXIgPSBzaGlmdCBAJEFyZ3M7CisgICAgICBta3BhdGgoJE91dERpcikgdW5sZXNzICgtZSAkT3V0RGlyKTsgICMgYWJzX3BhdGggd2FudHMgZXhpc3RpbmcgZGlyCisgICAgICAkT3B0aW9uc3tPdXRwdXREaXJ9ID0gYWJzX3BhdGgoJE91dERpcik7CisKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKCRhcmcgPX4gL14tLWh0bWwtdGl0bGUoPSguKykpPyQvKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisKKyAgICAgIGlmICghZGVmaW5lZCAkMiB8fCAkMiBlcSAnJykgeworICAgICAgICBpZiAoIUAkQXJncykgeworICAgICAgICAgIERpZURpYWcoIictLWh0bWwtdGl0bGUnIG9wdGlvbiByZXF1aXJlcyBhIHN0cmluZy5cbiIpOworICAgICAgICB9CisKKyAgICAgICAgJE9wdGlvbnN7SHRtbFRpdGxlfSA9IHNoaWZ0IEAkQXJnczsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICRPcHRpb25ze0h0bWxUaXRsZX0gPSAkMjsKKyAgICAgIH0KKworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLWsiIG9yICRhcmcgZXEgIi0ta2VlcC1nb2luZyIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze0lnbm9yZUVycm9yc30gPSAxOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyA9fiAvXi0tdXNlLWNjKD0oLispKT8kLykgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgbXkgJGNjOworCisgICAgICBpZiAoIWRlZmluZWQgJDIgfHwgJDIgZXEgIiIpIHsKKyAgICAgICAgaWYgKCFAJEFyZ3MpIHsKKyAgICAgICAgICBEaWVEaWFnKCInLS11c2UtY2MnIG9wdGlvbiByZXF1aXJlcyBhIGNvbXBpbGVyIGV4ZWN1dGFibGUgbmFtZS5cbiIpOworICAgICAgICB9CisgICAgICAgICRjYyA9IHNoaWZ0IEAkQXJnczsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAkY2MgPSAkMjsKKyAgICAgIH0KKworICAgICAgJE9wdGlvbnN7VXNlQ0N9ID0gJGNjOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyA9fiAvXi0tdXNlLWNcK1wrKD0oLispKT8kLykgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgbXkgJGN4eDsKKworICAgICAgaWYgKCFkZWZpbmVkICQyIHx8ICQyIGVxICIiKSB7CisgICAgICAgIGlmICghQCRBcmdzKSB7CisgICAgICAgICAgRGllRGlhZygiJy0tdXNlLWMrKycgb3B0aW9uIHJlcXVpcmVzIGEgY29tcGlsZXIgZXhlY3V0YWJsZSBuYW1lLlxuIik7CisgICAgICAgIH0KKyAgICAgICAgJGN4eCA9IHNoaWZ0IEAkQXJnczsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAkY3h4ID0gJDI7CisgICAgICB9CisKKyAgICAgICRPcHRpb25ze1VzZUNYWH0gPSAkY3h4OworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyA9fiAvXi0tYW5hbHl6ZXItdGFyZ2V0KD0oLispKT8kLykgeworICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICBteSAkQW5hbHl6ZXJUYXJnZXQ7CisKKyAgICAgIGlmICghZGVmaW5lZCAkMiB8fCAkMiBlcSAiIikgeworICAgICAgICBpZiAoIUBBUkdWKSB7CisgICAgICAgICAgRGllRGlhZygiJy0tYW5hbHl6ZXItdGFyZ2V0JyBvcHRpb24gcmVxdWlyZXMgYSB0YXJnZXQgdHJpcGxlIG5hbWUuXG4iKTsKKyAgICAgICAgfQorICAgICAgICAkQW5hbHl6ZXJUYXJnZXQgPSBzaGlmdCBAQVJHVjsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAkQW5hbHl6ZXJUYXJnZXQgPSAkMjsKKyAgICAgIH0KKworICAgICAgJE9wdGlvbnN7QW5hbHl6ZXJUYXJnZXR9ID0gJEFuYWx5emVyVGFyZ2V0OworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLXYiKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICAkT3B0aW9uc3tWZXJib3NlfSsrOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLVYiIG9yICRhcmcgZXEgIi0tdmlldyIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze1ZpZXdSZXN1bHRzfSA9IDE7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItLXN0YXR1cy1idWdzIikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7RXhpdFN0YXR1c0ZvdW5kQnVnc30gPSAxOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLS1zaG93LWRlc2NyaXB0aW9uIikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7U2hvd0Rlc2NyaXB0aW9ufSA9IDE7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItc3RvcmUiKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICAkT3B0aW9uc3tTdG9yZU1vZGVsfSA9IHNoaWZ0IEAkQXJnczsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKCRhcmcgZXEgIi1jb25zdHJhaW50cyIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze0NvbnN0cmFpbnRzTW9kZWx9ID0gc2hpZnQgQCRBcmdzOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLWludGVybmFsLXN0YXRzIikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7SW50ZXJuYWxTdGF0c30gPSAxOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLXBsaXN0IikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7T3V0cHV0Rm9ybWF0fSA9ICJwbGlzdCI7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItcGxpc3QtaHRtbCIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze091dHB1dEZvcm1hdH0gPSAicGxpc3QtaHRtbCI7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItYW5hbHl6ZXItY29uZmlnIikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgcHVzaCBAeyRPcHRpb25ze0NvbmZpZ09wdGlvbnN9fSwgc2hpZnQgQCRBcmdzOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLW5vLWZhaWx1cmUtcmVwb3J0cyIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze1JlcG9ydEZhaWx1cmVzfSA9IDA7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItc3RhdHMiKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICAkT3B0aW9uc3tBbmFseXplclN0YXRzfSA9IDE7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItbWF4bG9vcCIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze01heExvb3B9ID0gc2hpZnQgQCRBcmdzOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLWVuYWJsZS1jaGVja2VyIikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgbXkgJENoZWNrZXIgPSBzaGlmdCBAJEFyZ3M7CisgICAgICAjIFN0b3JlICROdW1BcmdzIHRvIHByZXNlcnZlIHRoZSBvcmRlciB0aGUgY2hlY2tlcnMgd2VyZSBlbmFibGVkLgorICAgICAgJE9wdGlvbnN7RW5hYmxlQ2hlY2tlcnN9eyRDaGVja2VyfSA9ICROdW1BcmdzOworICAgICAgZGVsZXRlICRPcHRpb25ze0Rpc2FibGVDaGVja2Vyc317JENoZWNrZXJ9OworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLWRpc2FibGUtY2hlY2tlciIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgIG15ICRDaGVja2VyID0gc2hpZnQgQCRBcmdzOworICAgICAgIyBTdG9yZSAkTnVtQXJncyB0byBwcmVzZXJ2ZSB0aGUgb3JkZXIgdGhlIGNoZWNrZXJzIHdlcmUgZGlzYWJsZWQuCisgICAgICAkT3B0aW9uc3tEaXNhYmxlQ2hlY2tlcnN9eyRDaGVja2VyfSA9ICROdW1BcmdzOworICAgICAgZGVsZXRlICRPcHRpb25ze0VuYWJsZUNoZWNrZXJzfXskQ2hlY2tlcn07CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItbG9hZC1wbHVnaW4iKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICBwdXNoIEB7JE9wdGlvbnN7UGx1Z2luc1RvTG9hZH19LCBzaGlmdCBAJEFyZ3M7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItLXVzZS1hbmFseXplciIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze0FuYWx5emVyRGlzY292ZXJ5TWV0aG9kfSA9IHNoaWZ0IEAkQXJnczsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKCRhcmcgPX4gL14tLXVzZS1hbmFseXplcj0oLispJC8pIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze0FuYWx5emVyRGlzY292ZXJ5TWV0aG9kfSA9ICQxOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLS1rZWVwLWVtcHR5IikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7S2VlcEVtcHR5fSA9IDE7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItLW92ZXJyaWRlLWNvbXBpbGVyIikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7T3ZlcnJpZGVDb21waWxlcn0gPSAxOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLS1mb3JjZS1hbmFseXplLWRlYnVnLWNvZGUiKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICAkT3B0aW9uc3tGb3JjZUFuYWx5emVEZWJ1Z0NvZGV9ID0gMTsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgRGllRGlhZygidW5yZWNvZ25pemVkIG9wdGlvbiAnJGFyZydcbiIpIGlmICgkYXJnID1+IC9eLS8pOworCisgICAgJE51bUFyZ3MtLTsKKyAgICBsYXN0OworICB9CisgIHJldHVybiAkTnVtQXJnczsKK30KKworaWYgKCFAQVJHVikgeworICAkRm9yY2VEaXNwbGF5SGVscCA9IDEKK30KKworUHJvY2Vzc0FyZ3MoXEBBUkdWKTsKKyMgQWxsIGFyZ3VtZW50cyBhcmUgbm93IHNoaWZ0ZWQgZnJvbSBAQVJHVi4gVGhlIHJlc3QgaXMgYSBidWlsZCBjb21tYW5kLCBpZiBhbnkuCisKK2lmICghQEFSR1YgYW5kICEkUmVxdWVzdERpc3BsYXlIZWxwKSB7CisgIEVycm9yRGlhZygiTm8gYnVpbGQgY29tbWFuZCBzcGVjaWZpZWQuXG5cbiIpOworICAkRm9yY2VEaXNwbGF5SGVscCA9IDE7Cit9CisKK215ICRDbGFuZ05vdEZvdW5kRXJyTXNnID0gRmluZENsYW5nKCk7CisKK2lmICgkRm9yY2VEaXNwbGF5SGVscCB8fCAkUmVxdWVzdERpc3BsYXlIZWxwKSB7CisgIERpc3BsYXlIZWxwKCRDbGFuZ05vdEZvdW5kRXJyTXNnKTsKKyAgZXhpdCAkRm9yY2VEaXNwbGF5SGVscDsKK30KKworRGllRGlhZygkQ2xhbmdOb3RGb3VuZEVyck1zZykgaWYgKGRlZmluZWQgJENsYW5nTm90Rm91bmRFcnJNc2cpOworCiskQ2xhbmdDWFggPSAkQ2xhbmc7CitpZiAoJENsYW5nICF+IC9cK1wrKFwuZXhlKT8kLykgeworICAjIElmICRDbGFuZyBob2xkcyB0aGUgbmFtZSBvZiB0aGUgY2xhbmcrKyBleGVjdXRhYmxlIHRoZW4gd2UgbGVhdmUKKyAgIyAkQ2xhbmdDWFggYW5kICRDbGFuZyBlcXVhbCwgb3RoZXJ3aXNlIGNvbnN0cnVjdCB0aGUgbmFtZSBvZiB0aGUgY2xhbmcrKworICAjIGV4ZWN1dGFibGUgZnJvbSB0aGUgY2xhbmcgZXhlY3V0YWJsZSBuYW1lLgorCisgICMgRGV0ZXJtaW5lIG9wZXJhdGluZyBzeXN0ZW0gdW5kZXIgd2hpY2ggdGhpcyBjb3B5IG9mIFBlcmwgd2FzIGJ1aWx0LgorICBteSAkSXNXaW5CdWlsZCA9ICgkXk8gPX4vbXN5c3xjeWd3aW58TVNXaW4zMi8pOworICBpZigkSXNXaW5CdWlsZCkgeworICAgICRDbGFuZ0NYWCA9fiBzLy5leGUkLysrLmV4ZS87CisgIH0KKyAgZWxzZSB7CisgICAgJENsYW5nQ1hYID1+IHMvXC1cZCtcLlxkKyQvLzsKKyAgICAkQ2xhbmdDWFggLj0gIisrIjsKKyAgfQorfQorCisjIE1ha2Ugc3VyZSB0byB1c2UgIiIgdG8gaGFuZGxlIHBhdGhzIHdpdGggc3BhY2VzLgorJENsYW5nVmVyc2lvbiA9IEh0bWxFc2NhcGUoYCIkQ2xhbmciIC0tdmVyc2lvbmApOworCisjIERldGVybWluZSB3aGVyZSByZXN1bHRzIGdvLgorJENtZEFyZ3MgPSBIdG1sRXNjYXBlKGpvaW4oJyAnLCBtYXAoU2hlbGxFc2NhcGUoJF8pLCBAQVJHVikpKTsKKworIyBEZXRlcm1pbmUgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBIVE1MIHJlcG9ydHMuCitteSAkQmFzZURpciA9ICRPcHRpb25ze091dHB1dERpcn07CiskT3B0aW9uc3tPdXRwdXREaXJ9ID0gR2V0SFRNTFJ1bkRpcigkT3B0aW9uc3tPdXRwdXREaXJ9KTsKKworIyBEZXRlcm1pbmUgdGhlIGxvY2F0aW9uIG9mIGNjYy1hbmFseXplci4KK215ICRBYnNSZWFsQmluID0gQ3dkOjpyZWFscGF0aCgkUmVhbEJpbik7CitteSAkQ21kID0gIiRBYnNSZWFsQmluLy4uL2xpYmV4ZWMvY2NjLWFuYWx5emVyIjsKK215ICRDbWRDWFggPSAiJEFic1JlYWxCaW4vLi4vbGliZXhlYy9jKystYW5hbHl6ZXIiOworCisjIFBvcnRhYmlsaXR5OiB1c2UgbGVzcyBzdHJpY3QgYnV0IHBvcnRhYmxlIGNoZWNrIC1lIChmaWxlIGV4aXN0cykgaW5zdGVhZCBvZgorIyBub24tcG9ydGFibGUgLXggKGZpbGUgaXMgZXhlY3V0YWJsZSkuIE9uIHNvbWUgd2luZG93cyBwb3J0cyAteCBqdXN0IGNoZWNrcworIyBmaWxlIGV4dGVuc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBmaWxlIGlzIGV4ZWN1dGFibGUgKHNlZSBQZXJsIGxhbmd1YWdlCisjIHJlZmVyZW5jZSwgcGVybHBvcnQpCitpZiAoIWRlZmluZWQgJENtZCB8fCAhIC1lICRDbWQpIHsKKyAgJENtZCA9ICIkQWJzUmVhbEJpbi9jY2MtYW5hbHl6ZXIiOworICBEaWVEaWFnKCInY2NjLWFuYWx5emVyJyBkb2VzIG5vdCBleGlzdCBhdCAnJENtZCdcbiIpIGlmKCEgLWUgJENtZCk7Cit9CitpZiAoIWRlZmluZWQgJENtZENYWCB8fCAhIC1lICRDbWRDWFgpIHsKKyAgJENtZENYWCA9ICIkQWJzUmVhbEJpbi9jKystYW5hbHl6ZXIiOworICBEaWVEaWFnKCInYysrLWFuYWx5emVyJyBkb2VzIG5vdCBleGlzdCBhdCAnJENtZENYWCdcbiIpIGlmKCEgLWUgJENtZENYWCk7Cit9CisKK0RpYWcoIlVzaW5nICckQ2xhbmcnIGZvciBzdGF0aWMgYW5hbHlzaXNcbiIpOworCitTZXRIdG1sRW52KFxAQVJHViwgJE9wdGlvbnN7T3V0cHV0RGlyfSk7CisKK215IEBBbmFseXNlc1RvUnVuOworZm9yZWFjaCAoc29ydCB7ICRPcHRpb25ze0VuYWJsZUNoZWNrZXJzfXskYX0gPD0+ICRPcHRpb25ze0VuYWJsZUNoZWNrZXJzfXskYn0gfSAKKyAgICAgICAgIGtleXMgJXskT3B0aW9uc3tFbmFibGVDaGVja2Vyc319KSB7IAorICAjIFB1c2ggY2hlY2tlcnMgaW4gb3JkZXIgdGhleSB3ZXJlIGVuYWJsZWQuCisgIHB1c2ggQEFuYWx5c2VzVG9SdW4sICItYW5hbHl6ZXItY2hlY2tlciIsICRfOworfQorZm9yZWFjaCAoc29ydCB7ICRPcHRpb25ze0Rpc2FibGVDaGVja2Vyc317JGF9IDw9PiAkT3B0aW9uc3tEaXNhYmxlQ2hlY2tlcnN9eyRifSB9IAorICAgICAgICAga2V5cyAleyRPcHRpb25ze0Rpc2FibGVDaGVja2Vyc319KSB7IAorICAjIFB1c2ggY2hlY2tlcnMgaW4gb3JkZXIgdGhleSB3ZXJlIGRpc2FibGVkLgorICBwdXNoIEBBbmFseXNlc1RvUnVuLCAiLWFuYWx5emVyLWRpc2FibGUtY2hlY2tlciIsICRfOworfQoraWYgKCRPcHRpb25ze0FuYWx5emVIZWFkZXJzfSkgeyBwdXNoIEBBbmFseXNlc1RvUnVuLCAiLWFuYWx5emVyLW9wdC1hbmFseXplLWhlYWRlcnMiOyB9CitpZiAoJE9wdGlvbnN7QW5hbHl6ZXJTdGF0c30pIHsgcHVzaCBAQW5hbHlzZXNUb1J1biwgJy1hbmFseXplci1jaGVja2VyPWRlYnVnLlN0YXRzJzsgfQoraWYgKCRPcHRpb25ze01heExvb3B9ID4gMCkgeyBwdXNoIEBBbmFseXNlc1RvUnVuLCAiLWFuYWx5emVyLW1heC1sb29wICRPcHRpb25ze01heExvb3B9IjsgfQorCisjIERlbGF5IHNldHRpbmcgdXAgb3RoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIGNhc2Ugd2UgY2FuIGRvIHRydWUKKyMgaW50ZXJwb3NpdGlvbi4KK215ICRDQ0NfQU5BTFlaRVJfQU5BTFlTSVMgPSBqb2luICcgJywgQEFuYWx5c2VzVG9SdW47CitteSAkQ0NDX0FOQUxZWkVSX1BMVUdJTlMgPSBqb2luICcgJywgbWFwIHsgIi1sb2FkICIuJF8gfSBAeyRPcHRpb25ze1BsdWdpbnNUb0xvYWR9fTsKK215ICRDQ0NfQU5BTFlaRVJfQ09ORklHID0gam9pbiAnICcsIG1hcCB7ICItYW5hbHl6ZXItY29uZmlnICIuJF8gfSBAeyRPcHRpb25ze0NvbmZpZ09wdGlvbnN9fTsKK215ICVFbnZWYXJzID0gKAorICAnQ0MnID0+ICRDbWQsCisgICdDWFgnID0+ICRDbWRDWFgsCisgICdDTEFORycgPT4gJENsYW5nLAorICAnQ0xBTkdfQ1hYJyA9PiAkQ2xhbmdDWFgsCisgICdWRVJCT1NFJyA9PiAkT3B0aW9uc3tWZXJib3NlfSwKKyAgJ0NDQ19BTkFMWVpFUl9BTkFMWVNJUycgPT4gJENDQ19BTkFMWVpFUl9BTkFMWVNJUywKKyAgJ0NDQ19BTkFMWVpFUl9QTFVHSU5TJyA9PiAkQ0NDX0FOQUxZWkVSX1BMVUdJTlMsCisgICdDQ0NfQU5BTFlaRVJfQ09ORklHJyA9PiAkQ0NDX0FOQUxZWkVSX0NPTkZJRywKKyAgJ09VVFBVVF9ESVInID0+ICRPcHRpb25ze091dHB1dERpcn0sCisgICdDQ0NfQ0MnID0+ICRPcHRpb25ze1VzZUNDfSwKKyAgJ0NDQ19DWFgnID0+ICRPcHRpb25ze1VzZUNYWH0sCisgICdDQ0NfUkVQT1JUX0ZBSUxVUkVTJyA9PiAkT3B0aW9uc3tSZXBvcnRGYWlsdXJlc30sCisgICdDQ0NfQU5BTFlaRVJfU1RPUkVfTU9ERUwnID0+ICRPcHRpb25ze1N0b3JlTW9kZWx9LAorICAnQ0NDX0FOQUxZWkVSX0NPTlNUUkFJTlRTX01PREVMJyA9PiAkT3B0aW9uc3tDb25zdHJhaW50c01vZGVsfSwKKyAgJ0NDQ19BTkFMWVpFUl9JTlRFUk5BTF9TVEFUUycgPT4gJE9wdGlvbnN7SW50ZXJuYWxTdGF0c30sCisgICdDQ0NfQU5BTFlaRVJfT1VUUFVUX0ZPUk1BVCcgPT4gJE9wdGlvbnN7T3V0cHV0Rm9ybWF0fSwKKyAgJ0NMQU5HX0FOQUxZWkVSX1RBUkdFVCcgPT4gJE9wdGlvbnN7QW5hbHl6ZXJUYXJnZXR9LAorICAnQ0NDX0FOQUxZWkVSX0ZPUkNFX0FOQUxZWkVfREVCVUdfQ09ERScgPT4gJE9wdGlvbnN7Rm9yY2VBbmFseXplRGVidWdDb2RlfQorKTsKKworIyBSdW4gdGhlIGJ1aWxkLgorbXkgJEV4aXRTdGF0dXMgPSBSdW5CdWlsZENvbW1hbmQoXEBBUkdWLCAkT3B0aW9uc3tJZ25vcmVFcnJvcnN9LCAkQ21kLCAkQ21kQ1hYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJUVudlZhcnMpOworCitpZiAoZGVmaW5lZCAkT3B0aW9uc3tPdXRwdXRGb3JtYXR9KSB7CisgIGlmICgkT3B0aW9uc3tPdXRwdXRGb3JtYXR9ID1+IC9wbGlzdC8pIHsKKyAgICBEaWFnICJBbmFseXNpcyBydW4gY29tcGxldGUuXG4iOworICAgIERpYWcgIkFuYWx5c2lzIHJlc3VsdHMgKHBsaXN0IGZpbGVzKSBkZXBvc2l0ZWQgaW4gJyRPcHRpb25ze091dHB1dERpcn0nXG4iOworICB9CisgIGlmICgkT3B0aW9uc3tPdXRwdXRGb3JtYXR9ID1+IC9odG1sLykgeworICAgICMgUG9zdHByb2Nlc3MgdGhlIEhUTUwgZGlyZWN0b3J5LgorICAgIG15ICROdW1CdWdzID0gUG9zdHByb2Nlc3MoJE9wdGlvbnN7T3V0cHV0RGlyfSwgJEJhc2VEaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uc3tBbmFseXplclN0YXRzfSwgJE9wdGlvbnN7S2VlcEVtcHR5fSk7CisKKyAgICBpZiAoJE9wdGlvbnN7Vmlld1Jlc3VsdHN9IGFuZCAtciAiJE9wdGlvbnN7T3V0cHV0RGlyfS9pbmRleC5odG1sIikgeworICAgICAgRGlhZyAiQW5hbHlzaXMgcnVuIGNvbXBsZXRlLlxuIjsKKyAgICAgIERpYWcgIlZpZXdpbmcgYW5hbHlzaXMgcmVzdWx0cyBpbiAnJE9wdGlvbnN7T3V0cHV0RGlyfScgdXNpbmcgc2Nhbi12aWV3LlxuIjsKKyAgICAgIG15ICRTY2FuVmlldyA9IEN3ZDo6cmVhbHBhdGgoIiRSZWFsQmluL3NjYW4tdmlldyIpOworICAgICAgaWYgKCEgLXggJFNjYW5WaWV3KSB7ICRTY2FuVmlldyA9ICJzY2FuLXZpZXciOyB9CisgICAgICBpZiAoISAteCAkU2NhblZpZXcpIHsgJFNjYW5WaWV3ID0gQ3dkOjpyZWFscGF0aCgiJFJlYWxCaW4vLi4vLi4vc2Nhbi12aWV3L2Jpbi9zY2FuLXZpZXciKTsgfQorICAgICAgZXhlYyAkU2NhblZpZXcsICIkT3B0aW9uc3tPdXRwdXREaXJ9IjsKKyAgICB9CisKKyAgICBpZiAoJE9wdGlvbnN7RXhpdFN0YXR1c0ZvdW5kQnVnc30pIHsKKyAgICAgIGV4aXQgMSBpZiAoJE51bUJ1Z3MgPiAwKTsKKyAgICAgIGV4aXQgMDsKKyAgICB9CisgIH0KK30KKworZXhpdCAkRXhpdFN0YXR1czsKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvdG9vbHMvc2Nhbi1idWlsZC9iaW4vc2Nhbi1idWlsZC5iYXQgYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tYnVpbGQvYmluL3NjYW4tYnVpbGQuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YmU2NzQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tYnVpbGQvYmluL3NjYW4tYnVpbGQuYmF0CkBAIC0wLDAgKzEgQEAKK3BlcmwgLVMgc2Nhbi1idWlsZCAlKg0KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvdG9vbHMvc2Nhbi1idWlsZC9iaW4vc2V0LXhjb2RlLWFuYWx5emVyIGIvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLWJ1aWxkL2Jpbi9zZXQteGNvZGUtYW5hbHl6ZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGU2NzQ4MgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvdG9vbHMvc2Nhbi1idWlsZC9iaW4vc2V0LXhjb2RlLWFuYWx5emVyCkBAIC0wLDAgKzEsMTE0IEBACisjIS91c3IvYmluL3B5dGhvbgorCisjIFtQUiAxMTY2MV0gTm90ZSB0aGF0IHdlIGhhcmR3aXJlIHRvIC91c3IvYmluL3B5dGhvbiBiZWNhdXNlIHdlCisjIHdhbnQgdG8gdGhlIHVzZSB0aGUgc3lzdGVtIHZlcnNpb24gb2YgUHl0aG9uIG9uIE1hYyBPUyBYLgorIyBUaGlzIG9uZSBoYXMgdGhlIHNjcmlwdGluZyBicmlkZ2UgZW5hYmxlZC4KKworaW1wb3J0IHN5cworaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA3KToKKyAgICBwcmludCAic2V0LXhjb2RlLWFuYWx5emVyIHJlcXVpcmVzIFB5dGhvbiAyLjcgb3IgbGF0ZXIiCisgICAgc3lzLmV4aXQoMSkKKworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHJlCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdGF0Citmcm9tIEFwcEtpdCBpbXBvcnQgKgorCitkZWYgRmluZENsYW5nU3BlY3MocGF0aCk6CisgIHByaW50ICIoKykgU2VhcmNoaW5nIGZvciB4Y3NwZWMgZmlsZSBpbjogIiwgcGF0aAorICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKToKKyAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgIGlmIGYuZW5kc3dpdGgoIi54Y3NwZWMiKSBhbmQgZi5zdGFydHN3aXRoKCJDbGFuZyBMTFZNIik6CisgICAgICAgIHlpZWxkIG9zLnBhdGguam9pbihyb290LCBmKQorCitkZWYgTW9kaWZ5U3BlYyhwYXRoLCBpc0J1aWx0aW5BbmFseXplciwgcGF0aFRvQ2hlY2tlcik6CisgIHQgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGVsZXRlPUZhbHNlKQorICBmb3VuZEFuYWx5emVyID0gRmFsc2UKKyAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CisgICAgaWYgaXNCdWlsdGluQW5hbHl6ZXI6CisgICAgICAjIEZpcnN0IHNlYXJjaCBmb3IgQ0xBTkdfQU5BTFlaRVJfRVhFQy4gIE5ld2VyCisgICAgICAjIHZlcnNpb25zIG9mIFhjb2RlIHNldCBFWEVDX1BBVEggdG8gYmUgQ0xBTkdfQU5BTFlaRVJfRVhFQy4KKyAgICAgIHdpdGggb3BlbihwYXRoKSBhcyBmMjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZjI6CisgICAgICAgICAgaWYgbGluZS5maW5kKCJDTEFOR19BTkFMWVpFUl9FWEVDIikgPj0gMDoKKyAgICAgICAgICAgIHBhdGhUb0NoZWNrZXIgPSAiJChDTEFOR19BTkFMWVpFUl9FWEVDKSIKKyAgICAgICAgICAgIGJyZWFrCisgICAgIyBOb3cgY3JlYXRlIGEgbmV3IGZpbGUuCisgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgIGlmIG5vdCBmb3VuZEFuYWx5emVyOgorICAgICAgICBpZiBsaW5lLmZpbmQoIlN0YXRpYyBBbmFseXplciIpID49IDA6CisgICAgICAgICAgZm91bmRBbmFseXplciA9IFRydWUKKyAgICAgIGVsc2U6CisgICAgICAgIG0gPSByZS5zZWFyY2goJ14oXHMqRXhlY1BhdGhccyo9XHMqIiknLCBsaW5lKQorICAgICAgICBpZiBtOgorICAgICAgICAgIGxpbmUgPSAiIi5qb2luKFttLmdyb3VwKDApLCBwYXRoVG9DaGVja2VyLCAnIjtcbiddKQorICAgICAgICAgICMgRG8gbm90IG1vZGlmeSBmdXJ0aGVyIEV4ZWNQYXRoJ3MgbGF0ZXIgaW4gdGhlIHhjc3BlYy4KKyAgICAgICAgICBmb3VuZEFuYWx5emVyID0gRmFsc2UKKyAgICAgIHQud3JpdGUobGluZSkKKyAgdC5jbG9zZSgpCisgIHByaW50ICIoKykgcHJvY2Vzc2luZzoiLCBwYXRoCisgIHRyeToKKyAgICBzaHV0aWwuY29weSh0Lm5hbWUsIHBhdGgpCisgICAgb3MuY2htb2QocGF0aCwgc3RhdC5TX0lSVVNSIHwgc3RhdC5TX0lXVVNSIHwgc3RhdC5TX0lSR1JQIHwgc3RhdC5TX0lST1RIKQorICBleGNlcHQgSU9FcnJvciwgd2h5OgorICAgIHByaW50ICIgICAgKC0pIENhbm5vdCB1cGRhdGUgZmlsZToiLCB3aHksICJcbiIKKyAgZXhjZXB0IE9TRXJyb3IsIHdoeToKKyAgICBwcmludCAiICAgICgtKSBDYW5ub3QgdXBkYXRlIGZpbGU6Iiwgd2h5LCAiXG4iCisgIG9zLnVubGluayh0Lm5hbWUpCisKK2RlZiBtYWluKCk6CisgIGZyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorICBwYXJzZXIgPSBPcHRpb25QYXJzZXIoJ3VzYWdlOiAlcHJvZyBbb3B0aW9uc10nKQorICBwYXJzZXIuc2V0X2Rlc2NyaXB0aW9uKF9fZG9jX18pCisgIHBhcnNlci5hZGRfb3B0aW9uKCItLXVzZS1jaGVja2VyLWJ1aWxkIiwgZGVzdD0icGF0aCIsCisgICAgICAgICAgICAgICAgICAgIGhlbHA9IlVzZSB0aGUgQ2xhbmcgbG9jYXRlZCBhdCB0aGUgcHJvdmlkZWQgYWJzb2x1dGUgcGF0aCwgZS5nLiAvVXNlcnMvZm9vL2NoZWNrZXItMSIpCisgIHBhcnNlci5hZGRfb3B0aW9uKCItLXVzZS14Y29kZS1jbGFuZyIsIGFjdGlvbj0ic3RvcmVfY29uc3QiLAorICAgICAgICAgICAgICAgICAgICBjb25zdD0iJChDTEFORykiLCBkZXN0PSJkZWZhdWx0IiwKKyAgICAgICAgICAgICAgICAgICAgaGVscD0iVXNlIHRoZSBDbGFuZyBidW5kbGVkIHdpdGggWGNvZGUiKQorICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCisgIGlmIG9wdGlvbnMucGF0aCBpcyBOb25lIGFuZCBvcHRpb25zLmRlZmF1bHQgaXMgTm9uZToKKyAgICBwYXJzZXIuZXJyb3IoIllvdSBtdXN0IHNwZWNpZnkgYSB2ZXJzaW9uIG9mIENsYW5nIHRvIHVzZSBmb3Igc3RhdGljIGFuYWx5c2lzLiAgU3BlY2lmeSAnLWgnIGZvciBkZXRhaWxzIikKKworICAjIGRldGVybWluZSBpZiBYY29kZSBpcyBydW5uaW5nCisgIGZvciB4IGluIE5TV29ya3NwYWNlLnNoYXJlZFdvcmtzcGFjZSgpLnJ1bm5pbmdBcHBsaWNhdGlvbnMoKToKKyAgICBpZiB4LmxvY2FsaXplZE5hbWUoKS5maW5kKCJYY29kZSIpID49IDA6CisgICAgICBwcmludCAiKC0pIFlvdSBtdXN0IHF1aXQgWGNvZGUgZmlyc3QgYmVmb3JlIG1vZGlmeWluZyBpdHMgY29uZmlndXJhdGlvbiBmaWxlcy4iCisgICAgICBzeXMuZXhpdCgxKQorCisgIGlzQnVpbHRpbkFuYWx5emVyID0gRmFsc2UKKyAgaWYgb3B0aW9ucy5wYXRoOgorICAgICMgRXhwYW5kIHRpbGRlcy4KKyAgICBwYXRoID0gb3MucGF0aC5leHBhbmR1c2VyKG9wdGlvbnMucGF0aCkKKyAgICBpZiBub3QgcGF0aC5lbmRzd2l0aCgiY2xhbmciKToKKyAgICAgIHByaW50ICIoKykgVXNpbmcgQ2xhbmcgYnVuZGxlZCB3aXRoIGNoZWNrZXIgYnVpbGQ6IiwgcGF0aAorICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAiYmluIiwgImNsYW5nIik7CisgICAgZWxzZToKKyAgICAgIHByaW50ICIoKykgVXNpbmcgQ2xhbmcgbG9jYXRlZCBhdDoiLCBwYXRoCisgIGVsc2U6CisgICAgcHJpbnQgIigrKSBVc2luZyB0aGUgQ2xhbmcgYnVuZGxlZCB3aXRoIFhjb2RlIgorICAgIHBhdGggPSBvcHRpb25zLmRlZmF1bHQKKyAgICBpc0J1aWx0aW5BbmFseXplciA9IFRydWUKKworICB0cnk6CisgICAgeGNvZGVfcGF0aCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsieGNvZGUtc2VsZWN0IiwgIi1wcmludC1wYXRoIl0pCisgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAjIEZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBpbnN0YWxsIGxvY2F0aW9uIHdoZW4gdXNpbmcgUHl0aG9uIDwgMi43LjAKKyAgICB4Y29kZV9wYXRoID0gIi9EZXZlbG9wZXIiCisgIGlmICh4Y29kZV9wYXRoLmZpbmQoIi5hcHAvIikgIT0gLTEpOgorICAgICMgQ3V0IG9mZiB0aGUgJ0RldmVsb3BlcicgZGlyLCBhcyB0aGUgeGNzcGVjIGxpZXMgaW4gYW5vdGhlciBwYXJ0CisgICAgIyBvZiB0aGUgWGNvZGUuYXBwIHN1YnRyZWUuCisgICAgeGNvZGVfcGF0aCA9IHhjb2RlX3BhdGgucnNwbGl0KCcvRGV2ZWxvcGVyJywgMSlbMF0KKworICBmb3VuZFNwZWMgPSBGYWxzZQorICBmb3IgeCBpbiBGaW5kQ2xhbmdTcGVjcyh4Y29kZV9wYXRoKToKKyAgICBmb3VuZFNwZWMgPSBUcnVlCisgICAgTW9kaWZ5U3BlYyh4LCBpc0J1aWx0aW5BbmFseXplciwgcGF0aCkKKworICBpZiBmb3VuZFNwZWMgPT0gRmFsc2U6CisgICAgICBwcmludCAiKC0pIE5vIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gZmlsZSB3YXMgZm91bmQuICBYY29kZSdzIGFuYWx5emVyIGhhcyBub3QgYmVlbiB1cGRhdGVkLiIKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgbWFpbigpCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jKystYW5hbHl6ZXIgYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jKystYW5hbHl6ZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGRhNWRiOQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2MrKy1hbmFseXplcgpAQCAtMCwwICsxLDggQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKwordXNlIEN3ZCBxdy8gYWJzX3BhdGggLzsKK3VzZSBGaWxlOjpCYXNlbmFtZSBxdy8gZGlybmFtZSAvOworIyBBZGQgc2Nhbi1idWlsZCBkaXIgdG8gdGhlIGxpc3Qgb2YgcGxhY2VzIHdoZXJlIHBlcmwgbG9va3MgZm9yIG1vZHVsZXMuCit1c2UgbGliIGRpcm5hbWUoYWJzX3BhdGgoJDApKTsKKworZG8gJ2NjYy1hbmFseXplcic7CmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jKystYW5hbHl6ZXIuYmF0IGIvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLWJ1aWxkL2xpYmV4ZWMvYysrLWFuYWx5emVyLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWYwNDhhCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLWJ1aWxkL2xpYmV4ZWMvYysrLWFuYWx5emVyLmJhdApAQCAtMCwwICsxIEBACitwZXJsIC1TIGMrKy1hbmFseXplciAlKg0KZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2NjYy1hbmFseXplciBiL2NsYW5nLTM4NTk0MjQvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2NjYy1hbmFseXplcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZmRhMWQzCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLWJ1aWxkL2xpYmV4ZWMvY2NjLWFuYWx5emVyCkBAIC0wLDAgKzEsNzg1IEBACisjIS91c3IvYmluL2VudiBwZXJsCisjCisjICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKyMKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisjIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKyMKKyMjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMjCisjCisjICBBIHNjcmlwdCBkZXNpZ25lZCB0byBpbnRlcnBvc2UgYmV0d2VlbiB0aGUgYnVpbGQgc3lzdGVtIGFuZCBnY2MuICBJdCBpbnZva2VzCisjICBib3RoIGdjYyBhbmQgdGhlIHN0YXRpYyBhbmFseXplci4KKyMKKyMjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMjCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgRmluZEJpbjsKK3VzZSBDd2QgcXcvIGdldGN3ZCBhYnNfcGF0aCAvOwordXNlIEZpbGU6OlRlbXAgcXcvIHRlbXBmaWxlIC87Cit1c2UgRmlsZTo6UGF0aCBxdyAvIG1rcGF0aCAvOwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIFRleHQ6OlBhcnNlV29yZHM7CisKKyMjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMjCisjIExpc3QgZm9ybSAnc3lzdGVtJyB3aXRoIFNURE9VVCBhbmQgU1RERVJSIGNhcHR1cmVkLgorIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKKworc3ViIHNpbGVudF9zeXN0ZW0geworICBteSAkSHRtbERpciA9IHNoaWZ0OworICBteSAkQ29tbWFuZCA9IHNoaWZ0OworCisgICMgU2F2ZSBTVERPVVQgYW5kIFNUREVSUiBhbmQgcmVkaXJlY3QgdG8gYSB0ZW1wb3JhcnkgZmlsZS4KKyAgb3BlbiBPTERPVVQsICI+JiIsIFwqU1RET1VUOworICBvcGVuIE9MREVSUiwgIj4mIiwgXCpTVERFUlI7CisgIG15ICgkVG1wRkgsICRUbXBGaWxlKSA9IHRlbXBmaWxlKCJ0ZW1wX2J1Zl9YWFhYWFgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBESVIgPT4gJEh0bWxEaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOTElOSyA9PiAxKTsKKyAgb3BlbihTVERPVVQsICI+JFRtcEZpbGUiKTsKKyAgb3BlbihTVERFUlIsICI+JiIsIFwqU1RET1VUKTsKKworICAjIEludm9rZSAnc3lzdGVtJywgU1RET1VUIGFuZCBTVERFUlIgYXJlIG91dHB1dCB0byBhIHRlbXBvcmFyeSBmaWxlLgorICBzeXN0ZW0gJENvbW1hbmQsIEBfOworCisgICMgUmVzdG9yZSBTVERPVVQgYW5kIFNUREVSUi4KKyAgb3BlbiBTVERPVVQsICI+JiIsIFwqT0xET1VUOworICBvcGVuIFNUREVSUiwgIj4mIiwgXCpPTERFUlI7CisKKyAgcmV0dXJuICRUbXBGSDsKK30KKworIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKKyMgQ29tcGlsZXIgY29tbWFuZCBzZXR1cC4KKyMjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMjCisKKyMgU2VhcmNoIGluIHRoZSBQQVRIIGlmIHRoZSBjb21waWxlciBleGlzdHMKK3N1YiBTZWFyY2hJblBhdGggeworICAgIG15ICRmaWxlID0gc2hpZnQ7CisgICAgZm9yZWFjaCBteSAkZGlyIChzcGxpdCAoJzonLCAkRU5We1BBVEh9KSkgeworICAgICAgICBpZiAoLXggIiRkaXIvJGZpbGUiKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworbXkgJENvbXBpbGVyOworbXkgJENsYW5nOworbXkgJERlZmF1bHRDQ29tcGlsZXI7CitteSAkRGVmYXVsdENYWENvbXBpbGVyOworbXkgJElzQ1hYOworbXkgJEFuYWx5emVyVGFyZ2V0OworCisjIElmIG9uIE9TWCwgdXNlIHhjcnVuIHRvIGRldGVybWluZSB0aGUgU0RLIHJvb3QuCitteSAkVXNlWENSVU4gPSAwOworCitpZiAoYHVuYW1lIC1hYCA9fiBtL0Rhcndpbi8pIHsKKyAgJERlZmF1bHRDQ29tcGlsZXIgPSAnY2xhbmcnOworICAkRGVmYXVsdENYWENvbXBpbGVyID0gJ2NsYW5nKysnOworICAjIE9sZGVyIHZlcnNpb25zIG9mIE9TWCBkbyBub3QgaGF2ZSB4Y3J1biB0bworICAjIHF1ZXJ5IHRoZSBTREsgbG9jYXRpb24uCisgIGlmICgteCAiL3Vzci9iaW4veGNydW4iKSB7CisgICAgJFVzZVhDUlVOID0gMTsKKyAgfQorfSBlbHNlIHsKKyAgJERlZmF1bHRDQ29tcGlsZXIgPSAnZ2NjJzsKKyAgJERlZmF1bHRDWFhDb21waWxlciA9ICdnKysnOworfQorCitpZiAoJEZpbmRCaW46OlNjcmlwdCA9fiAvY1wrXCstYW5hbHl6ZXIvKSB7CisgICRDb21waWxlciA9ICRFTlZ7J0NDQ19DWFgnfTsKKyAgaWYgKCFkZWZpbmVkICRDb21waWxlciB8fCAoISAteCAkQ29tcGlsZXIgJiYgISBTZWFyY2hJblBhdGgoJENvbXBpbGVyKSkpIHsgJENvbXBpbGVyID0gJERlZmF1bHRDWFhDb21waWxlcjsgfQorCisgICRDbGFuZyA9ICRFTlZ7J0NMQU5HX0NYWCd9OworICBpZiAoIWRlZmluZWQgJENsYW5nIHx8ICEgLXggJENsYW5nKSB7ICRDbGFuZyA9ICdjbGFuZysrJzsgfQorCisgICRJc0NYWCA9IDEKK30KK2Vsc2UgeworICAkQ29tcGlsZXIgPSAkRU5WeydDQ0NfQ0MnfTsKKyAgaWYgKCFkZWZpbmVkICRDb21waWxlciB8fCAoISAteCAkQ29tcGlsZXIgJiYgISBTZWFyY2hJblBhdGgoJENvbXBpbGVyKSkpIHsgJENvbXBpbGVyID0gJERlZmF1bHRDQ29tcGlsZXI7IH0KKworICAkQ2xhbmcgPSAkRU5WeydDTEFORyd9OworICBpZiAoIWRlZmluZWQgJENsYW5nIHx8ICEgLXggJENsYW5nKSB7ICRDbGFuZyA9ICdjbGFuZyc7IH0KKworICAkSXNDWFggPSAwCit9CisKKyRBbmFseXplclRhcmdldCA9ICRFTlZ7J0NMQU5HX0FOQUxZWkVSX1RBUkdFVCd9OworCisjIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jIworIyBDbGVhbnVwLgorIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKKworbXkgJFJlcG9ydEZhaWx1cmVzID0gJEVOVnsnQ0NDX1JFUE9SVF9GQUlMVVJFUyd9OworaWYgKCFkZWZpbmVkICRSZXBvcnRGYWlsdXJlcykgeyAkUmVwb3J0RmFpbHVyZXMgPSAxOyB9CisKK215ICRDbGVhbnVwRmlsZTsKK215ICRSZXN1bHRGaWxlOworCisjIFJlbW92ZSBhbnkgc3RhbGUgZmlsZXMgYXQgZXhpdC4KK0VORCB7CisgIGlmIChkZWZpbmVkICRSZXN1bHRGaWxlICYmIC16ICRSZXN1bHRGaWxlKSB7CisgICAgdW5saW5rKCRSZXN1bHRGaWxlKTsKKyAgfQorICBpZiAoZGVmaW5lZCAkQ2xlYW51cEZpbGUpIHsKKyAgICB1bmxpbmsoJENsZWFudXBGaWxlKTsKKyAgfQorfQorCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyAgUHJvY2VzcyBDbGFuZyBDcmFzaGVzLgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworc3ViIEdldFBQRXh0IHsKKyAgbXkgJExhbmcgPSBzaGlmdDsKKyAgaWYgKCRMYW5nID1+IC9vYmplY3RpdmUtY1wrXCsvKSB7IHJldHVybiAiLm1paSIgfTsKKyAgaWYgKCRMYW5nID1+IC9vYmplY3RpdmUtYy8pIHsgcmV0dXJuICIubWkiOyB9CisgIGlmICgkTGFuZyA9fiAvY1wrXCsvKSB7IHJldHVybiAiLmlpIjsgfQorICByZXR1cm4gIi5pIjsKK30KKworIyBTZXQgdGhpcyB0byAxIGlmIHdlIHdhbnQgdG8gaW5jbHVkZSAncGFyc2VyIHJlamVjdHMnIGZpbGVzLgorbXkgJEluY2x1ZGVQYXJzZXJSZWplY3RzID0gMDsKK215ICRQYXJzZXJSZWplY3RzID0gIlBhcnNlciBSZWplY3RzIjsKK215ICRBdHRyaWJ1dGVJZ25vcmVkID0gIkF0dHJpYnV0ZSBJZ25vcmVkIjsKK215ICRPdGhlckVycm9yID0gIk90aGVyIEVycm9yIjsKKworc3ViIFByb2Nlc3NDbGFuZ0ZhaWx1cmUgeworICBteSAoJENsYW5nLCAkTGFuZywgJGZpbGUsICRBcmdzLCAkSHRtbERpciwgJEVycm9yVHlwZSwgJG9maWxlKSA9IEBfOworICBteSAkRGlyID0gIiRIdG1sRGlyL2ZhaWx1cmVzIjsKKyAgbWtwYXRoICREaXI7CisKKyAgbXkgJHByZWZpeCA9ICJjbGFuZ19jcmFzaCI7CisgIGlmICgkRXJyb3JUeXBlIGVxICRQYXJzZXJSZWplY3RzKSB7CisgICAgJHByZWZpeCA9ICJjbGFuZ19wYXJzZXJfcmVqZWN0cyI7CisgIH0KKyAgZWxzaWYgKCRFcnJvclR5cGUgZXEgJEF0dHJpYnV0ZUlnbm9yZWQpIHsKKyAgICAkcHJlZml4ID0gImNsYW5nX2F0dHJpYnV0ZV9pZ25vcmVkIjsKKyAgfQorICBlbHNpZiAoJEVycm9yVHlwZSBlcSAkT3RoZXJFcnJvcikgeworICAgICRwcmVmaXggPSAiY2xhbmdfb3RoZXJfZXJyb3IiOworICB9CisKKyAgIyBHZW5lcmF0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgd2l0aCBDbGFuZy4KKyAgbXkgKCRQUEgsICRQUEZpbGUpID0gdGVtcGZpbGUoICRwcmVmaXggLiAiX1hYWFhYWCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUZGSVggPT4gR2V0UFBFeHQoJExhbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElSID0+ICREaXIpOworICBjbG9zZSAoJFBQSCk7CisgIHN5c3RlbSAkQ2xhbmcsIEAkQXJncywgIi1FIiwgIi1vIiwgJFBQRmlsZTsKKworICAjIENyZWF0ZSB0aGUgaW5mbyBmaWxlLgorICBvcGVuIChPVVQsICI+IiwgIiRQUEZpbGUuaW5mby50eHQiKSBvciBkaWUgIkNhbm5vdCBvcGVuICRQUEZpbGUuaW5mby50eHRcbiI7CisgIHByaW50IE9VVCBhYnNfcGF0aCgkZmlsZSksICJcbiI7CisgIHByaW50IE9VVCAiJEVycm9yVHlwZVxuIjsKKyAgcHJpbnQgT1VUICJAJEFyZ3NcbiI7CisgIGNsb3NlIE9VVDsKKyAgYHVuYW1lIC1hID4+ICRQUEZpbGUuaW5mby50eHQgMj4mMWA7CisgIGAiJENvbXBpbGVyIiAtdiA+PiAkUFBGaWxlLmluZm8udHh0IDI+JjFgOworICByZW5hbWUoJG9maWxlLCAiJFBQRmlsZS5zdGRlcnIudHh0Iik7CisgIHJldHVybiAoYmFzZW5hbWUgJFBQRmlsZSk7Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjICBSdW5uaW5nIHRoZSBhbmFseXplci4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBHZXRDQ0FyZ3MgeworICBteSAkSHRtbERpciA9IHNoaWZ0OworICBteSAkbW9kZSA9IHNoaWZ0OworICBteSAkQXJncyA9IHNoaWZ0OworICBteSAkbGluZTsKKyAgbXkgJE91dHB1dFN0cmVhbSA9IHNpbGVudF9zeXN0ZW0oJEh0bWxEaXIsICRDbGFuZywgIi0jIyMiLCAkbW9kZSwgQCRBcmdzKTsKKyAgd2hpbGUgKDwkT3V0cHV0U3RyZWFtPikgeworICAgIG5leHQgaWYgKCEvXHMiPy1jYzEiP1xzLyk7CisgICAgJGxpbmUgPSAkXzsKKyAgfQorICBkaWUgImNvdWxkIG5vdCBmaW5kIGNsYW5nIGxpbmVcbiIgaWYgKCFkZWZpbmVkICRsaW5lKTsKKyAgIyBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuCisgICRsaW5lID1+IHMvXlxzK3xccyskLy9nOworICBteSBAaXRlbXMgPSBxdW90ZXdvcmRzKCdccysnLCAwLCAkbGluZSk7CisgIG15ICRjbWQgPSBzaGlmdCBAaXRlbXM7CisgIGRpZSAiY2Fubm90IGZpbmQgJ2NsYW5nJyBpbiAnY2xhbmcnIGNvbW1hbmRcbiIgaWYgKCEoJGNtZCA9fiAvY2xhbmcvKSk7CisgIHJldHVybiBcQGl0ZW1zOworfQorCitzdWIgQW5hbHl6ZSB7CisgIG15ICgkQ2xhbmcsICRPcmlnaW5hbEFyZ3MsICRBbmFseXplQXJncywgJExhbmcsICRPdXRwdXQsICRWZXJib3NlLCAkSHRtbERpciwKKyAgICAgICRmaWxlKSA9IEBfOworCisgIG15IEBBcmdzID0gQCRPcmlnaW5hbEFyZ3M7CisgIG15ICRDbWQ7CisgIG15IEBDbWRBcmdzOworICBteSBAQ21kQXJnc1NhbnNBbmFseXNlczsKKworICBpZiAoJExhbmcgPX4gL2hlYWRlci8pIHsKKyAgICBleGl0IDAgaWYgKCFkZWZpbmVkICgkT3V0cHV0KSk7CisgICAgJENtZCA9ICdjcCc7CisgICAgcHVzaCBAQ21kQXJncywgJGZpbGU7CisgICAgIyBSZW1vdmUgdGhlIFBDSCBleHRlbnNpb24uCisgICAgJE91dHB1dCA9fiBzL1suXWdjaCQvLzsKKyAgICBwdXNoIEBDbWRBcmdzLCAkT3V0cHV0OworICAgIEBDbWRBcmdzU2Fuc0FuYWx5c2VzID0gQENtZEFyZ3M7CisgIH0KKyAgZWxzZSB7CisgICAgJENtZCA9ICRDbGFuZzsKKworICAgICMgQ3JlYXRlIGFyZ3VtZW50cyBmb3IgZG9pbmcgcmVndWxhciBwYXJzaW5nLgorICAgIG15ICRTeW50YXhBcmdzID0gR2V0Q0NBcmdzKCRIdG1sRGlyLCAiLWZzeW50YXgtb25seSIsIFxAQXJncyk7CisgICAgQENtZEFyZ3NTYW5zQW5hbHlzZXMgPSBAJFN5bnRheEFyZ3M7CisKKyAgICAjIENyZWF0ZSBhcmd1bWVudHMgZm9yIGRvaW5nIHN0YXRpYyBhbmFseXNpcy4KKyAgICBpZiAoZGVmaW5lZCAkUmVzdWx0RmlsZSkgeworICAgICAgcHVzaCBAQXJncywgJy1vJywgJFJlc3VsdEZpbGU7CisgICAgfQorICAgIGVsc2lmIChkZWZpbmVkICRIdG1sRGlyKSB7CisgICAgICBwdXNoIEBBcmdzLCAnLW8nLCAkSHRtbERpcjsKKyAgICB9CisgICAgaWYgKCRWZXJib3NlKSB7CisgICAgICBwdXNoIEBBcmdzLCAiLVhjbGFuZyIsICItYW5hbHl6ZXItZGlzcGxheS1wcm9ncmVzcyI7CisgICAgfQorCisgICAgZm9yZWFjaCBteSAkYXJnIChAJEFuYWx5emVBcmdzKSB7CisgICAgICBwdXNoIEBBcmdzLCAiLVhjbGFuZyIsICRhcmc7CisgICAgfQorCisgICAgIyBEaXNwbGF5IFViaXZpeiBncmFwaD8KKyAgICBpZiAoZGVmaW5lZCAkRU5WeydDQ0NfVUJJJ30pIHsKKyAgICAgIHB1c2ggQEFyZ3MsICItWGNsYW5nIiwgIi1hbmFseXplci12aXotZWdyYXBoLXViaWdyYXBoIjsKKyAgICB9CisKKyAgICBpZiAoZGVmaW5lZCAkQW5hbHl6ZXJUYXJnZXQpIHsKKyAgICAgIHB1c2ggQEFyZ3MsICItdGFyZ2V0IiwgJEFuYWx5emVyVGFyZ2V0OworICAgIH0KKworICAgIG15ICRBbmFseXNpc0FyZ3MgPSBHZXRDQ0FyZ3MoJEh0bWxEaXIsICItLWFuYWx5emUiLCBcQEFyZ3MpOworICAgIEBDbWRBcmdzID0gQCRBbmFseXNpc0FyZ3M7CisgIH0KKworICBteSBAUHJpbnRBcmdzOworICBteSAkZGlyOworCisgIGlmICgkVmVyYm9zZSkgeworICAgICRkaXIgPSBnZXRjd2QoKTsKKyAgICBwcmludCBTVERFUlIgIlxuW0xPQ0FUSU9OXTogJGRpclxuIjsKKyAgICBwdXNoIEBQcmludEFyZ3MsIickQ21kJyI7CisgICAgZm9yZWFjaCBteSAkYXJnIChAQ21kQXJncykgeworICAgICAgICBwdXNoIEBQcmludEFyZ3MsIlwnJGFyZ1wnIjsKKyAgICB9CisgIH0KKyAgaWYgKCRWZXJib3NlID09IDEpIHsKKyAgICAjIFdlIE1VU1QgcHJpbnQgdG8gc3RkZXJyLiAgU29tZSBjbGllbnRzIHVzZSB0aGUgc3Rkb3V0IG91dHB1dCBvZgorICAgICMgZ2NjIGZvciB2YXJpb3VzIHB1cnBvc2VzLgorICAgIHByaW50IFNUREVSUiBqb2luKCcgJywgQFByaW50QXJncyk7CisgICAgcHJpbnQgU1RERVJSICJcbiI7CisgIH0KKyAgZWxzaWYgKCRWZXJib3NlID09IDIpIHsKKyAgICBwcmludCBTVERFUlIgIiNTSEVMTCAoY2QgJyRkaXInICYmIEBQcmludEFyZ3MpXG4iOworICB9CisKKyAgIyBTYXZlIFNURE9VVCBhbmQgU1RERVJSIG9mIGNsYW5nIHRvIGEgdGVtcG9yYXJ5IGZpbGUgYW5kIHJlcm91dGUKKyAgIyBhbGwgY2xhbmcgb3V0cHV0IHRvIGNjYy1hbmFseXplcidzIFNUREVSUi4KKyAgIyBXZSBzYXZlIHRoZSBvdXRwdXQgZmlsZSBpbiB0aGUgJ2NyYXNoZXMnIGRpcmVjdG9yeSBpZiBjbGFuZyBlbmNvdW50ZXJzCisgICMgYW55IHByb2JsZW1zIHdpdGggdGhlIGZpbGUuCisgIG15ICgkb2ZoLCAkb2ZpbGUpID0gdGVtcGZpbGUoImNsYW5nX291dHB1dF9YWFhYWFgiLCBESVIgPT4gJEh0bWxEaXIpOworCisgIG15ICRPdXRwdXRTdHJlYW0gPSBzaWxlbnRfc3lzdGVtKCRIdG1sRGlyLCAkQ21kLCBAQ21kQXJncyk7CisgIHdoaWxlICggPCRPdXRwdXRTdHJlYW0+ICkgeworICAgIHByaW50ICRvZmggJF87CisgICAgcHJpbnQgU1RERVJSICRfOworICB9CisgIG15ICRSZXN1bHQgPSAkPzsKKyAgY2xvc2UgJG9maDsKKworICAjIERpZCB0aGUgY29tbWFuZCBkaWUgYmVjYXVzZSBvZiBhIHNpZ25hbD8KKyAgaWYgKCRSZXBvcnRGYWlsdXJlcykgeworICAgIGlmICgkUmVzdWx0ICYgMTI3IGFuZCAkQ21kIGVxICRDbGFuZyBhbmQgZGVmaW5lZCAkSHRtbERpcikgeworICAgICAgUHJvY2Vzc0NsYW5nRmFpbHVyZSgkQ2xhbmcsICRMYW5nLCAkZmlsZSwgXEBDbWRBcmdzU2Fuc0FuYWx5c2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAkSHRtbERpciwgIkNyYXNoIiwgJG9maWxlKTsKKyAgICB9CisgICAgZWxzaWYgKCRSZXN1bHQpIHsKKyAgICAgIGlmICgkSW5jbHVkZVBhcnNlclJlamVjdHMgJiYgISgkZmlsZSA9fi9jb25mdGVzdC8pKSB7CisgICAgICAgIFByb2Nlc3NDbGFuZ0ZhaWx1cmUoJENsYW5nLCAkTGFuZywgJGZpbGUsIFxAQ21kQXJnc1NhbnNBbmFseXNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSHRtbERpciwgJFBhcnNlclJlamVjdHMsICRvZmlsZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBQcm9jZXNzQ2xhbmdGYWlsdXJlKCRDbGFuZywgJExhbmcsICRmaWxlLCBcQENtZEFyZ3NTYW5zQW5hbHlzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEh0bWxEaXIsICRPdGhlckVycm9yLCAkb2ZpbGUpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICMgQ2hlY2sgaWYgdGhlcmUgd2VyZSBhbnkgdW5oYW5kbGVkIGF0dHJpYnV0ZXMuCisgICAgICBpZiAob3BlbihDSElMRCwgJG9maWxlKSkgeworICAgICAgICBteSAlYXR0cmlidXRlc19ub3RfaGFuZGxlZDsKKworICAgICAgICAjIERvbid0IGZsYWcgd2FybmluZ3MgYWJvdXQgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIHRoYXQgd2UKKyAgICAgICAgIyBrbm93IGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBieSBDbGFuZy4KKyAgICAgICAgJGF0dHJpYnV0ZXNfbm90X2hhbmRsZWR7ImNkZWNsIn0gPSAxOworCisgICAgICAgIG15ICRwcGZpbGU7CisgICAgICAgIHdoaWxlICg8Q0hJTEQ+KSB7CisgICAgICAgICAgbmV4dCBpZiAoISAvd2FybmluZzogJyhbXlwnXSspJyBhdHRyaWJ1dGUgaWdub3JlZC8pOworCisgICAgICAgICAgIyBIYXZlIHdlIGFscmVhZHkgc3BvdHRlZCB0aGlzIHVuaGFuZGxlZCBhdHRyaWJ1dGU/CisgICAgICAgICAgbmV4dCBpZiAoZGVmaW5lZCAkYXR0cmlidXRlc19ub3RfaGFuZGxlZHskMX0pOworICAgICAgICAgICRhdHRyaWJ1dGVzX25vdF9oYW5kbGVkeyQxfSA9IDE7CisKKyAgICAgICAgICAjIEdldCB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIGZpbGUuCisgICAgICAgICAgbXkgJGRpciA9ICIkSHRtbERpci9mYWlsdXJlcyI7CisgICAgICAgICAgbXkgJGFmaWxlID0gIiRkaXIvYXR0cmlidXRlX2lnbm9yZWRfJDEudHh0IjsKKworICAgICAgICAgICMgT25seSBjcmVhdGUgYW5vdGhlciBwcmVwcm9jZXNzZWQgZmlsZSBpZiB0aGUgYXR0cmlidXRlIGZpbGUKKyAgICAgICAgICAjIGRvZXNuJ3QgZXhpc3QgeWV0LgorICAgICAgICAgIG5leHQgaWYgKC1lICRhZmlsZSk7CisKKyAgICAgICAgICAjIEFkZCB0aGlzIGZpbGUgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBjb250YWluZWQgdGhpcyBhdHRyaWJ1dGUuCisgICAgICAgICAgIyBHZW5lcmF0ZSBhIHByZXByb2Nlc3NlZCBmaWxlIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeS4KKyAgICAgICAgICBpZiAoIShkZWZpbmVkICRwcGZpbGUpKSB7CisgICAgICAgICAgICAkcHBmaWxlID0gUHJvY2Vzc0NsYW5nRmFpbHVyZSgkQ2xhbmcsICRMYW5nLCAkZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxAQ21kQXJnc1NhbnNBbmFseXNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRIdG1sRGlyLCAkQXR0cmlidXRlSWdub3JlZCwgJG9maWxlKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBta3BhdGggJGRpcjsKKyAgICAgICAgICBvcGVuKEFGSUxFLCAiPiRhZmlsZSIpOworICAgICAgICAgIHByaW50IEFGSUxFICIkcHBmaWxlXG4iOworICAgICAgICAgIGNsb3NlKEFGSUxFKTsKKyAgICAgICAgfQorICAgICAgICBjbG9zZSBDSElMRDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICB1bmxpbmsoJG9maWxlKTsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgIExvb2t1cCB0YWJsZXMuCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitteSAlQ29tcGlsZU9wdGlvbk1hcCA9ICgKKyAgJy1ub3N0ZGluYycgPT4gMCwKKyAgJy1pbmNsdWRlJyA9PiAxLAorICAnLWlkaXJhZnRlcicgPT4gMSwKKyAgJy1pbWFjcm9zJyA9PiAxLAorICAnLWlwcmVmaXgnID0+IDEsCisgICctaXF1b3RlJyA9PiAxLAorICAnLWl3aXRocHJlZml4JyA9PiAxLAorICAnLWl3aXRocHJlZml4YmVmb3JlJyA9PiAxCispOworCitteSAlTGlua2VyT3B0aW9uTWFwID0gKAorICAnLWZyYW1ld29yaycgPT4gMSwKKyAgJy1mb2JqYy1saW5rLXJ1bnRpbWUnID0+IDAKKyk7CisKK215ICVDb21waWxlckxpbmtlck9wdGlvbk1hcCA9ICgKKyAgJy1Xd3JpdGUtc3RyaW5ncycgPT4gMCwKKyAgJy1mdHJhcHYtaGFuZGxlcicgPT4gMSwgIyBzcGVjaWZpY2FsbHkgY2FsbCBvdXQgc2VwYXJhdGVkIC1mIGZsYWcKKyAgJy1taW9zLXNpbXVsYXRvci12ZXJzaW9uLW1pbicgPT4gMCwgIyBUaGlzIHJlYWxseSBoYXMgMSBhcmd1bWVudCwgYnV0IGFsd2F5cyBoYXMgJz0nCisgICctaXN5c3Jvb3QnID0+IDEsCisgICctYXJjaCcgPT4gMSwKKyAgJy1tMzInID0+IDAsCisgICctbTY0JyA9PiAwLAorICAnLXN0ZGxpYicgPT4gMCwgIyBUaGlzIGlzIHJlYWxseSBhIDEgYXJndW1lbnQsIGJ1dCBhbHdheXMgaGFzICc9JworICAnLS1zeXNyb290JyA9PiAxLAorICAnLXRhcmdldCcgPT4gMSwKKyAgJy12JyA9PiAwLAorICAnLW1tYWNvc3gtdmVyc2lvbi1taW4nID0+IDAsICMgVGhpcyBpcyByZWFsbHkgYSAxIGFyZ3VtZW50LCBidXQgYWx3YXlzIGhhcyAnPScKKyAgJy1taXBob25lb3MtdmVyc2lvbi1taW4nID0+IDAgIyBUaGlzIGlzIHJlYWxseSBhIDEgYXJndW1lbnQsIGJ1dCBhbHdheXMgaGFzICc9JworKTsKKworbXkgJUlnbm9yZWRPcHRpb25NYXAgPSAoCisgICctTVQnID0+IDEsICAjIElnbm9yZSB0aGVzZSBwcmVwcm9jZXNzb3Igb3B0aW9ucy4KKyAgJy1NRicgPT4gMSwKKworICAnLWZzeW50YXgtb25seScgPT4gMCwKKyAgJy1zYXZlLXRlbXBzJyA9PiAwLAorICAnLWluc3RhbGxfbmFtZScgPT4gMSwKKyAgJy1leHBvcnRlZF9zeW1ib2xzX2xpc3QnID0+IDEsCisgICctY3VycmVudF92ZXJzaW9uJyA9PiAxLAorICAnLWNvbXBhdGliaWxpdHlfdmVyc2lvbicgPT4gMSwKKyAgJy1pbml0JyA9PiAxLAorICAnLWUnID0+IDEsCisgICctc2VnMWFkZHInID0+IDEsCisgICctYnVuZGxlX2xvYWRlcicgPT4gMSwKKyAgJy1tdWx0aXBseV9kZWZpbmVkJyA9PiAxLAorICAnLXNlY3RvcmRlcicgPT4gMywKKyAgJy0tcGFyYW0nID0+IDEsCisgICctdScgPT4gMSwKKyAgJy0tc2VyaWFsaXplLWRpYWdub3N0aWNzJyA9PiAxCispOworCitteSAlTGFuZ01hcCA9ICgKKyAgJ2MnICAgPT4gJElzQ1hYID8gJ2MrKycgOiAnYycsCisgICdjcCcgID0+ICdjKysnLAorICAnY3BwJyA9PiAnYysrJywKKyAgJ2N4eCcgPT4gJ2MrKycsCisgICd0eHgnID0+ICdjKysnLAorICAnY2MnICA9PiAnYysrJywKKyAgJ0MnICAgPT4gJ2MrKycsCisgICdpaScgID0+ICdjKystY3BwLW91dHB1dCcsCisgICdpJyAgID0+ICRJc0NYWCA/ICdjKystY3BwLW91dHB1dCcgOiAnYy1jcHAtb3V0cHV0JywKKyAgJ20nICAgPT4gJ29iamVjdGl2ZS1jJywKKyAgJ21pJyAgPT4gJ29iamVjdGl2ZS1jLWNwcC1vdXRwdXQnLAorICAnbW0nICA9PiAnb2JqZWN0aXZlLWMrKycsCisgICdtaWknID0+ICdvYmplY3RpdmUtYysrLWNwcC1vdXRwdXQnLAorKTsKKworbXkgJVVuaXF1ZU9wdGlvbnMgPSAoCisgICctaXN5c3Jvb3QnID0+IDAKKyk7CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIExhbmd1YWdlcyBhY2NlcHRlZC4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK215ICVMYW5nc0FjY2VwdGVkID0gKAorICAib2JqZWN0aXZlLWMiID0+IDEsCisgICJjIiA9PiAxLAorICAiYysrIiA9PiAxLAorICAib2JqZWN0aXZlLWMrKyIgPT4gMSwKKyAgImMtY3BwLW91dHB1dCIgPT4gMSwKKyAgIm9iamVjdGl2ZS1jLWNwcC1vdXRwdXQiID0+IDEsCisgICJjKystY3BwLW91dHB1dCIgPT4gMQorKTsKKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgIE1haW4gTG9naWMuCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitteSAkQWN0aW9uID0gJ2xpbmsnOworbXkgQENvbXBpbGVPcHRzOworbXkgQExpbmtPcHRzOworbXkgQEZpbGVzOworbXkgJExhbmc7CitteSAkT3V0cHV0OworbXkgJVVuaXF1ZWQ7CisKKyMgRm9yd2FyZCBhcmd1bWVudHMgdG8gZ2NjLgorbXkgJFN0YXR1cyA9IHN5c3RlbSgkQ29tcGlsZXIsQEFSR1YpOworaWYgKGRlZmluZWQgJEVOVnsnQ0NDX0FOQUxZWkVSX0xPRyd9KSB7CisgIHByaW50IFNUREVSUiAiJENvbXBpbGVyIEBBUkdWXG4iOworfQoraWYgKCRTdGF0dXMpIHsgZXhpdCgkU3RhdHVzID4+IDgpOyB9CisKKyMgR2V0IHRoZSBhbmFseXNpcyBvcHRpb25zLgorbXkgJEFuYWx5c2VzID0gJEVOVnsnQ0NDX0FOQUxZWkVSX0FOQUxZU0lTJ307CisKKyMgR2V0IHRoZSBwbHVnaW5zIHRvIGxvYWQuCitteSAkUGx1Z2lucyA9ICRFTlZ7J0NDQ19BTkFMWVpFUl9QTFVHSU5TJ307CisKKyMgR2V0IHRoZSBzdG9yZSBtb2RlbC4KK215ICRTdG9yZU1vZGVsID0gJEVOVnsnQ0NDX0FOQUxZWkVSX1NUT1JFX01PREVMJ307CisKKyMgR2V0IHRoZSBjb25zdHJhaW50cyBlbmdpbmUuCitteSAkQ29uc3RyYWludHNNb2RlbCA9ICRFTlZ7J0NDQ19BTkFMWVpFUl9DT05TVFJBSU5UU19NT0RFTCd9OworCisjR2V0IHRoZSBpbnRlcm5hbCBzdGF0cyBzZXR0aW5nLgorbXkgJEludGVybmFsU3RhdHMgPSAkRU5WeydDQ0NfQU5BTFlaRVJfSU5URVJOQUxfU1RBVFMnfTsKKworIyBHZXQgdGhlIG91dHB1dCBmb3JtYXQuCitteSAkT3V0cHV0Rm9ybWF0ID0gJEVOVnsnQ0NDX0FOQUxZWkVSX09VVFBVVF9GT1JNQVQnfTsKK2lmICghZGVmaW5lZCAkT3V0cHV0Rm9ybWF0KSB7ICRPdXRwdXRGb3JtYXQgPSAiaHRtbCI7IH0KKworIyBHZXQgdGhlIGNvbmZpZyBvcHRpb25zLgorbXkgJENvbmZpZ09wdGlvbnMgPSAkRU5WeydDQ0NfQU5BTFlaRVJfQ09ORklHJ307CisKKyMgRGV0ZXJtaW5lIHRoZSBsZXZlbCBvZiB2ZXJib3NpdHkuCitteSAkVmVyYm9zZSA9IDA7CitpZiAoZGVmaW5lZCAkRU5WeydDQ0NfQU5BTFlaRVJfVkVSQk9TRSd9KSB7ICRWZXJib3NlID0gMTsgfQoraWYgKGRlZmluZWQgJEVOVnsnQ0NDX0FOQUxZWkVSX0xPRyd9KSB7ICRWZXJib3NlID0gMjsgfQorCisjIEdldCB0aGUgSFRNTCBvdXRwdXQgZGlyZWN0b3J5LgorbXkgJEh0bWxEaXIgPSAkRU5WeydDQ0NfQU5BTFlaRVJfSFRNTCd9OworCisjIEdldCBmb3JjZS1hbmFseXplLWRlYnVnLWNvZGUgb3B0aW9uLgorbXkgJEZvcmNlQW5hbHl6ZURlYnVnQ29kZSA9ICRFTlZ7J0NDQ19BTkFMWVpFUl9GT1JDRV9BTkFMWVpFX0RFQlVHX0NPREUnfTsKKworbXkgJURpc2FibGVkQXJjaHMgPSAoJ3BwYycgPT4gMSwgJ3BwYzY0JyA9PiAxKTsKK215ICVBcmNoc1NlZW47CitteSAkSGFkQXJjaCA9IDA7CitteSAkSGFzU0RLID0gMDsKKworIyBQcm9jZXNzIHRoZSBhcmd1bWVudHMuCitmb3JlYWNoIChteSAkaSA9IDA7ICRpIDwgc2NhbGFyKEBBUkdWKTsgKyskaSkgeworICBteSAkQXJnID0gJEFSR1ZbJGldOworICBteSAoJEFyZ0tleSkgPSBzcGxpdCAvPS8sJEFyZywyOworCisgICMgQmUgZnJpZW5kbHkgdG8gIiIgaW4gdGhlIGFyZ3VtZW50IGxpc3QuCisgIGlmICghZGVmaW5lZCgkQXJnS2V5KSkgeworICAgIG5leHQ7CisgIH0KKworICAjIE1vZGVzIGNjYy1hbmFseXplciBzdXBwb3J0cworICBpZiAoJEFyZyA9fiAvXi0oRXxNTT8pJC8pIHsgJEFjdGlvbiA9ICdwcmVwcm9jZXNzJzsgfQorICBlbHNpZiAoJEFyZyBlcSAnLWMnKSB7ICRBY3Rpb24gPSAnY29tcGlsZSc7IH0KKyAgZWxzaWYgKCRBcmcgPX4gL14tcHJpbnQtcHJvZy1uYW1lLykgeyBleGl0IDA7IH0KKworICAjIFNwZWNpYWxseSBoYW5kbGUgZHVwbGljYXRlIGNhc2VzIG9mIC1hcmNoCisgIGlmICgkQXJnIGVxICItYXJjaCIpIHsKKyAgICBteSAkYXJjaCA9ICRBUkdWWyRpKzFdOworICAgICMgV2UgZG9uJ3Qgd2FudCB0byBwcm9jZXNzICdwcGMnIGJlY2F1c2Ugb2YgQ2xhbmcncyBsYWNrIG9mIHN1cHBvcnQKKyAgICAjIGZvciBBbHRpdmVjIChhbHNvIHNvbWUgI2RlZmluZXMgd29uJ3QgbGlrZWx5IGJlIGRlZmluZWQgY29ycmVjdGx5LCBldGMuKQorICAgIGlmICghKGRlZmluZWQgJERpc2FibGVkQXJjaHN7JGFyY2h9KSkgeyAkQXJjaHNTZWVueyRhcmNofSA9IDE7IH0KKyAgICAkSGFkQXJjaCA9IDE7CisgICAgKyskaTsKKyAgICBuZXh0OworICB9CisKKyAgIyBPbiBPU1gvaU9TLCByZWNvcmQgaWYgYW4gU0RLIHBhdGggd2FzIHNwZWNpZmllZC4gIFRoaXMKKyAgIyBpcyBpbm5vY3VvdXMgZm9yIG90aGVyIHBsYXRmb3Jtcywgc28gdGhlIGNoZWNrIGp1c3QgaGFwcGVucy4KKyAgaWYgKCRBcmcgPX4gL14taXN5c3Jvb3QvKSB7CisgICAgJEhhc1NESyA9IDE7CisgIH0KKworICAjIE9wdGlvbnMgd2l0aCBwb3NzaWJsZSBhcmd1bWVudHMgdGhhdCBzaG91bGQgcGFzcyB0aHJvdWdoIHRvIGNvbXBpbGVyLgorICBpZiAoZGVmaW5lZCAkQ29tcGlsZU9wdGlvbk1hcHskQXJnS2V5fSkgeworICAgIG15ICRDbnQgPSAkQ29tcGlsZU9wdGlvbk1hcHskQXJnS2V5fTsKKyAgICBwdXNoIEBDb21waWxlT3B0cywkQXJnOworICAgIHdoaWxlICgkQ250ID4gMCkgeyArKyRpOyAtLSRDbnQ7IHB1c2ggQENvbXBpbGVPcHRzLCAkQVJHVlskaV07IH0KKyAgICBuZXh0OworICB9CisgICMgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzbid0IGEgc3BhY2UgYWZ0ZXIgLWlxdW90ZQorICBpZiAoJEFyZyA9fiAvXi1pcXVvdGUuKi8pIHsKKyAgICBwdXNoIEBDb21waWxlT3B0cywkQXJnOworICAgIG5leHQ7CisgIH0KKworICAjIE9wdGlvbnMgd2l0aCBwb3NzaWJsZSBhcmd1bWVudHMgdGhhdCBzaG91bGQgcGFzcyB0aHJvdWdoIHRvIGxpbmtlci4KKyAgaWYgKGRlZmluZWQgJExpbmtlck9wdGlvbk1hcHskQXJnS2V5fSkgeworICAgIG15ICRDbnQgPSAkTGlua2VyT3B0aW9uTWFweyRBcmdLZXl9OworICAgIHB1c2ggQExpbmtPcHRzLCRBcmc7CisgICAgd2hpbGUgKCRDbnQgPiAwKSB7ICsrJGk7IC0tJENudDsgcHVzaCBATGlua09wdHMsICRBUkdWWyRpXTsgfQorICAgIG5leHQ7CisgIH0KKworICAjIE9wdGlvbnMgd2l0aCBwb3NzaWJsZSBhcmd1bWVudHMgdGhhdCBzaG91bGQgcGFzcyB0aHJvdWdoIHRvIGJvdGggY29tcGlsZXIKKyAgIyBhbmQgdGhlIGxpbmtlci4KKyAgaWYgKGRlZmluZWQgJENvbXBpbGVyTGlua2VyT3B0aW9uTWFweyRBcmdLZXl9KSB7CisgICAgbXkgJENudCA9ICRDb21waWxlckxpbmtlck9wdGlvbk1hcHskQXJnS2V5fTsKKworICAgICMgQ2hlY2sgaWYgdGhpcyBpcyBhbiBvcHRpb24gdGhhdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSB2YWx1ZSwgYW5kIGlmIHNvCisgICAgIyBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlIHdhcyBjaGVja2VkIGJlZm9yZS4KKyAgICBpZiAoJFVuaXF1ZU9wdGlvbnN7JEFyZ30pIHsKKyAgICAgIGlmIChkZWZpbmVkICRVbmlxdWVkeyRBcmd9KSB7CisgICAgICAgICRpICs9ICRDbnQ7CisgICAgICAgIG5leHQ7CisgICAgICB9CisgICAgICAkVW5pcXVlZHskQXJnfSA9IDE7CisgICAgfQorCisgICAgcHVzaCBAQ29tcGlsZU9wdHMsJEFyZzsKKyAgICBwdXNoIEBMaW5rT3B0cywkQXJnOworCisgICAgd2hpbGUgKCRDbnQgPiAwKSB7CisgICAgICArKyRpOyAtLSRDbnQ7CisgICAgICBwdXNoIEBDb21waWxlT3B0cywgJEFSR1ZbJGldOworICAgICAgcHVzaCBATGlua09wdHMsICRBUkdWWyRpXTsKKyAgICB9CisgICAgbmV4dDsKKyAgfQorCisgICMgSWdub3JlZCBvcHRpb25zLgorICBpZiAoZGVmaW5lZCAkSWdub3JlZE9wdGlvbk1hcHskQXJnS2V5fSkgeworICAgIG15ICRDbnQgPSAkSWdub3JlZE9wdGlvbk1hcHskQXJnS2V5fTsKKyAgICB3aGlsZSAoJENudCA+IDApIHsKKyAgICAgICsrJGk7IC0tJENudDsKKyAgICB9CisgICAgbmV4dDsKKyAgfQorCisgICMgQ29tcGlsZSBtb2RlIGZsYWdzLgorICBpZiAoJEFyZyA9fiAvXi0oPzpbRElVXXxpc3lzdGVtKSguKikkLykgeworICAgIG15ICRUbXAgPSAkQXJnOworICAgIGlmICgkMSBlcSAnJykgeworICAgICAgIyBGSVhNRTogQ2hlY2sgaWYgd2UgYXJlIGdvaW5nIG9mZiB0aGUgZW5kLgorICAgICAgKyskaTsKKyAgICAgICRUbXAgPSAkQXJnIC4gJEFSR1ZbJGldOworICAgIH0KKyAgICBwdXNoIEBDb21waWxlT3B0cywkVG1wOworICAgIG5leHQ7CisgIH0KKworICBpZiAoJEFyZyA9fiAvXi1tLiovKSB7CisgICAgcHVzaCBAQ29tcGlsZU9wdHMsJEFyZzsKKyAgICBuZXh0OworICB9CisKKyAgIyBMYW5ndWFnZS4KKyAgaWYgKCRBcmcgZXEgJy14JykgeworICAgICRMYW5nID0gJEFSR1ZbJGkrMV07CisgICAgKyskaTsgbmV4dDsKKyAgfQorCisgICMgT3V0cHV0IGZpbGUuCisgIGlmICgkQXJnIGVxICctbycpIHsKKyAgICArKyRpOworICAgICRPdXRwdXQgPSAkQVJHVlskaV07CisgICAgbmV4dDsKKyAgfQorCisgICMgR2V0IHRoZSBsaW5rIG1vZGUuCisgIGlmICgkQXJnID1+IC9eLVtsLEwsT10vKSB7CisgICAgaWYgKCRBcmcgZXEgJy1PJykgeyBwdXNoIEBMaW5rT3B0cywnLU8xJzsgfQorICAgIGVsc2lmICgkQXJnIGVxICctT3MnKSB7IHB1c2ggQExpbmtPcHRzLCctTzInOyB9CisgICAgZWxzZSB7IHB1c2ggQExpbmtPcHRzLCRBcmc7IH0KKworICAgICMgTXVzdCBwYXNzIHRoaXMgYWxvbmcgZm9yIHRoZSBfX09QVElNSVpFX18gbWFjcm8KKyAgICBpZiAoJEFyZyA9fiAvXi1PLykgeyBwdXNoIEBDb21waWxlT3B0cywkQXJnOyB9CisgICAgbmV4dDsKKyAgfQorCisgIGlmICgkQXJnID1+IC9eLXN0ZD0vKSB7CisgICAgcHVzaCBAQ29tcGlsZU9wdHMsJEFyZzsKKyAgICBuZXh0OworICB9CisKKyAgIyBHZXQgdGhlIGNvbXBpbGVyL2xpbmsgbW9kZS4KKyAgaWYgKCRBcmcgPX4gL14tRiguKykkLykgeworICAgIG15ICRUbXAgPSAkQXJnOworICAgIGlmICgkMSBlcSAnJykgeworICAgICAgIyBGSVhNRTogQ2hlY2sgaWYgd2UgYXJlIGdvaW5nIG9mZiB0aGUgZW5kLgorICAgICAgKyskaTsKKyAgICAgICRUbXAgPSAkQXJnIC4gJEFSR1ZbJGldOworICAgIH0KKyAgICBwdXNoIEBDb21waWxlT3B0cywkVG1wOworICAgIHB1c2ggQExpbmtPcHRzLCRUbXA7CisgICAgbmV4dDsKKyAgfQorCisgICMgSW5wdXQgZmlsZXMuCisgIGlmICgkQXJnIGVxICctZmlsZWxpc3QnKSB7CisgICAgIyBGSVhNRTogTWFrZSBzdXJlIHdlIGFyZW4ndCB3YWxraW5nIG9mZiB0aGUgZW5kLgorICAgIG9wZW4oSU4sICRBUkdWWyRpKzFdKTsKKyAgICB3aGlsZSAoPElOPikgeyBzL1wwMTU/XDAxMi8vOyBwdXNoIEBGaWxlcywkXzsgfQorICAgIGNsb3NlKElOKTsKKyAgICArKyRpOworICAgIG5leHQ7CisgIH0KKworICBpZiAoJEFyZyA9fiAvXi1mLykgeworICAgIHB1c2ggQENvbXBpbGVPcHRzLCRBcmc7CisgICAgcHVzaCBATGlua09wdHMsJEFyZzsKKyAgICBuZXh0OworICB9CisKKyAgIyBIYW5kbGUgLVduby0uICBXZSBkb24ndCBjYXJlIGFib3V0IGV4dHJhIHdhcm5pbmdzLCBidXQKKyAgIyB3ZSBzaG91bGQgc3VwcHJlc3Mgb25lcyB0aGF0IHdlIGRvbid0IHdhbnQgdG8gc2VlLgorICBpZiAoJEFyZyA9fiAvXi1Xbm8tLykgeworICAgIHB1c2ggQENvbXBpbGVPcHRzLCAkQXJnOworICAgIG5leHQ7CisgIH0KKworICAjIEhhbmRsZSAtWGNsYW5nIHNvbWUtYXJnLiBBZGQgYm90aCBhcmd1bWVudHMgdG8gdGhlIGNvbXBpbGVyIG9wdGlvbnMuCisgIGlmICgkQXJnID1+IC9eLVhjbGFuZyQvKSB7CisgICAgIyBGSVhNRTogQ2hlY2sgaWYgd2UgYXJlIGdvaW5nIG9mZiB0aGUgZW5kLgorICAgICsrJGk7CisgICAgcHVzaCBAQ29tcGlsZU9wdHMsICRBcmc7CisgICAgcHVzaCBAQ29tcGlsZU9wdHMsICRBUkdWWyRpXTsKKyAgICBuZXh0OworICB9CisKKyAgaWYgKCEoJEFyZyA9fiAvXi0vKSkgeworICAgIHB1c2ggQEZpbGVzLCAkQXJnOworICAgIG5leHQ7CisgIH0KK30KKworIyBGb3JjZWRseSBlbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZCBieSB1c2VyLgoraWYgKCRGb3JjZUFuYWx5emVEZWJ1Z0NvZGUpIHsKKyAgcHVzaCBAQ29tcGlsZU9wdHMsICctVU5ERUJVRyc7Cit9CisKKyMgSWYgd2UgYXJlIG9uIE9TWCBhbmQgaGF2ZSBhbiBpbnN0YWxsYXRpb24gd2hlcmUgdGhlCisjIGRlZmF1bHQgU0RLIGlzIGluZmVycmVkIGJ5IHhjcnVuIHVzZSB4Y3J1biB0byBpbmZlcgorIyB0aGUgU0RLLgoraWYgKG5vdCAkSGFzU0RLIGFuZCAkVXNlWENSVU4pIHsKKyAgbXkgJHNkayA9IGAvdXNyL2Jpbi94Y3J1biAtLXNob3ctc2RrLXBhdGggLXNkayBtYWNvc3hgOworICBjaG9tcCAkc2RrOworICBwdXNoIEBDb21waWxlT3B0cywgIi1pc3lzcm9vdCIsICRzZGs7Cit9CisKK2lmICgkQWN0aW9uIGVxICdjb21waWxlJyBvciAkQWN0aW9uIGVxICdsaW5rJykgeworICBteSBAQXJjaHMgPSBrZXlzICVBcmNoc1NlZW47CisgICMgU2tpcCB0aGUgZmlsZSBpZiB3ZSBkb24ndCBzdXBwb3J0IHRoZSBhcmNoaXRlY3R1cmVzIHNwZWNpZmllZC4KKyAgZXhpdCAwIGlmICgkSGFkQXJjaCAmJiBzY2FsYXIoQEFyY2hzKSA9PSAwKTsKKworICBmb3JlYWNoIG15ICRmaWxlIChARmlsZXMpIHsKKyAgICAjIERldGVybWluZSB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBmaWxlLgorICAgIG15ICRGaWxlTGFuZyA9ICRMYW5nOworCisgICAgaWYgKCFkZWZpbmVkKCRGaWxlTGFuZykpIHsKKyAgICAgICMgSW5mZXIgdGhlIGxhbmd1YWdlIGZyb20gdGhlIGV4dGVuc2lvbi4KKyAgICAgIGlmICgkZmlsZSA9fiAvWy5dKFteLl0rKSQvKSB7CisgICAgICAgICRGaWxlTGFuZyA9ICRMYW5nTWFweyQxfTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAjIEZpbGVMYW5nIHN0aWxsIG5vdCBkZWZpbmVkPyAgU2tpcCB0aGUgZmlsZS4KKyAgICBuZXh0IGlmICghZGVmaW5lZCAkRmlsZUxhbmcpOworCisgICAgIyBMYW5ndWFnZSBub3QgYWNjZXB0ZWQ/CisgICAgbmV4dCBpZiAoIWRlZmluZWQgJExhbmdzQWNjZXB0ZWR7JEZpbGVMYW5nfSk7CisKKyAgICBteSBAQ21kQXJnczsKKyAgICBteSBAQW5hbHl6ZUFyZ3M7CisKKyAgICBpZiAoJEZpbGVMYW5nIG5lICd1bmtub3duJykgeworICAgICAgcHVzaCBAQ21kQXJncywgJy14JywgJEZpbGVMYW5nOworICAgIH0KKworICAgIGlmIChkZWZpbmVkICRTdG9yZU1vZGVsKSB7CisgICAgICBwdXNoIEBBbmFseXplQXJncywgIi1hbmFseXplci1zdG9yZT0kU3RvcmVNb2RlbCI7CisgICAgfQorCisgICAgaWYgKGRlZmluZWQgJENvbnN0cmFpbnRzTW9kZWwpIHsKKyAgICAgIHB1c2ggQEFuYWx5emVBcmdzLCAiLWFuYWx5emVyLWNvbnN0cmFpbnRzPSRDb25zdHJhaW50c01vZGVsIjsKKyAgICB9CisKKyAgICBpZiAoZGVmaW5lZCAkSW50ZXJuYWxTdGF0cykgeworICAgICAgcHVzaCBAQW5hbHl6ZUFyZ3MsICItYW5hbHl6ZXItc3RhdHMiOworICAgIH0KKworICAgIGlmIChkZWZpbmVkICRBbmFseXNlcykgeworICAgICAgcHVzaCBAQW5hbHl6ZUFyZ3MsIHNwbGl0ICdccysnLCAkQW5hbHlzZXM7CisgICAgfQorCisgICAgaWYgKGRlZmluZWQgJFBsdWdpbnMpIHsKKyAgICAgIHB1c2ggQEFuYWx5emVBcmdzLCBzcGxpdCAnXHMrJywgJFBsdWdpbnM7CisgICAgfQorCisgICAgaWYgKGRlZmluZWQgJE91dHB1dEZvcm1hdCkgeworICAgICAgcHVzaCBAQW5hbHl6ZUFyZ3MsICItYW5hbHl6ZXItb3V0cHV0PSIgLiAkT3V0cHV0Rm9ybWF0OworICAgICAgaWYgKCRPdXRwdXRGb3JtYXQgPX4gL3BsaXN0LykgeworICAgICAgICAjIENoYW5nZSAiT3V0cHV0IiB0byBiZSBhIGZpbGUuCisgICAgICAgIG15ICgkaCwgJGYpID0gdGVtcGZpbGUoInJlcG9ydC1YWFhYWFgiLCBTVUZGSVggPT4gIi5wbGlzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElSID0+ICRIdG1sRGlyKTsKKyAgICAgICAgJFJlc3VsdEZpbGUgPSAkZjsKKyAgICAgICAgIyBJZiB0aGUgSHRtbERpciBpcyBub3Qgc2V0LCB3ZSBzaG91bGQgY2xlYW4gdXAgdGhlIHBsaXN0IGZpbGVzLgorICAgICAgICBpZiAoIWRlZmluZWQgJEh0bWxEaXIgfHwgLXogJEh0bWxEaXIpIHsKKyAgICAgICAgICAkQ2xlYW51cEZpbGUgPSAkZjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBpZiAoZGVmaW5lZCAkQ29uZmlnT3B0aW9ucykgeworICAgICAgcHVzaCBAQW5hbHl6ZUFyZ3MsIHNwbGl0ICdccysnLCAkQ29uZmlnT3B0aW9uczsKKyAgICB9CisKKyAgICBwdXNoIEBDbWRBcmdzLCBAQ29tcGlsZU9wdHM7CisgICAgcHVzaCBAQ21kQXJncywgJGZpbGU7CisKKyAgICBpZiAoc2NhbGFyIEBBcmNocykgeworICAgICAgZm9yZWFjaCBteSAkYXJjaCAoQEFyY2hzKSB7CisgICAgICAgIG15IEBOZXdBcmdzOworICAgICAgICBwdXNoIEBOZXdBcmdzLCAnLWFyY2gnLCAkYXJjaDsKKyAgICAgICAgcHVzaCBATmV3QXJncywgQENtZEFyZ3M7CisgICAgICAgIEFuYWx5emUoJENsYW5nLCBcQE5ld0FyZ3MsIFxAQW5hbHl6ZUFyZ3MsICRGaWxlTGFuZywgJE91dHB1dCwKKyAgICAgICAgICAgICAgICAkVmVyYm9zZSwgJEh0bWxEaXIsICRmaWxlKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBBbmFseXplKCRDbGFuZywgXEBDbWRBcmdzLCBcQEFuYWx5emVBcmdzLCAkRmlsZUxhbmcsICRPdXRwdXQsCisgICAgICAgICAgICAgICRWZXJib3NlLCAkSHRtbERpciwgJGZpbGUpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLWJ1aWxkL2xpYmV4ZWMvY2NjLWFuYWx5emVyLmJhdCBiL2NsYW5nLTM4NTk0MjQvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2NjYy1hbmFseXplci5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE4NTM3NgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2NjYy1hbmFseXplci5iYXQKQEAgLTAsMCArMSBAQAorcGVybCAtUyBjY2MtYW5hbHl6ZXIgJSoNCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tYnVpbGQvbWFuL3NjYW4tYnVpbGQuMSBiL2NsYW5nLTM4NTk0MjQvdG9vbHMvc2Nhbi1idWlsZC9tYW4vc2Nhbi1idWlsZC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkM2E5ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tYnVpbGQvbWFuL3NjYW4tYnVpbGQuMQpAQCAtMCwwICsxLDM0OSBAQAorLlwiIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLlwiIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKy5cIiAkSWQkCisuRGQgTWF5IDI1LCAyMDEyCisuRHQgU0NBTi1CVUlMRCAxCisuT3MgImNsYW5nIiAiMy41IgorLlNoIE5BTUUKKy5ObSBzY2FuLWJ1aWxkCisuTmQgQ2xhbmcgc3RhdGljIGFuYWx5emVyCisuU2ggU1lOT1BTSVMKKy5ObQorLk9wIEZsIG9oa3ZWCisuT3AgRmwgYW5hbHl6ZS1oZWFkZXJzCisuT3AgRmwgZW5hYmxlLWNoZWNrZXIgT3AgQXIgY2hlY2tlcl9uYW1lCisuT3AgRmwgZGlzYWJsZS1jaGVja2VyIE9wIEFyIGNoZWNrZXJfbmFtZQorLk9wIEZsIEZsIGhlbHAKKy5PcCBGbCBGbCBoZWxwLWNoZWNrZXJzCisuT3AgRmwgRmwgaHRtbC10aXRsZSBPcCBBciA9dGl0bGUKKy5PcCBGbCBGbCBrZWVwLWdvaW5nCisuT3AgRmwgcGxpc3QKKy5PcCBGbCBwbGlzdC1odG1sCisuT3AgRmwgRmwgc3RhdHVzLWJ1Z3MKKy5PcCBGbCBGbCB1c2UtYysrIE9wIEFyID1jb21waWxlcl9wYXRoCisuT3AgRmwgRmwgdXNlLWNjIE9wIEFyID1jb21waWxlcl9wYXRoCisuT3AgRmwgRmwgdmlldworLk9wIEZsIGNvbnN0cmFpbnRzIE9wIEFyIG1vZGVsCisuT3AgRmwgbWF4bG9vcCBBciBOCisuT3AgRmwgbm8tZmFpbHVyZS1yZXBvcnRzCisuT3AgRmwgc3RhdHMKKy5PcCBGbCBzdG9yZSBPcCBBciBtb2RlbAorLkFyIGJ1aWxkX2NvbW1hbmQKKy5PcCBidWlsZF9vcHRpb25zCisuXCIKKy5cIiBTaCBERVNDUklQVElPTgorLlNoIERFU0NSSVBUSU9OCisuTm0KK2lzIGEgUGVybCBzY3JpcHQgdGhhdCBpbnZva2VzIHRoZSBDbGFuZyBzdGF0aWMgYW5hbHl6ZXIuICBPcHRpb25zIHVzZWQgYnkKKy5ObQorb3IgYnkgdGhlIGFuYWx5emVyIGFwcGVhciBmaXJzdCwgZm9sbG93ZWQgYnkgdGhlCisuQXIgYnVpbGRfY29tbWFuZAorYW5kIGFueQorLkFyIGJ1aWxkX29wdGlvbnMKK25vcm1hbGx5IHVzZWQgdG8gYnVpbGQgdGhlIHRhcmdldCBzeXN0ZW0uCisuUHAKK1RoZSBzdGF0aWMgYW5hbHl6ZXIgZW1wbG95cyBhIGxvbmcgbGlzdCBvZiBjaGVja2luZyBhbGdvcml0aG1zLCBzZWUKKy5TeCBDSEVDS0VSUyAuCitPdXRwdXQgY2FuIGJlIHdyaXR0ZW4gaW4gc3RhbmRhcmQKKy5MaSAucGxpc3QKK2FuZC9vciBIVE1MIGZvcm1hdC4KKy5QcAorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CisuQmwgLXRhZyAtd2lkdGggaW5kZW50CisuSXQgRmwgYW5hbHl6ZS1oZWFkZXJzCitBbHNvIGFuYWx5emUgZnVuY3Rpb25zIGluICNpbmNsdWRlZCBmaWxlcy4KKy5JdCBGbCBlbmFibGUtY2hlY2tlciBBciBjaGVja2VyX25hbWUgLCBGbCBkaXNhYmxlLWNoZWNrZXIgQXIgY2hlY2tlcl9uYW1lCitFbmFibGUvZGlzYWJsZQorLkFyIGNoZWNrZXJfbmFtZSAuCitTZWUKKy5TeCBDSEVDS0VSUyAuCisuSXQgRmwgaCAsIEZsIEZsIGhlbHAKK0Rpc3BsYXkgdGhpcyBtZXNzYWdlLgorLkl0IEZsIEZsIGhlbHAtY2hlY2tlcnMKK0xpc3QgZGVmYXVsdCBjaGVja2Vycywgc2VlCisuU3ggQ0hFQ0tFUlMgLgorLkl0IEZsIEZsIGh0bWwtdGl0bGUgTnMgT3AgPSBOcyBBciB0aXRsZQorU3BlY2lmeSB0aGUgdGl0bGUgdXNlZCBvbiBnZW5lcmF0ZWQgSFRNTCBwYWdlcy4KK0EgZGVmYXVsdCB0aXRsZSBpcyBnZW5lcmF0ZWQgaWYKKy5BciB0aXRsZQoraXMgbm90IHNwZWNpZmllZC4KKy5JdCBGbCBrICwgRmwgRmwga2VlcC1nb2luZworQWRkIGEKKy5EcSBrZWVwIG9uIGdvaW5nCitvcHRpb24gdG8KKy5BciBidWlsZF9jb21tYW5kIC4KK0N1cnJlbnRseSBzdXBwb3J0cyBtYWtlIGFuZCB4Y29kZWJ1aWxkLiBUaGlzIGlzIGEgY29udmVuaWVuY2Ugb3B0aW9uOworb25lIGNhbiBzcGVjaWZ5IHRoaXMgYmVoYXZpb3IgZGlyZWN0bHkgdXNpbmcgYnVpbGQgb3B0aW9ucy4KKy5JdCBGbCBvCitUYXJnZXQgZGlyZWN0b3J5IGZvciBIVE1MIHJlcG9ydCBmaWxlcy4gIFN1YmRpcmVjdG9yaWVzIHdpbGwgYmUKK2NyZWF0ZWQgYXMgbmVlZGVkIHRvIHJlcHJlc2VudCBzZXBhcmF0ZSBpbnZvY2F0aW9ucworb2YgdGhlIGFuYWx5emVyLiAgSWYgdGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgYSBkaXJlY3RvcnkgaXMKK2NyZWF0ZWQgaW4gL3RtcCAoVE1QRElSIG9uIE1hYyBPUyBYKSB0byBzdG9yZSB0aGUgcmVwb3J0cy4KKy5JdCBGbCBwbGlzdAorT3V0cHV0IHRoZSByZXN1bHRzIGFzIGEgc2V0IG9mCisuTGkgLnBsaXN0CitmaWxlcy4gKEJ5IGRlZmF1bHQgdGhlIG91dHB1dCBvZgorLk5tCitpcyBhIHNldCBvZiBIVE1MIGZpbGVzLikKKy5JdCBGbCBwbGlzdC1odG1sCitPdXRwdXQgdGhlIHJlc3VsdHMgYXMgYSBzZXQgb2YgSFRNTCBhbmQgLnBsaXN0IGZpbGVzCisuSXQgRmwgRmwgc3RhdHVzLWJ1Z3MKK1NldCBleGl0IHN0YXR1cyB0byAxIGlmIGl0IGZvdW5kIHBvdGVudGlhbCBidWdzIGFuZCAwIG90aGVyd2lzZS4gQnkKK2RlZmF1bHQgdGhlIGV4aXQgc3RhdHVzIG9mCisuTm0KK2lzIHRoYXQgcmV0dXJuZWQgYnkKKy5BciBidWlsZF9jb21tYW5kIC4KKy5JdCBGbCBGbCB1c2UtYysrIE5zIE9wID0gTnMgQXIgY29tcGlsZXJfcGF0aAorR3Vlc3MgdGhlIGRlZmF1bHQgY29tcGlsZXIgZm9yIHlvdXIgQysrIGFuZCBPYmplY3RpdmUtQysrIGNvZGUuIFVzZSB0aGlzCitvcHRpb24gdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGUgY29tcGlsZXIuCisuSXQgRmwgRmwgdXNlLWNjIE5zIE9wID0gTnMgQXIgY29tcGlsZXJfcGF0aAorR3Vlc3MgdGhlIGRlZmF1bHQgY29tcGlsZXIgZm9yIHlvdXIgQyBhbmQgT2JqZWN0aXZlLUMgY29kZS4gVXNlIHRoaXMKK29wdGlvbiB0byBzcGVjaWZ5IGFuIGFsdGVybmF0ZSBjb21waWxlci4KKy5JdCBGbCB2CitWZXJib3NlIG91dHB1dCBmcm9tCisuTm0KK2FuZCB0aGUgYW5hbHl6ZXIuIEEgc2Vjb25kIGFuZAordGhpcmQKKy5BciB2CitpbmNyZWFzZXMgdmVyYm9zaXR5LgorLkl0IEZsIFYgLCBGbCBGbCB2aWV3CitWaWV3IGFuYWx5c2lzIHJlc3VsdHMgaW4gYSB3ZWIgYnJvd3NlciB3aGVuIHRoZSBidWlsZCBjb21wbGV0ZXMuCisuSXQgRmwgY29uc3RyYWludHMgT3AgQXIgbW9kZWwKK1NwZWNpZnkgdGhlIGNvbnRyYWludCBlbmdpbmUgdXNlZCBieSB0aGUgYW5hbHl6ZXIuICBCeSBkZWZhdWx0IHRoZQorLlFsIHJhbmdlCittb2RlbCBpcyB1c2VkLiAgU3BlY2lmeWluZworLlFsIGJhc2ljCit1c2VzIGEgc2ltcGxlciwgbGVzcyBwb3dlcmZ1bCBjb25zdHJhaW50IG1vZGVsIHVzZWQgYnkgY2hlY2tlci0wLjE2MAorYW5kIGVhcmxpZXIuCisuSXQgRmwgbWF4bG9vcCBBciBOCitTcGVjaWZpeSB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgYmxvY2sgY2FuIGJlIHZpc2l0ZWQgYmVmb3JlIGdpdmluZwordXAuIERlZmF1bHQgaXMgNC4gSW5jcmVhc2UgZm9yIG1vcmUgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZSBhdCBhCitjb3N0IG9mIHNwZWVkLgorLkl0IEZsIG5vLWZhaWx1cmUtcmVwb3J0cworRG8gbm90IGNyZWF0ZSBhCisuUWwgZmFpbHVyZXMKK3N1YmRpcmVjdG9yeSB0aGF0IGluY2x1ZGVzIGFuYWx5emVyIGNyYXNoIHJlcG9ydHMgYW5kIHByZXByb2Nlc3NlZAorc291cmNlIGZpbGVzLgorLkl0IEZsIHN0YXRzCitHZW5lcmF0ZXMgdmlzaXRhdGlvbiBzdGF0aXN0aWNzIGZvciB0aGUgcHJvamVjdCBiZWluZyBhbmFseXplZC4KKy5JdCBGbCBzdG9yZSBPcCBBciBtb2RlbAorU3BlY2lmeSB0aGUgc3RvcmUgbW9kZWwgdXNlZCBieSB0aGUgYW5hbHl6ZXIuIEJ5IGRlZmF1bHQsIHRoZQorLlFsIHJlZ2lvbgorc3RvcmUgbW9kZWwgaXMgdXNlZC4KKy5RbCByZWdpb24KK3NwZWNpZmllcyBhIGZpZWxkLQorc2Vuc2l0aXZlIHN0b3JlIG1vZGVsLiBVc2VycyBjYW4gYWxzbyBzcGVjaWZ5CisuUWwgYmFzaWMKK3doaWNoIGlzIGZhciBsZXNzIHByZWNpc2UgYnV0IGNhbiBtb3JlIHF1aWNrbHkgYW5hbHl6ZSBjb2RlLgorLlFsIGJhc2ljCit3YXMgdGhlIGRlZmF1bHQgc3RvcmUgbW9kZWwgZm9yIGNoZWNrZXItMC4yMjEgYW5kIGVhcmxpZXIuCisuXCIKKy5FbAorLlNoIEVYSVQgU1RBVFVTCisuTm0KK3JldHVybnMgdGhlIHZhbHVlIHJldHVybmVkIGJ5CisuQXIgYnVpbGRfY29tbWFuZAordW5sZXNzCisuRmwgRmwgc3RhdHVzLWJ1Z3MKK29yCisuRmwgRmwga2VlcC1nb2luZworaXMgdXNlZC4KKy5cIgorLlwiIE90aGVyIHNlY3Rpb25zIG5vdCB5ZXQgdXNlZCAuLi4KKy5cIiAuU2ggRU5WSVJPTk1FTlQKKy5cIiAuU2ggRklMRVMKKy5cIiAuU2ggRElBR05PU1RJQ1MKKy5cIiAuU2ggQ09NUEFUSUJJTElUWQorLlwiIC5TaCBISVNUT1JZCisuXCIgLlNoIEJVR1MKKy5cIgorLlNoIENIRUNLRVJTCitUaGUgY2hlY2tlcnMgbGlzdGVkIGJlbG93IG1heSBiZSBlbmFibGVkL2Rpc2FibGVkIHVzaW5nIHRoZQorLkZsIGVuYWJsZS1jaGVja2VyCithbmQKKy5GbCBkaXNhYmxlLWNoZWNrZXIKK29wdGlvbnMuCitBIGRlZmF1bHQgZ3JvdXAgb2YgY2hlY2tlcnMgaXMgcnVuIHVubGVzcyBleHBsaWNpdGx5IGRpc2FibGVkLgorRXhhY3RseSB3aGljaCBjaGVja2VycyBjb25zdGl0dXRlIHRoZSBkZWZhdWx0IGdyb3VwIGlzIGEgZnVuY3Rpb24KK29mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGluIHVzZTsgdGhleSBhcmUgbGlzdGVkIHdpdGgKKy5GbCBGbCBoZWxwLWNoZWNrZXJzIC4KKy5CbCAtdGFnIC13aWR0aCBpbmRlbnQuCisuSXQgY29yZS5BZGp1c3RlZFJldHVyblZhbHVlCitDaGVjayB0byBzZWUgaWYgdGhlIHJldHVybiB2YWx1ZSBvZiBhIGZ1bmN0aW9uIGNhbGwgaXMgZGlmZmVyZW50IHRoYW4KK3RoZSBjYWxsZXIgZXhwZWN0cyAoZS5nLiwgZnJvbSBjYWxscyB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzKS4KKy5JdCBjb3JlLkF0dHJpYnV0ZU5vbk51bGwKK0NoZWNrIGZvciBudWxsIHBvaW50ZXJzIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiB3aG9zZSBhcmd1bWVudHMgYXJlIG1hcmtlZCB3aXRoIHRoZQorLlFsIG5vbm51bGwKK2F0dHJpYnV0ZS4KKy5JdCBjb3JlLkNhbGxBbmRNZXNzYWdlCitDaGVjayBmb3IgbG9naWNhbCBlcnJvcnMgZm9yIGZ1bmN0aW9uIGNhbGxzIGFuZCBPYmplY3RpdmUtQyBtZXNzYWdlIGV4cHJlc3Npb25zIChlLmcuLCB1bmluaXRpYWxpemVkIGFyZ3VtZW50cywgbnVsbCBmdW5jdGlvbiBwb2ludGVycykuCisuSXQgY29yZS5EaXZpZGVaZXJvCitDaGVjayBmb3IgZGl2aXNpb24gYnkgemVyby4KKy5JdCBjb3JlLk51bGxEZXJlZmVyZW5jZQorQ2hlY2sgZm9yIGRlcmVmZXJlbmNlcyBvZiBudWxsIHBvaW50ZXJzLgorLkl0IGNvcmUuU3RhY2tBZGRyZXNzRXNjYXBlCitDaGVjayB0aGF0IGFkZHJlc3NlcyB0byBzdGFjayBtZW1vcnkgZG8gbm90IGVzY2FwZSB0aGUgZnVuY3Rpb24uCisuSXQgY29yZS5VbmRlZmluZWRCaW5hcnlPcGVyYXRvclJlc3VsdAorQ2hlY2sgZm9yIHVuZGVmaW5lZCByZXN1bHRzIG9mIGJpbmFyeSBvcGVyYXRvcnMuCisuSXQgY29yZS5WTEFTaXplCitDaGVjayBmb3IgZGVjbGFyYXRpb25zIG9mIFZMQSBvZiB1bmRlZmluZWQgb3IgemVybyBzaXplLgorLkl0IGNvcmUuYnVpbHRpbi5CdWlsdGluRnVuY3Rpb25zCitFdmFsdWF0ZSBjb21waWxlciBidWlsdGluIGZ1bmN0aW9ucywgZS5nLgorLkZuIGFsbG9jYSAuCisuSXQgY29yZS5idWlsdGluLk5vUmV0dXJuRnVuY3Rpb25zCitFdmFsdWF0ZQorLlFsIHBhbmljCitmdW5jdGlvbnMgdGhhdCBhcmUga25vd24gdG8gbm90IHJldHVybiB0byB0aGUgY2FsbGVyLgorLkl0IGNvcmUudW5pbml0aWFsaXplZC5BcnJheVN1YnNjcmlwdAorQ2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHVzZWQgYXMgYXJyYXkgc3Vic2NyaXB0cy4KKy5JdCBjb3JlLnVuaW5pdGlhbGl6ZWQuQXNzaWduCitDaGVjayBmb3IgYXNzaWduaW5nIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLgorLkl0IGNvcmUudW5pbml0aWFsaXplZC5CcmFuY2gKK0NoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhbHVlcyB1c2VkIGFzIGJyYW5jaCBjb25kaXRpb25zLgorLkl0IGNvcmUudW5pbml0aWFsaXplZC5DYXB0dXJlZEJsb2NrVmFyaWFibGUKK0NoZWNrIGZvciBibG9ja3MgdGhhdCBjYXB0dXJlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLgorLkl0IGNvcmUudW5pbml0aWFsaXplZC5VbmRlZlJldHVybgorQ2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGJlaW5nIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCisuSXQgZGVhZGNvZGUuRGVhZFN0b3JlcworQ2hlY2sgZm9yIHZhbHVlcyBzdG9yZWQgdG8gdmFyaWFibGVzIHRoYXQgYXJlIG5ldmVyIHJlYWQgYWZ0ZXJ3YXJkcy4KKy5JdCBkZWJ1Zy5EdW1wQ0ZHCitEaXNwbGF5IENvbnRyb2wtRmxvdyBHcmFwaHMuCisuSXQgZGVidWcuRHVtcENhbGxHcmFwaAorRGlzcGxheSBDYWxsIEdyYXBoLgorLkl0IGRlYnVnLkR1bXBEb21pbmF0b3JzCitQcmludCB0aGUgZG9taW5hbmNlIHRyZWUgZm9yIGEgZ2l2ZW4gQ29udHJvbC1GbG93IEdyYXBoLgorLkl0IGRlYnVnLkR1bXBMaXZlVmFycworUHJpbnQgcmVzdWx0cyBvZiBsaXZlIHZhcmlhYmxlIGFuYWx5c2lzLgorLkl0IGRlYnVnLlN0YXRzCitFbWl0IHdhcm5pbmdzIHdpdGggYW5hbHl6ZXIgc3RhdGlzdGljcy4KKy5JdCBkZWJ1Zy5UYWludFRlc3QKK01hcmsgdGFpbnRlZCBzeW1ib2xzIGFzIHN1Y2guCisuSXQgZGVidWcuVmlld0NGRworVmlldyBDb250cm9sLUZsb3cgR3JhcGhzIHVzaW5nCisuSWMgR3JhcGhWaXogLgorLkl0IGRlYnVnLlZpZXdDYWxsR3JhcGgKK1ZpZXcgQ2FsbCBHcmFwaCB1c2luZworLkljIEdyYXBoVml6IC4KKy5JdCBsbHZtLkNvbnZlbnRpb25zCitDaGVjayBjb2RlIGZvciBMTFZNIGNvZGViYXNlIGNvbnZlbnRpb25zLgorLkl0IG9zeC5BUEkKK0NoZWNrIGZvciBwcm9wZXIgdXNlcyBvZiB2YXJpb3VzIE1hYyBPUyBYIEFQSXMuCisuSXQgb3N4LkF0b21pY0NBUworRXZhbHVhdGUgY2FsbHMgdG8KKy5WdCBPU0F0b21pYworZnVuY3Rpb25zLgorLkl0IG9zeC5TZWNLZXljaGFpbkFQSQorQ2hlY2sgZm9yIHByb3BlciB1c2VzIG9mIFNlY3VyZSBLZXljaGFpbiBBUElzLgorLkl0IG9zeC5jb2NvYS5BdFN5bmMKK0NoZWNrIGZvciBudWxsIHBvaW50ZXJzIHVzZWQgYXMgbXV0ZXhlcyBmb3IgQHN5bmNocm9uaXplZC4KKy5JdCBvc3guY29jb2EuQ2xhc3NSZWxlYXNlCitDaGVjayBmb3Igc2VuZGluZworLlFsIHJldGFpbiAsCisuUWwgcmVsZWFzZSwKK29yCisuUWwgYXV0b3JlbGVhc2UKK2RpcmVjdGx5IHRvIGEgQ2xhc3MuCisuSXQgb3N4LmNvY29hLkluY29tcGF0aWJsZU1ldGhvZFR5cGVzCitXYXJuIGFib3V0IE9iamVjdGl2ZS1DIG1ldGhvZCBzaWduYXR1cmVzIHdpdGggdHlwZSBpbmNvbXBhdGliaWxpdGllcy4KKy5JdCBvc3guY29jb2EuTlNBdXRvcmVsZWFzZVBvb2wKK1dhcm4gZm9yIHN1Ym9wdGltYWwgdXNlcyBvZgorLlZ0IE5TQXV0b3JlbGVhc2VQb29sCitpbiBPYmplY3RpdmUtQyBHQyBtb2RlLgorLkl0IG9zeC5jb2NvYS5OU0Vycm9yCitDaGVjayB1c2FnZSBvZiBOU0Vycm9yKiogcGFyYW1ldGVycy4KKy5JdCBvc3guY29jb2EuTmlsQXJnCitDaGVjayBmb3IgcHJvaGliaXRlZCBuaWwgYXJndW1lbnRzIHRvIE9iamVjdGl2ZS1DIG1ldGhvZCBjYWxscy4KKy5JdCBvc3guY29jb2EuUmV0YWluQ291bnQKK0NoZWNrIGZvciBsZWFrcyBhbmQgaW1wcm9wZXIgcmVmZXJlbmNlIGNvdW50IG1hbmFnZW1lbnQuCisuSXQgb3N4LmNvY29hLlNlbGZJbml0CitDaGVjayB0aGF0CisuUWwgc2VsZgoraXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW5zaWRlIGFuIGluaXRpYWxpemVyIG1ldGhvZC4KKy5JdCBvc3guY29jb2EuVW51c2VkSXZhcnMKK1dhcm4gYWJvdXQgcHJpdmF0ZSBpdmFycyB0aGF0IGFyZSBuZXZlciB1c2VkLgorLkl0IG9zeC5jb2NvYS5WYXJpYWRpY01ldGhvZFR5cGVzCitDaGVjayBmb3IgcGFzc2luZyBub24tT2JqZWN0aXZlLUMgdHlwZXMgdG8gdmFyaWFkaWMgbWV0aG9kcyB0aGF0IGV4cGVjdCBvbmx5IE9iamVjdGl2ZS1DIHR5cGVzLgorLkl0IG9zeC5jb3JlRm91bmRhdGlvbi5DRkVycm9yCitDaGVjayB1c2FnZSBvZiBDRkVycm9yUmVmKiBwYXJhbWV0ZXJzLgorLkl0IG9zeC5jb3JlRm91bmRhdGlvbi5DRk51bWJlcgorQ2hlY2sgZm9yIHByb3BlciB1c2VzIG9mCisuRm4gQ0ZOdW1iZXJDcmVhdGUgLgorLkl0IG9zeC5jb3JlRm91bmRhdGlvbi5DRlJldGFpblJlbGVhc2UKK0NoZWNrIGZvciBudWxsIGFyZ3VtZW50cyB0bworLkZuIENGUmV0YWluICwKKy5GbiBDRlJlbGVhc2UgLAorYW5kCisuRm4gQ0ZNYWtlQ29sbGVjdGFibGUgLgorLkl0IG9zeC5jb3JlRm91bmRhdGlvbi5jb250YWluZXJzLk91dE9mQm91bmRzCitDaGVja3MgZm9yIGluZGV4IG91dC1vZi1ib3VuZHMgd2hlbiB1c2luZyB0aGUKKy5WdCBDRkFycmF5CitBUEkuCisuSXQgb3N4LmNvcmVGb3VuZGF0aW9uLmNvbnRhaW5lcnMuUG9pbnRlclNpemVkVmFsdWVzCitXYXJucyBpZgorLlZ0IENGQXJyYXkgLAorLlZ0IENGRGljdGlvbmFyeSAsCitvcgorLlZ0IENGU2V0CithcmUgY3JlYXRlZCB3aXRoIG5vbi1wb2ludGVyLXNpemUgdmFsdWVzLgorLkl0IHNlY3VyaXR5LkZsb2F0TG9vcENvdW50ZXIKK1dhcm4gb24gdXNpbmcgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSBhcyBhIGxvb3AgY291bnRlciAoQ0VSVDogRkxQMzAtQywgRkxQMzAtQ1BQKS4KKy5JdCBzZWN1cml0eS5pbnNlY3VyZUFQSS5VbmNoZWNrZWRSZXR1cm4KK1dhcm4gb24gdXNlcyBvZiBmdW5jdGlvbnMgd2hvc2UgcmV0dXJuIHZhbHVlcyBtdXN0IGJlIGFsd2F5cyBjaGVja2VkLgorLkl0IHNlY3VyaXR5Lmluc2VjdXJlQVBJLmdldHB3CitXYXJuIG9uIHVzZXMgb2YKKy5GbiBnZXRwdyAuCisuSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkuZ2V0cworV2FybiBvbiB1c2VzIG9mCisuRm4gZ2V0cyAuCisuSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkubWtzdGVtcAorV2FybiB3aGVuCisuRm4gbWtzdGVtcAoraXMgcGFzc2VkIGZld2VyIHRoYW4gNiBYJ3MgaW4gdGhlIGZvcm1hdCBzdHJpbmcuCisuSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkubWt0ZW1wCitXYXJuIG9uIHVzZXMgb2YKKy5GbiBta3RlbXAgLgorLkl0IHNlY3VyaXR5Lmluc2VjdXJlQVBJLnJhbmQKK1dhcm4gb24gdXNlcyBvZgorLkZuIHJhbmQgLAorLkZuIHJhbmRvbSAsCithbmQgcmVsYXRlZCBmdW5jdGlvbnMuCisuSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkuc3RyY3B5CitXYXJuIG9uIHVzZXMgb2YKKy5GbiBzdHJjcHkKK2FuZAorLkZuIHN0cmNhdCAuCisuSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkudmZvcmsKK1dhcm4gb24gdXNlcyBvZgorLkZuIHZmb3JrIC4KKy5JdCB1bml4LkFQSQorQ2hlY2sgY2FsbHMgdG8gdmFyaW91cyBVTklYL1Bvc2l4IGZ1bmN0aW9ucy4KKy5JdCB1bml4Lk1hbGxvYworQ2hlY2sgZm9yIG1lbW9yeSBsZWFrcywgZG91YmxlIGZyZWUsIGFuZCB1c2UtYWZ0ZXItZnJlZS4KKy5JdCB1bml4LmNzdHJpbmcuQmFkU2l6ZUFyZworQ2hlY2sgdGhlIHNpemUgYXJndW1lbnQgcGFzc2VkIGludG8gQyBzdHJpbmcgZnVuY3Rpb25zIGZvciBjb21tb24KK2Vycm9uZW91cyBwYXR0ZXJucy4KKy5JdCB1bml4LmNzdHJpbmcuTnVsbEFyZworQ2hlY2sgZm9yIG51bGwgcG9pbnRlcnMgYmVpbmcgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byBDIHN0cmluZyBmdW5jdGlvbnMuCisuRWwKKy5cIgorLlNoIEVYQU1QTEUKKy5JYyBzY2FuLWJ1aWxkIC1vIC90bXAvbXlodG1sZGlyIG1ha2UgLWo0CisuUHAKK1RoZSBhYm92ZSBleGFtcGxlIGNhdXNlcyBhbmFseXNpcyByZXBvcnRzIHRvIGJlIGRlcG9zaXRlZCBpbnRvCithIHN1YmRpcmVjdG9yeSBvZgorLlBhIC90bXAvbXlodG1sZGlyCithbmQgdG8gcnVuCisuSWMgbWFrZQord2l0aCB0aGUKKy5GbCBqNAorb3B0aW9uLgorQSBkaWZmZXJlbnQgc3ViZGlyZWN0b3J5IGlzIGNyZWF0ZWQgZWFjaCB0aW1lCisuTm0KK2FuYWx5emVzIGEgcHJvamVjdC4KK1RoZSBhbmFseXplciBzaG91bGQgc3VwcG9ydCBtb3N0IHBhcmFsbGVsIGJ1aWxkcywgYnV0IG5vdCBkaXN0cmlidXRlZCBidWlsZHMuCisuU2ggQVVUSE9SUworLk5tCit3YXMgd3JpdHRlbiBieQorLkFuICJUZWQgS3JlbWVuZWsiIC4KK0RvY3VtZW50YXRpb24gY29udHJpYnV0ZWQgYnkKKy5BbiAiSmFtZXMgSy4gTG93ZGVuIiBBcSBqa2xvd2RlbkBzY2hlbWFtYW5pYS5vcmcgLgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLWJ1aWxkL3NoYXJlL3NjYW4tYnVpbGQvc2NhbnZpZXcuY3NzIGIvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLWJ1aWxkL3NoYXJlL3NjYW4tYnVpbGQvc2NhbnZpZXcuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmOGE1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tYnVpbGQvc2hhcmUvc2Nhbi1idWlsZC9zY2Fudmlldy5jc3MKQEAgLTAsMCArMSw2MiBAQAorYm9keSB7IGNvbG9yOiMwMDAwMDA7IGJhY2tncm91bmQtY29sb3I6I2ZmZmZmZiB9Citib2R5IHsgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOjlwdCB9CitoMSB7IGZvbnQtc2l6ZTogMTRwdDsgfQoraDIgeyBmb250LXNpemU6IDEycHQ7IH0KK3RhYmxlIHsgZm9udC1zaXplOjlwdCB9Cit0YWJsZSB7IGJvcmRlci1zcGFjaW5nOiAwcHg7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrIH0KK3RoLCB0YWJsZSB0aGVhZCB7CisgIGJhY2tncm91bmQtY29sb3I6I2VlZTsgY29sb3I6IzY2NjY2NjsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7IGN1cnNvcjogZGVmYXVsdDsKKyAgdGV4dC1hbGlnbjpjZW50ZXI7CisgIGZvbnQtd2VpZ2h0OiBib2xkOyBmb250LWZhbWlseTogVmVyZGFuYTsKKyAgd2hpdGUtc3BhY2U6bm93cmFwOworfQorLlcgeyBmb250LXNpemU6MHB4IH0KK3RoLCB0ZCB7IHBhZGRpbmc6NXB4OyBwYWRkaW5nLWxlZnQ6OHB4OyB0ZXh0LWFsaWduOmxlZnQgfQordGQuU1VNTV9ERVNDIHsgcGFkZGluZy1sZWZ0OjEycHggfQordGQuREVTQyB7IHdoaXRlLXNwYWNlOnByZSB9Cit0ZC5RIHsgdGV4dC1hbGlnbjpyaWdodCB9Cit0ZCB7IHRleHQtYWxpZ246bGVmdCB9Cit0Ym9keS5zY3JvbGxDb250ZW50IHsgb3ZlcmZsb3c6YXV0byB9CisKK3RhYmxlLmZvcm1fZ3JvdXAgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKKyAgICBwYWRkaW5nOiAycHg7Cit9CisKK3RhYmxlLmZvcm1faW5uZXJfZ3JvdXAgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKKyAgICBwYWRkaW5nOiAwcHg7Cit9CisKK3RhYmxlLmZvcm0geworICAgIGJhY2tncm91bmQtY29sb3I6ICM5OTk7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKKyAgICBwYWRkaW5nOiAycHg7Cit9CisKK3RkLmZvcm1fbGFiZWwgeworICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisvKiBGb3Igb25lIGxpbmUgZW50aXJlcyAqLwordGQuZm9ybV9jbGFiZWwgeworICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgIHZlcnRpY2FsLWFsaWduOiBjZW50ZXI7Cit9Cit0ZC5mb3JtX3ZhbHVlIHsKKyAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9Cit0ZC5mb3JtX3N1Ym1pdCB7CisgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworaDEuU3VibWl0RmFpbCB7CisgICAgY29sb3I6ICNmMDA7Cit9CitoMS5TdWJtaXRPayB7Cit9CmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tYnVpbGQvc2hhcmUvc2Nhbi1idWlsZC9zb3J0dGFibGUuanMgYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tYnVpbGQvc2hhcmUvc2Nhbi1idWlsZC9zb3J0dGFibGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJmYWEwNwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTM4NTk0MjQvdG9vbHMvc2Nhbi1idWlsZC9zaGFyZS9zY2FuLWJ1aWxkL3NvcnR0YWJsZS5qcwpAQCAtMCwwICsxLDQ5MiBAQAorLyoKKyAgU29ydFRhYmxlCisgIHZlcnNpb24gMgorICA3dGggQXByaWwgMjAwNworICBTdHVhcnQgTGFuZ3JpZGdlLCBodHRwOi8vd3d3LmtyeW9nZW5peC5vcmcvY29kZS9icm93c2VyL3NvcnR0YWJsZS8KKworICBJbnN0cnVjdGlvbnM6CisgIERvd25sb2FkIHRoaXMgZmlsZQorICBBZGQgPHNjcmlwdCBzcmM9InNvcnR0YWJsZS5qcyI+PC9zY3JpcHQ+IHRvIHlvdXIgSFRNTAorICBBZGQgY2xhc3M9InNvcnRhYmxlIiB0byBhbnkgdGFibGUgeW91J2QgbGlrZSB0byBtYWtlIHNvcnRhYmxlCisgIENsaWNrIG9uIHRoZSBoZWFkZXJzIHRvIHNvcnQKKworICBUaGFua3MgdG8gbWFueSwgbWFueSBwZW9wbGUgZm9yIGNvbnRyaWJ1dGlvbnMgYW5kIHN1Z2dlc3Rpb25zLgorICBMaWNlbmNlZCBhcyBYMTE6IGh0dHA6Ly93d3cua3J5b2dlbml4Lm9yZy9jb2RlL2Jyb3dzZXIvbGljZW5jZS5odG1sCisgIFRoaXMgYmFzaWNhbGx5IG1lYW5zOiBkbyB3aGF0IHlvdSB3YW50IHdpdGggaXQuCisqLworCisKK3ZhciBzdElzSUUgPSAvKkBjY19vbiFAKi9mYWxzZTsKKworc29ydHRhYmxlID0geworICBpbml0OiBmdW5jdGlvbigpIHsKKyAgICAvLyBxdWl0IGlmIHRoaXMgZnVuY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQKKyAgICBpZiAoYXJndW1lbnRzLmNhbGxlZS5kb25lKSByZXR1cm47CisgICAgLy8gZmxhZyB0aGlzIGZ1bmN0aW9uIHNvIHdlIGRvbid0IGRvIHRoZSBzYW1lIHRoaW5nIHR3aWNlCisgICAgYXJndW1lbnRzLmNhbGxlZS5kb25lID0gdHJ1ZTsKKyAgICAvLyBraWxsIHRoZSB0aW1lcgorICAgIGlmIChfdGltZXIpIGNsZWFySW50ZXJ2YWwoX3RpbWVyKTsKKworICAgIGlmICghZG9jdW1lbnQuY3JlYXRlRWxlbWVudCB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUpIHJldHVybjsKKworICAgIHNvcnR0YWJsZS5EQVRFX1JFID0gL14oXGRcZD8pW1wvXC4tXShcZFxkPylbXC9cLi1dKChcZFxkKT9cZFxkKSQvOworCisgICAgZm9yRWFjaChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGFibGUnKSwgZnVuY3Rpb24odGFibGUpIHsKKyAgICAgIGlmICh0YWJsZS5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnRhYmxlXGIvKSAhPSAtMSkgeworICAgICAgICBzb3J0dGFibGUubWFrZVNvcnRhYmxlKHRhYmxlKTsKKyAgICAgIH0KKyAgICB9KTsKKworICB9LAorCisgIG1ha2VTb3J0YWJsZTogZnVuY3Rpb24odGFibGUpIHsKKyAgICBpZiAodGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RoZWFkJykubGVuZ3RoID09IDApIHsKKyAgICAgIC8vIHRhYmxlIGRvZXNuJ3QgaGF2ZSBhIHRIZWFkLiBTaW5jZSBpdCBzaG91bGQgaGF2ZSwgY3JlYXRlIG9uZSBhbmQKKyAgICAgIC8vIHB1dCB0aGUgZmlyc3QgdGFibGUgcm93IGluIGl0LgorICAgICAgdGhlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGhlYWQnKTsKKyAgICAgIHRoZS5hcHBlbmRDaGlsZCh0YWJsZS5yb3dzWzBdKTsKKyAgICAgIHRhYmxlLmluc2VydEJlZm9yZSh0aGUsdGFibGUuZmlyc3RDaGlsZCk7CisgICAgfQorICAgIC8vIFNhZmFyaSBkb2Vzbid0IHN1cHBvcnQgdGFibGUudEhlYWQsIHNpZ2gKKyAgICBpZiAodGFibGUudEhlYWQgPT0gbnVsbCkgdGFibGUudEhlYWQgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGhlYWQnKVswXTsKKworICAgIGlmICh0YWJsZS50SGVhZC5yb3dzLmxlbmd0aCAhPSAxKSByZXR1cm47IC8vIGNhbid0IGNvcGUgd2l0aCB0d28gaGVhZGVyIHJvd3MKKworICAgIC8vIFNvcnR0YWJsZSB2MSBwdXQgcm93cyB3aXRoIGEgY2xhc3Mgb2YgInNvcnRib3R0b20iIGF0IHRoZSBib3R0b20gKGFzCisgICAgLy8gInRvdGFsIiByb3dzLCBmb3IgZXhhbXBsZSkuIFRoaXMgaXMgQiZSLCBzaW5jZSB3aGF0IHlvdSdyZSBzdXBwb3NlZAorICAgIC8vIHRvIGRvIGlzIHB1dCB0aGVtIGluIGEgdGZvb3QuIFNvLCBpZiB0aGVyZSBhcmUgc29ydGJvdHRvbSByb3dzLAorICAgIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBtb3ZlIHRoZW0gdG8gdGZvb3QgKGNyZWF0aW5nIGl0IGlmIG5lZWRlZCkuCisgICAgc29ydGJvdHRvbXJvd3MgPSBbXTsKKyAgICBmb3IgKHZhciBpPTA7IGk8dGFibGUucm93cy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKHRhYmxlLnJvd3NbaV0uY2xhc3NOYW1lLnNlYXJjaCgvXGJzb3J0Ym90dG9tXGIvKSAhPSAtMSkgeworICAgICAgICBzb3J0Ym90dG9tcm93c1tzb3J0Ym90dG9tcm93cy5sZW5ndGhdID0gdGFibGUucm93c1tpXTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKHNvcnRib3R0b21yb3dzKSB7CisgICAgICBpZiAodGFibGUudEZvb3QgPT0gbnVsbCkgeworICAgICAgICAvLyB0YWJsZSBkb2Vzbid0IGhhdmUgYSB0Zm9vdC4gQ3JlYXRlIG9uZS4KKyAgICAgICAgdGZvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGZvb3QnKTsKKyAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodGZvKTsKKyAgICAgIH0KKyAgICAgIGZvciAodmFyIGk9MDsgaTxzb3J0Ym90dG9tcm93cy5sZW5ndGg7IGkrKykgeworICAgICAgICB0Zm8uYXBwZW5kQ2hpbGQoc29ydGJvdHRvbXJvd3NbaV0pOworICAgICAgfQorICAgICAgZGVsZXRlIHNvcnRib3R0b21yb3dzOworICAgIH0KKworICAgIC8vIHdvcmsgdGhyb3VnaCBlYWNoIGNvbHVtbiBhbmQgY2FsY3VsYXRlIGl0cyB0eXBlCisgICAgaGVhZHJvdyA9IHRhYmxlLnRIZWFkLnJvd3NbMF0uY2VsbHM7CisgICAgZm9yICh2YXIgaT0wOyBpPGhlYWRyb3cubGVuZ3RoOyBpKyspIHsKKyAgICAgIC8vIG1hbnVhbGx5IG92ZXJyaWRlIHRoZSB0eXBlIHdpdGggYSBzb3J0dGFibGVfdHlwZSBhdHRyaWJ1dGUKKyAgICAgIGlmICghaGVhZHJvd1tpXS5jbGFzc05hbWUubWF0Y2goL1xic29ydHRhYmxlX25vc29ydFxiLykpIHsgLy8gc2tpcCB0aGlzIGNvbAorICAgICAgICBtdGNoID0gaGVhZHJvd1tpXS5jbGFzc05hbWUubWF0Y2goL1xic29ydHRhYmxlXyhbYS16MC05XSspXGIvKTsKKyAgICAgICAgaWYgKG10Y2gpIHsgb3ZlcnJpZGUgPSBtdGNoWzFdOyB9CisJICAgICAgaWYgKG10Y2ggJiYgdHlwZW9mIHNvcnR0YWJsZVsic29ydF8iK292ZXJyaWRlXSA9PSAnZnVuY3Rpb24nKSB7CisJICAgICAgICBoZWFkcm93W2ldLnNvcnR0YWJsZV9zb3J0ZnVuY3Rpb24gPSBzb3J0dGFibGVbInNvcnRfIitvdmVycmlkZV07CisJICAgICAgfSBlbHNlIHsKKwkgICAgICAgIGhlYWRyb3dbaV0uc29ydHRhYmxlX3NvcnRmdW5jdGlvbiA9IHNvcnR0YWJsZS5ndWVzc1R5cGUodGFibGUsaSk7CisJICAgICAgfQorCSAgICAgIC8vIG1ha2UgaXQgY2xpY2thYmxlIHRvIHNvcnQKKwkgICAgICBoZWFkcm93W2ldLnNvcnR0YWJsZV9jb2x1bW5pbmRleCA9IGk7CisJICAgICAgaGVhZHJvd1tpXS5zb3J0dGFibGVfdGJvZHkgPSB0YWJsZS50Qm9kaWVzWzBdOworCSAgICAgIGRlYW5fYWRkRXZlbnQoaGVhZHJvd1tpXSwiY2xpY2siLCBmdW5jdGlvbihlKSB7CisKKyAgICAgICAgICBpZiAodGhpcy5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnR0YWJsZV9zb3J0ZWRcYi8pICE9IC0xKSB7CisgICAgICAgICAgICAvLyBpZiB3ZSdyZSBhbHJlYWR5IHNvcnRlZCBieSB0aGlzIGNvbHVtbiwganVzdAorICAgICAgICAgICAgLy8gcmV2ZXJzZSB0aGUgdGFibGUsIHdoaWNoIGlzIHF1aWNrZXIKKyAgICAgICAgICAgIHNvcnR0YWJsZS5yZXZlcnNlKHRoaXMuc29ydHRhYmxlX3Rib2R5KTsKKyAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUucmVwbGFjZSgnc29ydHRhYmxlX3NvcnRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZScpOworICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc29ydHRhYmxlX3NvcnRmd2RpbmQnKSk7CisgICAgICAgICAgICBzb3J0cmV2aW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOworICAgICAgICAgICAgc29ydHJldmluZC5pZCA9ICJzb3J0dGFibGVfc29ydHJldmluZCI7CisgICAgICAgICAgICBzb3J0cmV2aW5kLmlubmVySFRNTCA9IHN0SXNJRSA/ICcmbmJzcDxmb250IGZhY2U9IndlYmRpbmdzIj41PC9mb250PicgOiAnJm5ic3A7JiN4MjVCNDsnOworICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChzb3J0cmV2aW5kKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHRoaXMuY2xhc3NOYW1lLnNlYXJjaCgvXGJzb3J0dGFibGVfc29ydGVkX3JldmVyc2VcYi8pICE9IC0xKSB7CisgICAgICAgICAgICAvLyBpZiB3ZSdyZSBhbHJlYWR5IHNvcnRlZCBieSB0aGlzIGNvbHVtbiBpbiByZXZlcnNlLCBqdXN0CisgICAgICAgICAgICAvLyByZS1yZXZlcnNlIHRoZSB0YWJsZSwgd2hpY2ggaXMgcXVpY2tlcgorICAgICAgICAgICAgc29ydHRhYmxlLnJldmVyc2UodGhpcy5zb3J0dGFibGVfdGJvZHkpOworICAgICAgICAgICAgdGhpcy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZS5yZXBsYWNlKCdzb3J0dGFibGVfc29ydGVkX3JldmVyc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3J0dGFibGVfc29ydGVkJyk7CisgICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3J0dGFibGVfc29ydHJldmluZCcpKTsKKyAgICAgICAgICAgIHNvcnRmd2RpbmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAgICAgICAgICBzb3J0ZndkaW5kLmlkID0gInNvcnR0YWJsZV9zb3J0ZndkaW5kIjsKKyAgICAgICAgICAgIHNvcnRmd2RpbmQuaW5uZXJIVE1MID0gc3RJc0lFID8gJyZuYnNwPGZvbnQgZmFjZT0id2ViZGluZ3MiPjY8L2ZvbnQ+JyA6ICcmbmJzcDsmI3gyNUJFOyc7CisgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHNvcnRmd2RpbmQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKworICAgICAgICAgIC8vIHJlbW92ZSBzb3J0dGFibGVfc29ydGVkIGNsYXNzZXMKKyAgICAgICAgICB0aGVhZHJvdyA9IHRoaXMucGFyZW50Tm9kZTsKKyAgICAgICAgICBmb3JFYWNoKHRoZWFkcm93LmNoaWxkTm9kZXMsIGZ1bmN0aW9uKGNlbGwpIHsKKyAgICAgICAgICAgIGlmIChjZWxsLm5vZGVUeXBlID09IDEpIHsgLy8gYW4gZWxlbWVudAorICAgICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9IGNlbGwuY2xhc3NOYW1lLnJlcGxhY2UoJ3NvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZScsJycpOworICAgICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9IGNlbGwuY2xhc3NOYW1lLnJlcGxhY2UoJ3NvcnR0YWJsZV9zb3J0ZWQnLCcnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAgICBzb3J0ZndkaW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvcnR0YWJsZV9zb3J0ZndkaW5kJyk7CisgICAgICAgICAgaWYgKHNvcnRmd2RpbmQpIHsgc29ydGZ3ZGluZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNvcnRmd2RpbmQpOyB9CisgICAgICAgICAgc29ydHJldmluZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3J0dGFibGVfc29ydHJldmluZCcpOworICAgICAgICAgIGlmIChzb3J0cmV2aW5kKSB7IHNvcnRyZXZpbmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzb3J0cmV2aW5kKTsgfQorCisgICAgICAgICAgdGhpcy5jbGFzc05hbWUgKz0gJyBzb3J0dGFibGVfc29ydGVkJzsKKyAgICAgICAgICBzb3J0ZndkaW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOworICAgICAgICAgIHNvcnRmd2RpbmQuaWQgPSAic29ydHRhYmxlX3NvcnRmd2RpbmQiOworICAgICAgICAgIHNvcnRmd2RpbmQuaW5uZXJIVE1MID0gc3RJc0lFID8gJyZuYnNwPGZvbnQgZmFjZT0id2ViZGluZ3MiPjY8L2ZvbnQ+JyA6ICcmbmJzcDsmI3gyNUJFOyc7CisgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChzb3J0ZndkaW5kKTsKKworCSAgICAgICAgLy8gYnVpbGQgYW4gYXJyYXkgdG8gc29ydC4gVGhpcyBpcyBhIFNjaHdhcnR6aWFuIHRyYW5zZm9ybSB0aGluZywKKwkgICAgICAgIC8vIGkuZS4sIHdlICJkZWNvcmF0ZSIgZWFjaCByb3cgd2l0aCB0aGUgYWN0dWFsIHNvcnQga2V5LAorCSAgICAgICAgLy8gc29ydCBiYXNlZCBvbiB0aGUgc29ydCBrZXlzLCBhbmQgdGhlbiBwdXQgdGhlIHJvd3MgYmFjayBpbiBvcmRlcgorCSAgICAgICAgLy8gd2hpY2ggaXMgYSBsb3QgZmFzdGVyIGJlY2F1c2UgeW91IG9ubHkgZG8gZ2V0SW5uZXJUZXh0IG9uY2UgcGVyIHJvdworCSAgICAgICAgcm93X2FycmF5ID0gW107CisJICAgICAgICBjb2wgPSB0aGlzLnNvcnR0YWJsZV9jb2x1bW5pbmRleDsKKwkgICAgICAgIHJvd3MgPSB0aGlzLnNvcnR0YWJsZV90Ym9keS5yb3dzOworCSAgICAgICAgZm9yICh2YXIgaj0wOyBqPHJvd3MubGVuZ3RoOyBqKyspIHsKKwkgICAgICAgICAgcm93X2FycmF5W3Jvd19hcnJheS5sZW5ndGhdID0gW3NvcnR0YWJsZS5nZXRJbm5lclRleHQocm93c1tqXS5jZWxsc1tjb2xdKSwgcm93c1tqXV07CisJICAgICAgICB9CisJICAgICAgICAvKiBJZiB5b3Ugd2FudCBhIHN0YWJsZSBzb3J0LCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lICovCisJICAgICAgICBzb3J0dGFibGUuc2hha2VyX3NvcnQocm93X2FycmF5LCB0aGlzLnNvcnR0YWJsZV9zb3J0ZnVuY3Rpb24pOworCSAgICAgICAgLyogYW5kIGNvbW1lbnQgb3V0IHRoaXMgb25lICovCisJICAgICAgICAvL3Jvd19hcnJheS5zb3J0KHRoaXMuc29ydHRhYmxlX3NvcnRmdW5jdGlvbik7CisKKwkgICAgICAgIHRiID0gdGhpcy5zb3J0dGFibGVfdGJvZHk7CisJICAgICAgICBmb3IgKHZhciBqPTA7IGo8cm93X2FycmF5Lmxlbmd0aDsgaisrKSB7CisJICAgICAgICAgIHRiLmFwcGVuZENoaWxkKHJvd19hcnJheVtqXVsxXSk7CisJICAgICAgICB9CisKKwkgICAgICAgIGRlbGV0ZSByb3dfYXJyYXk7CisJICAgICAgfSk7CisJICAgIH0KKyAgICB9CisgIH0sCisKKyAgZ3Vlc3NUeXBlOiBmdW5jdGlvbih0YWJsZSwgY29sdW1uKSB7CisgICAgLy8gZ3Vlc3MgdGhlIHR5cGUgb2YgYSBjb2x1bW4gYmFzZWQgb24gaXRzIGZpcnN0IG5vbi1ibGFuayByb3cKKyAgICBzb3J0Zm4gPSBzb3J0dGFibGUuc29ydF9hbHBoYTsKKyAgICBmb3IgKHZhciBpPTA7IGk8dGFibGUudEJvZGllc1swXS5yb3dzLmxlbmd0aDsgaSsrKSB7CisgICAgICB0ZXh0ID0gc29ydHRhYmxlLmdldElubmVyVGV4dCh0YWJsZS50Qm9kaWVzWzBdLnJvd3NbaV0uY2VsbHNbY29sdW1uXSk7CisgICAgICBpZiAodGV4dCAhPSAnJykgeworICAgICAgICBpZiAodGV4dC5tYXRjaCgvXi0/W6MkpF0/W1xkLC5dKyU/JC8pKSB7CisgICAgICAgICAgcmV0dXJuIHNvcnR0YWJsZS5zb3J0X251bWVyaWM7CisgICAgICAgIH0KKyAgICAgICAgLy8gY2hlY2sgZm9yIGEgZGF0ZTogZGQvbW0veXl5eSBvciBkZC9tbS95eQorICAgICAgICAvLyBjYW4gaGF2ZSAvIG9yIC4gb3IgLSBhcyBzZXBhcmF0b3IKKyAgICAgICAgLy8gY2FuIGJlIG1tL2RkIGFzIHdlbGwKKyAgICAgICAgcG9zc2RhdGUgPSB0ZXh0Lm1hdGNoKHNvcnR0YWJsZS5EQVRFX1JFKQorICAgICAgICBpZiAocG9zc2RhdGUpIHsKKyAgICAgICAgICAvLyBsb29rcyBsaWtlIGEgZGF0ZQorICAgICAgICAgIGZpcnN0ID0gcGFyc2VJbnQocG9zc2RhdGVbMV0pOworICAgICAgICAgIHNlY29uZCA9IHBhcnNlSW50KHBvc3NkYXRlWzJdKTsKKyAgICAgICAgICBpZiAoZmlyc3QgPiAxMikgeworICAgICAgICAgICAgLy8gZGVmaW5pdGVseSBkZC9tbQorICAgICAgICAgICAgcmV0dXJuIHNvcnR0YWJsZS5zb3J0X2RkbW07CisgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmQgPiAxMikgeworICAgICAgICAgICAgcmV0dXJuIHNvcnR0YWJsZS5zb3J0X21tZGQ7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGxvb2tzIGxpa2UgYSBkYXRlLCBidXQgd2UgY2FuJ3QgdGVsbCB3aGljaCwgc28gYXNzdW1lCisgICAgICAgICAgICAvLyB0aGF0IGl0J3MgZGQvbW0gKEVuZ2xpc2ggaW1wZXJpYWxpc20hKSBhbmQga2VlcCBsb29raW5nCisgICAgICAgICAgICBzb3J0Zm4gPSBzb3J0dGFibGUuc29ydF9kZG1tOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc29ydGZuOworICB9LAorCisgIGdldElubmVyVGV4dDogZnVuY3Rpb24obm9kZSkgeworICAgIC8vIGdldHMgdGhlIHRleHQgd2Ugd2FudCB0byB1c2UgZm9yIHNvcnRpbmcgZm9yIGEgY2VsbC4KKyAgICAvLyBzdHJpcHMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4KKyAgICAvLyB0aGlzIGlzICpub3QqIGEgZ2VuZXJpYyBnZXRJbm5lclRleHQgZnVuY3Rpb247IGl0J3Mgc3BlY2lhbCB0byBzb3J0dGFibGUuCisgICAgLy8gZm9yIGV4YW1wbGUsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGNlbGwgdGV4dCB3aXRoIGEgY3VzdG9ta2V5IGF0dHJpYnV0ZS4KKyAgICAvLyBpdCBhbHNvIGdldHMgLnZhbHVlIGZvciA8aW5wdXQ+IGZpZWxkcy4KKworICAgIGhhc0lucHV0cyA9ICh0eXBlb2Ygbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSA9PSAnZnVuY3Rpb24nKSAmJgorICAgICAgICAgICAgICAgICBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpLmxlbmd0aDsKKworICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZSgic29ydHRhYmxlX2N1c3RvbWtleSIpICE9IG51bGwpIHsKKyAgICAgIHJldHVybiBub2RlLmdldEF0dHJpYnV0ZSgic29ydHRhYmxlX2N1c3RvbWtleSIpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlb2Ygbm9kZS50ZXh0Q29udGVudCAhPSAndW5kZWZpbmVkJyAmJiAhaGFzSW5wdXRzKSB7CisgICAgICByZXR1cm4gbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlb2Ygbm9kZS5pbm5lclRleHQgIT0gJ3VuZGVmaW5lZCcgJiYgIWhhc0lucHV0cykgeworICAgICAgcmV0dXJuIG5vZGUuaW5uZXJUZXh0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGVvZiBub2RlLnRleHQgIT0gJ3VuZGVmaW5lZCcgJiYgIWhhc0lucHV0cykgeworICAgICAgcmV0dXJuIG5vZGUudGV4dC5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkgeworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSAnaW5wdXQnKSB7CisgICAgICAgICAgICByZXR1cm4gbm9kZS52YWx1ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOworICAgICAgICAgIH0KKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgIHJldHVybiBub2RlLm5vZGVWYWx1ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgIGNhc2UgMTE6CisgICAgICAgICAgdmFyIGlubmVyVGV4dCA9ICcnOworICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpbm5lclRleHQgKz0gc29ydHRhYmxlLmdldElubmVyVGV4dChub2RlLmNoaWxkTm9kZXNbaV0pOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gaW5uZXJUZXh0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuICcnOworICAgICAgfQorICAgIH0KKyAgfSwKKworICByZXZlcnNlOiBmdW5jdGlvbih0Ym9keSkgeworICAgIC8vIHJldmVyc2UgdGhlIHJvd3MgaW4gYSB0Ym9keQorICAgIG5ld3Jvd3MgPSBbXTsKKyAgICBmb3IgKHZhciBpPTA7IGk8dGJvZHkucm93cy5sZW5ndGg7IGkrKykgeworICAgICAgbmV3cm93c1tuZXdyb3dzLmxlbmd0aF0gPSB0Ym9keS5yb3dzW2ldOworICAgIH0KKyAgICBmb3IgKHZhciBpPW5ld3Jvd3MubGVuZ3RoLTE7IGk+PTA7IGktLSkgeworICAgICAgIHRib2R5LmFwcGVuZENoaWxkKG5ld3Jvd3NbaV0pOworICAgIH0KKyAgICBkZWxldGUgbmV3cm93czsKKyAgfSwKKworICAvKiBzb3J0IGZ1bmN0aW9ucworICAgICBlYWNoIHNvcnQgZnVuY3Rpb24gdGFrZXMgdHdvIHBhcmFtZXRlcnMsIGEgYW5kIGIKKyAgICAgeW91IGFyZSBjb21wYXJpbmcgYVswXSBhbmQgYlswXSAqLworICBzb3J0X251bWVyaWM6IGZ1bmN0aW9uKGEsYikgeworICAgIGFhID0gcGFyc2VGbG9hdChhWzBdLnJlcGxhY2UoL1teMC05Li1dL2csJycpKTsKKyAgICBpZiAoaXNOYU4oYWEpKSBhYSA9IDA7CisgICAgYmIgPSBwYXJzZUZsb2F0KGJbMF0ucmVwbGFjZSgvW14wLTkuLV0vZywnJykpOworICAgIGlmIChpc05hTihiYikpIGJiID0gMDsKKyAgICByZXR1cm4gYWEtYmI7CisgIH0sCisgIHNvcnRfYWxwaGE6IGZ1bmN0aW9uKGEsYikgeworICAgIGlmIChhWzBdPT1iWzBdKSByZXR1cm4gMDsKKyAgICBpZiAoYVswXTxiWzBdKSByZXR1cm4gLTE7CisgICAgcmV0dXJuIDE7CisgIH0sCisgIHNvcnRfZGRtbTogZnVuY3Rpb24oYSxiKSB7CisgICAgbXRjaCA9IGFbMF0ubWF0Y2goc29ydHRhYmxlLkRBVEVfUkUpOworICAgIHkgPSBtdGNoWzNdOyBtID0gbXRjaFsyXTsgZCA9IG10Y2hbMV07CisgICAgaWYgKG0ubGVuZ3RoID09IDEpIG0gPSAnMCcrbTsKKyAgICBpZiAoZC5sZW5ndGggPT0gMSkgZCA9ICcwJytkOworICAgIGR0MSA9IHkrbStkOworICAgIG10Y2ggPSBiWzBdLm1hdGNoKHNvcnR0YWJsZS5EQVRFX1JFKTsKKyAgICB5ID0gbXRjaFszXTsgbSA9IG10Y2hbMl07IGQgPSBtdGNoWzFdOworICAgIGlmIChtLmxlbmd0aCA9PSAxKSBtID0gJzAnK207CisgICAgaWYgKGQubGVuZ3RoID09IDEpIGQgPSAnMCcrZDsKKyAgICBkdDIgPSB5K20rZDsKKyAgICBpZiAoZHQxPT1kdDIpIHJldHVybiAwOworICAgIGlmIChkdDE8ZHQyKSByZXR1cm4gLTE7CisgICAgcmV0dXJuIDE7CisgIH0sCisgIHNvcnRfbW1kZDogZnVuY3Rpb24oYSxiKSB7CisgICAgbXRjaCA9IGFbMF0ubWF0Y2goc29ydHRhYmxlLkRBVEVfUkUpOworICAgIHkgPSBtdGNoWzNdOyBkID0gbXRjaFsyXTsgbSA9IG10Y2hbMV07CisgICAgaWYgKG0ubGVuZ3RoID09IDEpIG0gPSAnMCcrbTsKKyAgICBpZiAoZC5sZW5ndGggPT0gMSkgZCA9ICcwJytkOworICAgIGR0MSA9IHkrbStkOworICAgIG10Y2ggPSBiWzBdLm1hdGNoKHNvcnR0YWJsZS5EQVRFX1JFKTsKKyAgICB5ID0gbXRjaFszXTsgZCA9IG10Y2hbMl07IG0gPSBtdGNoWzFdOworICAgIGlmIChtLmxlbmd0aCA9PSAxKSBtID0gJzAnK207CisgICAgaWYgKGQubGVuZ3RoID09IDEpIGQgPSAnMCcrZDsKKyAgICBkdDIgPSB5K20rZDsKKyAgICBpZiAoZHQxPT1kdDIpIHJldHVybiAwOworICAgIGlmIChkdDE8ZHQyKSByZXR1cm4gLTE7CisgICAgcmV0dXJuIDE7CisgIH0sCisKKyAgc2hha2VyX3NvcnQ6IGZ1bmN0aW9uKGxpc3QsIGNvbXBfZnVuYykgeworICAgIC8vIEEgc3RhYmxlIHNvcnQgZnVuY3Rpb24gdG8gYWxsb3cgbXVsdGktbGV2ZWwgc29ydGluZyBvZiBkYXRhCisgICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvY2t0YWlsX3NvcnQKKyAgICAvLyB0aGFua3MgdG8gSm9zZXBoIE5haG1pYXMKKyAgICB2YXIgYiA9IDA7CisgICAgdmFyIHQgPSBsaXN0Lmxlbmd0aCAtIDE7CisgICAgdmFyIHN3YXAgPSB0cnVlOworCisgICAgd2hpbGUoc3dhcCkgeworICAgICAgICBzd2FwID0gZmFsc2U7CisgICAgICAgIGZvcih2YXIgaSA9IGI7IGkgPCB0OyArK2kpIHsKKyAgICAgICAgICAgIGlmICggY29tcF9mdW5jKGxpc3RbaV0sIGxpc3RbaSsxXSkgPiAwICkgeworICAgICAgICAgICAgICAgIHZhciBxID0gbGlzdFtpXTsgbGlzdFtpXSA9IGxpc3RbaSsxXTsgbGlzdFtpKzFdID0gcTsKKyAgICAgICAgICAgICAgICBzd2FwID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAvLyBmb3IKKyAgICAgICAgdC0tOworCisgICAgICAgIGlmICghc3dhcCkgYnJlYWs7CisKKyAgICAgICAgZm9yKHZhciBpID0gdDsgaSA+IGI7IC0taSkgeworICAgICAgICAgICAgaWYgKCBjb21wX2Z1bmMobGlzdFtpXSwgbGlzdFtpLTFdKSA8IDAgKSB7CisgICAgICAgICAgICAgICAgdmFyIHEgPSBsaXN0W2ldOyBsaXN0W2ldID0gbGlzdFtpLTFdOyBsaXN0W2ktMV0gPSBxOworICAgICAgICAgICAgICAgIHN3YXAgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IC8vIGZvcgorICAgICAgICBiKys7CisKKyAgICB9IC8vIHdoaWxlKHN3YXApCisgIH0KK30KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICBTdXBwb3J0aW5nIGZ1bmN0aW9uczogYnVuZGxlZCBoZXJlIHRvIGF2b2lkIGRlcGVuZGluZyBvbiBhIGxpYnJhcnkKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvLyBEZWFuIEVkd2FyZHMvTWF0dGhpYXMgTWlsbGVyL0pvaG4gUmVzaWcKKworLyogZm9yIE1vemlsbGEvT3BlcmE5ICovCitpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgeworICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBzb3J0dGFibGUuaW5pdCwgZmFsc2UpOworfQorCisvKiBmb3IgSW50ZXJuZXQgRXhwbG9yZXIgKi8KKy8qQGNjX29uIEAqLworLypAaWYgKEBfd2luMzIpCisgICAgZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgaWQ9X19pZV9vbmxvYWQgZGVmZXIgc3JjPWphdmFzY3JpcHQ6dm9pZCgwKT48XC9zY3JpcHQ+Iik7CisgICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX2llX29ubG9hZCIpOworICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSAiY29tcGxldGUiKSB7CisgICAgICAgICAgICBzb3J0dGFibGUuaW5pdCgpOyAvLyBjYWxsIHRoZSBvbmxvYWQgaGFuZGxlcgorICAgICAgICB9CisgICAgfTsKKy8qQGVuZCBAKi8KKworLyogZm9yIFNhZmFyaSAqLworaWYgKC9XZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSB7IC8vIHNuaWZmCisgICAgdmFyIF90aW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoL2xvYWRlZHxjb21wbGV0ZS8udGVzdChkb2N1bWVudC5yZWFkeVN0YXRlKSkgeworICAgICAgICAgICAgc29ydHRhYmxlLmluaXQoKTsgLy8gY2FsbCB0aGUgb25sb2FkIGhhbmRsZXIKKyAgICAgICAgfQorICAgIH0sIDEwKTsKK30KKworLyogZm9yIG90aGVyIGJyb3dzZXJzICovCit3aW5kb3cub25sb2FkID0gc29ydHRhYmxlLmluaXQ7CisKKy8vIHdyaXR0ZW4gYnkgRGVhbiBFZHdhcmRzLCAyMDA1CisvLyB3aXRoIGlucHV0IGZyb20gVGlubyBaaWpkZWwsIE1hdHRoaWFzIE1pbGxlciwgRGllZ28gUGVyaW5pCisKKy8vIGh0dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNS8xMC9hZGQtZXZlbnQvCisKK2Z1bmN0aW9uIGRlYW5fYWRkRXZlbnQoZWxlbWVudCwgdHlwZSwgaGFuZGxlcikgeworCWlmIChlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKKwkJZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTsKKwl9IGVsc2UgeworCQkvLyBhc3NpZ24gZWFjaCBldmVudCBoYW5kbGVyIGEgdW5pcXVlIElECisJCWlmICghaGFuZGxlci4kJGd1aWQpIGhhbmRsZXIuJCRndWlkID0gZGVhbl9hZGRFdmVudC5ndWlkKys7CisJCS8vIGNyZWF0ZSBhIGhhc2ggdGFibGUgb2YgZXZlbnQgdHlwZXMgZm9yIHRoZSBlbGVtZW50CisJCWlmICghZWxlbWVudC5ldmVudHMpIGVsZW1lbnQuZXZlbnRzID0ge307CisJCS8vIGNyZWF0ZSBhIGhhc2ggdGFibGUgb2YgZXZlbnQgaGFuZGxlcnMgZm9yIGVhY2ggZWxlbWVudC9ldmVudCBwYWlyCisJCXZhciBoYW5kbGVycyA9IGVsZW1lbnQuZXZlbnRzW3R5cGVdOworCQlpZiAoIWhhbmRsZXJzKSB7CisJCQloYW5kbGVycyA9IGVsZW1lbnQuZXZlbnRzW3R5cGVdID0ge307CisJCQkvLyBzdG9yZSB0aGUgZXhpc3RpbmcgZXZlbnQgaGFuZGxlciAoaWYgdGhlcmUgaXMgb25lKQorCQkJaWYgKGVsZW1lbnRbIm9uIiArIHR5cGVdKSB7CisJCQkJaGFuZGxlcnNbMF0gPSBlbGVtZW50WyJvbiIgKyB0eXBlXTsKKwkJCX0KKwkJfQorCQkvLyBzdG9yZSB0aGUgZXZlbnQgaGFuZGxlciBpbiB0aGUgaGFzaCB0YWJsZQorCQloYW5kbGVyc1toYW5kbGVyLiQkZ3VpZF0gPSBoYW5kbGVyOworCQkvLyBhc3NpZ24gYSBnbG9iYWwgZXZlbnQgaGFuZGxlciB0byBkbyBhbGwgdGhlIHdvcmsKKwkJZWxlbWVudFsib24iICsgdHlwZV0gPSBoYW5kbGVFdmVudDsKKwl9Cit9OworLy8gYSBjb3VudGVyIHVzZWQgdG8gY3JlYXRlIHVuaXF1ZSBJRHMKK2RlYW5fYWRkRXZlbnQuZ3VpZCA9IDE7CisKK2Z1bmN0aW9uIHJlbW92ZUV2ZW50KGVsZW1lbnQsIHR5cGUsIGhhbmRsZXIpIHsKKwlpZiAoZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKSB7CisJCWVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7CisJfSBlbHNlIHsKKwkJLy8gZGVsZXRlIHRoZSBldmVudCBoYW5kbGVyIGZyb20gdGhlIGhhc2ggdGFibGUKKwkJaWYgKGVsZW1lbnQuZXZlbnRzICYmIGVsZW1lbnQuZXZlbnRzW3R5cGVdKSB7CisJCQlkZWxldGUgZWxlbWVudC5ldmVudHNbdHlwZV1baGFuZGxlci4kJGd1aWRdOworCQl9CisJfQorfTsKKworZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQpIHsKKwl2YXIgcmV0dXJuVmFsdWUgPSB0cnVlOworCS8vIGdyYWIgdGhlIGV2ZW50IG9iamVjdCAoSUUgdXNlcyBhIGdsb2JhbCBldmVudCBvYmplY3QpCisJZXZlbnQgPSBldmVudCB8fCBmaXhFdmVudCgoKHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMpLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cpLmV2ZW50KTsKKwkvLyBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGhhc2ggdGFibGUgb2YgZXZlbnQgaGFuZGxlcnMKKwl2YXIgaGFuZGxlcnMgPSB0aGlzLmV2ZW50c1tldmVudC50eXBlXTsKKwkvLyBleGVjdXRlIGVhY2ggZXZlbnQgaGFuZGxlcgorCWZvciAodmFyIGkgaW4gaGFuZGxlcnMpIHsKKwkJdGhpcy4kJGhhbmRsZUV2ZW50ID0gaGFuZGxlcnNbaV07CisJCWlmICh0aGlzLiQkaGFuZGxlRXZlbnQoZXZlbnQpID09PSBmYWxzZSkgeworCQkJcmV0dXJuVmFsdWUgPSBmYWxzZTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0dXJuVmFsdWU7Cit9OworCitmdW5jdGlvbiBmaXhFdmVudChldmVudCkgeworCS8vIGFkZCBXM0Mgc3RhbmRhcmQgZXZlbnQgbWV0aG9kcworCWV2ZW50LnByZXZlbnREZWZhdWx0ID0gZml4RXZlbnQucHJldmVudERlZmF1bHQ7CisJZXZlbnQuc3RvcFByb3BhZ2F0aW9uID0gZml4RXZlbnQuc3RvcFByb3BhZ2F0aW9uOworCXJldHVybiBldmVudDsKK307CitmaXhFdmVudC5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeworCXRoaXMucmV0dXJuVmFsdWUgPSBmYWxzZTsKK307CitmaXhFdmVudC5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5jYW5jZWxCdWJibGUgPSB0cnVlOworfQorCisvLyBEZWFuJ3MgZm9yRWFjaDogaHR0cDovL2RlYW4uZWR3YXJkcy5uYW1lL2Jhc2UvZm9yRWFjaC5qcworLyoKKwlmb3JFYWNoLCB2ZXJzaW9uIDEuMAorCUNvcHlyaWdodCAyMDA2LCBEZWFuIEVkd2FyZHMKKwlMaWNlbnNlOiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAorKi8KKworLy8gYXJyYXktbGlrZSBlbnVtZXJhdGlvbgoraWYgKCFBcnJheS5mb3JFYWNoKSB7IC8vIG1vemlsbGEgYWxyZWFkeSBzdXBwb3J0cyB0aGlzCisJQXJyYXkuZm9yRWFjaCA9IGZ1bmN0aW9uKGFycmF5LCBibG9jaywgY29udGV4dCkgeworCQlmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7CisJCQlibG9jay5jYWxsKGNvbnRleHQsIGFycmF5W2ldLCBpLCBhcnJheSk7CisJCX0KKwl9OworfQorCisvLyBnZW5lcmljIGVudW1lcmF0aW9uCitGdW5jdGlvbi5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYmxvY2ssIGNvbnRleHQpIHsKKwlmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7CisJCWlmICh0eXBlb2YgdGhpcy5wcm90b3R5cGVba2V5XSA9PSAidW5kZWZpbmVkIikgeworCQkJYmxvY2suY2FsbChjb250ZXh0LCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpOworCQl9CisJfQorfTsKKworLy8gY2hhcmFjdGVyIGVudW1lcmF0aW9uCitTdHJpbmcuZm9yRWFjaCA9IGZ1bmN0aW9uKHN0cmluZywgYmxvY2ssIGNvbnRleHQpIHsKKwlBcnJheS5mb3JFYWNoKHN0cmluZy5zcGxpdCgiIiksIGZ1bmN0aW9uKGNociwgaW5kZXgpIHsKKwkJYmxvY2suY2FsbChjb250ZXh0LCBjaHIsIGluZGV4LCBzdHJpbmcpOworCX0pOworfTsKKworLy8gZ2xvYmFsbHkgcmVzb2x2ZSBmb3JFYWNoIGVudW1lcmF0aW9uCit2YXIgZm9yRWFjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYmxvY2ssIGNvbnRleHQpIHsKKwlpZiAob2JqZWN0KSB7CisJCXZhciByZXNvbHZlID0gT2JqZWN0OyAvLyBkZWZhdWx0CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBGdW5jdGlvbikgeworCQkJLy8gZnVuY3Rpb25zIGhhdmUgYSAibGVuZ3RoIiBwcm9wZXJ0eQorCQkJcmVzb2x2ZSA9IEZ1bmN0aW9uOworCQl9IGVsc2UgaWYgKG9iamVjdC5mb3JFYWNoIGluc3RhbmNlb2YgRnVuY3Rpb24pIHsKKwkJCS8vIHRoZSBvYmplY3QgaW1wbGVtZW50cyBhIGN1c3RvbSBmb3JFYWNoIG1ldGhvZCBzbyB1c2UgdGhhdAorCQkJb2JqZWN0LmZvckVhY2goYmxvY2ssIGNvbnRleHQpOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT0gInN0cmluZyIpIHsKKwkJCS8vIHRoZSBvYmplY3QgaXMgYSBzdHJpbmcKKwkJCXJlc29sdmUgPSBTdHJpbmc7CisJCX0gZWxzZSBpZiAodHlwZW9mIG9iamVjdC5sZW5ndGggPT0gIm51bWJlciIpIHsKKwkJCS8vIHRoZSBvYmplY3QgaXMgYXJyYXktbGlrZQorCQkJcmVzb2x2ZSA9IEFycmF5OworCQl9CisJCXJlc29sdmUuZm9yRWFjaChvYmplY3QsIGJsb2NrLCBjb250ZXh0KTsKKwl9Cit9OwpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLXZpZXcvQ01ha2VMaXN0cy50eHQgYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tdmlldy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzA1Y2E1Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLXZpZXcvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw0MSBAQAorb3B0aW9uKENMQU5HX0lOU1RBTExfU0NBTlZJRVcgIkluc3RhbGwgdGhlIHNjYW4tdmlldyB0b29sIiBPTikKKworc2V0KEJpbkZpbGVzCisgICAgICBzY2FuLXZpZXcpCisKK3NldChTaGFyZUZpbGVzCisgICAgICBTY2FuVmlldy5weQorICAgICAgUmVwb3J0ZXIucHkKKyAgICAgIHN0YXJ0ZmlsZS5weQorICAgICAgRmlsZVJhZGFyLnNjcHQKKyAgICAgIEdldFJhZGFyVmVyc2lvbi5zY3B0CisgICAgICBidWdjYXRjaGVyLmljbykKKworaWYoQ0xBTkdfSU5TVEFMTF9TQ0FOVklFVykKKyAgZm9yZWFjaChCaW5GaWxlICR7QmluRmlsZXN9KQorICAgIGFkZF9jdXN0b21fY29tbWFuZChPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS9iaW4vJHtCaW5GaWxlfQorICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgbWFrZV9kaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L2JpbgorICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9iaW4vJHtCaW5GaWxlfQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vYmluLworICAgICAgICAgICAgICAgICAgICAgICBERVBFTkRTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9iaW4vJHtCaW5GaWxlfSkKKyAgICBsaXN0KEFQUEVORCBEZXBlbmRzICR7Q01BS0VfQklOQVJZX0RJUn0vYmluLyR7QmluRmlsZX0pCisgICAgaW5zdGFsbChQUk9HUkFNUyBiaW4vJHtCaW5GaWxlfSBERVNUSU5BVElPTiBiaW4pCisgIGVuZGZvcmVhY2goKQorCisgIGZvcmVhY2goU2hhcmVGaWxlICR7U2hhcmVGaWxlc30pCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9L3NoYXJlL3NjYW4tdmlldy8ke1NoYXJlRmlsZX0KKyAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIG1ha2VfZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9zaGFyZS9zY2FuLXZpZXcKKyAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc2hhcmUvJHtTaGFyZUZpbGV9CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9zaGFyZS9zY2FuLXZpZXcvCisgICAgICAgICAgICAgICAgICAgICAgIERFUEVORFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3NoYXJlLyR7U2hhcmVGaWxlfSkKKyAgICBsaXN0KEFQUEVORCBEZXBlbmRzICR7Q01BS0VfQklOQVJZX0RJUn0vc2hhcmUvc2Nhbi12aWV3LyR7U2hhcmVGaWxlfSkKKyAgICBpbnN0YWxsKEZJTEVTIHNoYXJlLyR7U2hhcmVGaWxlfSBERVNUSU5BVElPTiBzaGFyZS9zY2FuLXZpZXcpCisgIGVuZGZvcmVhY2goKQorCisgIGFkZF9jdXN0b21fdGFyZ2V0KHNjYW4tdmlldyBBTEwgREVQRU5EUyAke0RlcGVuZHN9KQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoc2Nhbi12aWV3IFBST1BFUlRJRVMgRk9MREVSICJNaXNjIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL2NsYW5nLTM4NTk0MjQvdG9vbHMvc2Nhbi12aWV3L2Jpbi9zY2FuLXZpZXcgYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tdmlldy9iaW4vc2Nhbi12aWV3Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiNmU4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tdmlldy9iaW4vc2Nhbi12aWV3CkBAIC0wLDAgKzEsMTQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIiIiVGhlIGNsYW5nIHN0YXRpYyBhbmFseXplciByZXN1bHRzIHZpZXdlci4KKyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgaW1wCitpbXBvcnQgb3MKK2ltcG9ydCBwb3NpeHBhdGgKK2ltcG9ydCB0aHJlYWQKK2ltcG9ydCB0aW1lCitpbXBvcnQgdXJsbGliCitpbXBvcnQgd2ViYnJvd3NlcgorCisjIEhvdyBsb25nIHRvIHdhaXQgZm9yIHNlcnZlciB0byBzdGFydC4KK2tTbGVlcFRpbWVvdXQgPSAuMDUKK2tNYXhTbGVlcHMgPSBpbnQoNjAgLyBrU2xlZXBUaW1lb3V0KQorCisjIERlZmF1bHQgc2VydmVyIHBhcmFtZXRlcnMKKwora0RlZmF1bHRIb3N0ID0gJzEyNy4wLjAuMScKK2tEZWZhdWx0UG9ydCA9IDgxODEKK2tNYXhQb3J0c1RvVHJ5ID0gMTAwCisKKyMjIworCisKK2RlZiB1cmxfaXNfdXAodXJsKToKKyAgICB0cnk6CisgICAgICAgIG8gPSB1cmxsaWIudXJsb3Blbih1cmwpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIG8uY2xvc2UoKQorICAgIHJldHVybiBUcnVlCisKKworZGVmIHN0YXJ0X2Jyb3dzZXIocG9ydCwgb3B0aW9ucyk6CisgICAgaW1wb3J0IHVybGxpYgorICAgIGltcG9ydCB3ZWJicm93c2VyCisKKyAgICB1cmwgPSAnaHR0cDovLyVzOiVkJyAlIChvcHRpb25zLmhvc3QsIHBvcnQpCisKKyAgICAjIFdhaXQgZm9yIHNlcnZlciB0byBzdGFydC4uLgorICAgIGlmIG9wdGlvbnMuZGVidWc6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJyVzOiBXYWl0aW5nIGZvciBzZXJ2ZXIuJyAlIHN5cy5hcmd2WzBdKQorICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICBmb3IgaSBpbiByYW5nZShrTWF4U2xlZXBzKToKKyAgICAgICAgaWYgdXJsX2lzX3VwKHVybCk6CisgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBvcHRpb25zLmRlYnVnOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLicpCisgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgdGltZS5zbGVlcChrU2xlZXBUaW1lb3V0KQorICAgIGVsc2U6CisgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICdXQVJOSU5HOiBVbmFibGUgdG8gZGV0ZWN0IHRoYXQgc2VydmVyIHN0YXJ0ZWQuJworCisgICAgaWYgb3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgJyVzOiBTdGFydGluZyB3ZWJicm93c2VyLi4uJyAlIHN5cy5hcmd2WzBdCisgICAgd2ViYnJvd3Nlci5vcGVuKHVybCkKKworCitkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIHJvb3QpOgorICAgICMgUHJlZmVyIHRvIGxvb2sgcmVsYXRpdmUgdG8gdGhlIGluc3RhbGxlZCBiaW5hcnkKKyAgICBzaGFyZSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgKyAiLy4uL3NoYXJlL3NjYW4tdmlldyIKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzaGFyZSk6CisgICAgICAgICMgT3RoZXJ3aXNlIGxvb2sgcmVsYXRpdmUgdG8gdGhlIHNvdXJjZQorICAgICAgICBzaGFyZSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgKyAiLy4uLy4uL3NjYW4tdmlldy9zaGFyZSIKKyAgICBzeXMucGF0aC5hcHBlbmQoc2hhcmUpCisKKyAgICBpbXBvcnQgU2NhblZpZXcKKyAgICB0cnk6CisgICAgICAgIHByaW50ICdTdGFydGluZyBzY2FuLXZpZXcgYXQ6IGh0dHA6Ly8lczolZCcgJSAob3B0aW9ucy5ob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQpCisgICAgICAgIHByaW50ICcgIFVzZSBDdHJsLUMgdG8gZXhpdC4nCisgICAgICAgIGh0dHBkID0gU2NhblZpZXcuY3JlYXRlX3NlcnZlcigob3B0aW9ucy5ob3N0LCBwb3J0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsIHJvb3QpCisgICAgICAgIGh0dHBkLnNlcnZlX2ZvcmV2ZXIoKQorICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgcGFzcworCisKK2RlZiBwb3J0X2lzX29wZW4ocG9ydCk6CisgICAgaW1wb3J0IFNvY2tldFNlcnZlcgorICAgIHRyeToKKyAgICAgICAgdCA9IFNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIoKGtEZWZhdWx0SG9zdCwgcG9ydCksIE5vbmUpCisgICAgZXhjZXB0OgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICB0LnNlcnZlcl9jbG9zZSgpCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgbWFpbigpOgorICAgIGltcG9ydCBhcmdwYXJzZQorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJUaGUgY2xhbmcgc3RhdGljIGFuYWx5emVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyB2aWV3ZXIuIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCJyb290IiwgbWV0YXZhcj0iPHJlc3VsdHMgZGlyZWN0b3J5PiIsIHR5cGU9c3RyKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICctLWhvc3QnLCBkZXN0PSJob3N0IiwgZGVmYXVsdD1rRGVmYXVsdEhvc3QsIHR5cGU9c3RyLAorICAgICAgICBoZWxwPSJIb3N0IGludGVyZmFjZSB0byBsaXN0ZW4gb24uIChkZWZhdWx0PSVzKSIgJSBrRGVmYXVsdEhvc3QpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1wb3J0JywgZGVzdD0icG9ydCIsIGRlZmF1bHQ9Tm9uZSwgdHlwZT1pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQb3J0IHRvIGxpc3RlbiBvbi4gKGRlZmF1bHQ9JXMpIiAlIGtEZWZhdWx0UG9ydCkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWRlYnVnIiwgZGVzdD0iZGVidWciLCBkZWZhdWx0PTAsCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249ImNvdW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlByaW50IGFkZGl0aW9uYWwgZGVidWdnaW5nIGluZm9ybWF0aW9uLiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1hdXRvLXJlbG9hZCIsIGRlc3Q9ImF1dG9SZWxvYWQiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkF1dG9tYXRpY2FsbHkgdXBkYXRlIG1vZHVsZSBmb3IgZWFjaCByZXF1ZXN0LiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1uby1icm93c2VyIiwgZGVzdD0ic3RhcnRCcm93c2VyIiwgZGVmYXVsdD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV9mYWxzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEb24ndCBvcGVuIGEgd2ViYnJvd3NlciBvbiBzdGFydHVwLiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1hbGxvdy1hbGwtaG9zdHMiLCBkZXN0PSJvbmx5U2VydmVMb2NhbCIsCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQWxsb3cgY29ubmVjdGlvbnMgZnJvbSBhbnkgaG9zdCAoYWNjZXNzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3RyaWN0ZWQgdG8gIjEyNy4wLjAuMSIgYnkgZGVmYXVsdCknKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICAjIE1ha2Ugc3VyZSB0aGlzIGRpcmVjdG9yeSBpcyBpbiBhIHJlYXNvbmFibGUgc3RhdGUgdG8gdmlldy4KKyAgICBpZiBub3QgcG9zaXhwYXRoLmV4aXN0cyhwb3NpeHBhdGguam9pbihhcmdzLnJvb3QsICdpbmRleC5odG1sJykpOgorICAgICAgICBwYXJzZXIuZXJyb3IoJ0ludmFsaWQgZGlyZWN0b3J5LCBhbmFseXNpcyByZXN1bHRzIG5vdCBmb3VuZCEnKQorCisgICAgIyBGaW5kIGFuIG9wZW4gcG9ydC4gV2UgYXJlbid0IHBhcnRpY3VsYXJseSB3b3JyaWVkIGFib3V0IHJhY2UKKyAgICAjIGNvbmRpdGlvbnMgaGVyZS4gTm90ZSB0aGF0IGlmIHRoZSB1c2VyIHNwZWNpZmllZCBhIHBvcnQgd2Ugb25seQorICAgICMgdXNlIHRoYXQgb25lLgorICAgIGlmIGFyZ3MucG9ydCBpcyBub3QgTm9uZToKKyAgICAgICAgcG9ydCA9IGFyZ3MucG9ydAorICAgIGVsc2U6CisgICAgICAgIGZvciBpIGluIHJhbmdlKGtNYXhQb3J0c1RvVHJ5KToKKyAgICAgICAgICAgIGlmIHBvcnRfaXNfb3BlbihrRGVmYXVsdFBvcnQgKyBpKToKKyAgICAgICAgICAgICAgICBwb3J0ID0ga0RlZmF1bHRQb3J0ICsgaQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJzZXIuZXJyb3IoJ1VuYWJsZSB0byBmaW5kIHVzYWJsZSBwb3J0IGluIFslZCwlZCknICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAoa0RlZmF1bHRQb3J0LCBrRGVmYXVsdFBvcnQra01heFBvcnRzVG9UcnkpKQorCisgICAgIyBLaWNrIG9mZiB0aHJlYWQgdG8gd2FpdCBmb3Igc2VydmVyIGFuZCBzdGFydCB3ZWIgYnJvd3NlciwgaWYKKyAgICAjIHJlcXVlc3RlZC4KKyAgICBpZiBhcmdzLnN0YXJ0QnJvd3NlcjoKKyAgICAgICAgdCA9IHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKHN0YXJ0X2Jyb3dzZXIsIChwb3J0LCBhcmdzKSkKKworICAgIHJ1bihwb3J0LCBhcmdzLCBhcmdzLnJvb3QpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9GaWxlUmFkYXIuc2NwdCBiL2NsYW5nLTM4NTk0MjQvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL0ZpbGVSYWRhci5zY3B0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNzQ1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9GaWxlUmFkYXIuc2NwdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9HZXRSYWRhclZlcnNpb24uc2NwdCBiL2NsYW5nLTM4NTk0MjQvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL0dldFJhZGFyVmVyc2lvbi5zY3B0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9HZXRSYWRhclZlcnNpb24uc2NwdApkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLXZpZXcvc2hhcmUvUmVwb3J0ZXIucHkgYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9SZXBvcnRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTRlMDViCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLXZpZXcvc2hhcmUvUmVwb3J0ZXIucHkKQEAgLTAsMCArMSwyNDggQEAKKyIiIk1ldGhvZHMgZm9yIHJlcG9ydGluZyBidWdzLiIiIgorCitpbXBvcnQgc3VicHJvY2Vzcywgc3lzLCBvcworCitfX2FsbF9fID0gWydSZXBvcnRGYWlsdXJlJywgJ0J1Z1JlcG9ydCcsICdnZXRSZXBvcnRlcnMnXQorCisjCisKK2NsYXNzIFJlcG9ydEZhaWx1cmUoRXhjZXB0aW9uKToKKyAgICAiIiJHZW5lcmljIGV4Y2VwdGlvbiBmb3IgZmFpbHVyZXMgaW4gYnVnIHJlcG9ydGluZy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOiAgICAgICAgCisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorCisjIENvbGxlY3QgaW5mb3JtYXRpb24gYWJvdXQgYSBidWcuCisKK2NsYXNzIEJ1Z1JlcG9ydDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIGRlc2NyaXB0aW9uLCBmaWxlcyk6CisgICAgICAgIHNlbGYudGl0bGUgPSB0aXRsZQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKyAgICAgICAgc2VsZi5maWxlcyA9IGZpbGVzCisKKyMgUmVwb3J0ZXIgaW50ZXJmYWNlcy4KKworaW1wb3J0IG9zCisKK2ltcG9ydCBlbWFpbCwgbWltZXR5cGVzLCBzbXRwbGliCitmcm9tIGVtYWlsIGltcG9ydCBlbmNvZGVycworZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBNZXNzYWdlCitmcm9tIGVtYWlsLm1pbWUuYmFzZSBpbXBvcnQgTUlNRUJhc2UKK2Zyb20gZW1haWwubWltZS5tdWx0aXBhcnQgaW1wb3J0IE1JTUVNdWx0aXBhcnQKK2Zyb20gZW1haWwubWltZS50ZXh0IGltcG9ydCBNSU1FVGV4dAorCisjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IworIyBSZXBvcnRlclBhcmFtZXRlcgorIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMKKworY2xhc3MgUmVwb3J0ZXJQYXJhbWV0ZXI6CisgIGRlZiBfX2luaXRfXyhzZWxmLCBuKToKKyAgICBzZWxmLm5hbWUgPSBuCisgIGRlZiBnZXROYW1lKHNlbGYpOgorICAgIHJldHVybiBzZWxmLm5hbWUKKyAgZGVmIGdldFZhbHVlKHNlbGYscixidWd0eXBlLGdldENvbmZpZ09wdGlvbik6CisgICAgIHJldHVybiBnZXRDb25maWdPcHRpb24oci5nZXROYW1lKCksc2VsZi5nZXROYW1lKCkpCisgIGRlZiBzYXZlQ29uZmlnVmFsdWUoc2VsZik6CisgICAgcmV0dXJuIFRydWUKKworY2xhc3MgVGV4dFBhcmFtZXRlciAoUmVwb3J0ZXJQYXJhbWV0ZXIpOgorICBkZWYgZ2V0SFRNTChzZWxmLHIsYnVndHlwZSxnZXRDb25maWdPcHRpb24pOgorICAgIHJldHVybiAiIiJcCis8dHI+Cis8dGQgY2xhc3M9ImZvcm1fY2xhYmVsIj4lczo8L3RkPgorPHRkIGNsYXNzPSJmb3JtX3ZhbHVlIj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iJXNfJXMiIHZhbHVlPSIlcyI+PC90ZD4KKzwvdHI+IiIiJShzZWxmLmdldE5hbWUoKSxyLmdldE5hbWUoKSxzZWxmLmdldE5hbWUoKSxzZWxmLmdldFZhbHVlKHIsYnVndHlwZSxnZXRDb25maWdPcHRpb24pKQorCitjbGFzcyBTZWxlY3Rpb25QYXJhbWV0ZXIgKFJlcG9ydGVyUGFyYW1ldGVyKToKKyAgZGVmIF9faW5pdF9fKHNlbGYsIG4sIHZhbHVlcyk6CisgICAgUmVwb3J0ZXJQYXJhbWV0ZXIuX19pbml0X18oc2VsZixuKQorICAgIHNlbGYudmFsdWVzID0gdmFsdWVzCisgICAgCisgIGRlZiBnZXRIVE1MKHNlbGYscixidWd0eXBlLGdldENvbmZpZ09wdGlvbik6CisgICAgZGVmYXVsdCA9IHNlbGYuZ2V0VmFsdWUocixidWd0eXBlLGdldENvbmZpZ09wdGlvbikKKyAgICByZXR1cm4gIiIiXAorPHRyPgorPHRkIGNsYXNzPSJmb3JtX2NsYWJlbCI+JXM6PC90ZD48dGQgY2xhc3M9ImZvcm1fdmFsdWUiPjxzZWxlY3QgbmFtZT0iJXNfJXMiPgorJXMKKzwvc2VsZWN0PjwvdGQ+IiIiJShzZWxmLmdldE5hbWUoKSxyLmdldE5hbWUoKSxzZWxmLmdldE5hbWUoKSwnXG4nLmpvaW4oWyIiIlwKKzxvcHRpb24gdmFsdWU9IiVzIiVzPiVzPC9vcHRpb24+IiIiJShvWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9bMF0gPT0gZGVmYXVsdCBhbmQgJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJyBvciAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvWzFdKSBmb3IgbyBpbiBzZWxmLnZhbHVlc10pKQorCisjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IworIyBSZXBvcnRlcnMKKyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jCisKK2NsYXNzIEVtYWlsUmVwb3J0ZXI6CisgICAgZGVmIGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAnRW1haWwnCisKKyAgICBkZWYgZ2V0UGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG1hcChsYW1iZGEgeDpUZXh0UGFyYW1ldGVyKHgpLFsnVG8nLCAnRnJvbScsICdTTVRQIFNlcnZlcicsICdTTVRQIFBvcnQnXSkKKworICAgICMgTGlmdGVkIGZyb20gcHl0aG9uIGVtYWlsIG1vZHVsZSBleGFtcGxlcy4KKyAgICBkZWYgYXR0YWNoRmlsZShzZWxmLCBvdXRlciwgcGF0aCk6CisgICAgICAgICMgR3Vlc3MgdGhlIGNvbnRlbnQgdHlwZSBiYXNlZCBvbiB0aGUgZmlsZSdzIGV4dGVuc2lvbi4gIEVuY29kaW5nCisgICAgICAgICMgd2lsbCBiZSBpZ25vcmVkLCBhbHRob3VnaCB3ZSBzaG91bGQgY2hlY2sgZm9yIHNpbXBsZSB0aGluZ3MgbGlrZQorICAgICAgICAjIGd6aXAnZCBvciBjb21wcmVzc2VkIGZpbGVzLgorICAgICAgICBjdHlwZSwgZW5jb2RpbmcgPSBtaW1ldHlwZXMuZ3Vlc3NfdHlwZShwYXRoKQorICAgICAgICBpZiBjdHlwZSBpcyBOb25lIG9yIGVuY29kaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBObyBndWVzcyBjb3VsZCBiZSBtYWRlLCBvciB0aGUgZmlsZSBpcyBlbmNvZGVkIChjb21wcmVzc2VkKSwgc28KKyAgICAgICAgICAgICMgdXNlIGEgZ2VuZXJpYyBiYWctb2YtYml0cyB0eXBlLgorICAgICAgICAgICAgY3R5cGUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJworICAgICAgICBtYWludHlwZSwgc3VidHlwZSA9IGN0eXBlLnNwbGl0KCcvJywgMSkKKyAgICAgICAgaWYgbWFpbnR5cGUgPT0gJ3RleHQnOgorICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgpCisgICAgICAgICAgICAjIE5vdGU6IHdlIHNob3VsZCBoYW5kbGUgY2FsY3VsYXRpbmcgdGhlIGNoYXJzZXQKKyAgICAgICAgICAgIG1zZyA9IE1JTUVUZXh0KGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZwID0gb3BlbihwYXRoLCAncmInKQorICAgICAgICAgICAgbXNnID0gTUlNRUJhc2UobWFpbnR5cGUsIHN1YnR5cGUpCisgICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQoZnAucmVhZCgpKQorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgIyBFbmNvZGUgdGhlIHBheWxvYWQgdXNpbmcgQmFzZTY0CisgICAgICAgICAgICBlbmNvZGVycy5lbmNvZGVfYmFzZTY0KG1zZykKKyAgICAgICAgIyBTZXQgdGhlIGZpbGVuYW1lIHBhcmFtZXRlcgorICAgICAgICBtc2cuYWRkX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50JywgZmlsZW5hbWU9b3MucGF0aC5iYXNlbmFtZShwYXRoKSkKKyAgICAgICAgb3V0ZXIuYXR0YWNoKG1zZykKKworICAgIGRlZiBmaWxlUmVwb3J0KHNlbGYsIHJlcG9ydCwgcGFyYW1ldGVycyk6CisgICAgICAgIG1haW5Nc2cgPSAiIiJcCitCVUcgUkVQT1JUCistLS0KK1RpdGxlOiAlcworRGVzY3JpcHRpb246ICVzCisiIiIlKHJlcG9ydC50aXRsZSwgcmVwb3J0LmRlc2NyaXB0aW9uKQorCisgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXJzLmdldCgnVG8nKToKKyAgICAgICAgICAgIHJhaXNlIFJlcG9ydEZhaWx1cmUoJ05vICJUbyIgYWRkcmVzcyBzcGVjaWZpZWQuJykKKyAgICAgICAgaWYgbm90IHBhcmFtZXRlcnMuZ2V0KCdGcm9tJyk6CisgICAgICAgICAgICByYWlzZSBSZXBvcnRGYWlsdXJlKCdObyAiRnJvbSIgYWRkcmVzcyBzcGVjaWZpZWQuJykKKworICAgICAgICBtc2cgPSBNSU1FTXVsdGlwYXJ0KCkKKyAgICAgICAgbXNnWydTdWJqZWN0J10gPSAnQlVHIFJFUE9SVDogJXMnJShyZXBvcnQudGl0bGUpCisgICAgICAgICMgRklYTUU6IEdldCBjb25maWcgcGFyYW1ldGVycworICAgICAgICBtc2dbJ1RvJ10gPSBwYXJhbWV0ZXJzLmdldCgnVG8nKQorICAgICAgICBtc2dbJ0Zyb20nXSA9IHBhcmFtZXRlcnMuZ2V0KCdGcm9tJykKKyAgICAgICAgbXNnLnByZWFtYmxlID0gbWFpbk1zZworCisgICAgICAgIG1zZy5hdHRhY2goTUlNRVRleHQobWFpbk1zZywgX3N1YnR5cGU9J3RleHQvcGxhaW4nKSkKKyAgICAgICAgZm9yIGZpbGUgaW4gcmVwb3J0LmZpbGVzOgorICAgICAgICAgICAgc2VsZi5hdHRhY2hGaWxlKG1zZywgZmlsZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gc210cGxpYi5TTVRQKGhvc3Q9cGFyYW1ldGVycy5nZXQoJ1NNVFAgU2VydmVyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ9cGFyYW1ldGVycy5nZXQoJ1NNVFAgUG9ydCcpKQorICAgICAgICAgICAgcy5zZW5kbWFpbChtc2dbJ0Zyb20nXSwgbXNnWydUbyddLCBtc2cuYXNfc3RyaW5nKCkpCisgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmFpc2UgUmVwb3J0RmFpbHVyZSgnVW5hYmxlIHRvIHNlbmQgbWVzc2FnZSB2aWEgU01UUC4nKQorCisgICAgICAgIHJldHVybiAiTWVzc2FnZSBzZW50ISIKKworY2xhc3MgQnVnemlsbGFSZXBvcnRlcjoKKyAgICBkZWYgZ2V0TmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICdCdWd6aWxsYScKKyAgICAKKyAgICBkZWYgZ2V0UGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG1hcChsYW1iZGEgeDpUZXh0UGFyYW1ldGVyKHgpLFsnVVJMJywnUHJvZHVjdCddKQorCisgICAgZGVmIGZpbGVSZXBvcnQoc2VsZiwgcmVwb3J0LCBwYXJhbWV0ZXJzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorIAorCitjbGFzcyBSYWRhckNsYXNzaWZpY2F0aW9uUGFyYW1ldGVyKFNlbGVjdGlvblBhcmFtZXRlcik6CisgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICBTZWxlY3Rpb25QYXJhbWV0ZXIuX19pbml0X18oc2VsZiwiQ2xhc3NpZmljYXRpb24iLAorICAgICAgICAgICAgW1snMScsICdTZWN1cml0eSddLCBbJzInLCAnQ3Jhc2gvSGFuZy9EYXRhIExvc3MnXSwKKyAgICAgICAgICAgICBbJzMnLCAnUGVyZm9ybWFuY2UnXSwgWyc0JywgJ1VJL1VzYWJpbGl0eSddLCAKKyAgICAgICAgICAgICBbJzYnLCAnU2VyaW91cyBCdWcnXSwgWyc3JywgJ090aGVyJ11dKQorCisgIGRlZiBzYXZlQ29uZmlnVmFsdWUoc2VsZik6CisgICAgcmV0dXJuIEZhbHNlCisgICAgCisgIGRlZiBnZXRWYWx1ZShzZWxmLHIsYnVndHlwZSxnZXRDb25maWdPcHRpb24pOgorICAgIGlmIGJ1Z3R5cGUuZmluZCgibGVhayIpICE9IC0xOgorICAgICAgcmV0dXJuICczJworICAgIGVsaWYgYnVndHlwZS5maW5kKCJkZXJlZmVyZW5jZSIpICE9IC0xOgorICAgICAgcmV0dXJuICcyJworICAgIGVsaWYgYnVndHlwZS5maW5kKCJtaXNzaW5nIGl2YXIgcmVsZWFzZSIpICE9IC0xOgorICAgICAgcmV0dXJuICczJworICAgIGVsc2U6CisgICAgICByZXR1cm4gJzcnCisKK2NsYXNzIFJhZGFyUmVwb3J0ZXI6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBpc0F2YWlsYWJsZSgpOgorICAgICAgICAjIEZJWE1FOiBGaW5kIHRoaXMgLnNjcHQgYmV0dGVyCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwnLi4vc2hhcmUvc2Nhbi12aWV3L0dldFJhZGFyVmVyc2lvbi5zY3B0JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsnb3Nhc2NyaXB0JyxwYXRoXSwgCisgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGRhdGEsZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHJlcyA9IHAud2FpdCgpCisgICAgICAgICMgRklYTUU6IENoZWNrIHZlcnNpb24/IENoZWNrIGZvciBubyBlcnJvcnM/CisgICAgICAgIHJldHVybiByZXMgPT0gMAorCisgICAgZGVmIGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAnUmFkYXInCisKKyAgICBkZWYgZ2V0UGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFsgVGV4dFBhcmFtZXRlcignQ29tcG9uZW50JyksIFRleHRQYXJhbWV0ZXIoJ0NvbXBvbmVudCBWZXJzaW9uJyksCisgICAgICAgICAgICAgICAgIFJhZGFyQ2xhc3NpZmljYXRpb25QYXJhbWV0ZXIoKSBdCisKKyAgICBkZWYgZmlsZVJlcG9ydChzZWxmLCByZXBvcnQsIHBhcmFtZXRlcnMpOgorICAgICAgICBjb21wb25lbnQgPSBwYXJhbWV0ZXJzLmdldCgnQ29tcG9uZW50JywgJycpCisgICAgICAgIGNvbXBvbmVudFZlcnNpb24gPSBwYXJhbWV0ZXJzLmdldCgnQ29tcG9uZW50IFZlcnNpb24nLCAnJykKKyAgICAgICAgY2xhc3NpZmljYXRpb24gPSBwYXJhbWV0ZXJzLmdldCgnQ2xhc3NpZmljYXRpb24nLCAnJykKKyAgICAgICAgcGVyc29uSUQgPSAiIgorICAgICAgICBkaWFnbm9zaXMgPSAiIgorICAgICAgICBjb25maWcgPSAiIgorCisgICAgICAgIGlmIG5vdCBjb21wb25lbnQuc3RyaXAoKToKKyAgICAgICAgICAgIGNvbXBvbmVudCA9ICdCdWdzIGZvdW5kIGJ5IGNsYW5nIEFuYWx5emVyJworICAgICAgICBpZiBub3QgY29tcG9uZW50VmVyc2lvbi5zdHJpcCgpOgorICAgICAgICAgICAgY29tcG9uZW50VmVyc2lvbiA9ICdYJworCisgICAgICAgIHNjcmlwdCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCcuLi9zaGFyZS9zY2FuLXZpZXcvRmlsZVJhZGFyLnNjcHQnKQorICAgICAgICBhcmdzID0gWydvc2FzY3JpcHQnLCBzY3JpcHQsIGNvbXBvbmVudCwgY29tcG9uZW50VmVyc2lvbiwgY2xhc3NpZmljYXRpb24sIHBlcnNvbklELCByZXBvcnQudGl0bGUsCisgICAgICAgICAgICAgICAgcmVwb3J0LmRlc2NyaXB0aW9uLCBkaWFnbm9zaXMsIGNvbmZpZ10gKyBtYXAob3MucGF0aC5hYnNwYXRoLCByZXBvcnQuZmlsZXMpCisjICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsIGFyZ3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJhaXNlIFJlcG9ydEZhaWx1cmUoIlVuYWJsZSB0byBmaWxlIHJhZGFyIChBcHBsZVNjcmlwdCBmYWlsdXJlKS4iKQorICAgICAgICBkYXRhLCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgcmVzID0gcC53YWl0KCkKKworICAgICAgICBpZiByZXM6CisgICAgICAgICAgICByYWlzZSBSZXBvcnRGYWlsdXJlKCJVbmFibGUgdG8gZmlsZSByYWRhciAoQXBwbGVTY3JpcHQgZmFpbHVyZSkuIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZXMgPSBldmFsKGRhdGEpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJhaXNlIFJlcG9ydEZhaWx1cmUoIlVuYWJsZSB0byBwcm9jZXNzIHJhZGFyIHJlc3VsdHMuIikKKworICAgICAgICAjIFdlIGV4cGVjdCAoaW50OiBidWdJRCwgc3RyOiBtZXNzYWdlKQorICAgICAgICBpZiBsZW4odmFsdWVzKSAhPSAyIG9yIG5vdCBpc2luc3RhbmNlKHZhbHVlc1swXSwgaW50KToKKyAgICAgICAgICAgIHJhaXNlIFJlcG9ydEZhaWx1cmUoIlVuYWJsZSB0byBwcm9jZXNzIHJhZGFyIHJlc3VsdHMuIikKKworICAgICAgICBidWdJRCxtZXNzYWdlID0gdmFsdWVzCisgICAgICAgIGJ1Z0lEID0gaW50KGJ1Z0lEKQorICAgICAgICAKKyAgICAgICAgaWYgbm90IGJ1Z0lEOgorICAgICAgICAgICAgcmFpc2UgUmVwb3J0RmFpbHVyZShtZXNzYWdlKQorICAgICAgICAKKyAgICAgICAgcmV0dXJuICJGaWxlZDogPGEgaHJlZj1cInJkYXI6Ly8lZC9cIj4lZDwvYT4iJShidWdJRCxidWdJRCkKKworIyMjCisKK2RlZiBnZXRSZXBvcnRlcnMoKToKKyAgICByZXBvcnRlcnMgPSBbXQorICAgIGlmIFJhZGFyUmVwb3J0ZXIuaXNBdmFpbGFibGUoKToKKyAgICAgICAgcmVwb3J0ZXJzLmFwcGVuZChSYWRhclJlcG9ydGVyKCkpCisgICAgcmVwb3J0ZXJzLmFwcGVuZChFbWFpbFJlcG9ydGVyKCkpCisgICAgcmV0dXJuIHJlcG9ydGVycworCmRpZmYgLS1naXQgYS9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9TY2FuVmlldy5weSBiL2NsYW5nLTM4NTk0MjQvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL1NjYW5WaWV3LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYzAzNTEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9TY2FuVmlldy5weQpAQCAtMCwwICsxLDc2NyBAQAoraW1wb3J0IEJhc2VIVFRQU2VydmVyCitpbXBvcnQgU2ltcGxlSFRUUFNlcnZlcgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdXJsbGliLCB1cmxwYXJzZQoraW1wb3J0IHBvc2l4cGF0aAoraW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgc29ja2V0CitpbXBvcnQgaXRlcnRvb2xzCisKK2ltcG9ydCBSZXBvcnRlcgoraW1wb3J0IENvbmZpZ1BhcnNlcgorCisjIyMKKyMgVmFyaW91cyBwYXR0ZXJucyBtYXRjaGVkIG9yIHJlcGxhY2VkIGJ5IHNlcnZlci4KKwora1JlcG9ydEZpbGVSRSA9IHJlLmNvbXBpbGUoJyguKi8pP3JlcG9ydC0oLiopXFwuaHRtbCcpCisKK2tCdWdLZXlWYWx1ZVJFID0gcmUuY29tcGlsZSgnPCEtLSBCVUcoW14gXSopICguKikgLS0+JykKKworIyAgPCEtLSBSRVBPUlRQUk9CTEVNIGZpbGU9ImNyYXNoZXMvY2xhbmdfY3Jhc2hfbmRTR0Y5Lm1pIiBzdGRlcnI9ImNyYXNoZXMvY2xhbmdfY3Jhc2hfbmRTR0Y5Lm1pLnN0ZGVyci50eHQiIGluZm89ImNyYXNoZXMvY2xhbmdfY3Jhc2hfbmRTR0Y5Lm1pLmluZm8iIC0tPgorCitrUmVwb3J0Q3Jhc2hFbnRyeVJFID0gcmUuY29tcGlsZSgnPCEtLSBSRVBPUlRQUk9CTEVNICguKj8pLS0+JykKK2tSZXBvcnRDcmFzaEVudHJ5S2V5VmFsdWVSRSA9IHJlLmNvbXBpbGUoJyA/KFtePV0rKT0iKC4qPykiJykKKwora1JlcG9ydFJlcGxhY2VtZW50cyA9IFtdCisKKyMgQWRkIGN1c3RvbSBqYXZhc2NyaXB0Lgora1JlcG9ydFJlcGxhY2VtZW50cy5hcHBlbmQoKHJlLmNvbXBpbGUoJzwhLS0gU1VNTUFSWUVOREhFQUQgLS0+JyksICIiIlwKKzxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBsb2FkKHVybCkgeworICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7CisgICAgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgIH0gZWxzZSBpZiAod2luZG93LkFjdGl2ZVhPYmplY3QpIHsKKyAgICByZXEgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKKyAgfQorICBpZiAocmVxICE9IHVuZGVmaW5lZCkgeworICAgIHJlcS5vcGVuKCJHRVQiLCB1cmwsIHRydWUpOworICAgIHJlcS5zZW5kKCIiKTsKKyAgfQorfQorPC9zY3JpcHQ+IiIiKSkKKworIyBJbnNlcnQgYWRkaXRpb25hbCBjb2x1bW5zLgora1JlcG9ydFJlcGxhY2VtZW50cy5hcHBlbmQoKHJlLmNvbXBpbGUoJzwhLS0gUkVQT1JUQlVHQ09MIC0tPicpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHRkPjwvdGQ+PHRkPjwvdGQ+JykpCisKKyMgSW5zZXJ0IHJlcG9ydCBidWcgYW5kIG9wZW4gZmlsZSBsaW5rcy4KK2tSZXBvcnRSZXBsYWNlbWVudHMuYXBwZW5kKChyZS5jb21waWxlKCc8IS0tIFJFUE9SVEJVRyBpZD0icmVwb3J0LSguKilcXC5odG1sIiAtLT4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJzx0ZCBjbGFzcz0iQnV0dG9uIj48YSBocmVmPSJyZXBvcnQvXFwxIj5SZXBvcnQgQnVnPC9hPjwvdGQ+JyArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHRkIGNsYXNzPSJCdXR0b24iPjxhIGhyZWY9ImphdmFzY3JpcHQ6bG9hZChcJ29wZW4vXFwxXCcpIj5PcGVuIEZpbGU8L2E+PC90ZD4nKSkpCisKK2tSZXBvcnRSZXBsYWNlbWVudHMuYXBwZW5kKChyZS5jb21waWxlKCc8IS0tIFJFUE9SVEhFQURFUiAtLT4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8aDM+PGEgaHJlZj0iLyI+U3VtbWFyeTwvYT4gPiBSZXBvcnQgJShyZXBvcnQpczwvaDM+JykpCisKK2tSZXBvcnRSZXBsYWNlbWVudHMuYXBwZW5kKChyZS5jb21waWxlKCc8IS0tIFJFUE9SVFNVTU1BUllFWFRSQSAtLT4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHRkIGNsYXNzPSJCdXR0b24iPjxhIGhyZWY9InJlcG9ydC8lKHJlcG9ydClzIj5SZXBvcnQgQnVnPC9hPjwvdGQ+JykpCisKKyMgSW5zZXJ0IHJlcG9ydCBjcmFzaGVzIGxpbmsuCisKKyMgRGlzYWJsZWQgZm9yIHRoZSB0aW1lIGJlaW5nIHVudGlsIHdlIGRlY2lkZSBleGFjdGx5IHdoZW4gdGhpcyBzaG91bGQKKyMgYmUgZW5hYmxlZC4gQWxzbyB0aGUgcmFkYXIgcmVwb3J0ZXIgbmVlZHMgdG8gYmUgZml4ZWQgdG8gcmVwb3J0CisjIG11bHRpcGxlIGZpbGVzLgorCisja1JlcG9ydFJlcGxhY2VtZW50cy5hcHBlbmQoKHJlLmNvbXBpbGUoJzwhLS0gUkVQT1JUQ1JBU0hFUyAtLT4nKSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxicj5UaGVzZSBmaWxlcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgYXR0YWNoZWQgdG8gJyArCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXBvcnRzIGZpbGVkIGhlcmU6IDxhIGhyZWY9InJlcG9ydF9jcmFzaGVzIj5SZXBvcnQgQ3Jhc2hlczwvYT4uJykpCisKKyMjIworIyBPdGhlciBzaW1wbGUgcGFyYW1ldGVycworCitrU2hhcmUgPSBwb3NpeHBhdGguam9pbihwb3NpeHBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLi9zaGFyZS9zY2FuLXZpZXcnKQora0NvbmZpZ1BhdGggPSBvcy5wYXRoLmV4cGFuZHVzZXIoJ34vLnNjYW52aWV3LmNmZycpCisKKyMjIworCitfX3ZlcnNpb25fXyA9ICIwLjEiCisKK19fYWxsX18gPSBbImNyZWF0ZV9zZXJ2ZXIiXQorCitjbGFzcyBSZXBvcnRlclRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVwb3J0LCByZXBvcnRlciwgcGFyYW1ldGVycywgc2VydmVyKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnJlcG9ydCA9IHJlcG9ydAorICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlcgorICAgICAgICBzZWxmLnJlcG9ydGVyID0gcmVwb3J0ZXIKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycworICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBGYWxzZQorICAgICAgICBzZWxmLnN0YXR1cyA9IE5vbmUKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIub3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICIlczogU0VSVkVSOiBzdWJtaXR0aW5nIGJ1Zy4iJShzeXMuYXJndlswXSwpCisgICAgICAgICAgICBzZWxmLnN0YXR1cyA9IHNlbGYucmVwb3J0ZXIuZmlsZVJlcG9ydChzZWxmLnJlcG9ydCwgc2VsZi5wYXJhbWV0ZXJzKQorICAgICAgICAgICAgc2VsZi5zdWNjZXNzID0gVHJ1ZQorICAgICAgICAgICAgdGltZS5zbGVlcCgzKQorICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIub3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICIlczogU0VSVkVSOiBzdWJtaXNzaW9uIGNvbXBsZXRlLiIlKHN5cy5hcmd2WzBdLCkKKyAgICAgICAgZXhjZXB0IFJlcG9ydGVyLlJlcG9ydEZhaWx1cmUsZToKKyAgICAgICAgICAgIHNlbGYuc3RhdHVzID0gZS52YWx1ZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLGU6CisgICAgICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgcHJpbnQgPj5zLCc8Yj5VbmhhbmRsZWQgRXhjZXB0aW9uPC9iPjxicj48cHJlPicKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZSxmaWxlPXMpCisgICAgICAgICAgICBwcmludCA+PnMsJzwvcHJlPicKKyAgICAgICAgICAgIHNlbGYuc3RhdHVzID0gcy5nZXR2YWx1ZSgpCisKK2NsYXNzIFNjYW5WaWV3U2VydmVyKEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzLCBoYW5kbGVyLCByb290LCByZXBvcnRlcnMsIG9wdGlvbnMpOgorICAgICAgICBCYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyLl9faW5pdF9fKHNlbGYsIGFkZHJlc3MsIGhhbmRsZXIpCisgICAgICAgIHNlbGYucm9vdCA9IHJvb3QKKyAgICAgICAgc2VsZi5yZXBvcnRlcnMgPSByZXBvcnRlcnMKKyAgICAgICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucyAgICAgICAgCisgICAgICAgIHNlbGYuaGFsdGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb25maWcgPSBOb25lCisgICAgICAgIHNlbGYubG9hZF9jb25maWcoKQorCisgICAgZGVmIGxvYWRfY29uZmlnKHNlbGYpOgorICAgICAgICBzZWxmLmNvbmZpZyA9IENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIoKQorCisgICAgICAgICMgQWRkIGRlZmF1bHRzCisgICAgICAgIHNlbGYuY29uZmlnLmFkZF9zZWN0aW9uKCdTY2FuVmlldycpCisgICAgICAgIGZvciByIGluIHNlbGYucmVwb3J0ZXJzOgorICAgICAgICAgICAgc2VsZi5jb25maWcuYWRkX3NlY3Rpb24oci5nZXROYW1lKCkpCisgICAgICAgICAgICBmb3IgcCBpbiByLmdldFBhcmFtZXRlcnMoKToKKyAgICAgICAgICAgICAgaWYgcC5zYXZlQ29uZmlnVmFsdWUoKToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5zZXQoci5nZXROYW1lKCksIHAuZ2V0TmFtZSgpLCAnJykKKworICAgICAgICAjIElnbm9yZSBwYXJzZSBlcnJvcnMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jb25maWcucmVhZChba0NvbmZpZ1BhdGhdKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBTYXZlIG9uIGV4aXQKKyAgICAgICAgaW1wb3J0IGF0ZXhpdAorICAgICAgICBhdGV4aXQucmVnaXN0ZXIobGFtYmRhOiBzZWxmLnNhdmVfY29uZmlnKCkpCisgICAgICAgIAorICAgIGRlZiBzYXZlX2NvbmZpZyhzZWxmKToKKyAgICAgICAgIyBJZ25vcmUgZXJyb3JzIChvbmx5IGNhbGxlZCBvbiBleGl0KS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IG9wZW4oa0NvbmZpZ1BhdGgsJ3cnKQorICAgICAgICAgICAgc2VsZi5jb25maWcud3JpdGUoZikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIAorICAgIGRlZiBoYWx0KHNlbGYpOgorICAgICAgICBzZWxmLmhhbHRlZCA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLmRlYnVnOgorICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiJXM6IFNFUlZFUjogaGFsdGluZy4iICUgKHN5cy5hcmd2WzBdLCkKKworICAgIGRlZiBzZXJ2ZV9mb3JldmVyKHNlbGYpOgorICAgICAgICB3aGlsZSBub3Qgc2VsZi5oYWx0ZWQ6CisgICAgICAgICAgICBpZiBzZWxmLm9wdGlvbnMuZGVidWcgPiAxOgorICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIiVzOiBTRVJWRVI6IHdhaXRpbmcuLi4iICUgKHN5cy5hcmd2WzBdLCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9yZXF1ZXN0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLGU6CisgICAgICAgICAgICAgICAgcHJpbnQgJ09TRXJyb3InLGUuZXJybm8KKworICAgIGRlZiBmaW5pc2hfcmVxdWVzdChzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgIGlmIHNlbGYub3B0aW9ucy5hdXRvUmVsb2FkOgorICAgICAgICAgICAgaW1wb3J0IFNjYW5WaWV3CisgICAgICAgICAgICBzZWxmLlJlcXVlc3RIYW5kbGVyQ2xhc3MgPSByZWxvYWQoU2NhblZpZXcpLlNjYW5WaWV3UmVxdWVzdEhhbmRsZXIKKyAgICAgICAgQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlci5maW5pc2hfcmVxdWVzdChzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKKworICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgorICAgICAgICAjIElnbm9yZSBzb2NrZXQgZXJyb3JzCisgICAgICAgIGluZm8gPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBpZiBpbmZvIGFuZCBpc2luc3RhbmNlKGluZm9bMV0sIHNvY2tldC5lcnJvcik6CisgICAgICAgICAgICBpZiBzZWxmLm9wdGlvbnMuZGVidWcgPiAxOgorICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIiVzOiBTRVJWRVI6IGlnbm9yZWQgc29ja2V0IGVycm9yLiIgJSAoc3lzLmFyZ3ZbMF0sKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIuaGFuZGxlX2Vycm9yKHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQorCisjIEJvcnJvd2VkIGZyb20gUXVpeG90ZSwgd2l0aCBzaW1wbGlmaWNhdGlvbnMuCitkZWYgcGFyc2VfcXVlcnkocXMsIGZpZWxkcz1Ob25lKToKKyAgICBpZiBmaWVsZHMgaXMgTm9uZToKKyAgICAgICAgZmllbGRzID0ge30KKyAgICBmb3IgY2h1bmsgaW4gZmlsdGVyKE5vbmUsIHFzLnNwbGl0KCcmJykpOgorICAgICAgICBpZiAnPScgbm90IGluIGNodW5rOgorICAgICAgICAgICAgbmFtZSA9IGNodW5rCisgICAgICAgICAgICB2YWx1ZSA9ICcnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lLCB2YWx1ZSA9IGNodW5rLnNwbGl0KCc9JywgMSkKKyAgICAgICAgbmFtZSA9IHVybGxpYi51bnF1b3RlKG5hbWUucmVwbGFjZSgnKycsICcgJykpCisgICAgICAgIHZhbHVlID0gdXJsbGliLnVucXVvdGUodmFsdWUucmVwbGFjZSgnKycsICcgJykpCisgICAgICAgIGl0ZW0gPSBmaWVsZHMuZ2V0KG5hbWUpCisgICAgICAgIGlmIGl0ZW0gaXMgTm9uZToKKyAgICAgICAgICAgIGZpZWxkc1tuYW1lXSA9IFt2YWx1ZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGl0ZW0uYXBwZW5kKHZhbHVlKQorICAgIHJldHVybiBmaWVsZHMKKworY2xhc3MgU2NhblZpZXdSZXF1ZXN0SGFuZGxlcihTaW1wbGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgc2VydmVyX3ZlcnNpb24gPSAiU2NhblZpZXdTZXJ2ZXIvIiArIF9fdmVyc2lvbl9fCisgICAgZHluYW1pY19tdGltZSA9IHRpbWUudGltZSgpCisKKyAgICBkZWYgZG9fSEVBRChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuZG9fSEVBRChzZWxmKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLGU6CisgICAgICAgICAgICBzZWxmLmhhbmRsZV9leGNlcHRpb24oZSkKKyAgICAgICAgICAgIAorICAgIGRlZiBkb19HRVQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLmRvX0dFVChzZWxmKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLGU6CisgICAgICAgICAgICBzZWxmLmhhbmRsZV9leGNlcHRpb24oZSkKKyAgICAgICAgICAgIAorICAgIGRlZiBkb19QT1NUKHNlbGYpOgorICAgICAgICAiIiJTZXJ2ZSBhIFBPU1QgcmVxdWVzdC4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5oZWFkZXJzLmdldGhlYWRlcignY29udGVudC1sZW5ndGgnKSBvciAiMCIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBpbnQobGVuZ3RoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGxlbmd0aCA9IDAKKyAgICAgICAgICAgIGNvbnRlbnQgPSBzZWxmLnJmaWxlLnJlYWQobGVuZ3RoKQorICAgICAgICAgICAgZmllbGRzID0gcGFyc2VfcXVlcnkoY29udGVudCkKKyAgICAgICAgICAgIGYgPSBzZWxmLnNlbmRfaGVhZChmaWVsZHMpCisgICAgICAgICAgICBpZiBmOgorICAgICAgICAgICAgICAgIHNlbGYuY29weWZpbGUoZiwgc2VsZi53ZmlsZSkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVfZXhjZXB0aW9uKGUpICAgICAgICAgICAgCisKKyAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6CisgICAgICAgIGlmIHNlbGYuc2VydmVyLm9wdGlvbnMuZGVidWc6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlczogU0VSVkVSOiAlcyAtIC0gWyVzXSAlc1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeXMuYXJndlswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkcmVzc19zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nX2RhdGVfdGltZV9zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCVhcmdzKSkKKworICAgIGRlZiBsb2FkX3JlcG9ydChzZWxmLCByZXBvcnQpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuc2VydmVyLnJvb3QsICdyZXBvcnQtJXMuaHRtbCclcmVwb3J0KQorICAgICAgICBkYXRhID0gb3BlbihwYXRoKS5yZWFkKCkKKyAgICAgICAga2V5cyA9IHt9CisgICAgICAgIGZvciBpdGVtIGluIGtCdWdLZXlWYWx1ZVJFLmZpbmRpdGVyKGRhdGEpOgorICAgICAgICAgICAgayx2ID0gaXRlbS5ncm91cHMoKQorICAgICAgICAgICAga2V5c1trXSA9IHYKKyAgICAgICAgcmV0dXJuIGtleXMKKworICAgIGRlZiBsb2FkX2NyYXNoZXMoc2VsZik6CisgICAgICAgIHBhdGggPSBwb3NpeHBhdGguam9pbihzZWxmLnNlcnZlci5yb290LCAnaW5kZXguaHRtbCcpCisgICAgICAgIGRhdGEgPSBvcGVuKHBhdGgpLnJlYWQoKQorICAgICAgICBwcm9ibGVtcyA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIGtSZXBvcnRDcmFzaEVudHJ5UkUuZmluZGl0ZXIoZGF0YSk6CisgICAgICAgICAgICBmaWVsZERhdGEgPSBpdGVtLmdyb3VwKDEpCisgICAgICAgICAgICBmaWVsZHMgPSBkaWN0KFtpLmdyb3VwcygpIGZvciBpIGluIAorICAgICAgICAgICAgICAgICAgICAgICAgICAga1JlcG9ydENyYXNoRW50cnlLZXlWYWx1ZVJFLmZpbmRpdGVyKGZpZWxkRGF0YSldKQorICAgICAgICAgICAgcHJvYmxlbXMuYXBwZW5kKGZpZWxkcykKKyAgICAgICAgcmV0dXJuIHByb2JsZW1zCisKKyAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBleGMpOgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHMgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHByaW50ID4+cywgIklOVEVSTkFMIEVSUk9SXG4iCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZXhjLCBzKQorICAgICAgICBmID0gc2VsZi5zZW5kX3N0cmluZyhzLmdldHZhbHVlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgaWYgZjoKKyAgICAgICAgICAgIHNlbGYuY29weWZpbGUoZiwgc2VsZi53ZmlsZSkKKyAgICAgICAgICAgIGYuY2xvc2UoKSAgICAgICAgCisgICAgICAgICAgICAKKyAgICBkZWYgZ2V0X3NjYWxhcl9maWVsZChzZWxmLCBuYW1lKToKKyAgICAgICAgaWYgbmFtZSBpbiBzZWxmLmZpZWxkczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpZWxkc1tuYW1lXVswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzdWJtaXRfYnVnKHNlbGYsIGMpOgorICAgICAgICB0aXRsZSA9IHNlbGYuZ2V0X3NjYWxhcl9maWVsZCgndGl0bGUnKQorICAgICAgICBkZXNjcmlwdGlvbiA9IHNlbGYuZ2V0X3NjYWxhcl9maWVsZCgnZGVzY3JpcHRpb24nKQorICAgICAgICByZXBvcnQgPSBzZWxmLmdldF9zY2FsYXJfZmllbGQoJ3JlcG9ydCcpCisgICAgICAgIHJlcG9ydGVySW5kZXggPSBzZWxmLmdldF9zY2FsYXJfZmllbGQoJ3JlcG9ydGVyJykKKyAgICAgICAgZmlsZXMgPSBbXQorICAgICAgICBmb3IgZmlsZUlEIGluIHNlbGYuZmllbGRzLmdldCgnZmlsZXMnLFtdKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpID0gaW50KGZpbGVJRCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBpID0gTm9uZQorICAgICAgICAgICAgaWYgaSBpcyBOb25lIG9yIGk8MCBvciBpPj1sZW4oYy5maWxlcyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIChGYWxzZSwgJ0ludmFsaWQgZmlsZSBJRCcpCisgICAgICAgICAgICBmaWxlcy5hcHBlbmQoYy5maWxlc1tpXSkKKyAgICAgICAgCisgICAgICAgIGlmIG5vdCB0aXRsZToKKyAgICAgICAgICAgIHJldHVybiAoRmFsc2UsICJNaXNzaW5nIHRpdGxlLiIpCisgICAgICAgIGlmIG5vdCBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgIHJldHVybiAoRmFsc2UsICJNaXNzaW5nIGRlc2NyaXB0aW9uLiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlcG9ydGVySW5kZXggPSBpbnQocmVwb3J0ZXJJbmRleCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmV0dXJuIChGYWxzZSwgIkludmFsaWQgcmVwb3J0IG1ldGhvZC4iKQorICAgICAgICAKKyAgICAgICAgIyBHZXQgdGhlIHJlcG9ydGVyIGFuZCBwYXJhbWV0ZXJzLgorICAgICAgICByZXBvcnRlciA9IHNlbGYuc2VydmVyLnJlcG9ydGVyc1tyZXBvcnRlckluZGV4XQorICAgICAgICBwYXJhbWV0ZXJzID0ge30KKyAgICAgICAgZm9yIG8gaW4gcmVwb3J0ZXIuZ2V0UGFyYW1ldGVycygpOgorICAgICAgICAgICAgbmFtZSA9ICclc18lcyclKHJlcG9ydGVyLmdldE5hbWUoKSxvLmdldE5hbWUoKSkKKyAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIHNlbGYuZmllbGRzOgorICAgICAgICAgICAgICAgIHJldHVybiAoRmFsc2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgJ01pc3NpbmcgZmllbGQgIiVzIiBmb3IgJXMgcmVwb3J0IG1ldGhvZC4nJShuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlci5nZXROYW1lKCkpKQorICAgICAgICAgICAgcGFyYW1ldGVyc1tvLmdldE5hbWUoKV0gPSBzZWxmLmdldF9zY2FsYXJfZmllbGQobmFtZSkKKworICAgICAgICAjIFVwZGF0ZSBjb25maWcgZGVmYXVsdHMuCisgICAgICAgIGlmIHJlcG9ydCAhPSAnTm9uZSc6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5jb25maWcuc2V0KCdTY2FuVmlldycsICdyZXBvcnRlcicsIHJlcG9ydGVySW5kZXgpCisgICAgICAgICAgICBmb3IgbyBpbiByZXBvcnRlci5nZXRQYXJhbWV0ZXJzKCk6CisgICAgICAgICAgICAgIGlmIG8uc2F2ZUNvbmZpZ1ZhbHVlKCk6CisgICAgICAgICAgICAgICAgbmFtZSA9IG8uZ2V0TmFtZSgpCisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuY29uZmlnLnNldChyZXBvcnRlci5nZXROYW1lKCksIG5hbWUsIHBhcmFtZXRlcnNbbmFtZV0pCisKKyAgICAgICAgIyBDcmVhdGUgdGhlIHJlcG9ydC4KKyAgICAgICAgYnVnID0gUmVwb3J0ZXIuQnVnUmVwb3J0KHRpdGxlLCBkZXNjcmlwdGlvbiwgZmlsZXMpCisKKyAgICAgICAgIyBLaWNrIG9mZiBhIHJlcG9ydGluZyB0aHJlYWQuCisgICAgICAgIHQgPSBSZXBvcnRlclRocmVhZChidWcsIHJlcG9ydGVyLCBwYXJhbWV0ZXJzLCBzZWxmLnNlcnZlcikKKyAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgIyBXYWl0IGZvciB0aHJlYWQgdG8gZGllLi4uCisgICAgICAgIHdoaWxlIHQuaXNBbGl2ZSgpOgorICAgICAgICAgICAgdGltZS5zbGVlcCguMjUpCisgICAgICAgIHN1Ym1pdFN0YXR1cyA9IHQuc3RhdHVzCisKKyAgICAgICAgcmV0dXJuICh0LnN1Y2Nlc3MsIHQuc3RhdHVzKQorCisgICAgZGVmIHNlbmRfcmVwb3J0X3N1Ym1pdChzZWxmKToKKyAgICAgICAgcmVwb3J0ID0gc2VsZi5nZXRfc2NhbGFyX2ZpZWxkKCdyZXBvcnQnKQorICAgICAgICBjID0gc2VsZi5nZXRfcmVwb3J0X2NvbnRleHQocmVwb3J0KQorICAgICAgICBpZiBjLnJlcG9ydFNvdXJjZSBpcyBOb25lOgorICAgICAgICAgICAgcmVwb3J0aW5nRm9yID0gIlJlcG9ydCBDcmFzaGVzID4gIgorICAgICAgICAgICAgZmlsZUJ1ZyA9ICIiIlwKKzxhIGhyZWY9Ii9yZXBvcnRfY3Jhc2hlcyI+RmlsZSBCdWc8L2E+ID4gIiIiJWxvY2FscygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXBvcnRpbmdGb3IgPSAnPGEgaHJlZj0iLyVzIj5SZXBvcnQgJXM8L2E+ID4gJyAlIChjLnJlcG9ydFNvdXJjZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KQorICAgICAgICAgICAgZmlsZUJ1ZyA9ICc8YSBocmVmPSIvcmVwb3J0LyVzIj5GaWxlIEJ1ZzwvYT4gPiAnICUgcmVwb3J0CisgICAgICAgIHRpdGxlID0gc2VsZi5nZXRfc2NhbGFyX2ZpZWxkKCd0aXRsZScpCisgICAgICAgIGRlc2NyaXB0aW9uID0gc2VsZi5nZXRfc2NhbGFyX2ZpZWxkKCdkZXNjcmlwdGlvbicpCisKKyAgICAgICAgcmVzLG1lc3NhZ2UgPSBzZWxmLnN1Ym1pdF9idWcoYykKKworICAgICAgICBpZiByZXM6CisgICAgICAgICAgICBzdGF0dXNDbGFzcyA9ICdTdWJtaXRPaycKKyAgICAgICAgICAgIHN0YXR1c05hbWUgPSAnU3VjY2VlZGVkJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdHVzQ2xhc3MgPSAnU3VibWl0RmFpbCcKKyAgICAgICAgICAgIHN0YXR1c05hbWUgPSAnRmFpbGVkJworCisgICAgICAgIHJlc3VsdCA9ICIiIgorPGhlYWQ+CisgIDx0aXRsZT5CdWcgU3VibWlzc2lvbjwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii9zY2Fudmlldy5jc3MiIC8+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMz4KKzxhIGhyZWY9Ii8iPlN1bW1hcnk8L2E+ID4gCislKHJlcG9ydGluZ0ZvcilzCislKGZpbGVCdWcpcworU3VibWl0PC9oMz4KKzxmb3JtIG5hbWU9ImZvcm0iIGFjdGlvbj0iIj4KKzx0YWJsZSBjbGFzcz0iZm9ybSI+Cis8dHI+PHRkPgorPHRhYmxlIGNsYXNzPSJmb3JtX2dyb3VwIj4KKzx0cj4KKyAgPHRkIGNsYXNzPSJmb3JtX2NsYWJlbCI+VGl0bGU6PC90ZD4KKyAgPHRkIGNsYXNzPSJmb3JtX3ZhbHVlIj4KKyAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGl0bGUiIHNpemU9IjUwIiB2YWx1ZT0iJSh0aXRsZSlzIiBkaXNhYmxlZD4KKyAgPC90ZD4KKzwvdHI+Cis8dHI+CisgIDx0ZCBjbGFzcz0iZm9ybV9sYWJlbCI+RGVzY3JpcHRpb246PC90ZD4KKyAgPHRkIGNsYXNzPSJmb3JtX3ZhbHVlIj4KKzx0ZXh0YXJlYSByb3dzPSIxMCIgY29scz0iODAiIG5hbWU9ImRlc2NyaXB0aW9uIiBkaXNhYmxlZD4KKyUoZGVzY3JpcHRpb24pcworPC90ZXh0YXJlYT4KKyAgPC90ZD4KKzwvdGFibGU+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPC9mb3JtPgorPGgxIGNsYXNzPSIlKHN0YXR1c0NsYXNzKXMiPlN1Ym1pc3Npb24gJShzdGF0dXNOYW1lKXM8L2gxPgorJShtZXNzYWdlKXMKKzxwPgorPGhyPgorPGEgaHJlZj0iLyI+UmV0dXJuIHRvIFN1bW1hcnk8L2E+Cis8L2JvZHk+Cis8L2h0bWw+IiIiJWxvY2FscygpCisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfc3RyaW5nKHJlc3VsdCkKKworICAgIGRlZiBzZW5kX29wZW5fcmVwb3J0KHNlbGYsIHJlcG9ydCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleXMgPSBzZWxmLmxvYWRfcmVwb3J0KHJlcG9ydCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2Vycm9yKDQwMCwgJ0ludmFsaWQgcmVwb3J0LicpCisKKyAgICAgICAgZmlsZSA9IGtleXMuZ2V0KCdGSUxFJykKKyAgICAgICAgaWYgbm90IGZpbGUgb3Igbm90IHBvc2l4cGF0aC5leGlzdHMoZmlsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2Vycm9yKDQwMCwgJ0ZpbGUgZG9lcyBub3QgZXhpc3Q6ICIlcyInICUgZmlsZSkKKworICAgICAgICBpbXBvcnQgc3RhcnRmaWxlCisgICAgICAgIGlmIHNlbGYuc2VydmVyLm9wdGlvbnMuZGVidWc6CisgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICclczogU0VSVkVSOiBvcGVuaW5nICIlcyInJShzeXMuYXJndlswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUpCisKKyAgICAgICAgc3RhdHVzID0gc3RhcnRmaWxlLm9wZW4oZmlsZSkKKyAgICAgICAgaWYgc3RhdHVzOgorICAgICAgICAgICAgcmVzID0gJ09wZW5lZDogIiVzIicgJSBmaWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXMgPSAnT3BlbiBmYWlsZWQ6ICIlcyInICUgZmlsZQorCisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfc3RyaW5nKHJlcywgJ3RleHQvcGxhaW4nKQorCisgICAgZGVmIGdldF9yZXBvcnRfY29udGV4dChzZWxmLCByZXBvcnQpOgorICAgICAgICBjbGFzcyBDb250ZXh0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiByZXBvcnQgaXMgTm9uZSBvciByZXBvcnQgPT0gJ05vbmUnOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYubG9hZF9jcmFzaGVzKCkKKyAgICAgICAgICAgICMgRG9uJ3QgYWxsb3cgZW1wdHkgcmVwb3J0cy4KKyAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICdObyBjcmFzaGVzIGRldGVjdGVkIScKKyAgICAgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgICAgIGMudGl0bGUgPSAnY2xhbmcgc3RhdGljIGFuYWx5emVyIGZhaWx1cmVzJworCisgICAgICAgICAgICBzdGRlcnJTdW1tYXJ5ID0gIiIKKyAgICAgICAgICAgIGZvciBpdGVtIGluIGRhdGE6CisgICAgICAgICAgICAgICAgaWYgJ3N0ZGVycicgaW4gaXRlbToKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBvc2l4cGF0aC5qb2luKHNlbGYuc2VydmVyLnJvb3QsIGl0ZW1bJ3N0ZGVyciddKQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxucyA9IGl0ZXJ0b29scy5pc2xpY2Uob3BlbihwYXRoKSwgMCwgMTApCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnJTdW1tYXJ5ICs9ICclc1xuLS1cbiVzJyAlIChpdGVtLmdldCgnc3JjJywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHVua25vd24+JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJy5qb2luKGxucykpCisKKyAgICAgICAgICAgIGMuZGVzY3JpcHRpb24gPSAiIiJcCitUaGUgY2xhbmcgc3RhdGljIGFuYWx5emVyIGZhaWxlZCBvbiB0aGVzZSBpbnB1dHM6CislcworCitTVERFUlIgU3VtbWFyeQorLS0tLS0tLS0tLS0tLS0KKyVzCisiIiIgJSAoJ1xuJy5qb2luKFtpdGVtLmdldCgnc3JjJywnPHVua25vd24+JykgZm9yIGl0ZW0gaW4gZGF0YV0pLAorICAgICAgIHN0ZGVyclN1bW1hcnkpCisgICAgICAgICAgICBjLnJlcG9ydFNvdXJjZSA9IE5vbmUKKyAgICAgICAgICAgIGMubmF2TWFya3VwID0gIlJlcG9ydCBDcmFzaGVzID4gIgorICAgICAgICAgICAgYy5maWxlcyA9IFtdCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBkYXRhOiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjLmZpbGVzLmFwcGVuZChpdGVtLmdldCgnc3JjJywnJykpCisgICAgICAgICAgICAgICAgYy5maWxlcy5hcHBlbmQocG9zaXhwYXRoLmpvaW4oc2VsZi5zZXJ2ZXIucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmdldCgnZmlsZScsJycpKSkKKyAgICAgICAgICAgICAgICBjLmZpbGVzLmFwcGVuZChwb3NpeHBhdGguam9pbihzZWxmLnNlcnZlci5yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZ2V0KCdjbGFuZ2ZpbGUnLCcnKSkpCisgICAgICAgICAgICAgICAgYy5maWxlcy5hcHBlbmQocG9zaXhwYXRoLmpvaW4oc2VsZi5zZXJ2ZXIucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmdldCgnc3RkZXJyJywnJykpKQorICAgICAgICAgICAgICAgIGMuZmlsZXMuYXBwZW5kKHBvc2l4cGF0aC5qb2luKHNlbGYuc2VydmVyLnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5nZXQoJ2luZm8nLCcnKSkpCisgICAgICAgICAgICAjIEp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZmFpbGVkLCBpZ25vcmUgZmlsZXMgd2hpY2ggZG9uJ3QKKyAgICAgICAgICAgICMgZXhpc3QuCisgICAgICAgICAgICBjLmZpbGVzID0gW2YgZm9yIGYgaW4gYy5maWxlcworICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmKSBhbmQgb3MucGF0aC5pc2ZpbGUoZildCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhpcyBpcyBhIHZhbGlkIHJlcG9ydC4gICAgICAgICAgICAKKyAgICAgICAgICAgIHBhdGggPSBwb3NpeHBhdGguam9pbihzZWxmLnNlcnZlci5yb290LCAncmVwb3J0LSVzLmh0bWwnICUgcmVwb3J0KQorICAgICAgICAgICAgaWYgbm90IHBvc2l4cGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgJ0ludmFsaWQgcmVwb3J0IElEJworICAgICAgICAgICAga2V5cyA9IHNlbGYubG9hZF9yZXBvcnQocmVwb3J0KQorICAgICAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICAgICAgYy50aXRsZSA9IGtleXMuZ2V0KCdERVNDJywnY2xhbmcgZXJyb3IgKHVucmVjb2duaXplZCcpCisgICAgICAgICAgICBjLmRlc2NyaXB0aW9uID0gIiIiXAorQnVnIHJlcG9ydGVkIGJ5IHRoZSBjbGFuZyBzdGF0aWMgYW5hbHl6ZXIuCisKK0Rlc2NyaXB0aW9uOiAlcworRmlsZTogJXMKK0xpbmU6ICVzCisiIiIlKGMudGl0bGUsIGtleXMuZ2V0KCdGSUxFJywnPHVua25vd24+JyksIGtleXMuZ2V0KCdMSU5FJywgJzx1bmtub3duPicpKQorICAgICAgICAgICAgYy5yZXBvcnRTb3VyY2UgPSAncmVwb3J0LSVzLmh0bWwnICUgcmVwb3J0CisgICAgICAgICAgICBjLm5hdk1hcmt1cCA9ICIiIjxhIGhyZWY9Ii8lcyI+UmVwb3J0ICVzPC9hPiA+ICIiIiAlIChjLnJlcG9ydFNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydCkKKworICAgICAgICAgICAgYy5maWxlcyA9IFtwYXRoXQorICAgICAgICByZXR1cm4gYworCisgICAgZGVmIHNlbmRfcmVwb3J0KHNlbGYsIHJlcG9ydCwgY29uZmlnT3ZlcnJpZGVzPU5vbmUpOgorICAgICAgICBkZWYgZ2V0Q29uZmlnT3B0aW9uKHNlY3Rpb24sIGZpZWxkKTogICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjb25maWdPdmVycmlkZXMgaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiBjb25maWdPdmVycmlkZXMgYW5kCisgICAgICAgICAgICAgICAgZmllbGQgaW4gY29uZmlnT3ZlcnJpZGVzW3NlY3Rpb25dKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnT3ZlcnJpZGVzW3NlY3Rpb25dW2ZpZWxkXQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VydmVyLmNvbmZpZy5nZXQoc2VjdGlvbiwgZmllbGQpCisKKyAgICAgICAgIyByZXBvcnQgaXMgTm9uZSBpcyB1c2VkIGZvciBjcmFzaGVzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGMgPSBzZWxmLmdldF9yZXBvcnRfY29udGV4dChyZXBvcnQpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9lcnJvcig0MDAsIGUubWVzc2FnZSkKKworICAgICAgICB0aXRsZSA9IGMudGl0bGUKKyAgICAgICAgZGVzY3JpcHRpb249IGMuZGVzY3JpcHRpb24KKyAgICAgICAgcmVwb3J0aW5nRm9yID0gYy5uYXZNYXJrdXAKKyAgICAgICAgaWYgYy5yZXBvcnRTb3VyY2UgaXMgTm9uZToKKyAgICAgICAgICAgIGV4dHJhSUZyYW1lID0gIiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4dHJhSUZyYW1lID0gIiIiXAorPGlmcmFtZSBzcmM9Ii8lcyIgd2lkdGg9IjEwMCUlIiBoZWlnaHQ9IjQwJSUiCisgICAgICAgIHNjcm9sbGluZz0iYXV0byIgZnJhbWVib3JkZXI9IjEiPgorICA8YSBocmVmPSIvJXMiPlZpZXcgQnVnIFJlcG9ydDwvYT4KKzwvaWZyYW1lPiIiIiAlIChjLnJlcG9ydFNvdXJjZSwgYy5yZXBvcnRTb3VyY2UpCisKKyAgICAgICAgcmVwb3J0ZXJTZWxlY3Rpb25zID0gW10KKyAgICAgICAgcmVwb3J0ZXJPcHRpb25zID0gW10KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBhY3RpdmUgPSBpbnQoZ2V0Q29uZmlnT3B0aW9uKCdTY2FuVmlldycsJ3JlcG9ydGVyJykpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGFjdGl2ZSA9IDAKKyAgICAgICAgZm9yIGksciBpbiBlbnVtZXJhdGUoc2VsZi5zZXJ2ZXIucmVwb3J0ZXJzKToKKyAgICAgICAgICAgIHNlbGVjdGVkID0gKGkgPT0gYWN0aXZlKQorICAgICAgICAgICAgaWYgc2VsZWN0ZWQ6CisgICAgICAgICAgICAgICAgc2VsZWN0ZWRTdHIgPSAnIHNlbGVjdGVkJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxlY3RlZFN0ciA9ICcnCisgICAgICAgICAgICByZXBvcnRlclNlbGVjdGlvbnMuYXBwZW5kKCc8b3B0aW9uIHZhbHVlPSIlZCIlcz4lczwvb3B0aW9uPiclKGksc2VsZWN0ZWRTdHIsci5nZXROYW1lKCkpKQorICAgICAgICAgICAgb3B0aW9ucyA9ICdcbicuam9pbihbIG8uZ2V0SFRNTChyLHRpdGxlLGdldENvbmZpZ09wdGlvbikgZm9yIG8gaW4gci5nZXRQYXJhbWV0ZXJzKCldKQorICAgICAgICAgICAgZGlzcGxheSA9ICgnbm9uZScsJycpW3NlbGVjdGVkXQorICAgICAgICAgICAgcmVwb3J0ZXJPcHRpb25zLmFwcGVuZCgiIiJcCis8dHIgaWQ9IiVzUmVwb3J0ZXJPcHRpb25zIiBzdHlsZT0iZGlzcGxheTolcyI+CisgIDx0ZCBjbGFzcz0iZm9ybV9sYWJlbCI+JXMgT3B0aW9uczwvdGQ+CisgIDx0ZCBjbGFzcz0iZm9ybV92YWx1ZSI+CisgICAgPHRhYmxlIGNsYXNzPSJmb3JtX2lubmVyX2dyb3VwIj4KKyVzCisgICAgPC90YWJsZT4KKyAgPC90ZD4KKzwvdHI+CisiIiIlKHIuZ2V0TmFtZSgpLGRpc3BsYXksci5nZXROYW1lKCksb3B0aW9ucykpCisgICAgICAgIHJlcG9ydGVyU2VsZWN0aW9ucyA9ICdcbicuam9pbihyZXBvcnRlclNlbGVjdGlvbnMpCisgICAgICAgIHJlcG9ydGVyT3B0aW9uc0RpdnMgPSAnXG4nLmpvaW4ocmVwb3J0ZXJPcHRpb25zKQorICAgICAgICByZXBvcnRlcnNBcnJheSA9ICdbJXNdJyUoJywnLmpvaW4oW2ByLmdldE5hbWUoKWAgZm9yIHIgaW4gc2VsZi5zZXJ2ZXIucmVwb3J0ZXJzXSkpCisKKyAgICAgICAgaWYgYy5maWxlczoKKyAgICAgICAgICAgIGZpZWxkU2l6ZSA9IG1pbig1LCBsZW4oYy5maWxlcykpCisgICAgICAgICAgICBhdHRhY2hGaWxlT3B0aW9ucyA9ICdcbicuam9pbihbIiIiXAorPG9wdGlvbiB2YWx1ZT0iJWQiIHNlbGVjdGVkPiVzPC9vcHRpb24+IiIiICUgKGksdikgZm9yIGksdiBpbiBlbnVtZXJhdGUoYy5maWxlcyldKQorICAgICAgICAgICAgYXR0YWNoRmlsZVJvdyA9ICIiIlwKKzx0cj4KKyAgPHRkIGNsYXNzPSJmb3JtX2xhYmVsIj5BdHRhY2g6PC90ZD4KKyAgPHRkIGNsYXNzPSJmb3JtX3ZhbHVlIj4KKzxzZWxlY3Qgc3R5bGU9IndpZHRoOjEwMCUlIiBuYW1lPSJmaWxlcyIgbXVsdGlwbGUgc2l6ZT0lZD4KKyVzCis8L3NlbGVjdD4KKyAgPC90ZD4KKzwvdHI+CisiIiIgJSAobWluKDUsIGxlbihjLmZpbGVzKSksIGF0dGFjaEZpbGVPcHRpb25zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXR0YWNoRmlsZVJvdyA9ICIiCisKKyAgICAgICAgcmVzdWx0ID0gIiIiPGh0bWw+Cis8aGVhZD4KKyAgPHRpdGxlPkZpbGUgQnVnPC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3NjYW52aWV3LmNzcyIgLz4KKzwvaGVhZD4KKzxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cit2YXIgcmVwb3J0ZXJzID0gJShyZXBvcnRlcnNBcnJheSlzOworZnVuY3Rpb24gdXBkYXRlUmVwb3J0ZXJPcHRpb25zKCkgeworICBpbmRleCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXBvcnRlcicpLnNlbGVjdGVkSW5kZXg7CisgIGZvciAodmFyIGk9MDsgaSA8IHJlcG9ydGVycy5sZW5ndGg7ICsraSkgeworICAgIG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyZXBvcnRlcnNbaV0gKyAiUmVwb3J0ZXJPcHRpb25zIik7CisgICAgaWYgKGkgPT0gaW5kZXgpIHsKKyAgICAgIG8uc3R5bGUuZGlzcGxheSA9ICIiOworICAgIH0gZWxzZSB7CisgICAgICBvLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgfQorICB9Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0idXBkYXRlUmVwb3J0ZXJPcHRpb25zKCkiPgorPGgzPgorPGEgaHJlZj0iLyI+U3VtbWFyeTwvYT4gPiAKKyUocmVwb3J0aW5nRm9yKXMKK0ZpbGUgQnVnPC9oMz4KKzxmb3JtIG5hbWU9ImZvcm0iIGFjdGlvbj0iL3JlcG9ydF9zdWJtaXQiIG1ldGhvZD0icG9zdCI+Cis8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJyZXBvcnQiIHZhbHVlPSIlKHJlcG9ydClzIj4KKworPHRhYmxlIGNsYXNzPSJmb3JtIj4KKzx0cj48dGQ+Cis8dGFibGUgY2xhc3M9ImZvcm1fZ3JvdXAiPgorPHRyPgorICA8dGQgY2xhc3M9ImZvcm1fY2xhYmVsIj5UaXRsZTo8L3RkPgorICA8dGQgY2xhc3M9ImZvcm1fdmFsdWUiPgorICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0aXRsZSIgc2l6ZT0iNTAiIHZhbHVlPSIlKHRpdGxlKXMiPgorICA8L3RkPgorPC90cj4KKzx0cj4KKyAgPHRkIGNsYXNzPSJmb3JtX2xhYmVsIj5EZXNjcmlwdGlvbjo8L3RkPgorICA8dGQgY2xhc3M9ImZvcm1fdmFsdWUiPgorPHRleHRhcmVhIHJvd3M9IjEwIiBjb2xzPSI4MCIgbmFtZT0iZGVzY3JpcHRpb24iPgorJShkZXNjcmlwdGlvbilzCis8L3RleHRhcmVhPgorICA8L3RkPgorPC90cj4KKworJShhdHRhY2hGaWxlUm93KXMKKworPC90YWJsZT4KKzxicj4KKzx0YWJsZSBjbGFzcz0iZm9ybV9ncm91cCI+Cis8dHI+CisgIDx0ZCBjbGFzcz0iZm9ybV9jbGFiZWwiPk1ldGhvZDo8L3RkPgorICA8dGQgY2xhc3M9ImZvcm1fdmFsdWUiPgorICAgIDxzZWxlY3QgaWQ9InJlcG9ydGVyIiBuYW1lPSJyZXBvcnRlciIgb25DaGFuZ2U9InVwZGF0ZVJlcG9ydGVyT3B0aW9ucygpIj4KKyAgICAlKHJlcG9ydGVyU2VsZWN0aW9ucylzCisgICAgPC9zZWxlY3Q+CisgIDwvdGQ+Cis8L3RyPgorJShyZXBvcnRlck9wdGlvbnNEaXZzKXMKKzwvdGFibGU+Cis8YnI+Cis8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJmb3JtX3N1Ym1pdCI+CisgIDxpbnB1dCBhbGlnbj0icmlnaHQiIHR5cGU9InN1Ym1pdCIgbmFtZT0iU3VibWl0IiB2YWx1ZT0iU3VibWl0Ij4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L2Zvcm0+CisKKyUoZXh0cmFJRnJhbWUpcworCis8L2JvZHk+Cis8L2h0bWw+IiIiJWxvY2FscygpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9zdHJpbmcocmVzdWx0KQorCisgICAgZGVmIHNlbmRfaGVhZChzZWxmLCBmaWVsZHM9Tm9uZSk6CisgICAgICAgIGlmIChzZWxmLnNlcnZlci5vcHRpb25zLm9ubHlTZXJ2ZUxvY2FsIGFuZAorICAgICAgICAgICAgc2VsZi5jbGllbnRfYWRkcmVzc1swXSAhPSAnMTI3LjAuMC4xJyk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2Vycm9yKDQwMSwgJ1VuYXV0aG9yaXplZCBob3N0LicpCisKKyAgICAgICAgaWYgZmllbGRzIGlzIE5vbmU6CisgICAgICAgICAgICBmaWVsZHMgPSB7fQorICAgICAgICBzZWxmLmZpZWxkcyA9IGZpZWxkcworCisgICAgICAgIG8gPSB1cmxwYXJzZS51cmxwYXJzZShzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuZmllbGRzID0gcGFyc2VfcXVlcnkoby5xdWVyeSwgZmllbGRzKQorICAgICAgICBwYXRoID0gcG9zaXhwYXRoLm5vcm1wYXRoKHVybGxpYi51bnF1b3RlKG8ucGF0aCkpCisKKyAgICAgICAgIyBTcGxpdCB0aGUgY29tcG9uZW50cyBhbmQgc3RyaXAgdGhlIHJvb3QgcHJlZml4LgorICAgICAgICBjb21wb25lbnRzID0gcGF0aC5zcGxpdCgnLycpWzE6XQorICAgICAgICAKKyAgICAgICAgIyBTcGVjaWFsIGNhc2Ugc29tZSB0b3AtbGV2ZWwgZW50cmllcy4KKyAgICAgICAgaWYgY29tcG9uZW50czoKKyAgICAgICAgICAgIG5hbWUgPSBjb21wb25lbnRzWzBdCisgICAgICAgICAgICBpZiBsZW4oY29tcG9uZW50cyk9PTI6CisgICAgICAgICAgICAgICAgaWYgbmFtZT09J3JlcG9ydCc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfcmVwb3J0KGNvbXBvbmVudHNbMV0pCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lPT0nb3Blbic6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfb3Blbl9yZXBvcnQoY29tcG9uZW50c1sxXSkKKyAgICAgICAgICAgIGVsaWYgbGVuKGNvbXBvbmVudHMpPT0xOgorICAgICAgICAgICAgICAgIGlmIG5hbWU9PSdxdWl0JzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuaGFsdCgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfc3RyaW5nKCdHb29kYnllLicsICd0ZXh0L3BsYWluJykKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWU9PSdyZXBvcnRfc3VibWl0JzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9yZXBvcnRfc3VibWl0KCkKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWU9PSdyZXBvcnRfY3Jhc2hlcyc6CisgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlcyA9IHsgJ1NjYW5WaWV3JyA6IHt9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSYWRhcicgOiB7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRW1haWwnIDoge30gfQorICAgICAgICAgICAgICAgICAgICBmb3IgaSxyIGluIGVudW1lcmF0ZShzZWxmLnNlcnZlci5yZXBvcnRlcnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgci5nZXROYW1lKCkgPT0gJ1JhZGFyJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZXNbJ1NjYW5WaWV3J11bJ3JlcG9ydGVyJ10gPSBpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzWydSYWRhciddWydDb21wb25lbnQnXSA9ICdsbHZtIC0gY2hlY2tlcicKKyAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzWydSYWRhciddWydDb21wb25lbnQgVmVyc2lvbiddID0gJ1gnCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfcmVwb3J0KE5vbmUsIG92ZXJyaWRlcykKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWU9PSdmYXZpY29uLmljbyc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfcGF0aChwb3NpeHBhdGguam9pbihrU2hhcmUsJ2J1Z2NhdGNoZXIuaWNvJykpCisgICAgICAgIAorICAgICAgICAjIE1hdGNoIGRpcmVjdG9yeSBlbnRyaWVzLgorICAgICAgICBpZiBjb21wb25lbnRzWy0xXSA9PSAnJzoKKyAgICAgICAgICAgIGNvbXBvbmVudHNbLTFdID0gJ2luZGV4Lmh0bWwnCisKKyAgICAgICAgcmVscGF0aCA9ICcvJy5qb2luKGNvbXBvbmVudHMpCisgICAgICAgIHBhdGggPSBwb3NpeHBhdGguam9pbihzZWxmLnNlcnZlci5yb290LCByZWxwYXRoKQorCisgICAgICAgIGlmIHNlbGYuc2VydmVyLm9wdGlvbnMuZGVidWcgPiAxOgorICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAnJXM6IFNFUlZFUjogc2VuZGluZyBwYXRoICIlcyInJShzeXMuYXJndlswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCkKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9wYXRoKHBhdGgpCisKKyAgICBkZWYgc2VuZF80MDQoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICJGaWxlIG5vdCBmb3VuZCIpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc2VuZF9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICAjIElmIHRoZSByZXF1ZXN0ZWQgcGF0aCBpcyBvdXRzaWRlIHRoZSByb290IGRpcmVjdG9yeSwgZG8gbm90IG9wZW4gaXQKKyAgICAgICAgcmVsID0gb3MucGF0aC5hYnNwYXRoKHBhdGgpCisgICAgICAgIGlmIG5vdCByZWwuc3RhcnRzd2l0aChvcy5wYXRoLmFic3BhdGgoc2VsZi5zZXJ2ZXIucm9vdCkpOgorICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfNDA0KCkKKyAgICAgICAgCisgICAgICAgIGN0eXBlID0gc2VsZi5ndWVzc190eXBlKHBhdGgpCisgICAgICAgIGlmIGN0eXBlLnN0YXJ0c3dpdGgoJ3RleHQvJyk6CisgICAgICAgICAgICAjIFBhdGNoIGZpbGUgaW5zdGVhZAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9wYXRjaGVkX2ZpbGUocGF0aCwgY3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2RlID0gJ3JiJworICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3BlbihwYXRoLCBtb2RlKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfNDA0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9maWxlKGYsIGN0eXBlKQorCisgICAgZGVmIHNlbmRfZmlsZShzZWxmLCBmLCBjdHlwZSk6CisgICAgICAgICMgUGF0Y2ggZmlsZXMgdG8gYWRkIGxpbmtzLCBidXQgc2tpcCBiaW5hcnkgZmlsZXMuCisgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtdHlwZSIsIGN0eXBlKQorICAgICAgICBmcyA9IG9zLmZzdGF0KGYuZmlsZW5vKCkpCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtTGVuZ3RoIiwgc3RyKGZzWzZdKSkKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiTGFzdC1Nb2RpZmllZCIsIHNlbGYuZGF0ZV90aW1lX3N0cmluZyhmcy5zdF9tdGltZSkpCisgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQorICAgICAgICByZXR1cm4gZgorCisgICAgZGVmIHNlbmRfc3RyaW5nKHNlbGYsIHMsIGN0eXBlPSd0ZXh0L2h0bWwnLCBoZWFkZXJzPVRydWUsIG10aW1lPU5vbmUpOgorICAgICAgICBpZiBoZWFkZXJzOgorICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKKyAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtdHlwZSIsIGN0eXBlKQorICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC1MZW5ndGgiLCBzdHIobGVuKHMpKSkKKyAgICAgICAgICAgIGlmIG10aW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbXRpbWUgPSBzZWxmLmR5bmFtaWNfbXRpbWUKKyAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkxhc3QtTW9kaWZpZWQiLCBzZWxmLmRhdGVfdGltZV9zdHJpbmcobXRpbWUpKQorICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICAgIHJldHVybiBTdHJpbmdJTy5TdHJpbmdJTyhzKQorCisgICAgZGVmIHNlbmRfcGF0Y2hlZF9maWxlKHNlbGYsIHBhdGgsIGN0eXBlKToKKyAgICAgICAgIyBBbGxvdyBhIHZlcnkgbGltaXRlZCBzZXQgb2YgdmFyaWFibGVzLiBUaGlzIGlzIHByZXR0eSBncm9zcy4KKyAgICAgICAgdmFyaWFibGVzID0ge30KKyAgICAgICAgdmFyaWFibGVzWydyZXBvcnQnXSA9ICcnCisgICAgICAgIG0gPSBrUmVwb3J0RmlsZVJFLm1hdGNoKHBhdGgpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICB2YXJpYWJsZXNbJ3JlcG9ydCddID0gbS5ncm91cCgyKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsJ3InKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfNDA0KCkKKyAgICAgICAgZnMgPSBvcy5mc3RhdChmLmZpbGVubygpKQorICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgZm9yIGEsYiBpbiBrUmVwb3J0UmVwbGFjZW1lbnRzOgorICAgICAgICAgICAgZGF0YSA9IGEuc3ViKGIgJSB2YXJpYWJsZXMsIGRhdGEpCisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfc3RyaW5nKGRhdGEsIGN0eXBlLCBtdGltZT1mcy5zdF9tdGltZSkKKworCitkZWYgY3JlYXRlX3NlcnZlcihhZGRyZXNzLCBvcHRpb25zLCByb290KToKKyAgICBpbXBvcnQgUmVwb3J0ZXIKKworICAgIHJlcG9ydGVycyA9IFJlcG9ydGVyLmdldFJlcG9ydGVycygpCisKKyAgICByZXR1cm4gU2NhblZpZXdTZXJ2ZXIoYWRkcmVzcywgU2NhblZpZXdSZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLXZpZXcvc2hhcmUvYnVnY2F0Y2hlci5pY28gYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9idWdjYXRjaGVyLmljbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmQzOWI1Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLXZpZXcvc2hhcmUvYnVnY2F0Y2hlci5pY28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLXZpZXcvc2hhcmUvc3RhcnRmaWxlLnB5IGIvY2xhbmctMzg1OTQyNC90b29scy9zY2FuLXZpZXcvc2hhcmUvc3RhcnRmaWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZmJlMmQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0zODU5NDI0L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9zdGFydGZpbGUucHkKQEAgLTAsMCArMSwyMDMgQEAKKyIiIlV0aWxpdHkgZm9yIG9wZW5pbmcgYSBmaWxlIHVzaW5nIHRoZSBkZWZhdWx0IGFwcGxpY2F0aW9uIGluIGEgY3Jvc3MtcGxhdGZvcm0KK21hbm5lci4gTW9kaWZpZWQgZnJvbSBodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81MTE0NDMvLgorIiIiCisKK19fdmVyc2lvbl9fID0gJzEuMXgnCitfX2FsbF9fID0gWydvcGVuJ10KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgd2ViYnJvd3NlcgoraW1wb3J0IHN1YnByb2Nlc3MKKworX2NvbnRyb2xsZXJzID0ge30KK19vcGVuID0gTm9uZQorCisKK2NsYXNzIEJhc2VDb250cm9sbGVyKG9iamVjdCk6CisgICAgJycnQmFzZSBjbGFzcyBmb3Igb3BlbiBwcm9ncmFtIGNvbnRyb2xsZXJzLicnJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICBkZWYgb3BlbihzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBDb250cm9sbGVyKEJhc2VDb250cm9sbGVyKToKKyAgICAnJydDb250cm9sbGVyIGZvciBhIGdlbmVyaWMgb3BlbiBwcm9ncmFtLicnJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc3VwZXIoQ29udHJvbGxlciwgc2VsZikuX19pbml0X18ob3MucGF0aC5iYXNlbmFtZShhcmdzWzBdKSkKKyAgICAgICAgc2VsZi5hcmdzID0gbGlzdChhcmdzKQorCisgICAgZGVmIF9pbnZva2Uoc2VsZiwgY21kbGluZSk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbic6CisgICAgICAgICAgICBjbG9zZWZkcyA9IEZhbHNlCisgICAgICAgICAgICBzdGFydHVwaW5mbyA9IHN1YnByb2Nlc3MuU1RBUlRVUElORk8oKQorICAgICAgICAgICAgc3RhcnR1cGluZm8uZHdGbGFncyB8PSBzdWJwcm9jZXNzLlNUQVJURl9VU0VTSE9XV0lORE9XCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbG9zZWZkcyA9IFRydWUKKyAgICAgICAgICAgIHN0YXJ0dXBpbmZvID0gTm9uZQorCisgICAgICAgIGlmIChvcy5lbnZpcm9uLmdldCgnRElTUExBWScpIG9yIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbicgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicpOgorICAgICAgICAgICAgaW5vdXQgPSBmaWxlKG9zLmRldm51bGwsICdyKycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGZvciBUVFkgcHJvZ3JhbXMsIHdlIG5lZWQgc3RkaW4vb3V0CisgICAgICAgICAgICBpbm91dCA9IE5vbmUKKworICAgICAgICAjIGlmIHBvc3NpYmxlLCBwdXQgdGhlIGNoaWxkIHByZWNlc3MgaW4gc2VwYXJhdGUgcHJvY2VzcyBncm91cCwKKyAgICAgICAgIyBzbyBrZXlib2FyZCBpbnRlcnJ1cHRzIGRvbid0IGFmZmVjdCBjaGlsZCBwcmVjZXNzIGFzIHdlbGwgYXMKKyAgICAgICAgIyBQeXRob24KKyAgICAgICAgc2V0c2lkID0gZ2V0YXR0cihvcywgJ3NldHNpZCcsIE5vbmUpCisgICAgICAgIGlmIG5vdCBzZXRzaWQ6CisgICAgICAgICAgICBzZXRzaWQgPSBnZXRhdHRyKG9zLCAnc2V0cGdycCcsIE5vbmUpCisKKyAgICAgICAgcGlwZSA9IHN1YnByb2Nlc3MuUG9wZW4oY21kbGluZSwgc3RkaW49aW5vdXQsIHN0ZG91dD1pbm91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPWlub3V0LCBjbG9zZV9mZHM9Y2xvc2VmZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWV4ZWNfZm49c2V0c2lkLCBzdGFydHVwaW5mbz1zdGFydHVwaW5mbykKKworICAgICAgICAjIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGlzIGtpbmQgb2YgdG9vbHMgKGdub21lLW9wZW4sIGtmbWNsaWVudCwKKyAgICAgICAgIyBleG8tb3BlbiwgeGRnLW9wZW4gYW5kIG9wZW4gZm9yIE9TWCkgaW1tZWRpYXRlbHkgZXhpdCBhZnRlciBsYXVjaGluZworICAgICAgICAjIHRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbgorICAgICAgICByZXR1cm5jb2RlID0gcGlwZS53YWl0KCkKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnZml4cmV0dXJuY29kZScpOgorICAgICAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYuZml4cmV0dXJuY29kZShyZXR1cm5jb2RlKQorICAgICAgICByZXR1cm4gbm90IHJldHVybmNvZGUKKworICAgIGRlZiBvcGVuKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlbmFtZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBjbWRsaW5lID0gc2VsZi5hcmdzICsgW2ZpbGVuYW1lXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBhc3N1bWUgaXQgaXMgYSBzZXF1ZW5jZQorICAgICAgICAgICAgY21kbGluZSA9IHNlbGYuYXJncyArIGZpbGVuYW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnZva2UoY21kbGluZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworCisjIFBsYXRmb3JtIHN1cHBvcnQgZm9yIFdpbmRvd3MKK2lmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbic6CisKKyAgICBjbGFzcyBTdGFydChCYXNlQ29udHJvbGxlcik6CisgICAgICAgICcnJ0NvbnRyb2xsZXIgZm9yIHRoZSB3aW4zMiBzdGFydCBwcm9nYW0gdGhyb3VnaCBvcy5zdGFydGZpbGUuJycnCisKKyAgICAgICAgZGVmIG9wZW4oc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZShmaWxlbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICAgICAgIyBbRXJyb3IgMjJdIE5vIGFwcGxpY2F0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgIyBmaWxlIGZvciB0aGlzIG9wZXJhdGlvbjogJzxVUkw+JworICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgX2NvbnRyb2xsZXJzWyd3aW5kb3dzLWRlZmF1bHQnXSA9IFN0YXJ0KCdzdGFydCcpCisgICAgX29wZW4gPSBfY29udHJvbGxlcnNbJ3dpbmRvd3MtZGVmYXVsdCddLm9wZW4KKworCisjIFBsYXRmb3JtIHN1cHBvcnQgZm9yIE1hY09TCitlbGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICBfY29udHJvbGxlcnNbJ29wZW4nXT0gQ29udHJvbGxlcignb3BlbicpCisgICAgX29wZW4gPSBfY29udHJvbGxlcnNbJ29wZW4nXS5vcGVuCisKKworIyBQbGF0Zm9ybSBzdXBwb3J0IGZvciBVbml4CitlbHNlOgorCisgICAgaW1wb3J0IGNvbW1hbmRzCisKKyAgICAjIEBXQVJOSU5HOiB1c2UgdGhlIHByaXZhdGUgQVBJIG9mIHRoZSB3ZWJicm93c2VyIG1vZHVsZQorICAgIGZyb20gd2ViYnJvd3NlciBpbXBvcnQgX2lzY29tbWFuZAorCisgICAgY2xhc3MgS2ZtQ2xpZW50KENvbnRyb2xsZXIpOgorICAgICAgICAnJydDb250cm9sbGVyIGZvciB0aGUgS0RFIGtmbWNsaWVudCBwcm9ncmFtLicnJworCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrZm1jbGllbnQ9J2tmbWNsaWVudCcpOgorICAgICAgICAgICAgc3VwZXIoS2ZtQ2xpZW50LCBzZWxmKS5fX2luaXRfXyhrZm1jbGllbnQsICdleGVjJykKKyAgICAgICAgICAgIHNlbGYua2RlX3ZlcnNpb24gPSBzZWxmLmRldGVjdF9rZGVfdmVyc2lvbigpCisKKyAgICAgICAgZGVmIGRldGVjdF9rZGVfdmVyc2lvbihzZWxmKToKKyAgICAgICAgICAgIGtkZV92ZXJzaW9uID0gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGluZm8gPSBjb21tYW5kcy5nZXRvdXRwdXQoJ2tkZS1jb25maWcgLS12ZXJzaW9uJykKKworICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGluZm8uc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0tERScpOgorICAgICAgICAgICAgICAgICAgICAgICAga2RlX3ZlcnNpb24gPSBsaW5lLnNwbGl0KCc6JylbLTFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICByZXR1cm4ga2RlX3ZlcnNpb24KKworICAgICAgICBkZWYgZml4cmV0dXJuY29kZShzZWxmLCByZXR1cm5jb2RlKToKKyAgICAgICAgICAgIGlmIHJldHVybmNvZGUgaXMgbm90IE5vbmUgYW5kIHNlbGYua2RlX3ZlcnNpb24gPiAnMy41LjQnOgorICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5jb2RlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBvcy5FWF9PSworCisgICAgZGVmIGRldGVjdF9kZXNrdG9wX2Vudmlyb25tZW50KCk6CisgICAgICAgICcnJ0NoZWNrcyBmb3Iga25vd24gZGVza3RvcCBlbnZpcm9ubWVudHMKKworICAgICAgICBSZXR1cm4gdGhlIGRlc2t0b3AgZW52aXJvbm1lbnRzIG5hbWUsIGxvd2VyY2FzZSAoa2RlLCBnbm9tZSwgeGZjZSkKKyAgICAgICAgb3IgImdlbmVyaWMiCisKKyAgICAgICAgJycnCisKKyAgICAgICAgZGVza3RvcF9lbnZpcm9ubWVudCA9ICdnZW5lcmljJworCisgICAgICAgIGlmIG9zLmVudmlyb24uZ2V0KCdLREVfRlVMTF9TRVNTSU9OJykgPT0gJ3RydWUnOgorICAgICAgICAgICAgZGVza3RvcF9lbnZpcm9ubWVudCA9ICdrZGUnCisgICAgICAgIGVsaWYgb3MuZW52aXJvbi5nZXQoJ0dOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCcpOgorICAgICAgICAgICAgZGVza3RvcF9lbnZpcm9ubWVudCA9ICdnbm9tZScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbmZvID0gY29tbWFuZHMuZ2V0b3V0cHV0KCd4cHJvcCAtcm9vdCBfRFRfU0FWRV9NT0RFJykKKyAgICAgICAgICAgICAgICBpZiAnID0gInhmY2U0IicgaW4gaW5mbzoKKyAgICAgICAgICAgICAgICAgICAgZGVza3RvcF9lbnZpcm9ubWVudCA9ICd4ZmNlJworICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXR1cm4gZGVza3RvcF9lbnZpcm9ubWVudAorCisKKyAgICBkZWYgcmVnaXN0ZXJfWF9jb250cm9sbGVycygpOgorICAgICAgICBpZiBfaXNjb21tYW5kKCdrZm1jbGllbnQnKToKKyAgICAgICAgICAgIF9jb250cm9sbGVyc1sna2RlLW9wZW4nXSA9IEtmbUNsaWVudCgpCisKKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gKCdnbm9tZS1vcGVuJywgJ2V4by1vcGVuJywgJ3hkZy1vcGVuJyk6CisgICAgICAgICAgICBpZiBfaXNjb21tYW5kKGNvbW1hbmQpOgorICAgICAgICAgICAgICAgIF9jb250cm9sbGVyc1tjb21tYW5kXSA9IENvbnRyb2xsZXIoY29tbWFuZCkKKworICAgIGRlZiBnZXQoKToKKyAgICAgICAgY29udHJvbGxlcnNfbWFwID0geworICAgICAgICAgICAgJ2dub21lJzogJ2dub21lLW9wZW4nLAorICAgICAgICAgICAgJ2tkZSc6ICdrZGUtb3BlbicsCisgICAgICAgICAgICAneGZjZSc6ICdleG8tb3BlbicsCisgICAgICAgIH0KKworICAgICAgICBkZXNrdG9wX2Vudmlyb25tZW50ID0gZGV0ZWN0X2Rlc2t0b3BfZW52aXJvbm1lbnQoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRyb2xsZXJfbmFtZSA9IGNvbnRyb2xsZXJzX21hcFtkZXNrdG9wX2Vudmlyb25tZW50XQorICAgICAgICAgICAgcmV0dXJuIF9jb250cm9sbGVyc1tjb250cm9sbGVyX25hbWVdLm9wZW4KKworICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBpZiBfY29udHJvbGxlcnMuaGFzX2tleSgneGRnLW9wZW4nKToKKyAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRyb2xsZXJzWyd4ZGctb3BlbiddLm9wZW4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHdlYmJyb3dzZXIub3BlbgorCisKKyAgICBpZiBvcy5lbnZpcm9uLmdldCgiRElTUExBWSIpOgorICAgICAgICByZWdpc3Rlcl9YX2NvbnRyb2xsZXJzKCkKKyAgICBfb3BlbiA9IGdldCgpCisKKworZGVmIG9wZW4oZmlsZW5hbWUpOgorICAgICcnJ09wZW4gYSBmaWxlIG9yIGFuIFVSTCBpbiB0aGUgcmVnaXN0ZXJlZCBkZWZhdWx0IGFwcGxpY2F0aW9uLicnJworCisgICAgcmV0dXJuIF9vcGVuKGZpbGVuYW1lKQo=